@sudobility/components-rn 1.0.20 → 1.0.21
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/index.cjs.js +2898 -77
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +2900 -79
- package/dist/index.esm.js.map +1 -1
- package/dist/ui/Banner/Banner.d.ts +97 -0
- package/dist/ui/Banner/Banner.d.ts.map +1 -0
- package/dist/ui/Banner/index.d.ts +2 -0
- package/dist/ui/Banner/index.d.ts.map +1 -0
- package/dist/ui/Button/Button.d.ts +2 -2
- package/package.json +3 -1
- package/src/index.ts +1 -0
- package/src/ui/Banner/Banner.tsx +315 -0
- package/src/ui/Banner/index.ts +7 -0
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/lib/utils.ts","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/ui/Button/Button.shared.ts","../src/ui/Button/Button.tsx","../src/ui/Card/Card.tsx","../src/ui/Input/Input.tsx","../src/ui/Spinner/Spinner.tsx","../src/ui/Alert/Alert.tsx","../src/ui/ActionButton/ActionButton.tsx","../src/ui/Box/Box.tsx","../src/ui/Flex/Flex.tsx","../src/ui/Stack/Stack.tsx","../src/ui/Divider/Divider.tsx","../src/ui/Separator/Separator.tsx","../src/ui/Container/Container.tsx","../src/ui/Center/Center.tsx","../src/ui/Spacer/Spacer.tsx","../src/ui/Grid/Grid.tsx","../src/ui/Label/Label.tsx","../src/ui/TextArea/TextArea.tsx","../src/ui/Checkbox/Checkbox.tsx","../src/ui/Switch/Switch.tsx","../src/ui/HelperText/HelperText.tsx","../src/ui/Select/Select.tsx","../src/ui/SearchInput/SearchInput.tsx","../src/ui/NumberInput/NumberInput.tsx","../src/ui/Text/Text.tsx","../src/ui/Heading/Heading.tsx","../src/ui/Code/Code.tsx","../src/ui/TruncatedText/TruncatedText.tsx","../src/ui/Badge/Badge.tsx","../src/ui/Avatar/Avatar.tsx","../src/ui/Skeleton/Skeleton.tsx","../src/ui/List/List.tsx","../src/ui/IconText/IconText.tsx","../src/ui/FormattedNumber/FormattedNumber.tsx","../src/ui/InfoBox/InfoBox.tsx","../src/ui/Progress/Progress.tsx","../src/ui/Modal/Modal.tsx","../src/ui/Toast/Toast.tsx","../src/ui/LoadingOverlay/LoadingOverlay.tsx","../src/ui/LoadingDots/LoadingDots.tsx","../src/ui/Backdrop/Backdrop.tsx","../src/ui/Sheet/Sheet.tsx","../src/ui/Tooltip/Tooltip.tsx","../src/ui/Dialog/Dialog.tsx","../src/ui/Popover/Popover.tsx","../src/ui/Tabs/Tabs.tsx","../src/ui/Link/Link.tsx","../src/ui/Breadcrumb/Breadcrumb.tsx","../src/ui/Pagination/Pagination.tsx","../src/ui/SettingsList/SettingsList.tsx","../src/ui/NavigationList/NavigationList.tsx","../src/ui/Dropdown/Dropdown.tsx","../src/ui/AspectRatio/AspectRatio.tsx","../src/ui/AspectFitView/AspectFitView.tsx","../src/ui/QuickActions/QuickActions.tsx","../src/ui/EmptyState/EmptyState.tsx","../src/ui/Calendar/Calendar.tsx","../src/ui/DataList/DataList.tsx","../src/ui/MultiSelect/MultiSelect.tsx","../src/ui/ProgressCircle/ProgressCircle.tsx","../src/ui/SideNav/SideNav.tsx","../src/ui/SectionHeader/SectionHeader.tsx","../src/ui/PageContainer/PageContainer.tsx","../src/ui/FloatingPanel/FloatingPanel.tsx","../src/ui/PhoneInput/PhoneInput.tsx","../src/ui/TimePicker/TimePicker.tsx","../src/ui/Combobox/Combobox.tsx","../src/ui/TreeView/TreeView.tsx","../src/ui/AddressLink/AddressLink.tsx","../src/ui/CodeDisplay/CodeDisplay.tsx","../src/ui/DateInput/DateInput.tsx","../src/ui/DateTimePicker/DateTimePicker.tsx","../src/ui/InfiniteScroll/InfiniteScroll.tsx","../src/ui/ExternalLink/ExternalLink.tsx","../src/ui/TextInputModal/TextInputModal.tsx","../src/ui/FormAlerts/FormAlerts.tsx","../src/ui/ScrollArea/ScrollArea.tsx","../src/ui/SectionBadge/SectionBadge.tsx","../src/ui/ChainBadge.tsx","../src/ui/ListItemWithAction/ListItemWithAction.tsx","../src/ui/Overlay/Overlay.tsx","../src/ui/TransferList/TransferList.tsx","../src/ui/FileInput/FileInput.tsx","../src/ui/Logo/Logo.tsx","../src/ui/AnimatedCounter/AnimatedCounter.tsx","../src/ui/AnimatedSection/AnimatedSection.tsx","../src/ui/Masonry/Masonry.tsx","../src/ui/IconContainer/IconContainer.tsx","../src/ui/GradientIconContainer/GradientIconContainer.tsx","../src/ui/PageSectionHeader/PageSectionHeader.tsx","../src/ui/VisuallyHidden/VisuallyHidden.tsx","../src/ui/BreadcrumbNav/BreadcrumbNav.tsx","../src/ui/Kbd/Kbd.tsx","../src/ui/Table/Table.tsx","../src/ui/Command/Command.tsx","../src/ui/MasterDetailLayout/MasterDetailLayout.tsx","../src/ui/PageHeader/PageHeader.tsx","../src/ui/StandardPageLayout/StandardPageLayout.tsx","../src/ui/StepList/StepList.tsx","../src/ui/FeatureCard/FeatureCard.tsx","../src/ui/FeatureGrid/FeatureGrid.tsx","../src/ui/CTASection/CTASection.tsx","../src/ui/PromotionalBanner/PromotionalBanner.tsx","../src/ui/CollapsibleSection/CollapsibleSection.tsx","../src/ui/DashboardStatCard/DashboardStatCard.tsx","../src/ui/StatDisplay/StatDisplay.tsx","../src/ui/KeyValuePair/KeyValuePair.tsx","../src/ui/SmartLink/SmartLink.tsx","../src/ui/ScrollSpy/ScrollSpy.tsx","../src/ui/SplitPane/SplitPane.tsx","../src/ui/VirtualList/VirtualList.tsx"],"sourcesContent":["import { type ClassValue, clsx } from 'clsx';\n\n/**\n * Merges class names for React Native with NativeWind.\n * Unlike web version, we don't need tailwind-merge since NativeWind\n * processes Tailwind classes at build time.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return clsx(inputs);\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),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:!0,ref:!0,__self:!0,__source:!0};\nfunction 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}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar React = require('react');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n 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 ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n 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\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n // eslint-disable-next-line no-fallthrough\n }\n }\n\n return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if ( !fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n 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`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n 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);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n return type;\n }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n 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);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n 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);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner$1.current) {\n var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement$1(element);\n\n 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);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object') {\n return;\n }\n\n if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n {\n if (hasOwnProperty.call(props, 'key')) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(props).filter(function (k) {\n return k !== 'key';\n });\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, true);\n }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, false);\n }\n}\n\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs = jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { type ReactNode } from 'react';\n\n/**\n * Base button props shared between web and React Native\n */\nexport interface ButtonBaseProps {\n variant?:\n | 'default'\n | 'primary'\n | 'secondary'\n | 'outline'\n | 'ghost'\n | 'destructive'\n | 'destructive-outline'\n | 'success'\n | 'link'\n | 'gradient'\n | 'gradient-secondary'\n | 'gradient-success'\n | 'wallet'\n | 'connect'\n | 'disconnect';\n size?: 'default' | 'sm' | 'lg' | 'icon';\n animation?:\n | 'none'\n | 'hover'\n | 'lift'\n | 'scale'\n | 'glow'\n | 'shimmer'\n | 'tap'\n | 'connect'\n | 'transaction'\n | 'disconnect';\n disabled?: boolean;\n loading?: boolean;\n children: ReactNode;\n}\n\n/**\n * Map size abbreviations to design system variant keys\n */\nexport const mapSizeToVariantKey = (size: string | undefined): string => {\n if (!size) return 'default';\n const sizeMap: Record<string, string> = {\n sm: 'small',\n lg: 'large',\n default: 'default',\n };\n return sizeMap[size] || size;\n};\n\n/**\n * Get button variant class from design system\n */\nexport const getButtonVariantClass = (\n variantName: string,\n sizeName: string | undefined,\n v: any\n): string => {\n if (variantName.startsWith('gradient')) {\n const gradientType = variantName\n .replace('gradient-', '')\n .replace('gradient', 'primary');\n return v.button.gradient[gradientType]?.() || v.button.primary.default();\n } else if (['wallet', 'connect', 'disconnect'].includes(variantName)) {\n return v.button.web3[variantName]?.() || v.button.primary.default();\n } else {\n const sizeType = mapSizeToVariantKey(sizeName);\n return v.button[variantName]?.[sizeType]?.() || v.button.primary.default();\n }\n};\n\n/**\n * Shared button state logic\n */\nexport const useButtonState = (\n loading: boolean | undefined,\n disabled: boolean | undefined\n) => ({\n isDisabled: loading || disabled || false,\n showSpinner: loading || false,\n});\n","import * as React from 'react';\nimport {\n Pressable,\n Text,\n ActivityIndicator,\n type PressableProps,\n type GestureResponderEvent,\n} from 'react-native';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\nimport { variants as v } from '@sudobility/design';\nimport {\n ButtonBaseProps,\n getButtonVariantClass,\n useButtonState,\n} from './Button.shared';\n\nconst buttonVariants = cva(\n 'min-h-[44px] items-center justify-center flex-row',\n {\n variants: {\n variant: {\n default: '',\n primary: '',\n secondary: '',\n outline: '',\n ghost: '',\n destructive: '',\n 'destructive-outline': '',\n success: '',\n link: '',\n gradient: '',\n 'gradient-secondary': '',\n 'gradient-success': '',\n wallet: '',\n connect: '',\n disconnect: '',\n },\n size: {\n default: '',\n sm: 'h-8 px-3',\n lg: 'h-12 px-6',\n icon: 'h-10 w-10 p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport interface ButtonProps\n extends\n ButtonBaseProps,\n Omit<PressableProps, 'children' | 'disabled'>,\n Omit<VariantProps<typeof buttonVariants>, 'variant' | 'size'> {\n /** Callback when button is pressed */\n onPress?: (event: GestureResponderEvent) => void;\n /** Accessibility label for screen readers */\n accessibilityLabel?: string;\n /** Additional text styles for the button text */\n textClassName?: string;\n}\n\n/**\n * Button component for React Native\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\" onPress={() => console.log('pressed')}>\n * Press me\n * </Button>\n * ```\n */\nexport const Button = React.forwardRef<\n React.ElementRef<typeof Pressable>,\n ButtonProps\n>(\n (\n {\n className,\n textClassName,\n variant = 'default',\n size = 'default',\n disabled,\n loading,\n onPress,\n accessibilityLabel,\n children,\n ...props\n },\n ref\n ) => {\n const { isDisabled, showSpinner } = useButtonState(loading, disabled);\n\n const variantName = variant || 'default';\n const sizeName =\n size && size !== 'default' && size !== 'icon' ? size : undefined;\n\n const designSystemClass = getButtonVariantClass(variantName, sizeName, v);\n\n return (\n <Pressable\n ref={ref}\n className={cn(\n buttonVariants({ variant, size }),\n designSystemClass,\n isDisabled && 'opacity-50',\n className\n )}\n disabled={isDisabled}\n onPress={onPress}\n accessibilityRole='button'\n accessibilityLabel={accessibilityLabel}\n accessibilityState={{ disabled: isDisabled }}\n {...props}\n >\n {showSpinner && (\n <ActivityIndicator\n size='small'\n color='currentColor'\n className='mr-2'\n />\n )}\n {typeof children === 'string' ? (\n <Text className={cn('text-center font-medium', textClassName)}>\n {children}\n </Text>\n ) : (\n children\n )}\n </Pressable>\n );\n }\n);\n\nButton.displayName = 'Button';\n\nexport { buttonVariants };\n","import React from 'react';\nimport { View, Text, Pressable, type ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { textVariants, getCardVariantColors } from '@sudobility/design';\n\nexport interface CardProps extends ViewProps {\n variant?:\n | 'default'\n | 'bordered'\n | 'elevated'\n | 'info'\n | 'success'\n | 'warning'\n | 'error'\n | 'callout';\n padding?: 'none' | 'sm' | 'md' | 'lg';\n /** For callout variant: apply gradient background */\n gradient?: boolean;\n /** For info/callout variants: show icon */\n icon?: React.ReactNode;\n /** For info variants: show close button */\n onClose?: () => void;\n}\n\nconst calloutStyle =\n 'bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800';\n\nconst paddingStyles = {\n none: '',\n sm: 'p-3',\n md: 'p-6',\n lg: 'p-8',\n};\n\nexport const Card: React.FC<CardProps> = ({\n variant = 'elevated',\n padding = 'md',\n icon,\n onClose,\n className,\n children,\n ...props\n}) => {\n const isInfoVariant = ['info', 'success', 'warning', 'error'].includes(\n variant\n );\n const showIconOrClose = isInfoVariant && (icon || onClose);\n\n const variantClasses =\n variant === 'callout'\n ? calloutStyle\n : getCardVariantColors(\n variant as Parameters<typeof getCardVariantColors>[0]\n );\n\n return (\n <View\n className={cn(\n 'rounded-lg',\n variantClasses,\n paddingStyles[padding],\n className\n )}\n {...props}\n >\n {showIconOrClose ? (\n <View className='flex-row items-start gap-3'>\n {icon && <View className='flex-shrink-0'>{icon}</View>}\n <View className='flex-1'>{children}</View>\n {onClose && (\n <Pressable\n onPress={onClose}\n className='flex-shrink-0 opacity-70'\n accessibilityLabel='Close'\n accessibilityRole='button'\n >\n <Text className='text-lg'>×</Text>\n </Pressable>\n )}\n </View>\n ) : (\n children\n )}\n </View>\n );\n};\n\ninterface CardHeaderProps extends ViewProps {\n title?: string;\n description?: string;\n}\n\nexport const CardHeader: React.FC<CardHeaderProps> = ({\n title,\n description,\n className,\n children,\n ...props\n}) => {\n return (\n <View className={cn('gap-1.5', className)} {...props}>\n {title && <Text className={textVariants.heading.h4()}>{title}</Text>}\n {description && (\n <Text className={textVariants.body.sm()}>{description}</Text>\n )}\n {children}\n </View>\n );\n};\n\nexport const CardContent: React.FC<ViewProps> = ({\n className,\n children,\n ...props\n}) => {\n return (\n <View className={cn('', className)} {...props}>\n {children}\n </View>\n );\n};\n\nexport const CardFooter: React.FC<ViewProps> = ({\n className,\n children,\n ...props\n}) => {\n return (\n <View className={cn('flex-row items-center pt-4', className)} {...props}>\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport {\n TextInput,\n type TextInputProps,\n type NativeSyntheticEvent,\n type TextInputFocusEventData,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { variants as v } from '@sudobility/design';\n\nexport interface InputProps extends Omit<TextInputProps, 'style'> {\n /** Additional class names for styling */\n className?: string;\n /** Error state */\n error?: boolean;\n /** Disabled state */\n disabled?: boolean;\n}\n\n/**\n * Input component for React Native\n *\n * @example\n * ```tsx\n * <Input\n * placeholder=\"Enter your email\"\n * value={email}\n * onChangeText={setEmail}\n * keyboardType=\"email-address\"\n * />\n * ```\n */\nexport const Input = React.forwardRef<TextInput, InputProps>(\n (\n { className, error, disabled, editable, onFocus, onBlur, ...props },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n\n const handleFocus = (e: NativeSyntheticEvent<TextInputFocusEventData>) => {\n setIsFocused(true);\n onFocus?.(e);\n };\n\n const handleBlur = (e: NativeSyntheticEvent<TextInputFocusEventData>) => {\n setIsFocused(false);\n onBlur?.(e);\n };\n\n const isEditable = editable !== false && !disabled;\n\n return (\n <TextInput\n ref={ref}\n className={cn(\n v.input.default(),\n isFocused && 'border-blue-500 dark:border-blue-400',\n error && 'border-red-500 dark:border-red-400',\n disabled && 'opacity-50 bg-gray-100 dark:bg-gray-800',\n className\n )}\n editable={isEditable}\n onFocus={handleFocus}\n onBlur={handleBlur}\n accessibilityState={{\n disabled: !isEditable,\n }}\n {...props}\n />\n );\n }\n);\n\nInput.displayName = 'Input';\n","import React from 'react';\nimport { View, ActivityIndicator, Text, type ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SpinnerProps extends ViewProps {\n size?: 'small' | 'default' | 'large' | 'extraLarge';\n variant?: 'default' | 'white' | 'success' | 'warning' | 'error';\n accessibilityLabel?: string;\n loadingText?: string;\n showText?: boolean;\n}\n\nconst sizeMap = {\n small: 'small' as const,\n default: 'small' as const,\n large: 'large' as const,\n extraLarge: 'large' as const,\n};\n\nconst colorMap = {\n default: '#2563eb', // blue-600\n white: '#ffffff',\n success: '#16a34a', // green-600\n warning: '#ea580c', // orange-600\n error: '#dc2626', // red-600\n};\n\n/**\n * Spinner component for React Native\n *\n * @example\n * ```tsx\n * <Spinner size=\"large\" variant=\"default\" />\n * ```\n */\nexport const Spinner: React.FC<SpinnerProps> = ({\n size = 'default',\n variant = 'default',\n className,\n accessibilityLabel = 'Loading',\n loadingText = 'Loading...',\n showText = false,\n ...props\n}) => {\n const activitySize = sizeMap[size];\n const color = colorMap[variant];\n\n return (\n <View\n className={cn('items-center justify-center', className)}\n accessibilityRole='progressbar'\n accessibilityLabel={accessibilityLabel}\n {...props}\n >\n <ActivityIndicator size={activitySize} color={color} />\n {showText && (\n <Text className='mt-2 text-gray-600 dark:text-gray-400 text-sm'>\n {loadingText}\n </Text>\n )}\n </View>\n );\n};\n","import React from 'react';\nimport { View, Text, type ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { variants as v } from '@sudobility/design';\n\nexport interface AlertProps extends ViewProps {\n variant?: 'info' | 'success' | 'warning' | 'attention' | 'error';\n title?: string;\n description?: string;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n}\n\n// Default icons as simple text - can be replaced with react-native-heroicons\nconst defaultIcons: Record<string, string> = {\n info: 'ℹ️',\n success: '✓',\n warning: '⚠️',\n attention: '🔔',\n error: '✕',\n};\n\nexport const AlertTitle: React.FC<{\n children: React.ReactNode;\n className?: string;\n}> = ({ children, className }) => (\n <Text className={cn('font-medium mb-1', className)}>{children}</Text>\n);\n\nexport const AlertDescription: React.FC<{\n children: React.ReactNode;\n className?: string;\n}> = ({ children, className }) => (\n <Text className={cn('text-sm', className)}>{children}</Text>\n);\n\n/**\n * Alert component for React Native\n *\n * @example\n * ```tsx\n * <Alert variant=\"success\" title=\"Success!\" description=\"Your changes have been saved.\" />\n * ```\n */\nexport const Alert: React.FC<AlertProps> = ({\n variant = 'info',\n title,\n description,\n icon,\n children,\n className,\n ...props\n}) => {\n const IconComponent = icon || (\n <Text className='text-lg'>{defaultIcons[variant]}</Text>\n );\n\n const alertClass =\n typeof v.alert[variant] === 'function' ? v.alert[variant]() : '';\n\n return (\n <View\n className={cn(alertClass, 'flex-row items-start gap-3', className)}\n accessibilityRole='alert'\n {...props}\n >\n {IconComponent && <View className='flex-shrink-0'>{IconComponent}</View>}\n <View className='flex-1'>\n {title && <Text className='font-medium mb-1'>{title}</Text>}\n {description && <Text className='text-sm'>{description}</Text>}\n {children}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { Button, type ButtonProps } from '../Button';\nimport { Spinner } from '../Spinner';\n\nexport interface ActionButtonProps extends Omit<ButtonProps, 'children'> {\n /** Button text */\n children: React.ReactNode;\n /** Loading state */\n isLoading?: boolean;\n /** Text to show when loading (defaults to \"Loading...\") */\n loadingText?: string;\n /** Whether to show spinner icon when loading */\n showSpinner?: boolean;\n}\n\n/**\n * ActionButton Component\n *\n * Enhanced Button component with built-in loading state management.\n * Automatically shows loading text/spinner and disables interaction when loading.\n * Commonly used for form submissions, save actions, and async operations.\n *\n * @example\n * ```tsx\n * <ActionButton\n * onPress={handleSave}\n * isLoading={isSaving}\n * loadingText=\"Saving...\"\n * variant=\"default\"\n * >\n * Save Changes\n * </ActionButton>\n * ```\n */\nexport const ActionButton: React.FC<ActionButtonProps> = ({\n children,\n isLoading = false,\n loadingText = 'Loading...',\n showSpinner = true,\n disabled,\n ...buttonProps\n}) => {\n return (\n <Button {...buttonProps} disabled={disabled || isLoading}>\n {isLoading ? (\n <View className='flex flex-row items-center gap-2'>\n {showSpinner && <Spinner size='small' />}\n <Text className='text-inherit'>{loadingText}</Text>\n </View>\n ) : (\n children\n )}\n </Button>\n );\n};\n","import * as React from 'react';\nimport { View, ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface BoxProps extends ViewProps {\n /** Box content */\n children?: React.ReactNode;\n /** Padding */\n p?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Padding X-axis */\n px?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Padding Y-axis */\n py?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Margin */\n m?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'auto';\n /** Margin X-axis */\n mx?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'auto';\n /** Margin Y-axis */\n my?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'auto';\n /** Background color */\n bg?:\n | 'transparent'\n | 'white'\n | 'gray'\n | 'primary'\n | 'success'\n | 'warning'\n | 'danger';\n /** Border */\n border?: boolean;\n /** Border radius */\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';\n /** Shadow */\n shadow?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n /** Width */\n w?: 'auto' | 'full';\n /** Height */\n h?: 'auto' | 'full';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Box Component\n *\n * Fundamental layout primitive with spacing, sizing, and styling props.\n * Acts as a building block for creating layouts and containers.\n *\n * @example\n * ```tsx\n * <Box p=\"md\" bg=\"white\" rounded=\"lg\" shadow=\"md\">\n * <Text>Card Content</Text>\n * </Box>\n * ```\n */\nexport const Box: React.FC<BoxProps> = ({\n children,\n p,\n px,\n py,\n m,\n mx,\n my,\n bg,\n border = false,\n rounded,\n shadow,\n w,\n h,\n className,\n ...viewProps\n}) => {\n // Spacing configurations\n const spacingClasses: Record<string, string> = {\n none: '0',\n xs: '1',\n sm: '2',\n md: '4',\n lg: '6',\n xl: '8',\n '2xl': '12',\n auto: 'auto',\n };\n\n // Background configurations\n const bgClasses = bg\n ? {\n transparent: 'bg-transparent',\n white: 'bg-white dark:bg-gray-900',\n gray: 'bg-gray-100 dark:bg-gray-800',\n primary: 'bg-blue-50 dark:bg-blue-900/20',\n success: 'bg-green-50 dark:bg-green-900/20',\n warning: 'bg-yellow-50 dark:bg-yellow-900/20',\n danger: 'bg-red-50 dark:bg-red-900/20',\n }[bg]\n : '';\n\n // Border radius configurations\n const roundedClasses = rounded\n ? {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n full: 'rounded-full',\n }[rounded]\n : '';\n\n // Shadow configurations\n const shadowClasses = shadow\n ? {\n none: 'shadow-none',\n sm: 'shadow-sm',\n md: 'shadow-md',\n lg: 'shadow-lg',\n xl: 'shadow-xl',\n }[shadow]\n : '';\n\n // Width configurations\n const wClasses = w\n ? {\n auto: '',\n full: 'w-full',\n }[w]\n : '';\n\n // Height configurations\n const hClasses = h\n ? {\n auto: '',\n full: 'h-full',\n }[h]\n : '';\n\n // Build padding classes\n const paddingClasses: string[] = [];\n if (p) paddingClasses.push('p-' + spacingClasses[p]);\n if (px) paddingClasses.push('px-' + spacingClasses[px]);\n if (py) paddingClasses.push('py-' + spacingClasses[py]);\n\n // Build margin classes\n const marginClasses: string[] = [];\n if (m) marginClasses.push('m-' + spacingClasses[m]);\n if (mx) marginClasses.push('mx-' + spacingClasses[mx]);\n if (my) marginClasses.push('my-' + spacingClasses[my]);\n\n return (\n <View\n className={cn(\n ...paddingClasses,\n ...marginClasses,\n bgClasses,\n border && 'border border-gray-200 dark:border-gray-700',\n roundedClasses,\n shadowClasses,\n wClasses,\n hClasses,\n className\n )}\n {...viewProps}\n >\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { Box, BoxProps } from '../Box';\n\nexport interface FlexProps extends Omit<BoxProps, 'className'> {\n /** Flex direction */\n direction?: 'row' | 'row-reverse' | 'col' | 'col-reverse';\n /** Align items */\n align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline';\n /** Justify content */\n justify?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\n /** Wrap items */\n wrap?: 'nowrap' | 'wrap' | 'wrap-reverse';\n /** Gap between items */\n gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Flex Component\n *\n * Flexbox layout component extending Box with flex-specific properties.\n * Provides convenient props for common flexbox patterns.\n *\n * @example\n * ```tsx\n * <Flex justify=\"between\" align=\"center\" p=\"md\">\n * <Text>Left</Text>\n * <Button>Right</Button>\n * </Flex>\n * ```\n *\n * @example\n * ```tsx\n * <Flex direction=\"col\" gap=\"md\" p=\"lg\">\n * <Card>Item 1</Card>\n * <Card>Item 2</Card>\n * </Flex>\n * ```\n */\nexport const Flex: React.FC<FlexProps> = ({\n direction = 'row',\n align,\n justify,\n wrap = 'nowrap',\n gap,\n className,\n ...boxProps\n}) => {\n // Direction configurations\n const directionClasses: Record<string, string> = {\n row: 'flex-row',\n 'row-reverse': 'flex-row-reverse',\n col: 'flex-col',\n 'col-reverse': 'flex-col-reverse',\n };\n\n // Align items configurations\n const alignClasses = align\n ? {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n }[align]\n : '';\n\n // Justify content configurations\n const justifyClasses = justify\n ? {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n }[justify]\n : '';\n\n // Wrap configurations\n const wrapClasses: Record<string, string> = {\n nowrap: 'flex-nowrap',\n wrap: 'flex-wrap',\n 'wrap-reverse': 'flex-wrap-reverse',\n };\n\n // Gap configurations\n const gapClasses = gap\n ? {\n none: 'gap-0',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n }[gap]\n : '';\n\n return (\n <Box\n {...boxProps}\n className={cn(\n 'flex',\n directionClasses[direction],\n alignClasses,\n justifyClasses,\n wrapClasses[wrap],\n gapClasses,\n className\n )}\n />\n );\n};\n","import * as React from 'react';\nimport { View, ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface StackProps extends ViewProps {\n /** Stack content */\n children: React.ReactNode;\n /** Stack direction */\n direction?: 'vertical' | 'horizontal';\n /** Spacing between items */\n spacing?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Align items */\n align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline';\n /** Justify content */\n justify?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\n /** Wrap items */\n wrap?: boolean;\n /** Full width/height */\n full?: boolean;\n /** Divider between items */\n divider?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Stack Component\n *\n * Flexbox-based layout component for arranging children vertically or horizontally\n * with consistent spacing. Supports alignment, wrapping, and dividers.\n *\n * @example\n * ```tsx\n * <Stack spacing=\"md\">\n * <View><Text>Item 1</Text></View>\n * <View><Text>Item 2</Text></View>\n * <View><Text>Item 3</Text></View>\n * </Stack>\n * ```\n *\n * @example\n * ```tsx\n * <Stack\n * direction=\"horizontal\"\n * spacing=\"lg\"\n * align=\"center\"\n * justify=\"between\"\n * >\n * <Button>Cancel</Button>\n * <Button>Save</Button>\n * </Stack>\n * ```\n */\nexport const Stack: React.FC<StackProps> = ({\n children,\n direction = 'vertical',\n spacing = 'md',\n align = 'stretch',\n justify = 'start',\n wrap = false,\n full = false,\n divider = false,\n className,\n ...viewProps\n}) => {\n const isVertical = direction === 'vertical';\n\n // Gap classes (NativeWind supports gap)\n const gapClasses: Record<string, Record<string, string>> = {\n vertical: {\n none: '',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n },\n horizontal: {\n none: '',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n },\n };\n\n // Align items configurations\n const alignClasses: Record<string, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n };\n\n // Justify content configurations\n const justifyClasses: Record<string, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n };\n\n return (\n <View\n className={cn(\n 'flex',\n isVertical ? 'flex-col' : 'flex-row',\n gapClasses[direction][spacing],\n alignClasses[align],\n justifyClasses[justify],\n wrap && 'flex-wrap',\n full && (isVertical ? 'h-full' : 'w-full'),\n className\n )}\n {...viewProps}\n >\n {divider\n ? React.Children.map(children, (child, index) => (\n <React.Fragment key={index}>\n {child}\n {index < React.Children.count(children) - 1 && (\n <View\n className={cn(\n 'bg-gray-200 dark:bg-gray-700',\n isVertical ? 'h-px w-full' : 'w-px h-full'\n )}\n />\n )}\n </React.Fragment>\n ))\n : children}\n </View>\n );\n};\n\n/**\n * VStack - Vertical Stack (alias for Stack with direction=\"vertical\")\n */\nexport const VStack: React.FC<Omit<StackProps, 'direction'>> = props => (\n <Stack direction='vertical' {...props} />\n);\n\n/**\n * HStack - Horizontal Stack (alias for Stack with direction=\"horizontal\")\n */\nexport const HStack: React.FC<Omit<StackProps, 'direction'>> = props => (\n <Stack direction='horizontal' {...props} />\n);\n","import * as React from 'react';\nimport { View, Text, ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { textVariants } from '@sudobility/design';\n\nexport interface DividerProps extends ViewProps {\n /** Optional text label */\n label?: string;\n /** Label position */\n labelPosition?: 'left' | 'center' | 'right';\n /** Orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Spacing around the divider */\n spacing?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n /** Line thickness */\n thickness?: 'thin' | 'medium' | 'thick';\n /** Color variant */\n variant?: 'light' | 'medium' | 'dark';\n /** Additional className for the container */\n className?: string;\n /** Additional className for the line */\n lineClassName?: string;\n}\n\n/**\n * Divider Component\n *\n * A visual separator for content sections with optional label support.\n * Can be used horizontally or vertically to divide content areas.\n *\n * @example\n * ```tsx\n * <Divider />\n * <Divider label=\"OR\" labelPosition=\"center\" />\n * <Divider spacing=\"lg\" variant=\"medium\" />\n * ```\n *\n * @example\n * ```tsx\n * // Vertical divider\n * <View className=\"flex flex-row gap-4\">\n * <View><Text>Content 1</Text></View>\n * <Divider orientation=\"vertical\" />\n * <View><Text>Content 2</Text></View>\n * </View>\n * ```\n */\nexport const Divider: React.FC<DividerProps> = ({\n label,\n labelPosition = 'center',\n orientation = 'horizontal',\n spacing = 'md',\n thickness = 'thin',\n variant = 'light',\n className,\n lineClassName,\n ...viewProps\n}) => {\n // Spacing configurations\n const spacingClasses = {\n horizontal: {\n none: 'my-0',\n sm: 'my-2',\n md: 'my-4',\n lg: 'my-6',\n xl: 'my-8',\n },\n vertical: {\n none: 'mx-0',\n sm: 'mx-2',\n md: 'mx-4',\n lg: 'mx-6',\n xl: 'mx-8',\n },\n };\n\n // Thickness configurations (using border for horizontal, width for vertical)\n const thicknessValues = {\n thin: 1,\n medium: 2,\n thick: 4,\n };\n\n // Color variant configurations\n const variantClasses = {\n light: 'bg-gray-200 dark:bg-gray-700',\n medium: 'bg-gray-300 dark:bg-gray-600',\n dark: 'bg-gray-400 dark:bg-gray-500',\n };\n\n // Vertical divider\n if (orientation === 'vertical') {\n return (\n <View\n className={cn(\n 'self-stretch',\n variantClasses[variant],\n spacingClasses.vertical[spacing],\n className\n )}\n style={{ width: thicknessValues[thickness] }}\n accessibilityRole='none'\n {...viewProps}\n />\n );\n }\n\n // Horizontal divider without label\n if (!label) {\n return (\n <View\n className={cn(\n 'w-full',\n variantClasses[variant],\n spacingClasses.horizontal[spacing],\n lineClassName,\n className\n )}\n style={{ height: thicknessValues[thickness] }}\n accessibilityRole='none'\n {...viewProps}\n />\n );\n }\n\n // Horizontal divider with label\n const labelPositionClasses = {\n left: 'justify-start',\n center: 'justify-center',\n right: 'justify-end',\n };\n\n return (\n <View\n className={cn(\n 'flex flex-row items-center',\n spacingClasses.horizontal[spacing],\n labelPositionClasses[labelPosition],\n className\n )}\n accessibilityRole='none'\n {...viewProps}\n >\n {labelPosition !== 'left' && (\n <View\n className={cn('flex-1', variantClasses[variant], lineClassName)}\n style={{ height: thicknessValues[thickness] }}\n />\n )}\n <Text\n className={cn(\n textVariants.body.sm(),\n 'px-3 text-gray-500 dark:text-gray-400'\n )}\n >\n {label}\n </Text>\n {labelPosition !== 'right' && (\n <View\n className={cn('flex-1', variantClasses[variant], lineClassName)}\n style={{ height: thicknessValues[thickness] }}\n />\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SeparatorProps {\n /** Separator orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Spacing around separator */\n spacing?: 'none' | 'sm' | 'md' | 'lg';\n /** Line thickness */\n thickness?: 'thin' | 'medium' | 'thick';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Separator Component\n *\n * Simple horizontal or vertical line separator.\n * Use for visual separation in menus, lists, and layouts.\n *\n * @example\n * ```tsx\n * <View>\n * <MenuItem>Option 1</MenuItem>\n * <Separator />\n * <MenuItem>Option 2</MenuItem>\n * </View>\n * ```\n *\n * @example\n * ```tsx\n * <View className=\"flex flex-row items-center gap-4\">\n * <Button>Action 1</Button>\n * <Separator orientation=\"vertical\" spacing=\"md\" />\n * <Button>Action 2</Button>\n * </View>\n * ```\n */\nexport const Separator: React.FC<SeparatorProps> = ({\n orientation = 'horizontal',\n spacing = 'md',\n thickness = 'thin',\n className,\n}) => {\n // Spacing configurations\n const spacingClasses = {\n horizontal: {\n none: '',\n sm: 'my-1',\n md: 'my-2',\n lg: 'my-4',\n },\n vertical: {\n none: '',\n sm: 'mx-1',\n md: 'mx-2',\n lg: 'mx-4',\n },\n };\n\n // Thickness configurations\n const thicknessClasses = {\n horizontal: {\n thin: 'h-px',\n medium: 'h-0.5',\n thick: 'h-1',\n },\n vertical: {\n thin: 'w-px',\n medium: 'w-0.5',\n thick: 'w-1',\n },\n };\n\n const isHorizontal = orientation === 'horizontal';\n\n return (\n <View\n accessibilityRole='none'\n className={cn(\n 'bg-gray-200 dark:bg-gray-700',\n isHorizontal ? 'w-full' : 'h-full',\n thicknessClasses[orientation][thickness],\n spacingClasses[orientation][spacing],\n className\n )}\n />\n );\n};\n","import * as React from 'react';\nimport { View, Dimensions } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nconst { width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface ContainerProps {\n /** Container content */\n children: React.ReactNode;\n /** Max width variant */\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';\n /** Center container horizontally */\n center?: boolean;\n /** Padding */\n padding?: 'none' | 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Container Component\n *\n * Responsive container with max-width constraints and horizontal centering.\n * Useful for creating consistent page layouts and content areas.\n *\n * @example\n * ```tsx\n * <Container>\n * <Text>Page Content</Text>\n * </Container>\n * ```\n *\n * @example\n * ```tsx\n * <Container size=\"lg\" padding=\"lg\">\n * <Text>Centered content with large max-width</Text>\n * </Container>\n * ```\n */\nexport const Container: React.FC<ContainerProps> = ({\n children,\n size = 'xl',\n center = true,\n padding = 'md',\n className,\n}) => {\n // Max-width configurations (for larger screens/tablets)\n const maxWidths = {\n sm: 384, // 24rem\n md: 448, // 28rem\n lg: 512, // 32rem\n xl: 576, // 36rem\n '2xl': 672, // 42rem\n full: SCREEN_WIDTH,\n };\n\n // Padding configurations\n const paddingClasses = {\n none: '',\n sm: 'px-4 py-2',\n md: 'px-4 py-4',\n lg: 'px-6 py-6',\n };\n\n const maxWidth = maxWidths[size];\n\n return (\n <View\n className={cn(\n 'w-full',\n center && 'self-center',\n paddingClasses[padding],\n className\n )}\n style={{\n maxWidth: maxWidth < SCREEN_WIDTH ? maxWidth : undefined,\n }}\n >\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CenterProps {\n /** Content to center */\n children: React.ReactNode;\n /** Axis to center on */\n axis?: 'horizontal' | 'vertical' | 'both';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Center Component\n *\n * Centers content horizontally, vertically, or both using flexbox.\n * Useful for centering loading states, empty states, and modal content.\n *\n * @example\n * ```tsx\n * <Center>\n * <Spinner />\n * </Center>\n * ```\n *\n * @example\n * ```tsx\n * <Center axis=\"horizontal\">\n * <Button>Centered Button</Button>\n * </Center>\n * ```\n */\nexport const Center: React.FC<CenterProps> = ({\n children,\n axis = 'both',\n className,\n}) => {\n const getFlexClasses = () => {\n switch (axis) {\n case 'horizontal':\n return 'justify-center';\n case 'vertical':\n return 'items-center';\n case 'both':\n default:\n return 'justify-center items-center';\n }\n };\n\n return (\n <View className={cn('flex', getFlexClasses(), className)}>{children}</View>\n );\n};\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SpacerProps {\n /** Size of the spacer */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | number;\n /** Direction of spacing */\n axis?: 'horizontal' | 'vertical';\n /** Flex grow to fill available space */\n flex?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Spacer Component\n *\n * Creates empty space between elements. Can be a fixed size or flexible.\n * Useful for creating consistent spacing in layouts.\n *\n * @example\n * ```tsx\n * <HStack>\n * <Button>Cancel</Button>\n * <Spacer flex />\n * <Button>Save</Button>\n * </HStack>\n * ```\n *\n * @example\n * ```tsx\n * <VStack>\n * <Text>Title</Text>\n * <Spacer size=\"lg\" />\n * <Text>Content</Text>\n * </VStack>\n * ```\n */\nexport const Spacer: React.FC<SpacerProps> = ({\n size = 'md',\n axis = 'vertical',\n flex = false,\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n vertical: {\n xs: 'h-1',\n sm: 'h-2',\n md: 'h-4',\n lg: 'h-6',\n xl: 'h-8',\n '2xl': 'h-12',\n },\n horizontal: {\n xs: 'w-1',\n sm: 'w-2',\n md: 'w-4',\n lg: 'w-6',\n xl: 'w-8',\n '2xl': 'w-12',\n },\n };\n\n // Custom size (number)\n const customSizeStyle =\n typeof size === 'number'\n ? axis === 'vertical'\n ? { height: size }\n : { width: size }\n : undefined;\n\n const sizeClass = typeof size === 'string' ? sizeClasses[axis][size] : '';\n\n return (\n <View\n className={cn(flex && 'flex-1', !flex && sizeClass, className)}\n style={customSizeStyle}\n accessibilityElementsHidden\n />\n );\n};\n","import * as React from 'react';\nimport { View, Dimensions } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nconst { width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface GridProps {\n /** Grid content */\n children: React.ReactNode;\n /** Number of columns */\n cols?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Gap between items */\n gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Align items */\n alignItems?: 'start' | 'center' | 'end' | 'stretch';\n /** Additional className */\n className?: string;\n}\n\nexport interface GridItemProps {\n /** Grid item content */\n children: React.ReactNode;\n /** Column span */\n colSpan?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Grid Component\n *\n * Flexbox-based grid layout component for React Native.\n * Uses flex-wrap to simulate CSS Grid behavior.\n *\n * @example\n * ```tsx\n * <Grid cols={3} gap=\"md\">\n * <GridItem><Card>Item 1</Card></GridItem>\n * <GridItem><Card>Item 2</Card></GridItem>\n * <GridItem><Card>Item 3</Card></GridItem>\n * </Grid>\n * ```\n *\n * @example\n * ```tsx\n * <Grid cols={2} gap=\"lg\">\n * <GridItem colSpan={2}><Card>Full width</Card></GridItem>\n * <GridItem><Card>Half</Card></GridItem>\n * <GridItem><Card>Half</Card></GridItem>\n * </Grid>\n * ```\n */\nexport const Grid: React.FC<GridProps> = ({\n children,\n cols = 1,\n gap = 'md',\n alignItems = 'stretch',\n className,\n}) => {\n // Gap configurations (in pixels for calculation)\n const gapValues = {\n none: 0,\n xs: 4,\n sm: 8,\n md: 16,\n lg: 24,\n xl: 32,\n '2xl': 48,\n };\n\n // Gap class mapping\n const gapClasses = {\n none: '',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n };\n\n // Align items configurations\n const alignItemsClasses = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n };\n\n const gapValue = gapValues[gap];\n\n // Calculate item width based on columns and gap\n // Note: In RN, we need to calculate this manually\n const getItemWidth = (span: number = 1) => {\n const totalGap = gapValue * (cols - 1);\n const availableWidth = SCREEN_WIDTH - 32; // Account for container padding\n const columnWidth = (availableWidth - totalGap) / cols;\n return columnWidth * span + gapValue * (span - 1);\n };\n\n // Clone children with calculated width\n const childrenWithWidth = React.Children.map(children, child => {\n if (React.isValidElement(child)) {\n const colSpan = (child.props as GridItemProps).colSpan || 1;\n return React.cloneElement(child as React.ReactElement, {\n style: {\n width: getItemWidth(colSpan),\n ...(child.props as { style?: object }).style,\n },\n });\n }\n return child;\n });\n\n return (\n <View\n className={cn(\n 'flex flex-row flex-wrap',\n gapClasses[gap],\n alignItemsClasses[alignItems],\n className\n )}\n >\n {childrenWithWidth}\n </View>\n );\n};\n\n/**\n * GridItem Component\n *\n * Individual grid item that can span multiple columns.\n */\nexport const GridItem: React.FC<GridItemProps & { style?: object }> = ({\n children,\n className,\n style,\n}) => {\n return (\n <View className={cn(className)} style={style}>\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport { Text, TextProps } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { textVariants } from '@sudobility/design';\n\nexport interface LabelProps extends TextProps {\n /** Label content */\n children: React.ReactNode;\n /** Whether the associated input is required */\n required?: boolean;\n /** Whether the label is disabled */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Label Component\n *\n * Text label for form inputs with proper styling.\n *\n * @example\n * ```tsx\n * <Label>Email Address</Label>\n * <Input placeholder=\"Enter your email\" />\n * ```\n *\n * @example\n * ```tsx\n * <Label required>Password</Label>\n * <Input secureTextEntry />\n * ```\n */\nexport const Label = React.forwardRef<Text, LabelProps>(\n ({ children, required, disabled, className, ...props }, ref) => {\n return (\n <Text\n ref={ref}\n className={cn(\n textVariants.label.default(),\n disabled && 'opacity-70',\n className\n )}\n accessibilityRole='text'\n {...props}\n >\n {children}\n {required && <Text className='text-red-500 ml-1'>*</Text>}\n </Text>\n );\n }\n);\n\nLabel.displayName = 'Label';\n","import * as React from 'react';\nimport { View, TextInput, Text, TextInputProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TextAreaProps extends Omit<TextInputProps, 'onChange'> {\n /** Current value */\n value: string;\n /** Callback when value changes */\n onChangeText: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Number of visible lines (used to calculate height) */\n numberOfLines?: number;\n /** Disabled state */\n disabled?: boolean;\n /** Read-only state */\n readOnly?: boolean;\n /** Show character count */\n showCount?: boolean;\n /** Maximum character count */\n maxLength?: number;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className for container */\n className?: string;\n /** Additional className for the input */\n inputClassName?: string;\n}\n\n/**\n * TextArea Component\n *\n * Multi-line text input with character counting and consistent styling.\n *\n * @example\n * ```tsx\n * <TextArea\n * value={message}\n * onChangeText={setMessage}\n * placeholder=\"Write your message...\"\n * numberOfLines={5}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <TextArea\n * value={bio}\n * onChangeText={setBio}\n * showCount\n * maxLength={500}\n * placeholder=\"Tell us about yourself...\"\n * />\n * ```\n */\nexport const TextArea: React.FC<TextAreaProps> = ({\n value,\n onChangeText,\n placeholder,\n numberOfLines = 4,\n disabled = false,\n readOnly = false,\n showCount = false,\n maxLength,\n size = 'md',\n className,\n inputClassName,\n ...textInputProps\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'p-2 text-sm',\n md: 'p-3 text-base',\n lg: 'p-4 text-lg',\n };\n\n const handleChangeText = (newValue: string) => {\n // Enforce maxLength if provided\n if (maxLength && newValue.length > maxLength) {\n return;\n }\n\n onChangeText(newValue);\n };\n\n const characterCount = value.length;\n const showCountInfo = showCount || maxLength !== undefined;\n\n return (\n <View className={cn('w-full', className)}>\n <TextInput\n value={value}\n onChangeText={handleChangeText}\n placeholder={placeholder}\n numberOfLines={numberOfLines}\n editable={!disabled && !readOnly}\n maxLength={maxLength}\n multiline\n textAlignVertical='top'\n className={cn(\n 'w-full rounded-lg border',\n 'bg-white dark:bg-gray-800',\n 'text-gray-900 dark:text-gray-100',\n 'placeholder:text-gray-400 dark:placeholder:text-gray-500',\n 'border-gray-300 dark:border-gray-600',\n sizeClasses[size],\n disabled && 'opacity-50',\n readOnly && 'bg-gray-50 dark:bg-gray-900',\n inputClassName\n )}\n placeholderTextColor='#9CA3AF'\n accessibilityRole='text'\n accessibilityState={{ disabled }}\n {...textInputProps}\n />\n\n {/* Character count */}\n {showCountInfo && (\n <View className='flex flex-row justify-end mt-1'>\n <Text\n className={cn(\n 'text-xs',\n maxLength && characterCount > maxLength * 0.9\n ? 'text-yellow-600 dark:text-yellow-400'\n : 'text-gray-500 dark:text-gray-400',\n maxLength &&\n characterCount >= maxLength &&\n 'text-red-600 dark:text-red-400'\n )}\n >\n {characterCount}\n {maxLength && ` / ${maxLength}`}\n </Text>\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Text, Pressable, PressableProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CheckboxProps extends Omit<PressableProps, 'onPress'> {\n /** Whether the checkbox is checked (controlled mode) */\n checked?: boolean;\n /** Default checked state (uncontrolled mode) */\n defaultChecked?: boolean;\n /** Change handler */\n onChange?: (checked: boolean) => void;\n /** Label text */\n label?: string;\n /** Description text below label */\n description?: string;\n /** Whether the checkbox is disabled */\n disabled?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'primary' | 'success' | 'warning' | 'error';\n /** Additional className for the container */\n className?: string;\n /** Whether the checkbox is required */\n required?: boolean;\n /** Indeterminate state */\n indeterminate?: boolean;\n /** Error state */\n error?: boolean;\n /** Error message to display */\n errorMessage?: string;\n}\n\n/**\n * Checkbox Component\n *\n * Custom styled checkbox with proper accessibility and visual feedback.\n * Supports both controlled and uncontrolled modes.\n *\n * @example\n * ```tsx\n * // Controlled\n * <Checkbox\n * checked={isEnabled}\n * onChange={setIsEnabled}\n * label=\"Enable notifications\"\n * />\n *\n * // Uncontrolled\n * <Checkbox\n * defaultChecked={true}\n * label=\"Remember me\"\n * />\n * ```\n */\nexport const Checkbox: React.FC<CheckboxProps> = ({\n checked: controlledChecked,\n defaultChecked = false,\n onChange,\n label,\n description,\n disabled = false,\n size = 'md',\n variant = 'primary',\n className,\n required = false,\n indeterminate = false,\n error = false,\n errorMessage,\n ...pressableProps\n}) => {\n // Support both controlled and uncontrolled modes\n const [uncontrolledChecked, setUncontrolledChecked] =\n useState(defaultChecked);\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : uncontrolledChecked;\n\n const sizeClasses = {\n sm: {\n box: 'w-4 h-4',\n check: 'w-2 h-2',\n text: 'text-sm',\n desc: 'text-xs',\n },\n md: {\n box: 'w-5 h-5',\n check: 'w-3 h-3',\n text: 'text-base',\n desc: 'text-sm',\n },\n lg: {\n box: 'w-6 h-6',\n check: 'w-4 h-4',\n text: 'text-lg',\n desc: 'text-base',\n },\n };\n\n const getVariantClasses = () => {\n if (error) {\n return checked\n ? 'bg-red-600 border-red-600'\n : 'border-red-600 dark:border-red-500';\n }\n\n const variantClasses = {\n primary: checked\n ? 'bg-blue-600 border-blue-600'\n : 'border-gray-300 dark:border-gray-600',\n success: checked\n ? 'bg-green-600 border-green-600'\n : 'border-gray-300 dark:border-gray-600',\n warning: checked\n ? 'bg-yellow-600 border-yellow-600'\n : 'border-gray-300 dark:border-gray-600',\n error: checked\n ? 'bg-red-600 border-red-600'\n : 'border-gray-300 dark:border-gray-600',\n };\n\n return variantClasses[variant];\n };\n\n const handlePress = () => {\n if (disabled) return;\n\n const newChecked = !checked;\n\n if (!isControlled) {\n setUncontrolledChecked(newChecked);\n }\n\n onChange?.(newChecked);\n };\n\n const config = sizeClasses[size];\n\n return (\n <View className={cn('flex flex-col', className)}>\n <Pressable\n onPress={handlePress}\n disabled={disabled}\n className={cn(\n 'flex flex-row items-start gap-2',\n disabled && 'opacity-50'\n )}\n accessibilityRole='checkbox'\n accessibilityState={{\n checked: indeterminate ? 'mixed' : checked,\n disabled,\n }}\n accessibilityLabel={label}\n {...pressableProps}\n >\n <View className='relative flex items-center justify-center'>\n <View\n className={cn(\n 'rounded border-2 flex items-center justify-center bg-white dark:bg-gray-900',\n config.box,\n getVariantClasses()\n )}\n >\n {indeterminate ? (\n <View\n className={cn('bg-white rounded-sm', config.check, 'h-0.5')}\n />\n ) : checked ? (\n <View className={cn('bg-white rounded-sm', config.check)} />\n ) : null}\n </View>\n </View>\n {(label || description) && (\n <View className='flex flex-col flex-1'>\n {label && (\n <Text\n className={cn('text-gray-900 dark:text-white', config.text)}\n >\n {label}\n {required && <Text className='text-red-500 ml-1'>*</Text>}\n </Text>\n )}\n {description && (\n <Text\n className={cn('text-gray-600 dark:text-gray-400', config.desc)}\n >\n {description}\n </Text>\n )}\n </View>\n )}\n </Pressable>\n {errorMessage && (\n <Text className='mt-1 text-sm text-red-600 dark:text-red-400'>\n {errorMessage}\n </Text>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Pressable, Animated, PressableProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SwitchProps extends Omit<PressableProps, 'onPress'> {\n /** Whether the switch is on (controlled mode) */\n checked?: boolean;\n /** Default checked state (uncontrolled mode) */\n defaultChecked?: boolean;\n /** Change handler */\n onCheckedChange?: (checked: boolean) => void;\n /** Whether the switch is disabled */\n disabled?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Switch Component\n *\n * Toggle switch for binary on/off states with smooth animation.\n * Supports both controlled and uncontrolled modes.\n *\n * @example\n * ```tsx\n * // Controlled\n * <Switch\n * checked={isEnabled}\n * onCheckedChange={setIsEnabled}\n * />\n *\n * // Uncontrolled\n * <Switch defaultChecked={true} />\n * ```\n */\nexport const Switch = React.forwardRef<View, SwitchProps>(\n (\n {\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n disabled = false,\n size = 'md',\n className,\n ...pressableProps\n },\n ref\n ) => {\n // Support both controlled and uncontrolled modes\n const [uncontrolledChecked, setUncontrolledChecked] =\n useState(defaultChecked);\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : uncontrolledChecked;\n\n // Animation value for thumb position\n const animatedValue = React.useRef(\n new Animated.Value(checked ? 1 : 0)\n ).current;\n\n React.useEffect(() => {\n Animated.timing(animatedValue, {\n toValue: checked ? 1 : 0,\n duration: 200,\n useNativeDriver: true,\n }).start();\n }, [checked, animatedValue]);\n\n // Size configurations\n const sizeConfig = {\n sm: {\n track: 'w-8 h-4',\n thumb: 'w-3 h-3',\n translateX: 16,\n },\n md: {\n track: 'w-11 h-6',\n thumb: 'w-5 h-5',\n translateX: 20,\n },\n lg: {\n track: 'w-14 h-8',\n thumb: 'w-7 h-7',\n translateX: 24,\n },\n };\n\n const config = sizeConfig[size];\n\n const handlePress = () => {\n if (disabled) return;\n\n const newChecked = !checked;\n\n if (!isControlled) {\n setUncontrolledChecked(newChecked);\n }\n\n onCheckedChange?.(newChecked);\n };\n\n const thumbTranslateX = animatedValue.interpolate({\n inputRange: [0, 1],\n outputRange: [0, config.translateX],\n });\n\n return (\n <Pressable\n ref={ref}\n onPress={handlePress}\n disabled={disabled}\n className={cn(\n 'rounded-full items-center justify-start flex-row',\n config.track,\n checked\n ? 'bg-blue-600 dark:bg-blue-500'\n : 'bg-gray-200 dark:bg-gray-700',\n disabled && 'opacity-50',\n className\n )}\n accessibilityRole='switch'\n accessibilityState={{ checked, disabled }}\n {...pressableProps}\n >\n <Animated.View\n className={cn('rounded-full bg-white shadow-lg', config.thumb)}\n style={{\n transform: [{ translateX: thumbTranslateX }],\n marginLeft: 2,\n }}\n />\n </Pressable>\n );\n }\n);\n\nSwitch.displayName = 'Switch';\n","import * as React from 'react';\nimport { View, Text, TextProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface HelperTextProps extends TextProps {\n /** Helper text content */\n children: React.ReactNode;\n /** Variant (affects color and icon) */\n variant?: 'default' | 'error' | 'success' | 'warning';\n /** Show icon indicator */\n showIcon?: boolean;\n /** Size */\n size?: 'sm' | 'base';\n /** Additional className */\n className?: string;\n}\n\n/**\n * HelperText Component\n *\n * Text component for form field descriptions, error messages, and hints.\n * Supports different variants with optional icon indicators.\n *\n * @example\n * ```tsx\n * <HelperText>\n * Enter your email address\n * </HelperText>\n * ```\n *\n * @example\n * ```tsx\n * <HelperText variant=\"error\" showIcon>\n * This field is required\n * </HelperText>\n * ```\n */\nexport const HelperText: React.FC<HelperTextProps> = ({\n children,\n variant = 'default',\n showIcon = false,\n size = 'sm',\n className,\n ...textProps\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'text-sm',\n base: 'text-base',\n };\n\n const iconSize = {\n sm: 'w-4 h-4',\n base: 'w-5 h-5',\n };\n\n // Variant configurations\n const variantConfig = {\n default: {\n text: 'text-gray-600 dark:text-gray-400',\n icon: 'ℹ',\n },\n error: {\n text: 'text-red-600 dark:text-red-400',\n icon: '⚠',\n },\n success: {\n text: 'text-green-600 dark:text-green-400',\n icon: '✓',\n },\n warning: {\n text: 'text-yellow-600 dark:text-yellow-400',\n icon: '⚠',\n },\n };\n\n const config = variantConfig[variant];\n\n return (\n <View className={cn('flex flex-row items-start gap-1.5', className)}>\n {showIcon && (\n <Text className={cn(iconSize[size], config.text, 'mt-0.5')}>\n {config.icon}\n </Text>\n )}\n <Text className={cn(sizeClasses[size], config.text)} {...textProps}>\n {children}\n </Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Modal,\n FlatList,\n SafeAreaView,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SelectOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n /** Currently selected value */\n value?: string;\n /** Callback when value changes */\n onValueChange?: (value: string) => void;\n /** Options to display */\n options: SelectOption[];\n /** Placeholder text when no value selected */\n placeholder?: string;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Additional className for the trigger */\n className?: string;\n /** Title for the modal */\n title?: string;\n}\n\n/**\n * Select Component\n *\n * Dropdown select component using a modal picker for React Native.\n * Provides a native-feeling selection experience.\n *\n * @example\n * ```tsx\n * <Select\n * value={selectedValue}\n * onValueChange={setSelectedValue}\n * options={[\n * { label: 'Option 1', value: '1' },\n * { label: 'Option 2', value: '2' },\n * { label: 'Option 3', value: '3' },\n * ]}\n * placeholder=\"Select an option...\"\n * />\n * ```\n */\nexport const Select: React.FC<SelectProps> = ({\n value,\n onValueChange,\n options,\n placeholder = 'Select...',\n disabled = false,\n className,\n title = 'Select Option',\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n\n const selectedOption = options.find(opt => opt.value === value);\n\n const handleSelect = useCallback(\n (optionValue: string) => {\n onValueChange?.(optionValue);\n setIsOpen(false);\n },\n [onValueChange]\n );\n\n const renderOption = ({ item }: { item: SelectOption; index: number }) => (\n <Pressable\n onPress={() => !item.disabled && handleSelect(item.value)}\n disabled={item.disabled}\n className={cn(\n 'px-4 py-3 border-b border-gray-200 dark:border-gray-700',\n item.value === value && 'bg-blue-50 dark:bg-blue-900/30',\n item.disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityState={{\n selected: item.value === value,\n disabled: item.disabled,\n }}\n >\n <View className='flex flex-row items-center justify-between'>\n <Text\n className={cn(\n 'text-base',\n item.value === value\n ? 'text-blue-600 dark:text-blue-400 font-medium'\n : 'text-gray-900 dark:text-gray-100'\n )}\n >\n {item.label}\n </Text>\n {item.value === value && (\n <Text className='text-blue-600 dark:text-blue-400'>✓</Text>\n )}\n </View>\n </Pressable>\n );\n\n return (\n <>\n {/* Trigger */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'flex flex-row items-center justify-between h-11 px-3 py-2 rounded-md border',\n 'border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n disabled && 'opacity-50',\n className\n )}\n accessibilityRole='combobox'\n accessibilityState={{ disabled, expanded: isOpen }}\n >\n <Text\n className={cn(\n 'text-base flex-1',\n selectedOption\n ? 'text-gray-900 dark:text-gray-100'\n : 'text-gray-400 dark:text-gray-500'\n )}\n numberOfLines={1}\n >\n {selectedOption?.label || placeholder}\n </Text>\n <Text className='text-gray-400 dark:text-gray-500 ml-2'>▼</Text>\n </Pressable>\n\n {/* Modal Picker */}\n <Modal\n visible={isOpen}\n animationType='slide'\n transparent\n onRequestClose={() => setIsOpen(false)}\n >\n <View className='flex-1 justify-end bg-black/50'>\n <SafeAreaView className='bg-white dark:bg-gray-800 rounded-t-xl'>\n {/* Header */}\n <View className='flex flex-row items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700'>\n <Pressable onPress={() => setIsOpen(false)}>\n <Text className='text-blue-600 dark:text-blue-400 text-base'>\n Cancel\n </Text>\n </Pressable>\n <Text className='text-base font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n <View style={{ width: 60 }} />\n </View>\n\n {/* Options */}\n <FlatList\n data={options}\n renderItem={renderOption}\n keyExtractor={(item: SelectOption) => item.value}\n style={{ maxHeight: 300 }}\n />\n </SafeAreaView>\n </View>\n </Modal>\n </>\n );\n};\n\n/**\n * SelectTrigger - For compound component pattern\n */\nexport const SelectTrigger = Select;\n\n/**\n * SelectValue - Display component for the selected value\n */\nexport const SelectValue: React.FC<{ placeholder?: string }> = ({\n placeholder = 'Select...',\n}) => <Text className='text-gray-400 dark:text-gray-500'>{placeholder}</Text>;\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n TextInput,\n Pressable,\n Text,\n ActivityIndicator,\n TextInputProps,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SearchInputProps extends Omit<TextInputProps, 'onChange'> {\n /** Current search query */\n value?: string;\n /** Callback when query changes */\n onChangeText?: (query: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Auto-focus on mount */\n autoFocus?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Show search icon */\n showIcon?: boolean;\n /** Show clear button when has value */\n showClear?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * SearchInput Component\n *\n * Search input field with icon, clear button, and loading state.\n *\n * @example\n * ```tsx\n * <SearchInput\n * placeholder=\"Search emails...\"\n * onChangeText={query => setSearchQuery(query)}\n * />\n * ```\n */\nexport const SearchInput: React.FC<SearchInputProps> = ({\n value: controlledValue,\n onChangeText,\n placeholder = 'Search...',\n autoFocus = false,\n disabled = false,\n size = 'md',\n showIcon = true,\n showClear = true,\n loading = false,\n className,\n ...textInputProps\n}) => {\n const [internalValue, setInternalValue] = useState('');\n\n // Use controlled value if provided, otherwise use internal state\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n const isControlled = controlledValue !== undefined;\n\n // Size configurations\n const sizeClasses = {\n sm: {\n input: 'py-1.5 text-sm',\n icon: 'text-base',\n paddingLeft: showIcon ? 'pl-8' : 'pl-3',\n paddingRight: 'pr-8',\n },\n md: {\n input: 'py-2 text-base',\n icon: 'text-lg',\n paddingLeft: showIcon ? 'pl-10' : 'pl-3',\n paddingRight: 'pr-10',\n },\n lg: {\n input: 'py-3 text-lg',\n icon: 'text-xl',\n paddingLeft: showIcon ? 'pl-12' : 'pl-4',\n paddingRight: 'pr-12',\n },\n };\n\n const sizeConfig = sizeClasses[size];\n\n const handleChange = useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChangeText?.(newValue);\n },\n [onChangeText, isControlled]\n );\n\n const handleClear = useCallback(() => {\n if (!isControlled) {\n setInternalValue('');\n }\n onChangeText?.('');\n }, [onChangeText, isControlled]);\n\n return (\n <View className={cn('relative w-full', className)}>\n {/* Search Icon */}\n {showIcon && (\n <View className='absolute inset-y-0 left-0 flex items-center justify-center pl-3 z-10'>\n <Text\n className={cn(sizeConfig.icon, 'text-gray-400 dark:text-gray-500')}\n >\n 🔍\n </Text>\n </View>\n )}\n\n {/* Input */}\n <TextInput\n value={value}\n onChangeText={handleChange}\n placeholder={placeholder}\n autoFocus={autoFocus}\n editable={!disabled && !loading}\n className={cn(\n 'w-full rounded-lg border',\n 'bg-white dark:bg-gray-800',\n 'text-gray-900 dark:text-gray-100',\n 'border-gray-300 dark:border-gray-600',\n sizeConfig.input,\n sizeConfig.paddingLeft,\n sizeConfig.paddingRight,\n disabled && 'opacity-50',\n loading && 'opacity-60'\n )}\n placeholderTextColor='#9CA3AF'\n accessibilityRole='search'\n accessibilityState={{ disabled }}\n {...textInputProps}\n />\n\n {/* Clear Button or Loading Spinner */}\n {showClear && value && !loading && (\n <Pressable\n onPress={handleClear}\n disabled={disabled}\n className='absolute inset-y-0 right-0 flex items-center justify-center pr-3'\n accessibilityRole='button'\n accessibilityLabel='Clear search'\n >\n <Text className={cn(sizeConfig.icon, 'text-gray-400')}>✕</Text>\n </Pressable>\n )}\n\n {/* Loading Spinner */}\n {loading && (\n <View className='absolute inset-y-0 right-0 flex items-center justify-center pr-3'>\n <ActivityIndicator size='small' color='#9CA3AF' />\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, TextInput, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface NumberInputProps {\n /** Current value */\n value: number;\n /** Callback when value changes */\n onChange: (value: number) => void;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Step increment */\n step?: number;\n /** Disabled state */\n disabled?: boolean;\n /** Show stepper buttons */\n showSteppers?: boolean;\n /** Stepper button position */\n stepperPosition?: 'right' | 'sides';\n /** Placeholder text */\n placeholder?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * NumberInput Component\n *\n * Number input field with optional stepper buttons for increment/decrement.\n * Supports min/max bounds, step values, and different layouts.\n *\n * @example\n * ```tsx\n * <NumberInput\n * value={quantity}\n * onChange={setQuantity}\n * min={1}\n * max={100}\n * showSteppers\n * />\n * ```\n *\n * @example\n * ```tsx\n * <NumberInput\n * value={price}\n * onChange={setPrice}\n * step={0.01}\n * min={0}\n * showSteppers\n * stepperPosition=\"sides\"\n * />\n * ```\n */\nexport const NumberInput: React.FC<NumberInputProps> = ({\n value,\n onChange,\n min,\n max,\n step = 1,\n disabled = false,\n showSteppers = false,\n stepperPosition = 'right',\n placeholder,\n size = 'md',\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: {\n input: 'py-1.5 px-3 text-sm',\n button: 'w-8 h-8',\n icon: 'text-sm',\n },\n md: {\n input: 'py-2 px-3 text-base',\n button: 'w-10 h-10',\n icon: 'text-base',\n },\n lg: {\n input: 'py-3 px-4 text-lg',\n button: 'w-12 h-12',\n icon: 'text-lg',\n },\n };\n\n const sizeConfig = sizeClasses[size];\n\n const clampValue = (val: number): number => {\n let clamped = val;\n if (min !== undefined && clamped < min) clamped = min;\n if (max !== undefined && clamped > max) clamped = max;\n return clamped;\n };\n\n const handleTextChange = (text: string) => {\n const newValue = parseFloat(text);\n if (!isNaN(newValue)) {\n const clampedValue = clampValue(newValue);\n onChange(clampedValue);\n } else if (text === '') {\n onChange(min ?? 0);\n }\n };\n\n const increment = () => {\n if (disabled) return;\n const newValue = clampValue(value + step);\n onChange(newValue);\n };\n\n const decrement = () => {\n if (disabled) return;\n const newValue = clampValue(value - step);\n onChange(newValue);\n };\n\n const canIncrement = max === undefined || value < max;\n const canDecrement = min === undefined || value > min;\n\n const StepperButton = ({\n onPress,\n icon,\n buttonDisabled,\n ariaLabel,\n }: {\n onPress: () => void;\n icon: string;\n buttonDisabled: boolean;\n ariaLabel: string;\n }) => (\n <Pressable\n onPress={onPress}\n disabled={disabled || buttonDisabled}\n accessibilityRole='button'\n accessibilityLabel={ariaLabel}\n className={cn(\n 'items-center justify-center',\n 'border border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n sizeConfig.button,\n (disabled || buttonDisabled) && 'opacity-50'\n )}\n >\n <Text className={cn('text-gray-700 dark:text-gray-300', sizeConfig.icon)}>\n {icon}\n </Text>\n </Pressable>\n );\n\n // Sides layout: - [input] +\n if (showSteppers && stepperPosition === 'sides') {\n return (\n <View className={cn('flex flex-row items-stretch', className)}>\n <StepperButton\n onPress={decrement}\n buttonDisabled={!canDecrement}\n icon='−'\n ariaLabel='Decrement'\n />\n <TextInput\n value={String(value)}\n onChangeText={handleTextChange}\n keyboardType='numeric'\n editable={!disabled}\n placeholder={placeholder}\n className={cn(\n 'border-x-0 text-center flex-1',\n 'border-y border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'text-gray-900 dark:text-gray-100',\n sizeConfig.input,\n disabled && 'opacity-50'\n )}\n accessibilityLabel='Number input'\n />\n <StepperButton\n onPress={increment}\n buttonDisabled={!canIncrement}\n icon='+'\n ariaLabel='Increment'\n />\n </View>\n );\n }\n\n // Right layout: [input] [+/-]\n if (showSteppers && stepperPosition === 'right') {\n return (\n <View className={cn('flex flex-row items-stretch gap-2', className)}>\n <TextInput\n value={String(value)}\n onChangeText={handleTextChange}\n keyboardType='numeric'\n editable={!disabled}\n placeholder={placeholder}\n className={cn(\n 'flex-1 rounded-lg border',\n 'border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'text-gray-900 dark:text-gray-100',\n sizeConfig.input,\n disabled && 'opacity-50'\n )}\n accessibilityLabel='Number input'\n />\n <View className='flex flex-col gap-0.5'>\n <Pressable\n onPress={increment}\n disabled={disabled || !canIncrement}\n accessibilityRole='button'\n accessibilityLabel='Increment'\n className={cn(\n 'flex-1 items-center justify-center',\n 'rounded border border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'px-2',\n (disabled || !canIncrement) && 'opacity-50'\n )}\n >\n <Text className='text-gray-700 dark:text-gray-300 text-xs'>+</Text>\n </Pressable>\n <Pressable\n onPress={decrement}\n disabled={disabled || !canDecrement}\n accessibilityRole='button'\n accessibilityLabel='Decrement'\n className={cn(\n 'flex-1 items-center justify-center',\n 'rounded border border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'px-2',\n (disabled || !canDecrement) && 'opacity-50'\n )}\n >\n <Text className='text-gray-700 dark:text-gray-300 text-xs'>−</Text>\n </Pressable>\n </View>\n </View>\n );\n }\n\n // No steppers: just the input\n return (\n <TextInput\n value={String(value)}\n onChangeText={handleTextChange}\n keyboardType='numeric'\n editable={!disabled}\n placeholder={placeholder}\n className={cn(\n 'rounded-lg border',\n 'border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'text-gray-900 dark:text-gray-100',\n sizeConfig.input,\n disabled && 'opacity-50',\n className\n )}\n accessibilityLabel='Number input'\n />\n );\n};\n","import * as React from 'react';\nimport { Text as RNText } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TextProps {\n /** Text content */\n children: React.ReactNode;\n /** Size variant */\n size?: 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';\n /** Weight variant */\n weight?: 'light' | 'normal' | 'medium' | 'semibold' | 'bold';\n /** Color variant */\n color?: 'default' | 'muted' | 'primary' | 'success' | 'warning' | 'danger';\n /** Text alignment */\n align?: 'left' | 'center' | 'right';\n /** Text transform */\n transform?: 'none' | 'uppercase' | 'lowercase' | 'capitalize';\n /** Number of lines (for truncation) */\n numberOfLines?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Text Component\n *\n * Versatile text component with consistent styling.\n * Supports various sizes, weights, colors, and formatting options.\n *\n * @example\n * ```tsx\n * <Text size=\"lg\" weight=\"semibold\">\n * Large semibold text\n * </Text>\n * ```\n *\n * @example\n * ```tsx\n * <Text color=\"muted\" size=\"sm\">\n * Muted small text\n * </Text>\n * ```\n */\nexport const Text: React.FC<TextProps> = ({\n children,\n size = 'base',\n weight = 'normal',\n color = 'default',\n align,\n transform = 'none',\n numberOfLines,\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n xs: 'text-xs',\n sm: 'text-sm',\n base: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n '2xl': 'text-2xl',\n '3xl': 'text-3xl',\n '4xl': 'text-4xl',\n };\n\n // Weight configurations\n const weightClasses = {\n light: 'font-light',\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n };\n\n // Color configurations\n const colorClasses = {\n default: 'text-gray-900 dark:text-gray-100',\n muted: 'text-gray-600 dark:text-gray-400',\n primary: 'text-blue-600 dark:text-blue-400',\n success: 'text-green-600 dark:text-green-400',\n warning: 'text-yellow-600 dark:text-yellow-400',\n danger: 'text-red-600 dark:text-red-400',\n };\n\n // Alignment configurations\n const alignClasses = align\n ? {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n }[align]\n : '';\n\n // Transform configurations\n const transformClasses = {\n none: '',\n uppercase: 'uppercase',\n lowercase: 'lowercase',\n capitalize: 'capitalize',\n };\n\n return (\n <RNText\n className={cn(\n sizeClasses[size],\n weightClasses[weight],\n colorClasses[color],\n alignClasses,\n transformClasses[transform],\n className\n )}\n numberOfLines={numberOfLines}\n >\n {children}\n </RNText>\n );\n};\n","import * as React from 'react';\nimport { Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface HeadingProps {\n /** Heading content */\n children: React.ReactNode;\n /** Heading level (for semantic/accessibility purposes) */\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Size (independent of level for visual flexibility) */\n size?: '4xl' | '3xl' | '2xl' | 'xl' | 'lg' | 'base';\n /** Weight variant */\n weight?: 'normal' | 'medium' | 'semibold' | 'bold' | 'extrabold';\n /** Color variant */\n color?: 'default' | 'muted' | 'primary';\n /** Text alignment */\n align?: 'left' | 'center' | 'right';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Heading Component\n *\n * Semantic heading component with flexible sizing and styling.\n * Level is used for accessibility, size controls visual appearance.\n *\n * @example\n * ```tsx\n * <Heading level={1} size=\"4xl\">\n * Page Title\n * </Heading>\n * ```\n *\n * @example\n * ```tsx\n * <Heading level={2} size=\"xl\" color=\"primary\">\n * Section Title\n * </Heading>\n * ```\n */\nexport const Heading: React.FC<HeadingProps> = ({\n children,\n level = 2,\n size,\n weight = 'bold',\n color = 'default',\n align,\n className,\n}) => {\n // Default sizes based on level if not explicitly provided\n const defaultSizes = {\n 1: '4xl',\n 2: '3xl',\n 3: '2xl',\n 4: 'xl',\n 5: 'lg',\n 6: 'base',\n } as const;\n\n const actualSize = size || defaultSizes[level];\n\n // Size configurations\n const sizeClasses = {\n '4xl': 'text-4xl',\n '3xl': 'text-3xl',\n '2xl': 'text-2xl',\n xl: 'text-xl',\n lg: 'text-lg',\n base: 'text-base',\n };\n\n // Weight configurations\n const weightClasses = {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n extrabold: 'font-extrabold',\n };\n\n // Color configurations\n const colorClasses = {\n default: 'text-gray-900 dark:text-gray-100',\n muted: 'text-gray-700 dark:text-gray-300',\n primary: 'text-blue-600 dark:text-blue-400',\n };\n\n // Alignment configurations\n const alignClasses = align\n ? {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n }[align]\n : '';\n\n return (\n <Text\n className={cn(\n sizeClasses[actualSize],\n weightClasses[weight],\n colorClasses[color],\n alignClasses,\n className\n )}\n accessibilityRole='header'\n >\n {children}\n </Text>\n );\n};\n","import * as React from 'react';\nimport { Text, View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CodeProps {\n /** Code content */\n children: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Code Component\n *\n * Displays inline code snippets with monospace font and consistent styling.\n *\n * @example\n * ```tsx\n * <Text>Use the <Code>useState</Code> hook</Text>\n * ```\n *\n * @example\n * ```tsx\n * <Code variant=\"primary\" size=\"lg\">\n * npm install\n * </Code>\n * ```\n */\nexport const Code: React.FC<CodeProps> = ({\n children,\n size = 'md',\n variant = 'default',\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'text-xs px-1 py-0.5',\n md: 'text-sm px-1.5 py-0.5',\n lg: 'text-base px-2 py-1',\n };\n\n // Variant configurations - background\n const variantBgClasses = {\n default: 'bg-gray-100 dark:bg-gray-800',\n primary: 'bg-blue-50 dark:bg-blue-900/30',\n success: 'bg-green-50 dark:bg-green-900/30',\n warning: 'bg-yellow-50 dark:bg-yellow-900/30',\n danger: 'bg-red-50 dark:bg-red-900/30',\n };\n\n // Variant configurations - text\n const variantTextClasses = {\n default: 'text-gray-900 dark:text-gray-100',\n primary: 'text-blue-700 dark:text-blue-300',\n success: 'text-green-700 dark:text-green-300',\n warning: 'text-yellow-700 dark:text-yellow-300',\n danger: 'text-red-700 dark:text-red-300',\n };\n\n return (\n <View\n className={cn(\n 'rounded',\n variantBgClasses[variant],\n sizeClasses[size],\n className\n )}\n >\n <Text\n className={cn('font-mono font-medium', variantTextClasses[variant])}\n style={{ fontFamily: 'monospace' }}\n >\n {children}\n </Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TruncatedTextProps {\n /** Text content to truncate */\n children: string;\n /** Maximum length before truncation */\n maxLength?: number;\n /** Position of truncation */\n position?: 'end' | 'middle' | 'start';\n /** Custom ellipsis character */\n ellipsis?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TruncatedText Component\n *\n * Intelligently truncates text with ellipsis at various positions.\n * Useful for displaying long text like addresses, IDs, or descriptions.\n *\n * @example\n * ```tsx\n * <TruncatedText maxLength={50}>\n * This is a very long text that will be truncated...\n * </TruncatedText>\n * ```\n *\n * @example\n * ```tsx\n * <TruncatedText\n * maxLength={20}\n * position=\"middle\"\n * >\n * 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb\n * </TruncatedText>\n * ```\n */\nexport const TruncatedText: React.FC<TruncatedTextProps> = ({\n children,\n maxLength = 50,\n position = 'end',\n ellipsis = '...',\n className,\n}) => {\n const text = children || '';\n\n // No truncation needed\n if (text.length <= maxLength) {\n return <Text className={className}>{text}</Text>;\n }\n\n // Calculate truncated text based on position\n const getTruncatedText = (): string => {\n const ellipsisLength = ellipsis.length;\n const availableLength = maxLength - ellipsisLength;\n\n switch (position) {\n case 'start':\n return ellipsis + text.slice(text.length - availableLength);\n\n case 'middle': {\n const halfLength = Math.floor(availableLength / 2);\n const start = text.slice(0, halfLength);\n const end = text.slice(text.length - (availableLength - halfLength));\n return start + ellipsis + end;\n }\n\n case 'end':\n default:\n return text.slice(0, availableLength) + ellipsis;\n }\n };\n\n const truncatedText = getTruncatedText();\n\n return <Text className={cn(className)}>{truncatedText}</Text>;\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface BadgeProps {\n /** Badge content */\n children?: React.ReactNode;\n /** Color variant */\n variant?:\n | 'default'\n | 'primary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'info'\n | 'purple';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Icon to display */\n icon?: React.ReactNode;\n /** Show dot indicator */\n dot?: boolean;\n /** Render as pill (rounded-full) */\n pill?: boolean;\n /** Render as outline style */\n outline?: boolean;\n /** Press handler */\n onPress?: () => void;\n /** Dismissible badge with close button */\n dismissible?: boolean;\n /** Dismiss handler */\n onDismiss?: () => void;\n /** Count to display */\n count?: number;\n /** Max count before showing \"+\" */\n maxCount?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Badge Component\n *\n * Small status or label component for displaying metadata, status, or categories.\n * Commonly used for tags, statuses, counts, and labels.\n *\n * @example\n * ```tsx\n * <Badge variant=\"success\">Active</Badge>\n * <Badge variant=\"primary\" size=\"sm\">New</Badge>\n * <Badge variant=\"warning\" dot>Pending</Badge>\n * ```\n */\nexport const Badge: React.FC<BadgeProps> = ({\n children,\n variant = 'default',\n size = 'sm',\n icon,\n dot = false,\n pill = false,\n outline = false,\n onPress,\n dismissible = false,\n onDismiss,\n count,\n maxCount,\n className,\n}) => {\n // Color variant configurations for filled style\n const variantClasses = {\n default: 'bg-gray-100 dark:bg-gray-700',\n primary: 'bg-blue-100 dark:bg-blue-900/30',\n success: 'bg-green-100 dark:bg-green-900/30',\n warning: 'bg-yellow-100 dark:bg-yellow-900/30',\n danger: 'bg-red-100 dark:bg-red-900/30',\n info: 'bg-blue-100 dark:bg-blue-900/30',\n purple: 'bg-purple-100 dark:bg-purple-900/30',\n };\n\n const variantTextClasses = {\n default: 'text-gray-800 dark:text-gray-300',\n primary: 'text-blue-800 dark:text-blue-400',\n success: 'text-green-800 dark:text-green-400',\n warning: 'text-yellow-800 dark:text-yellow-400',\n danger: 'text-red-800 dark:text-red-400',\n info: 'text-blue-800 dark:text-blue-400',\n purple: 'text-purple-800 dark:text-purple-400',\n };\n\n // Color variant configurations for outline style\n const outlineClasses = {\n default: 'border border-gray-300 dark:border-gray-600',\n primary: 'border border-blue-600 dark:border-blue-400',\n success: 'border border-green-600 dark:border-green-400',\n warning: 'border border-yellow-600 dark:border-yellow-400',\n danger: 'border border-red-600 dark:border-red-400',\n info: 'border border-blue-600 dark:border-blue-400',\n purple: 'border border-purple-600 dark:border-purple-400',\n };\n\n const outlineTextClasses = {\n default: 'text-gray-700 dark:text-gray-300',\n primary: 'text-blue-600 dark:text-blue-400',\n success: 'text-green-600 dark:text-green-400',\n warning: 'text-yellow-600 dark:text-yellow-400',\n danger: 'text-red-600 dark:text-red-400',\n info: 'text-blue-600 dark:text-blue-400',\n purple: 'text-purple-600 dark:text-purple-400',\n };\n\n // Size configurations\n const sizeClasses = {\n sm: 'px-2 py-0.5',\n md: 'px-2.5 py-1',\n lg: 'px-3 py-1.5',\n };\n\n const textSizeClasses = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n };\n\n // Dot color configurations\n const dotColorClasses = {\n default: 'bg-gray-600 dark:bg-gray-400',\n primary: 'bg-blue-600 dark:bg-blue-400',\n success: 'bg-green-600 dark:bg-green-400',\n warning: 'bg-yellow-600 dark:bg-yellow-400',\n danger: 'bg-red-600 dark:bg-red-400',\n info: 'bg-blue-600 dark:bg-blue-400',\n purple: 'bg-purple-600 dark:bg-purple-400',\n };\n\n // Format count display\n const displayCount =\n count !== undefined\n ? maxCount !== undefined && count > maxCount\n ? `${maxCount}+`\n : count.toString()\n : null;\n\n const containerClasses = cn(\n 'flex flex-row items-center',\n outline ? outlineClasses[variant] : variantClasses[variant],\n sizeClasses[size],\n pill ? 'rounded-full' : 'rounded',\n className\n );\n\n const textClasses = cn(\n textSizeClasses[size],\n 'font-medium',\n outline ? outlineTextClasses[variant] : variantTextClasses[variant]\n );\n\n const content = (\n <>\n {dot && (\n <View\n className={cn(\n 'w-2 h-2 rounded-full mr-1.5',\n dotColorClasses[variant]\n )}\n />\n )}\n {icon && <View className='mr-1'>{icon}</View>}\n {children && <Text className={textClasses}>{children}</Text>}\n {displayCount && (\n <Text className={cn(textClasses, 'ml-1')}>{displayCount}</Text>\n )}\n {dismissible && onDismiss && (\n <Pressable\n onPress={onDismiss}\n className='ml-1 p-0.5'\n accessibilityRole='button'\n accessibilityLabel='Dismiss'\n >\n <Text className={textClasses}>×</Text>\n </Pressable>\n )}\n </>\n );\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n className={containerClasses}\n accessibilityRole='button'\n >\n {content}\n </Pressable>\n );\n }\n\n return <View className={containerClasses}>{content}</View>;\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Text, Image, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface AvatarProps {\n /** Image source URL */\n src?: string;\n /** Alt text for image */\n alt?: string;\n /** Fallback text (initials) to display when no image */\n fallback?: string;\n /** Name to generate initials from */\n name?: string;\n /** Size variant */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** Show status indicator */\n status?: 'online' | 'offline' | 'away' | 'busy';\n /** Additional className */\n className?: string;\n /** Click handler */\n onPress?: () => void;\n}\n\n/**\n * Avatar Component\n *\n * Avatar component for displaying user images or initials.\n *\n * @example\n * ```tsx\n * // User image\n * <Avatar src=\"https://example.com/avatar.jpg\" alt=\"John Doe\" fallback=\"JD\" />\n *\n * // Generate initials from name\n * <Avatar name=\"John Doe\" />\n *\n * // With status indicator\n * <Avatar src=\"/avatar.jpg\" status=\"online\" />\n * ```\n */\nexport const Avatar: React.FC<AvatarProps> = ({\n src,\n alt = 'Avatar',\n fallback,\n name,\n size = 'md',\n status,\n className,\n onPress,\n}) => {\n const [imageError, setImageError] = useState(false);\n\n // Size configurations\n const sizeClasses = {\n xs: 'w-6 h-6',\n sm: 'w-8 h-8',\n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n xl: 'w-16 h-16',\n };\n\n const textSizeClasses = {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-lg',\n };\n\n const statusSizeClasses = {\n xs: 'w-1.5 h-1.5',\n sm: 'w-2 h-2',\n md: 'w-2.5 h-2.5',\n lg: 'w-3 h-3',\n xl: 'w-4 h-4',\n };\n\n // Status indicator configurations\n const statusClasses = {\n online: 'bg-green-500',\n offline: 'bg-gray-400',\n away: 'bg-yellow-500',\n busy: 'bg-red-500',\n };\n\n // Generate initials from name\n const generateInitials = (name: string): string => {\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 1) {\n return parts[0].charAt(0).toUpperCase();\n }\n return (\n parts[0].charAt(0).toUpperCase() +\n parts[parts.length - 1].charAt(0).toUpperCase()\n );\n };\n\n // Determine what to display\n const displayFallback = fallback || (name ? generateInitials(name) : '');\n const showImage = src && !imageError;\n\n const handleImageError = () => {\n setImageError(true);\n };\n\n const content = (\n <View className='relative'>\n <View\n className={cn(\n 'flex items-center justify-center overflow-hidden rounded-full',\n sizeClasses[size],\n !showImage && 'bg-gray-300 dark:bg-gray-600',\n className\n )}\n >\n {showImage ? (\n <Image\n source={{ uri: src }}\n className='w-full h-full'\n accessibilityLabel={alt}\n onError={handleImageError}\n />\n ) : (\n <Text\n className={cn(\n 'font-semibold text-gray-700 dark:text-gray-200',\n textSizeClasses[size]\n )}\n >\n {displayFallback}\n </Text>\n )}\n </View>\n {status && (\n <View\n className={cn(\n 'absolute bottom-0 right-0 rounded-full border-2 border-white dark:border-gray-800',\n statusClasses[status],\n statusSizeClasses[size]\n )}\n accessibilityLabel={status}\n />\n )}\n </View>\n );\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n accessibilityRole='button'\n accessibilityLabel={alt}\n >\n {content}\n </Pressable>\n );\n }\n\n return content;\n};\n\nexport interface AvatarGroupProps {\n /** Avatar components */\n children: React.ReactNode;\n /** Maximum number of avatars to show */\n max?: number;\n /** Size for all avatars */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** Additional className */\n className?: string;\n}\n\n/**\n * AvatarGroup - Display multiple avatars in a stack\n */\nexport const AvatarGroup: React.FC<AvatarGroupProps> = ({\n children,\n max = 5,\n size = 'md',\n className,\n}) => {\n const childArray = React.Children.toArray(children);\n const excess = childArray.length - max;\n const visibleChildren = childArray.slice(0, max);\n\n // Overlap amounts based on size\n const overlapClasses = {\n xs: '-ml-2',\n sm: '-ml-2',\n md: '-ml-3',\n lg: '-ml-4',\n xl: '-ml-5',\n };\n\n return (\n <View className={cn('flex flex-row items-center', className)}>\n {visibleChildren.map((child, index) => (\n <View\n key={index}\n className={cn(index > 0 && overlapClasses[size])}\n style={{ zIndex: visibleChildren.length - index }}\n >\n {React.isValidElement(child)\n ? React.cloneElement(child as React.ReactElement<AvatarProps>, {\n size,\n })\n : child}\n </View>\n ))}\n {excess > 0 && (\n <View\n className={cn(\n overlapClasses[size],\n 'flex items-center justify-center rounded-full bg-gray-200 dark:bg-gray-600',\n {\n xs: 'w-6 h-6',\n sm: 'w-8 h-8',\n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n xl: 'w-16 h-16',\n }[size]\n )}\n >\n <Text\n className={cn(\n 'font-medium text-gray-700 dark:text-gray-200',\n {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-lg',\n }[size]\n )}\n >\n +{excess}\n </Text>\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { View, Animated, ViewProps, DimensionValue } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SkeletonProps extends ViewProps {\n /** Shape/type of skeleton */\n variant?: 'text' | 'circle' | 'rectangle' | 'avatar' | 'button';\n /** Width of the skeleton */\n width?: DimensionValue;\n /** Height of the skeleton */\n height?: DimensionValue;\n /** Number of skeleton elements to render */\n count?: number;\n /** Number of lines (for text variant) */\n lines?: number;\n /** Enable/disable animation */\n animate?: boolean;\n /** Gap between lines */\n gap?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Skeleton Component\n *\n * A loading placeholder component that displays a pulsing skeleton.\n *\n * @example\n * ```tsx\n * // Loading text\n * <Skeleton variant=\"text\" width={200} />\n * <Skeleton variant=\"text\" count={3} />\n *\n * // Loading avatar\n * <Skeleton variant=\"circle\" width={40} height={40} />\n *\n * // Loading button\n * <Skeleton variant=\"button\" width={120} />\n * ```\n */\nexport const Skeleton: React.FC<SkeletonProps> = ({\n variant = 'text',\n width,\n height,\n count,\n lines = 1,\n animate = true,\n gap = 'md',\n className,\n ...viewProps\n}) => {\n const animatedValue = useRef(new Animated.Value(0.3)).current;\n\n useEffect(() => {\n if (animate) {\n Animated.loop(\n Animated.sequence([\n Animated.timing(animatedValue, {\n toValue: 1,\n duration: 750,\n useNativeDriver: true,\n }),\n Animated.timing(animatedValue, {\n toValue: 0.3,\n duration: 750,\n useNativeDriver: true,\n }),\n ])\n ).start();\n }\n }, [animate, animatedValue]);\n\n // Variant-specific styles\n const variantClasses = {\n text: 'h-4 rounded',\n circle: 'rounded-full',\n rectangle: 'rounded-lg',\n avatar: 'w-10 h-10 rounded-full',\n button: 'h-10 rounded-lg',\n };\n\n // Gap between lines\n const gapClasses = {\n sm: 'gap-1',\n md: 'gap-2',\n lg: 'gap-3',\n };\n\n // Determine number of elements to render\n const elementCount = count ?? lines;\n\n // Single skeleton element\n const renderSkeleton = (key?: number) => {\n const style: Record<string, DimensionValue | undefined> = {};\n\n if (width !== undefined) {\n style.width = width;\n }\n\n if (height !== undefined) {\n style.height = height;\n }\n\n return (\n <Animated.View\n key={key}\n className={cn(\n 'bg-gray-200 dark:bg-gray-700',\n variantClasses[variant],\n className\n )}\n style={[style, animate ? { opacity: animatedValue } : undefined]}\n {...viewProps}\n />\n );\n };\n\n // Multiple skeletons\n if (elementCount > 1) {\n return (\n <View className={cn('flex flex-col', gapClasses[gap])}>\n {Array.from({ length: elementCount }).map((_, i) => renderSkeleton(i))}\n </View>\n );\n }\n\n return renderSkeleton();\n};\n\n/**\n * SkeletonText - Pre-configured text skeleton\n */\nexport const SkeletonText: React.FC<\n Omit<SkeletonProps, 'variant'> & { lines?: number }\n> = ({ lines = 3, ...props }) => (\n <Skeleton variant='text' lines={lines} {...props} />\n);\n\n/**\n * SkeletonAvatar - Pre-configured avatar skeleton\n */\nexport const SkeletonAvatar: React.FC<\n Omit<SkeletonProps, 'variant'>\n> = props => <Skeleton variant='avatar' {...props} />;\n\n/**\n * SkeletonButton - Pre-configured button skeleton\n */\nexport const SkeletonButton: React.FC<\n Omit<SkeletonProps, 'variant'>\n> = props => <Skeleton variant='button' width={100} {...props} />;\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ListProps {\n /** List items */\n children: React.ReactNode;\n /** List type */\n type?: 'unordered' | 'ordered';\n /** Spacing between items */\n spacing?: 'none' | 'sm' | 'md' | 'lg';\n /** Marker/bullet style */\n marker?: 'disc' | 'circle' | 'square' | 'decimal' | 'alpha' | 'none';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\nexport interface ListItemProps {\n /** List item content */\n children: React.ReactNode;\n /** Item index (for ordered lists) */\n index?: number;\n /** Marker type (inherited from List) */\n marker?: 'disc' | 'circle' | 'square' | 'decimal' | 'alpha' | 'none';\n /** List type (inherited from List) */\n listType?: 'unordered' | 'ordered';\n /** Size (inherited from List) */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n// Context for passing list props to items\nconst ListContext = React.createContext<{\n type: 'unordered' | 'ordered';\n marker: 'disc' | 'circle' | 'square' | 'decimal' | 'alpha' | 'none';\n size: 'sm' | 'md' | 'lg';\n}>({\n type: 'unordered',\n marker: 'disc',\n size: 'md',\n});\n\n/**\n * List Component\n *\n * List component with consistent styling and spacing options.\n * Supports both ordered and unordered lists with various marker styles.\n *\n * @example\n * ```tsx\n * <List>\n * <ListItem>First item</ListItem>\n * <ListItem>Second item</ListItem>\n * <ListItem>Third item</ListItem>\n * </List>\n * ```\n *\n * @example\n * ```tsx\n * <List type=\"ordered\" marker=\"decimal\" spacing=\"md\">\n * <ListItem>Step one</ListItem>\n * <ListItem>Step two</ListItem>\n * </List>\n * ```\n */\nexport const List: React.FC<ListProps> = ({\n children,\n type = 'unordered',\n spacing = 'sm',\n marker,\n size = 'md',\n className,\n}) => {\n // Default marker based on type\n const defaultMarker = type === 'ordered' ? 'decimal' : 'disc';\n const actualMarker = marker || defaultMarker;\n\n // Spacing configurations\n const spacingClasses = {\n none: 'gap-0',\n sm: 'gap-1',\n md: 'gap-2',\n lg: 'gap-4',\n };\n\n // Clone children with index for ordered lists\n const childrenWithIndex = React.Children.map(children, (child, index) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child as React.ReactElement<ListItemProps>, {\n index: index + 1,\n });\n }\n return child;\n });\n\n return (\n <ListContext.Provider value={{ type, marker: actualMarker, size }}>\n <View\n className={cn('ml-4', spacingClasses[spacing], className)}\n accessibilityRole='list'\n >\n {childrenWithIndex}\n </View>\n </ListContext.Provider>\n );\n};\n\n/**\n * ListItem Component\n *\n * Individual list item to be used within List component.\n */\nexport const ListItem: React.FC<ListItemProps> = ({\n children,\n index = 1,\n className,\n}) => {\n const { type, marker, size } = React.useContext(ListContext);\n\n // Size configurations\n const sizeClasses = {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n };\n\n // Get marker symbol\n const getMarker = (): string => {\n if (marker === 'none') return '';\n\n if (type === 'ordered') {\n switch (marker) {\n case 'decimal':\n return `${index}.`;\n case 'alpha':\n return `${String.fromCharCode(96 + index)}.`;\n default:\n return `${index}.`;\n }\n } else {\n switch (marker) {\n case 'disc':\n return '•';\n case 'circle':\n return '○';\n case 'square':\n return '▪';\n default:\n return '•';\n }\n }\n };\n\n const markerSymbol = getMarker();\n\n return (\n <View className={cn('flex flex-row', className)}>\n {markerSymbol !== '' && (\n <Text\n className={cn(\n 'mr-2 text-gray-600 dark:text-gray-400',\n sizeClasses[size],\n type === 'ordered' ? 'w-6' : 'w-3'\n )}\n >\n {markerSymbol}\n </Text>\n )}\n <Text\n className={cn(\n 'flex-1 text-gray-900 dark:text-gray-100 leading-relaxed',\n sizeClasses[size]\n )}\n >\n {children}\n </Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface IconTextProps {\n /** Icon element to display */\n icon: React.ReactNode;\n /** Text content */\n children: React.ReactNode;\n /** Icon position */\n iconPosition?: 'left' | 'right' | 'top';\n /** Gap between icon and text */\n gap?: 'xs' | 'sm' | 'md' | 'lg';\n /** Text alignment (for top icon position) */\n align?: 'left' | 'center' | 'right';\n /** Color variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'muted';\n /** Additional className for the container */\n className?: string;\n /** Additional className for the text */\n textClassName?: string;\n}\n\n/**\n * IconText Component\n *\n * Displays an icon alongside text content with flexible positioning and styling.\n * Commonly used for buttons, labels, list items, and feature highlights.\n *\n * @example\n * ```tsx\n * <IconText icon={<CheckIcon />}>\n * Feature enabled\n * </IconText>\n * ```\n *\n * @example\n * ```tsx\n * <IconText\n * icon={<StarIcon />}\n * iconPosition=\"top\"\n * align=\"center\"\n * variant=\"primary\"\n * >\n * Premium Feature\n * </IconText>\n * ```\n */\nexport const IconText: React.FC<IconTextProps> = ({\n icon,\n children,\n iconPosition = 'left',\n gap = 'md',\n align = 'left',\n variant = 'default',\n className,\n textClassName,\n}) => {\n // Gap configurations\n const gapClasses = {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n };\n\n // Alignment classes (for top icon position)\n const alignClasses = {\n left: 'items-start',\n center: 'items-center',\n right: 'items-end',\n };\n\n // Text alignment classes\n const textAlignClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n };\n\n // Color variant configurations\n const variantClasses = {\n default: 'text-gray-700 dark:text-gray-300',\n primary: 'text-blue-600 dark:text-blue-400',\n success: 'text-green-600 dark:text-green-400',\n warning: 'text-yellow-600 dark:text-yellow-400',\n danger: 'text-red-600 dark:text-red-400',\n muted: 'text-gray-500 dark:text-gray-400',\n };\n\n // Layout based on icon position\n const layoutClasses = {\n left: 'flex-row items-center',\n right: 'flex-row-reverse items-center',\n top: 'flex-col',\n };\n\n return (\n <View\n className={cn(\n 'flex',\n layoutClasses[iconPosition],\n gapClasses[gap],\n iconPosition === 'top' && alignClasses[align],\n className\n )}\n >\n {icon}\n <Text\n className={cn(\n variantClasses[variant],\n iconPosition === 'top' && textAlignClasses[align],\n textClassName\n )}\n >\n {children}\n </Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface FormattedNumberProps {\n /** Number value to format */\n value: number;\n /** Number style */\n style?: 'decimal' | 'currency' | 'percent';\n /** Currency code (for currency style) */\n currency?: string;\n /** Minimum fraction digits */\n minimumFractionDigits?: number;\n /** Maximum fraction digits */\n maximumFractionDigits?: number;\n /** Locale */\n locale?: string;\n /** Notation (compact for abbreviations like 1.2K) */\n notation?: 'standard' | 'compact';\n /** Additional className */\n className?: string;\n}\n\n/**\n * FormattedNumber Component\n *\n * Formats numbers using Intl.NumberFormat with various styles and locales.\n * Supports currencies, percentages, and compact notation.\n *\n * @example\n * ```tsx\n * <FormattedNumber value={1234.56} />\n * <FormattedNumber value={1234.56} notation=\"compact\" />\n * <FormattedNumber\n * value={1234.56}\n * style=\"currency\"\n * currency=\"USD\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * <FormattedNumber\n * value={0.1234}\n * style=\"percent\"\n * minimumFractionDigits={2}\n * />\n * ```\n */\nexport const FormattedNumber: React.FC<FormattedNumberProps> = ({\n value,\n style = 'decimal',\n currency = 'USD',\n minimumFractionDigits,\n maximumFractionDigits,\n locale = 'en-US',\n notation = 'standard',\n className,\n}) => {\n const formatNumber = (): string => {\n try {\n const options: Intl.NumberFormatOptions = {\n style,\n notation,\n minimumFractionDigits,\n maximumFractionDigits,\n };\n\n if (style === 'currency') {\n options.currency = currency;\n }\n\n return new Intl.NumberFormat(locale, options).format(value);\n } catch (error) {\n // Fallback to basic formatting if Intl fails\n console.error('Number formatting error:', error);\n return value.toLocaleString(locale);\n }\n };\n\n return <Text className={cn(className)}>{formatNumber()}</Text>;\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface InfoBoxProps {\n /** Content to display in the info box */\n children: React.ReactNode;\n /** Title/heading for the info box */\n title?: string;\n /** Color variant */\n variant?: 'info' | 'success' | 'warning' | 'danger' | 'neutral';\n /** Size/padding variant */\n size?: 'sm' | 'md' | 'lg';\n /** Icon element to display */\n icon?: React.ReactNode;\n /** Show border */\n bordered?: boolean;\n /** Additional className for the container */\n className?: string;\n}\n\n/**\n * InfoBox Component\n *\n * A versatile callout/info box component for highlighting important information,\n * tips, warnings, or notes. Commonly used in documentation, settings pages,\n * and forms.\n *\n * @example\n * ```tsx\n * <InfoBox variant=\"info\" title=\"Quick Start\">\n * <Text>Connect your wallet to get started</Text>\n * </InfoBox>\n * ```\n *\n * @example\n * ```tsx\n * <InfoBox variant=\"warning\" icon={<WarningIcon />}>\n * <Text>Each wallet creates a unique email address.</Text>\n * </InfoBox>\n * ```\n */\nexport const InfoBox: React.FC<InfoBoxProps> = ({\n children,\n title,\n variant = 'info',\n size = 'md',\n icon,\n bordered = true,\n className,\n}) => {\n // Color variant configurations\n const variantClasses = {\n info: {\n bg: 'bg-blue-50 dark:bg-blue-900/20',\n border: 'border-blue-200 dark:border-blue-800',\n title: 'text-blue-900 dark:text-blue-300',\n text: 'text-blue-800 dark:text-blue-400',\n },\n success: {\n bg: 'bg-green-50 dark:bg-green-900/20',\n border: 'border-green-200 dark:border-green-800',\n title: 'text-green-900 dark:text-green-300',\n text: 'text-green-800 dark:text-green-400',\n },\n warning: {\n bg: 'bg-yellow-50 dark:bg-yellow-900/20',\n border: 'border-yellow-200 dark:border-yellow-800',\n title: 'text-yellow-900 dark:text-yellow-300',\n text: 'text-yellow-800 dark:text-yellow-400',\n },\n danger: {\n bg: 'bg-red-50 dark:bg-red-900/20',\n border: 'border-red-200 dark:border-red-800',\n title: 'text-red-900 dark:text-red-300',\n text: 'text-red-800 dark:text-red-400',\n },\n neutral: {\n bg: 'bg-gray-50 dark:bg-gray-800',\n border: 'border-gray-200 dark:border-gray-700',\n title: 'text-gray-900 dark:text-gray-100',\n text: 'text-gray-700 dark:text-gray-300',\n },\n };\n\n // Size/padding configurations\n const sizeClasses = {\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-6',\n };\n\n const variantConfig = variantClasses[variant];\n\n return (\n <View\n className={cn(\n 'rounded-lg',\n variantConfig.bg,\n bordered && `border ${variantConfig.border}`,\n sizeClasses[size],\n className\n )}\n >\n {(title || icon) && (\n <View className='flex flex-row items-start gap-3 mb-2'>\n {icon}\n {title && (\n <Text className={cn('font-semibold', variantConfig.title)}>\n {title}\n </Text>\n )}\n </View>\n )}\n <View className={cn(!title && !icon && variantConfig.text)}>\n {children}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Animated } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ProgressProps {\n /** Progress value (0-100) */\n value?: number;\n /** Maximum value */\n max?: number;\n /** Color variant */\n variant?: 'default' | 'success' | 'warning' | 'danger';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Show label */\n showLabel?: boolean;\n /** Custom label */\n label?: string;\n /** Indeterminate state (loading) */\n indeterminate?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Progress Component\n *\n * Linear progress indicator with support for determinate and indeterminate states.\n *\n * @example\n * ```tsx\n * <Progress value={75} showLabel />\n * ```\n *\n * @example\n * ```tsx\n * <Progress indeterminate />\n * ```\n */\nexport const Progress: React.FC<ProgressProps> = ({\n value = 0,\n max = 100,\n variant = 'default',\n size = 'md',\n showLabel = false,\n label,\n indeterminate = false,\n className,\n}) => {\n // Animation for indeterminate state\n const animatedValue = React.useRef(new Animated.Value(0)).current;\n\n React.useEffect(() => {\n if (indeterminate) {\n Animated.loop(\n Animated.sequence([\n Animated.timing(animatedValue, {\n toValue: 1,\n duration: 1000,\n useNativeDriver: false,\n }),\n Animated.timing(animatedValue, {\n toValue: 0,\n duration: 1000,\n useNativeDriver: false,\n }),\n ])\n ).start();\n }\n }, [indeterminate, animatedValue]);\n\n // Clamp value between 0 and 100\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n\n // Color configurations\n const colorClasses = {\n default: 'bg-blue-600 dark:bg-blue-500',\n success: 'bg-green-600 dark:bg-green-500',\n warning: 'bg-yellow-600 dark:bg-yellow-500',\n danger: 'bg-red-600 dark:bg-red-500',\n };\n\n // Size configurations\n const sizeClasses = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-4',\n };\n\n const interpolatedWidth = animatedValue.interpolate({\n inputRange: [0, 1],\n outputRange: ['0%', '100%'],\n });\n\n return (\n <View className={cn('w-full', className)}>\n <View\n className={cn(\n 'w-full bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden',\n sizeClasses[size]\n )}\n accessibilityRole='progressbar'\n accessibilityValue={{\n now: indeterminate ? undefined : percentage,\n min: 0,\n max: 100,\n }}\n >\n {indeterminate ? (\n <Animated.View\n className={cn('h-full rounded-full', colorClasses[variant])}\n style={{ width: interpolatedWidth, opacity: 0.7 }}\n />\n ) : (\n <View\n className={cn('h-full rounded-full', colorClasses[variant])}\n style={{ width: `${percentage}%` }}\n />\n )}\n </View>\n {(showLabel || label) && (\n <View className='mt-1'>\n <Text className='text-xs text-gray-600 dark:text-gray-400 text-right'>\n {label || `${Math.round(percentage)}%`}\n </Text>\n </View>\n )}\n </View>\n );\n};\n\nexport interface ProgressBarProps {\n /** Progress value (0-100) */\n value: number;\n /** Maximum value (default: 100) */\n max?: number;\n /** Color variant */\n variant?: 'primary' | 'success' | 'warning' | 'danger' | 'purple' | 'gray';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Show percentage label */\n showLabel?: boolean;\n /** Label position */\n labelPosition?: 'inside' | 'outside' | 'none';\n /** Custom label text */\n label?: string;\n /** Additional className */\n className?: string;\n /** Animated transition */\n animated?: boolean;\n}\n\n/**\n * ProgressBar Component\n *\n * A visual progress indicator showing completion percentage.\n *\n * @example\n * ```tsx\n * <ProgressBar value={65} variant=\"primary\" showLabel />\n * ```\n */\nexport const ProgressBar: React.FC<ProgressBarProps> = ({\n value,\n max = 100,\n variant = 'primary',\n size = 'md',\n showLabel = false,\n labelPosition = 'outside',\n label,\n className,\n animated: _animated = true,\n}) => {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n const displayLabel = label || `${Math.round(percentage)}%`;\n\n // Color variant configurations\n const variantClasses = {\n primary: 'bg-blue-600 dark:bg-blue-500',\n success: 'bg-green-600 dark:bg-green-500',\n warning: 'bg-yellow-600 dark:bg-yellow-500',\n danger: 'bg-red-600 dark:bg-red-500',\n purple: 'bg-purple-600 dark:bg-purple-500',\n gray: 'bg-gray-600 dark:bg-gray-500',\n };\n\n // Size configurations\n const sizeClasses = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n };\n\n return (\n <View className={cn('w-full', className)}>\n <View className='flex flex-row items-center gap-3'>\n <View\n className={cn(\n 'flex-1 bg-gray-200 dark:bg-gray-600 rounded-full overflow-hidden',\n sizeClasses[size]\n )}\n >\n <View\n className={cn(\n 'rounded-full',\n sizeClasses[size],\n variantClasses[variant]\n )}\n style={{ width: `${percentage}%` }}\n accessibilityRole='progressbar'\n accessibilityValue={{ now: value, min: 0, max }}\n />\n </View>\n {showLabel && labelPosition === 'outside' && (\n <Text className='text-sm font-medium text-gray-600 dark:text-gray-400'>\n {displayLabel}\n </Text>\n )}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n Text,\n Modal as RNModal,\n Pressable,\n ScrollView,\n KeyboardAvoidingView,\n Platform,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ModalProps {\n /** Whether the modal is visible */\n isOpen: boolean;\n /** Callback when modal should close */\n onClose: () => void;\n /** Modal title */\n title?: string;\n /** Size variant */\n size?: 'small' | 'medium' | 'large' | 'fullWidth';\n /** Show close button */\n showCloseButton?: boolean;\n /** Close when pressing backdrop */\n closeOnOverlayClick?: boolean;\n /** Modal content */\n children: React.ReactNode;\n /** Additional className for the content */\n className?: string;\n}\n\n/**\n * Modal Component\n *\n * Modal dialog for displaying content in an overlay.\n *\n * @example\n * ```tsx\n * <Modal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"Confirm Action\"\n * >\n * <ModalContent>\n * <Text>Are you sure you want to proceed?</Text>\n * </ModalContent>\n * <ModalFooter>\n * <Button onPress={() => setIsOpen(false)}>Cancel</Button>\n * <Button variant=\"primary\" onPress={handleConfirm}>Confirm</Button>\n * </ModalFooter>\n * </Modal>\n * ```\n */\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n size = 'medium',\n showCloseButton = true,\n closeOnOverlayClick = true,\n children,\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n small: 'w-72',\n medium: 'w-80',\n large: 'w-96',\n fullWidth: 'w-full mx-4',\n };\n\n const handleOverlayPress = () => {\n if (closeOnOverlayClick) {\n onClose();\n }\n };\n\n return (\n <RNModal\n visible={isOpen}\n animationType='fade'\n transparent\n onRequestClose={onClose}\n statusBarTranslucent\n >\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n className='flex-1'\n >\n <Pressable\n onPress={handleOverlayPress}\n className='flex-1 justify-center items-center bg-black/50'\n >\n <Pressable\n onPress={e => e.stopPropagation()}\n className={cn(\n 'bg-white dark:bg-gray-800 rounded-xl shadow-xl max-h-[80%]',\n sizeClasses[size],\n className\n )}\n >\n {/* Header */}\n {(title || showCloseButton) && (\n <View className='flex flex-row items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700'>\n {title && (\n <Text className='text-lg font-semibold text-gray-900 dark:text-white flex-1'>\n {title}\n </Text>\n )}\n {showCloseButton && (\n <Pressable\n onPress={onClose}\n className='p-1 -mr-1 rounded-full'\n accessibilityRole='button'\n accessibilityLabel='Close modal'\n >\n <Text className='text-xl text-gray-500 dark:text-gray-400'>\n ✕\n </Text>\n </Pressable>\n )}\n </View>\n )}\n\n {/* Content */}\n <ScrollView bounces={false}>{children}</ScrollView>\n </Pressable>\n </Pressable>\n </KeyboardAvoidingView>\n </RNModal>\n );\n};\n\nexport interface ModalHeaderProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * ModalHeader - Header section of the modal\n */\nexport const ModalHeader: React.FC<ModalHeaderProps> = ({\n children,\n className,\n}) => (\n <View\n className={cn(\n 'px-4 py-3 border-b border-gray-200 dark:border-gray-700',\n className\n )}\n >\n {children}\n </View>\n);\n\nexport interface ModalContentProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * ModalContent - Body section of the modal\n */\nexport const ModalContent: React.FC<ModalContentProps> = ({\n children,\n className,\n}) => <View className={cn('px-4 py-4', className)}>{children}</View>;\n\nexport interface ModalFooterProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * ModalFooter - Footer section of the modal\n */\nexport const ModalFooter: React.FC<ModalFooterProps> = ({\n children,\n className,\n}) => (\n <View\n className={cn(\n 'flex flex-row items-center justify-end gap-2 px-4 py-3 border-t border-gray-200 dark:border-gray-700',\n className\n )}\n >\n {children}\n </View>\n);\n","import React, {\n createContext,\n useContext,\n useState,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\nimport { View, Text, Pressable, Animated, SafeAreaView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ToastMessage {\n id: string;\n title?: string;\n description?: string;\n variant?: 'default' | 'success' | 'error' | 'warning' | 'info';\n duration?: number;\n action?: {\n label: string;\n onPress: () => void;\n };\n}\n\nexport interface ToastProps {\n /** Toast message */\n toast: ToastMessage;\n /** Remove toast handler */\n onRemove: (id: string) => void;\n}\n\nexport interface ToastContextValue {\n toasts: ToastMessage[];\n addToast: (toast: Omit<ToastMessage, 'id'>) => void;\n removeToast: (id: string) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | undefined>(undefined);\n\nexport const useToast = () => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within ToastProvider');\n }\n return context;\n};\n\n/**\n * Toast Component\n *\n * Individual toast notification with variants and actions.\n */\nexport const Toast: React.FC<ToastProps> = ({ toast, onRemove }) => {\n const { id, title, description, variant = 'default', action } = toast;\n const slideAnim = useRef(new Animated.Value(-100)).current;\n\n useEffect(() => {\n Animated.spring(slideAnim, {\n toValue: 0,\n useNativeDriver: true,\n friction: 8,\n }).start();\n }, [slideAnim]);\n\n // Variant styles - background\n const variantBgClasses = {\n default: 'bg-white dark:bg-gray-800 border-gray-200 dark:border-gray-700',\n success:\n 'bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800',\n error: 'bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800',\n warning:\n 'bg-yellow-50 dark:bg-yellow-900/20 border-yellow-200 dark:border-yellow-800',\n info: 'bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800',\n };\n\n // Variant styles - icon color\n const iconColorClasses = {\n default: 'text-gray-600 dark:text-gray-400',\n success: 'text-green-600 dark:text-green-400',\n error: 'text-red-600 dark:text-red-400',\n warning: 'text-yellow-600 dark:text-yellow-400',\n info: 'text-blue-600 dark:text-blue-400',\n };\n\n // Icon symbols\n const icons = {\n default: 'ℹ',\n success: '✓',\n error: '✕',\n warning: '⚠',\n info: 'ℹ',\n };\n\n return (\n <Animated.View\n style={{ transform: [{ translateY: slideAnim }] }}\n className={cn(\n 'flex flex-row items-start gap-3 p-4 rounded-lg border shadow-lg',\n 'w-full max-w-md',\n variantBgClasses[variant]\n )}\n >\n <View className={cn('flex-shrink-0', iconColorClasses[variant])}>\n <Text className='text-lg'>{icons[variant]}</Text>\n </View>\n\n <View className='flex-1 min-w-0'>\n {title && (\n <Text className='font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n )}\n {description && (\n <Text className='text-sm text-gray-600 dark:text-gray-300 mt-1'>\n {description}\n </Text>\n )}\n {action && (\n <Pressable onPress={action.onPress} className='mt-2'>\n <Text className='text-sm font-medium text-blue-600 dark:text-blue-400'>\n {action.label}\n </Text>\n </Pressable>\n )}\n </View>\n\n <Pressable\n onPress={() => onRemove(id)}\n className='flex-shrink-0 p-1'\n accessibilityRole='button'\n accessibilityLabel='Close notification'\n >\n <Text className='text-gray-400 text-lg'>✕</Text>\n </Pressable>\n </Animated.View>\n );\n};\n\n/**\n * Individual toast wrapper with auto-remove timer\n */\nconst ToastItem: React.FC<{\n toast: ToastMessage;\n onRemove: (id: string) => void;\n}> = ({ toast, onRemove }) => {\n useEffect(() => {\n const duration = toast.duration ?? 5000;\n\n if (duration > 0) {\n const timer = setTimeout(() => {\n onRemove(toast.id);\n }, duration);\n\n return () => clearTimeout(timer);\n }\n }, [toast.id, toast.duration, onRemove]);\n\n return <Toast toast={toast} onRemove={onRemove} />;\n};\n\n/**\n * ToastProvider Component\n *\n * Provider for toast notifications system.\n * Wrap your app with this provider to enable toasts.\n *\n * @example\n * ```tsx\n * <ToastProvider>\n * <App />\n * </ToastProvider>\n * ```\n *\n * @example\n * ```tsx\n * // Using the toast hook\n * const { addToast } = useToast();\n *\n * const showSuccess = () => {\n * addToast({\n * title: 'Success!',\n * description: 'Your action was completed.',\n * variant: 'success',\n * });\n * };\n * ```\n */\nexport const ToastProvider: React.FC<{ children: React.ReactNode }> = ({\n children,\n}) => {\n const [toasts, setToasts] = useState<ToastMessage[]>([]);\n\n const removeToast = useCallback((id: string) => {\n setToasts(prev => prev.filter(t => t.id !== id));\n }, []);\n\n const addToast = useCallback((toast: Omit<ToastMessage, 'id'>) => {\n const id = Math.random().toString(36).substr(2, 9);\n setToasts(prev => [...prev, { ...toast, id }]);\n }, []);\n\n return (\n <ToastContext.Provider value={{ toasts, addToast, removeToast }}>\n {children}\n {toasts.length > 0 && (\n <SafeAreaView\n className='absolute top-0 left-0 right-0 z-50 px-4 pt-4'\n pointerEvents='box-none'\n >\n <View className='items-center gap-2'>\n {toasts.map(toast => (\n <ToastItem key={toast.id} toast={toast} onRemove={removeToast} />\n ))}\n </View>\n </SafeAreaView>\n )}\n </ToastContext.Provider>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Modal } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { Spinner } from '../Spinner';\n\nexport interface LoadingOverlayProps {\n /** Whether the overlay is visible */\n isLoading: boolean;\n /** Loading message */\n message?: string;\n /** Overlay mode */\n mode?: 'fullscreen' | 'container';\n /** Spinner size */\n spinnerSize?: 'small' | 'default' | 'large' | 'extraLarge';\n /** Additional className */\n className?: string;\n}\n\n/**\n * LoadingOverlay Component\n *\n * Full-screen or container loading overlay with spinner and optional message.\n * Useful for async operations, page loads, and data fetching.\n *\n * @example\n * ```tsx\n * <LoadingOverlay\n * isLoading={isSubmitting}\n * message=\"Saving changes...\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * <View className=\"relative flex-1\">\n * <LoadingOverlay\n * isLoading={isLoading}\n * mode=\"container\"\n * />\n * <YourContent />\n * </View>\n * ```\n */\nexport const LoadingOverlay: React.FC<LoadingOverlayProps> = ({\n isLoading,\n message,\n mode = 'fullscreen',\n spinnerSize = 'large',\n className,\n}) => {\n if (!isLoading) return null;\n\n const content = (\n <View\n className={cn(\n mode === 'fullscreen' ? 'flex-1' : 'absolute inset-0',\n 'items-center justify-center',\n 'bg-white/80 dark:bg-gray-900/80',\n className\n )}\n accessibilityRole='alert'\n accessibilityLabel={message || 'Loading'}\n >\n <Spinner size={spinnerSize} />\n {message && (\n <Text className='text-base text-gray-700 dark:text-gray-300 mt-4'>\n {message}\n </Text>\n )}\n </View>\n );\n\n // Fullscreen mode uses Modal\n if (mode === 'fullscreen') {\n return (\n <Modal\n visible={isLoading}\n transparent\n animationType='fade'\n statusBarTranslucent\n >\n {content}\n </Modal>\n );\n }\n\n // Container mode renders inline\n return content;\n};\n","import * as React from 'react';\nimport { useRef, useEffect } from 'react';\nimport { View, Animated } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface LoadingDotsProps {\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'primary' | 'secondary' | 'white';\n /** Additional className */\n className?: string;\n}\n\n/**\n * LoadingDots Component\n *\n * Animated loading indicator with bouncing dots.\n * Simple and lightweight alternative to spinners.\n *\n * @example\n * ```tsx\n * <LoadingDots size=\"md\" variant=\"primary\" />\n * ```\n */\nexport const LoadingDots: React.FC<LoadingDotsProps> = ({\n size = 'md',\n variant = 'primary',\n className,\n}) => {\n const dot1Anim = useRef(new Animated.Value(0)).current;\n const dot2Anim = useRef(new Animated.Value(0)).current;\n const dot3Anim = useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n const createAnimation = (animValue: Animated.Value, delay: number) => {\n return Animated.loop(\n Animated.sequence([\n Animated.delay(delay),\n Animated.timing(animValue, {\n toValue: 1,\n duration: 300,\n useNativeDriver: true,\n }),\n Animated.timing(animValue, {\n toValue: 0,\n duration: 300,\n useNativeDriver: true,\n }),\n Animated.delay(600 - delay),\n ])\n );\n };\n\n const anim1 = createAnimation(dot1Anim, 0);\n const anim2 = createAnimation(dot2Anim, 150);\n const anim3 = createAnimation(dot3Anim, 300);\n\n anim1.start();\n anim2.start();\n anim3.start();\n\n return () => {\n anim1.stop();\n anim2.stop();\n anim3.stop();\n };\n }, [dot1Anim, dot2Anim, dot3Anim]);\n\n const sizeClasses = {\n sm: 'w-1.5 h-1.5',\n md: 'w-2 h-2',\n lg: 'w-3 h-3',\n };\n\n const variantClasses = {\n primary: 'bg-blue-600 dark:bg-blue-500',\n secondary: 'bg-gray-600 dark:bg-gray-400',\n white: 'bg-white',\n };\n\n const gapClasses = {\n sm: 'gap-1',\n md: 'gap-1.5',\n lg: 'gap-2',\n };\n\n const dotClass = cn(\n 'rounded-full',\n sizeClasses[size],\n variantClasses[variant]\n );\n\n const getAnimatedStyle = (animValue: Animated.Value) => ({\n opacity: animValue.interpolate({\n inputRange: [0, 1],\n outputRange: [0.3, 1],\n }),\n transform: [\n {\n scale: animValue.interpolate({\n inputRange: [0, 1],\n outputRange: [0.8, 1.2],\n }),\n },\n ],\n });\n\n return (\n <View\n className={cn('flex flex-row items-center', gapClasses[size], className)}\n >\n <Animated.View className={dotClass} style={getAnimatedStyle(dot1Anim)} />\n <Animated.View className={dotClass} style={getAnimatedStyle(dot2Anim)} />\n <Animated.View className={dotClass} style={getAnimatedStyle(dot3Anim)} />\n </View>\n );\n};\n","import * as React from 'react';\nimport { Pressable, View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface BackdropProps {\n /** Whether the backdrop is visible */\n isOpen: boolean;\n /** Press handler for backdrop */\n onPress?: () => void;\n /** Backdrop opacity variant */\n opacity?: 'light' | 'medium' | 'dark';\n /** Children to render on top of backdrop */\n children?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Backdrop Component\n *\n * Reusable backdrop/overlay for modals, drawers, and dialogs.\n * Provides consistent darkening effect.\n *\n * @example\n * ```tsx\n * <Backdrop isOpen={isModalOpen} onPress={closeModal}>\n * <View onStartShouldSetResponder={() => true}>\n * <ModalContent />\n * </View>\n * </Backdrop>\n * ```\n *\n * @example\n * ```tsx\n * <Backdrop\n * isOpen={isDrawerOpen}\n * onPress={closeDrawer}\n * opacity=\"medium\"\n * >\n * <Drawer />\n * </Backdrop>\n * ```\n */\nexport const Backdrop: React.FC<BackdropProps> = ({\n isOpen,\n onPress,\n opacity = 'medium',\n children,\n className,\n}) => {\n if (!isOpen) return null;\n\n // Opacity configurations\n const opacityClasses = {\n light: 'bg-black/20',\n medium: 'bg-black/50',\n dark: 'bg-black/75',\n };\n\n if (children) {\n return (\n <Pressable\n onPress={onPress}\n className={cn('absolute inset-0', opacityClasses[opacity], className)}\n accessibilityRole='none'\n >\n <View\n className='flex-1'\n onStartShouldSetResponder={() => true}\n onResponderRelease={e => e.stopPropagation()}\n >\n {children}\n </View>\n </Pressable>\n );\n }\n\n return (\n <Pressable\n onPress={onPress}\n className={cn('absolute inset-0', opacityClasses[opacity], className)}\n accessibilityRole='none'\n />\n );\n};\n","import * as React from 'react';\nimport { useRef, useEffect } from 'react';\nimport {\n View,\n Text,\n Modal,\n Pressable,\n ScrollView,\n Animated,\n Dimensions,\n PanResponder,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nconst { height: SCREEN_HEIGHT, width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface SheetProps {\n /** Whether sheet is open */\n isOpen: boolean;\n /** Close handler */\n onClose: () => void;\n /** Sheet content */\n children: React.ReactNode;\n /** Sheet title */\n title?: string;\n /** Sheet description */\n description?: string;\n /** Sheet footer */\n footer?: React.ReactNode;\n /** Sheet side */\n side?: 'bottom' | 'top' | 'left' | 'right';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg' | 'full';\n /** Show drag handle */\n showHandle?: boolean;\n /** Show close button */\n showCloseButton?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Sheet Component\n *\n * Mobile-first bottom sheet that slides up from screen edge.\n * Also supports top, left, and right positions.\n * Includes gesture support for drag to dismiss (bottom sheets).\n *\n * @example\n * ```tsx\n * <Sheet\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"Filter Options\"\n * showHandle\n * >\n * <View>Filter content...</View>\n * </Sheet>\n * ```\n */\nexport const Sheet: React.FC<SheetProps> = ({\n isOpen,\n onClose,\n children,\n title,\n description,\n footer,\n side = 'bottom',\n size = 'md',\n showHandle = true,\n showCloseButton = true,\n className,\n}) => {\n const slideAnim = useRef(new Animated.Value(0)).current;\n const panY = useRef(new Animated.Value(0)).current;\n\n // Size configurations (percentage of screen)\n const sizeValues = {\n bottom: {\n sm: SCREEN_HEIGHT * 0.33,\n md: SCREEN_HEIGHT * 0.5,\n lg: SCREEN_HEIGHT * 0.66,\n full: SCREEN_HEIGHT,\n },\n top: {\n sm: SCREEN_HEIGHT * 0.33,\n md: SCREEN_HEIGHT * 0.5,\n lg: SCREEN_HEIGHT * 0.66,\n full: SCREEN_HEIGHT,\n },\n left: {\n sm: SCREEN_WIDTH * 0.6,\n md: SCREEN_WIDTH * 0.75,\n lg: SCREEN_WIDTH * 0.9,\n full: SCREEN_WIDTH,\n },\n right: {\n sm: SCREEN_WIDTH * 0.6,\n md: SCREEN_WIDTH * 0.75,\n lg: SCREEN_WIDTH * 0.9,\n full: SCREEN_WIDTH,\n },\n };\n\n const sheetSize = sizeValues[side][size];\n const isVertical = side === 'bottom' || side === 'top';\n\n useEffect(() => {\n if (isOpen) {\n panY.setValue(0);\n Animated.spring(slideAnim, {\n toValue: 1,\n useNativeDriver: true,\n friction: 8,\n }).start();\n } else {\n Animated.timing(slideAnim, {\n toValue: 0,\n duration: 200,\n useNativeDriver: true,\n }).start();\n }\n }, [isOpen, slideAnim, panY]);\n\n // Pan responder for drag-to-dismiss (bottom sheets)\n const panResponder = useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => side === 'bottom',\n onMoveShouldSetPanResponder: (_, gestureState) =>\n side === 'bottom' && gestureState.dy > 10,\n onPanResponderMove: (_, gestureState) => {\n if (gestureState.dy > 0) {\n panY.setValue(gestureState.dy);\n }\n },\n onPanResponderRelease: (_, gestureState) => {\n if (gestureState.dy > 100 || gestureState.vy > 0.5) {\n onClose();\n } else {\n Animated.spring(panY, {\n toValue: 0,\n useNativeDriver: true,\n }).start();\n }\n },\n })\n ).current;\n\n // Calculate transform based on side\n const getTransform = () => {\n const baseTransform = slideAnim.interpolate({\n inputRange: [0, 1],\n outputRange: [sheetSize, 0],\n });\n\n switch (side) {\n case 'bottom':\n return {\n transform: [\n {\n translateY: Animated.add(\n slideAnim.interpolate({\n inputRange: [0, 1],\n outputRange: [sheetSize, 0],\n }),\n panY\n ),\n },\n ],\n };\n case 'top':\n return {\n transform: [\n {\n translateY: slideAnim.interpolate({\n inputRange: [0, 1],\n outputRange: [-sheetSize, 0],\n }),\n },\n ],\n };\n case 'left':\n return {\n transform: [\n {\n translateX: slideAnim.interpolate({\n inputRange: [0, 1],\n outputRange: [-sheetSize, 0],\n }),\n },\n ],\n };\n case 'right':\n return {\n transform: [\n {\n translateX: baseTransform,\n },\n ],\n };\n default:\n return {};\n }\n };\n\n // Position styles\n const positionStyles = {\n bottom: { bottom: 0, left: 0, right: 0 },\n top: { top: 0, left: 0, right: 0 },\n left: { left: 0, top: 0, bottom: 0 },\n right: { right: 0, top: 0, bottom: 0 },\n };\n\n // Border radius styles\n const radiusClasses = {\n bottom: 'rounded-t-2xl',\n top: 'rounded-b-2xl',\n left: 'rounded-r-2xl',\n right: 'rounded-l-2xl',\n };\n\n return (\n <Modal\n visible={isOpen}\n animationType='none'\n transparent\n onRequestClose={onClose}\n statusBarTranslucent\n >\n {/* Backdrop */}\n <Pressable onPress={onClose} className='absolute inset-0 bg-black/50' />\n\n {/* Sheet */}\n <Animated.View\n style={[\n {\n position: 'absolute',\n ...positionStyles[side],\n ...(isVertical ? { height: sheetSize } : { width: sheetSize }),\n },\n getTransform(),\n ]}\n {...(side === 'bottom' ? panResponder.panHandlers : {})}\n >\n <View\n className={cn(\n 'flex-1 bg-white dark:bg-gray-900 shadow-xl',\n radiusClasses[side],\n className\n )}\n >\n {/* Drag Handle */}\n {showHandle && (side === 'bottom' || side === 'top') && (\n <View\n className={cn(\n 'items-center justify-center',\n side === 'bottom' ? 'pt-3 pb-2' : 'pb-3 pt-2'\n )}\n >\n <View className='w-12 h-1.5 bg-gray-300 dark:bg-gray-700 rounded-full' />\n </View>\n )}\n\n {/* Header */}\n {(title || description || showCloseButton) && (\n <View className='px-4 py-4 border-b border-gray-200 dark:border-gray-700'>\n <View className='flex flex-row items-start justify-between'>\n <View className='flex-1'>\n {title && (\n <Text className='text-lg font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n )}\n {description && (\n <Text className='mt-1 text-sm text-gray-600 dark:text-gray-400'>\n {description}\n </Text>\n )}\n </View>\n {showCloseButton && (\n <Pressable\n onPress={onClose}\n className='ml-4 p-1'\n accessibilityRole='button'\n accessibilityLabel='Close sheet'\n >\n <Text className='text-xl text-gray-400'>✕</Text>\n </Pressable>\n )}\n </View>\n </View>\n )}\n\n {/* Content */}\n <ScrollView className='flex-1 px-4 py-4' bounces={false}>\n {children}\n </ScrollView>\n\n {/* Footer */}\n {footer && (\n <View className='px-4 py-4 border-t border-gray-200 dark:border-gray-700'>\n {footer}\n </View>\n )}\n </View>\n </Animated.View>\n </Modal>\n );\n};\n","import * as React from 'react';\nimport { useState, useRef, useEffect } from 'react';\nimport { View, Text, Pressable, Modal, Animated } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TooltipProps {\n /** Content to display in the tooltip */\n content: string;\n /** Children that trigger the tooltip */\n children: React.ReactNode;\n /** Tooltip placement */\n placement?: 'top' | 'bottom' | 'left' | 'right';\n /** Delay before showing tooltip (ms) */\n delayShow?: number;\n /** Additional className for tooltip */\n className?: string;\n /** Disable the tooltip */\n disabled?: boolean;\n /** Variant style */\n variant?: 'default' | 'info' | 'success' | 'warning' | 'error';\n}\n\n/**\n * Tooltip Component\n *\n * Simple tooltip that appears on long press in React Native.\n * Shows informational content in a floating view.\n *\n * @example\n * ```tsx\n * <Tooltip content=\"Click to copy\">\n * <Button>Copy</Button>\n * </Tooltip>\n * ```\n *\n * @example\n * ```tsx\n * <Tooltip content=\"User profile\" placement=\"bottom\" variant=\"info\">\n * <Avatar />\n * </Tooltip>\n * ```\n */\nexport const Tooltip: React.FC<TooltipProps> = ({\n content,\n children,\n placement = 'top',\n delayShow = 0,\n className,\n disabled = false,\n variant = 'default',\n}) => {\n const [isVisible, setIsVisible] = useState(false);\n const [position, setPosition] = useState({ x: 0, y: 0, width: 0, height: 0 });\n const triggerRef = useRef<View>(null);\n const fadeAnim = useRef(new Animated.Value(0)).current;\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>();\n\n useEffect(() => {\n if (isVisible) {\n Animated.timing(fadeAnim, {\n toValue: 1,\n duration: 150,\n useNativeDriver: true,\n }).start();\n } else {\n fadeAnim.setValue(0);\n }\n }, [isVisible, fadeAnim]);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n const showTooltip = () => {\n if (disabled) return;\n\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n setPosition({ x, y, width, height });\n\n if (delayShow > 0) {\n timeoutRef.current = setTimeout(() => {\n setIsVisible(true);\n }, delayShow);\n } else {\n setIsVisible(true);\n }\n });\n };\n\n const hideTooltip = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setIsVisible(false);\n };\n\n // Variant styles\n const variantClasses = {\n default: 'bg-gray-900 dark:bg-gray-700',\n info: 'bg-blue-600 dark:bg-blue-500',\n success: 'bg-green-600 dark:bg-green-500',\n warning: 'bg-yellow-600 dark:bg-yellow-500',\n error: 'bg-red-600 dark:bg-red-500',\n };\n\n // Calculate tooltip position\n const getTooltipPosition = () => {\n const TOOLTIP_OFFSET = 8;\n const TOOLTIP_HEIGHT = 32; // Approximate\n const TOOLTIP_WIDTH = content.length * 8; // Rough estimate\n\n switch (placement) {\n case 'top':\n return {\n top: position.y - TOOLTIP_HEIGHT - TOOLTIP_OFFSET,\n left: position.x + position.width / 2 - TOOLTIP_WIDTH / 2,\n };\n case 'bottom':\n return {\n top: position.y + position.height + TOOLTIP_OFFSET,\n left: position.x + position.width / 2 - TOOLTIP_WIDTH / 2,\n };\n case 'left':\n return {\n top: position.y + position.height / 2 - TOOLTIP_HEIGHT / 2,\n left: position.x - TOOLTIP_WIDTH - TOOLTIP_OFFSET,\n };\n case 'right':\n return {\n top: position.y + position.height / 2 - TOOLTIP_HEIGHT / 2,\n left: position.x + position.width + TOOLTIP_OFFSET,\n };\n default:\n return { top: 0, left: 0 };\n }\n };\n\n return (\n <>\n <Pressable\n ref={triggerRef}\n onLongPress={showTooltip}\n onPressOut={hideTooltip}\n delayLongPress={300}\n >\n {children}\n </Pressable>\n\n <Modal\n visible={isVisible}\n transparent\n animationType='none'\n onRequestClose={hideTooltip}\n >\n <Pressable className='flex-1' onPress={hideTooltip}>\n <Animated.View\n style={[\n {\n position: 'absolute',\n ...getTooltipPosition(),\n opacity: fadeAnim,\n },\n ]}\n >\n <View\n className={cn(\n 'px-3 py-2 rounded-lg shadow-lg',\n variantClasses[variant],\n className\n )}\n >\n <Text className='text-xs font-medium text-white'>{content}</Text>\n </View>\n </Animated.View>\n </Pressable>\n </Modal>\n </>\n );\n};\n","import * as React from 'react';\nimport { useRef, useEffect } from 'react';\nimport {\n View,\n Text,\n Modal,\n Pressable,\n ScrollView,\n Animated,\n Dimensions,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nconst { width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface DialogProps {\n /** Whether dialog is open */\n isOpen: boolean;\n /** Close handler */\n onClose?: () => void;\n /** Dialog content */\n children: React.ReactNode;\n /** Dialog size */\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n /** Show close button */\n showCloseButton?: boolean;\n /** Close on outside click */\n closeOnOutsideClick?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Dialog Component\n *\n * Simple, flexible dialog/modal container for React Native.\n * More flexible than AlertDialog, suitable for any content.\n *\n * @example\n * ```tsx\n * <Dialog isOpen={isOpen} onClose={() => setIsOpen(false)}>\n * <View className=\"p-6\">\n * <Text>Dialog Title</Text>\n * <Text>Dialog content...</Text>\n * </View>\n * </Dialog>\n * ```\n */\nexport const Dialog: React.FC<DialogProps> = ({\n isOpen,\n onClose,\n children,\n size = 'md',\n showCloseButton = true,\n closeOnOutsideClick = true,\n className,\n}) => {\n const scaleAnim = useRef(new Animated.Value(0.9)).current;\n const opacityAnim = useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n if (isOpen) {\n Animated.parallel([\n Animated.spring(scaleAnim, {\n toValue: 1,\n useNativeDriver: true,\n friction: 8,\n }),\n Animated.timing(opacityAnim, {\n toValue: 1,\n duration: 150,\n useNativeDriver: true,\n }),\n ]).start();\n } else {\n scaleAnim.setValue(0.9);\n opacityAnim.setValue(0);\n }\n }, [isOpen, scaleAnim, opacityAnim]);\n\n // Size configurations (percentage of screen width)\n const sizeWidths = {\n sm: SCREEN_WIDTH * 0.7,\n md: SCREEN_WIDTH * 0.8,\n lg: SCREEN_WIDTH * 0.9,\n xl: SCREEN_WIDTH * 0.95,\n full: SCREEN_WIDTH - 32,\n };\n\n const handleOverlayPress = () => {\n if (closeOnOutsideClick && onClose) {\n onClose();\n }\n };\n\n return (\n <Modal\n visible={isOpen}\n animationType='none'\n transparent\n onRequestClose={onClose}\n statusBarTranslucent\n >\n {/* Backdrop */}\n <Pressable\n onPress={handleOverlayPress}\n className='flex-1 justify-center items-center bg-black/60'\n >\n {/* Dialog Container */}\n <Animated.View\n style={{\n opacity: opacityAnim,\n transform: [{ scale: scaleAnim }],\n width: sizeWidths[size],\n maxHeight: '80%',\n }}\n >\n <Pressable onPress={e => e.stopPropagation()}>\n <View\n className={cn(\n 'bg-white dark:bg-gray-900 rounded-xl shadow-xl overflow-hidden',\n className\n )}\n >\n {/* Close button */}\n {showCloseButton && onClose && (\n <Pressable\n onPress={onClose}\n className='absolute top-4 right-4 z-10 p-1'\n accessibilityRole='button'\n accessibilityLabel='Close dialog'\n >\n <Text className='text-xl text-gray-400'>✕</Text>\n </Pressable>\n )}\n\n {/* Content */}\n <ScrollView bounces={false}>{children}</ScrollView>\n </View>\n </Pressable>\n </Animated.View>\n </Pressable>\n </Modal>\n );\n};\n","import * as React from 'react';\nimport { useState, useRef, useEffect, useCallback } from 'react';\nimport { View, Modal, Pressable, Animated } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PopoverProps {\n /** Trigger element */\n trigger: React.ReactNode;\n /** Popover content */\n children: React.ReactNode;\n /** Placement relative to trigger */\n placement?: 'top' | 'bottom' | 'left' | 'right';\n /** Open state (controlled) */\n isOpen?: boolean;\n /** Open state change handler (controlled) */\n onOpenChange?: (open: boolean) => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Popover Component\n *\n * Floating content container anchored to a trigger element.\n * Useful for contextual information, menus, and form helpers.\n *\n * @example\n * ```tsx\n * <Popover trigger={<Button>Open</Button>}>\n * <View className=\"p-4\">\n * <Text>Popover content</Text>\n * </View>\n * </Popover>\n * ```\n */\nexport const Popover: React.FC<PopoverProps> = ({\n trigger,\n children,\n placement = 'bottom',\n isOpen: controlledIsOpen,\n onOpenChange,\n className,\n}) => {\n const [internalIsOpen, setInternalIsOpen] = useState(false);\n const [position, setPosition] = useState({ x: 0, y: 0, width: 0, height: 0 });\n const triggerRef = useRef<View>(null);\n const fadeAnim = useRef(new Animated.Value(0)).current;\n\n const isOpen =\n controlledIsOpen !== undefined ? controlledIsOpen : internalIsOpen;\n\n const setIsOpen = useCallback(\n (open: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(open);\n }\n onOpenChange?.(open);\n },\n [controlledIsOpen, onOpenChange]\n );\n\n useEffect(() => {\n if (isOpen) {\n Animated.timing(fadeAnim, {\n toValue: 1,\n duration: 150,\n useNativeDriver: true,\n }).start();\n } else {\n fadeAnim.setValue(0);\n }\n }, [isOpen, fadeAnim]);\n\n const handleTriggerPress = () => {\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n setPosition({ x, y, width, height });\n setIsOpen(!isOpen);\n });\n };\n\n // Calculate popover position\n const getPopoverPosition = () => {\n const OFFSET = 8;\n\n switch (placement) {\n case 'top':\n return {\n bottom: position.y > 0 ? undefined : 0,\n top: position.y - OFFSET,\n left: position.x,\n width: position.width,\n transform: [{ translateY: -100 }] as const,\n };\n case 'bottom':\n return {\n top: position.y + position.height + OFFSET,\n left: position.x,\n width: position.width,\n };\n case 'left':\n return {\n top: position.y,\n right: position.x > 0 ? undefined : 0,\n transform: [{ translateX: -8 }] as const,\n };\n case 'right':\n return {\n top: position.y,\n left: position.x + position.width + OFFSET,\n };\n default:\n return {};\n }\n };\n\n return (\n <>\n <Pressable ref={triggerRef} onPress={handleTriggerPress}>\n {trigger}\n </Pressable>\n\n <Modal\n visible={isOpen}\n transparent\n animationType='none'\n onRequestClose={() => setIsOpen(false)}\n >\n <Pressable className='flex-1' onPress={() => setIsOpen(false)}>\n <Animated.View\n style={[\n {\n position: 'absolute',\n ...getPopoverPosition(),\n opacity: fadeAnim,\n },\n ]}\n >\n <Pressable onPress={e => e.stopPropagation()}>\n <View\n className={cn(\n 'bg-white dark:bg-gray-800',\n 'border border-gray-200 dark:border-gray-700',\n 'rounded-lg shadow-lg',\n className\n )}\n >\n {children}\n </View>\n </Pressable>\n </Animated.View>\n </Pressable>\n </Modal>\n </>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback, createContext, useContext } from 'react';\nimport { View, Text, Pressable, ScrollView, ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\n// Context for tabs state\ninterface TabsContextValue {\n value: string;\n onValueChange: (value: string) => void;\n}\n\nconst TabsContext = createContext<TabsContextValue | undefined>(undefined);\n\nconst useTabsContext = () => {\n const context = useContext(TabsContext);\n if (!context) {\n throw new Error('Tabs components must be used within a Tabs provider');\n }\n return context;\n};\n\nexport interface TabsProps extends ViewProps {\n /** Currently selected tab value */\n value?: string;\n /** Default selected tab (uncontrolled) */\n defaultValue?: string;\n /** Callback when tab changes */\n onValueChange?: (value: string) => void;\n /** Children (TabsList and TabsContent) */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Tabs Component\n *\n * Tab navigation component for switching between content panels.\n *\n * @example\n * ```tsx\n * <Tabs defaultValue=\"tab1\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">\n * <Text>Content for Tab 1</Text>\n * </TabsContent>\n * <TabsContent value=\"tab2\">\n * <Text>Content for Tab 2</Text>\n * </TabsContent>\n * </Tabs>\n * ```\n */\nexport const Tabs: React.FC<TabsProps> = ({\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n children,\n className,\n ...viewProps\n}) => {\n const [internalValue, setInternalValue] = useState(defaultValue);\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n\n const handleValueChange = useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, onValueChange]\n );\n\n return (\n <TabsContext.Provider value={{ value, onValueChange: handleValueChange }}>\n <View className={cn('w-full', className)} {...viewProps}>\n {children}\n </View>\n </TabsContext.Provider>\n );\n};\n\nexport interface TabsListProps extends ViewProps {\n /** Tab triggers */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TabsList - Container for tab triggers\n */\nexport const TabsList: React.FC<TabsListProps> = ({\n children,\n className,\n ...viewProps\n}) => (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n className={cn(\n 'flex-row bg-gray-100 dark:bg-gray-800 rounded-lg p-1',\n className\n )}\n contentContainerStyle={{ flexGrow: 1 }}\n {...viewProps}\n >\n {children}\n </ScrollView>\n);\n\nexport interface TabsTriggerProps {\n /** Tab value */\n value: string;\n /** Tab label */\n children: React.ReactNode;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TabsTrigger - Individual tab button\n */\nexport const TabsTrigger: React.FC<TabsTriggerProps> = ({\n value,\n children,\n disabled = false,\n className,\n}) => {\n const { value: selectedValue, onValueChange } = useTabsContext();\n const isSelected = selectedValue === value;\n\n return (\n <Pressable\n onPress={() => !disabled && onValueChange(value)}\n disabled={disabled}\n className={cn(\n 'flex-1 px-4 py-2 rounded-md items-center justify-center',\n isSelected ? 'bg-white dark:bg-gray-700 shadow-sm' : 'bg-transparent',\n disabled && 'opacity-50',\n className\n )}\n accessibilityRole='tab'\n accessibilityState={{ selected: isSelected, disabled }}\n >\n <Text\n className={cn(\n 'text-sm font-medium text-center',\n isSelected\n ? 'text-gray-900 dark:text-white'\n : 'text-gray-600 dark:text-gray-400'\n )}\n >\n {children}\n </Text>\n </Pressable>\n );\n};\n\nexport interface TabsContentProps extends ViewProps {\n /** Tab value this content belongs to */\n value: string;\n /** Content to display */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TabsContent - Content panel for a tab\n */\nexport const TabsContent: React.FC<TabsContentProps> = ({\n value,\n children,\n className,\n ...viewProps\n}) => {\n const { value: selectedValue } = useTabsContext();\n\n if (selectedValue !== value) {\n return null;\n }\n\n return (\n <View className={cn('mt-2', className)} {...viewProps}>\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport { Text, Pressable, Linking } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface LinkProps {\n /** Link URL */\n href: string;\n /** Link content */\n children: React.ReactNode;\n /** Variant style */\n variant?: 'default' | 'primary' | 'secondary' | 'muted' | 'underline';\n /** Show external icon indicator */\n showExternalIcon?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n /** Press handler (if provided, href is not automatically opened) */\n onPress?: () => void;\n}\n\n/**\n * Link Component\n *\n * Versatile link component for React Native with external link handling.\n * Opens URLs using Linking API.\n *\n * @example\n * ```tsx\n * <Link href=\"https://example.com\">External Site</Link>\n * ```\n *\n * @example\n * ```tsx\n * <Link\n * href=\"https://docs.example.com\"\n * variant=\"primary\"\n * showExternalIcon\n * >\n * Documentation\n * </Link>\n * ```\n */\nexport const Link: React.FC<LinkProps> = ({\n href,\n children,\n variant = 'default',\n showExternalIcon = false,\n disabled = false,\n className,\n onPress,\n}) => {\n // Auto-detect external links\n const isExternal = href.startsWith('http://') || href.startsWith('https://');\n\n // Variant configurations\n const variantClasses = {\n default: 'text-blue-600 dark:text-blue-400',\n primary: 'text-blue-600 dark:text-blue-400 font-medium',\n secondary: 'text-gray-600 dark:text-gray-400',\n muted: 'text-gray-500 dark:text-gray-500',\n underline: 'text-blue-600 dark:text-blue-400 underline',\n };\n\n const handlePress = async () => {\n if (disabled) return;\n\n if (onPress) {\n onPress();\n return;\n }\n\n try {\n const supported = await Linking.canOpenURL(href);\n if (supported) {\n await Linking.openURL(href);\n }\n } catch (error) {\n console.error('Failed to open URL:', error);\n }\n };\n\n if (disabled) {\n return (\n <Text className={cn('opacity-50', variantClasses[variant], className)}>\n {children}\n {showExternalIcon && isExternal && <Text className='text-xs'> ↗</Text>}\n </Text>\n );\n }\n\n return (\n <Pressable\n onPress={handlePress}\n accessibilityRole='link'\n accessibilityLabel={typeof children === 'string' ? children : href}\n >\n <Text className={cn(variantClasses[variant], className)}>\n {children}\n {showExternalIcon && isExternal && <Text className='text-xs'> ↗</Text>}\n </Text>\n </Pressable>\n );\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Text, Pressable, ScrollView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface BreadcrumbItem {\n /** Item label */\n label: string;\n /** Press handler (for navigation) */\n onPress?: () => void;\n /** Icon to display before label */\n icon?: React.ReactNode;\n /** Whether item is current page */\n isCurrent?: boolean;\n}\n\nexport interface BreadcrumbProps {\n /** Breadcrumb items */\n items: BreadcrumbItem[];\n /** Separator between items */\n separator?: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Maximum items to display before collapsing */\n maxItems?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Breadcrumb Component\n *\n * Navigation breadcrumb trail showing current page hierarchy.\n * Supports press handlers, custom separators, and collapsing.\n *\n * @example\n * ```tsx\n * <Breadcrumb\n * items={[\n * { label: 'Home', onPress: () => navigate('/') },\n * { label: 'Products', onPress: () => navigate('/products') },\n * { label: 'Item', isCurrent: true }\n * ]}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <Breadcrumb\n * items={breadcrumbs}\n * separator={<ChevronRightIcon />}\n * maxItems={4}\n * />\n * ```\n */\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n items,\n separator = '/',\n size = 'md',\n maxItems,\n className,\n}) => {\n const [isExpanded, setIsExpanded] = useState(false);\n\n // Size configurations\n const sizeClasses = {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n };\n\n // Determine which items to display\n const getDisplayItems = (): (BreadcrumbItem | { type: 'ellipsis' })[] => {\n if (!maxItems || items.length <= maxItems || isExpanded) {\n return items;\n }\n\n // Show first item, ellipsis, and last (maxItems - 2) items\n const firstItems = items.slice(0, 1);\n const lastItems = items.slice(-(maxItems - 2));\n return [...firstItems, { type: 'ellipsis' as const }, ...lastItems];\n };\n\n const displayItems = getDisplayItems();\n\n const renderBreadcrumbItem = (\n item: BreadcrumbItem,\n _index: number,\n isLast: boolean\n ) => {\n const isCurrent = item.isCurrent || isLast;\n\n // Last item should NEVER be pressable\n if (isLast) {\n return (\n <View className='flex-row items-center gap-1.5'>\n {item.icon && <View className='flex-shrink-0'>{item.icon}</View>}\n <Text\n className={cn(\n sizeClasses[size],\n 'text-gray-900 dark:text-white font-medium'\n )}\n accessibilityRole='text'\n >\n {item.label}\n </Text>\n </View>\n );\n }\n\n // Render pressable item\n if (item.onPress) {\n return (\n <Pressable\n onPress={item.onPress}\n className='flex-row items-center gap-1.5 active:opacity-70'\n accessibilityRole='link'\n >\n {item.icon && <View className='flex-shrink-0'>{item.icon}</View>}\n <Text\n className={cn(\n sizeClasses[size],\n 'text-gray-600 dark:text-gray-400'\n )}\n >\n {item.label}\n </Text>\n </Pressable>\n );\n }\n\n return (\n <View className='flex-row items-center gap-1.5'>\n {item.icon && <View className='flex-shrink-0'>{item.icon}</View>}\n <Text\n className={cn(\n sizeClasses[size],\n isCurrent\n ? 'text-gray-900 dark:text-white font-medium'\n : 'text-gray-600 dark:text-gray-400'\n )}\n >\n {item.label}\n </Text>\n </View>\n );\n };\n\n const renderSeparator = () => {\n if (typeof separator === 'string') {\n return (\n <Text className='text-gray-400 dark:text-gray-600 mx-2'>\n {separator}\n </Text>\n );\n }\n return <View className='mx-2'>{separator}</View>;\n };\n\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n className={cn('flex-row', className)}\n contentContainerStyle={{ alignItems: 'center' }}\n accessibilityRole='none'\n accessibilityLabel='Breadcrumb'\n >\n {displayItems.map((item, index) => {\n // Handle ellipsis\n if ('type' in item && item.type === 'ellipsis') {\n return (\n <View key='ellipsis' className='flex-row items-center'>\n <Pressable\n onPress={() => setIsExpanded(true)}\n className='px-1 active:opacity-70'\n accessibilityRole='button'\n accessibilityLabel='Show all breadcrumb items'\n >\n <Text className='text-gray-600 dark:text-gray-400'>...</Text>\n </Pressable>\n {renderSeparator()}\n </View>\n );\n }\n\n const isLast = index === displayItems.length - 1;\n const breadcrumbItem = item as BreadcrumbItem;\n\n return (\n <View key={index} className='flex-row items-center'>\n {renderBreadcrumbItem(breadcrumbItem, index, isLast)}\n {!isLast && renderSeparator()}\n </View>\n );\n })}\n </ScrollView>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PaginationProps {\n /** Current page number (1-indexed) */\n currentPage: number;\n /** Total number of pages */\n totalPages: number;\n /** Page change handler */\n onPageChange: (page: number) => void;\n /** Number of page buttons to show on each side */\n siblingCount?: number;\n /** Show first/last buttons */\n showFirstLast?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Previous icon */\n prevIcon?: React.ReactNode;\n /** Next icon */\n nextIcon?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Pagination Component\n *\n * Flexible pagination controls with page numbers and navigation buttons.\n * Automatically handles ellipsis for large page counts.\n *\n * @example\n * ```tsx\n * <Pagination\n * currentPage={3}\n * totalPages={10}\n * onPageChange={setPage}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <Pagination\n * currentPage={currentPage}\n * totalPages={totalPages}\n * onPageChange={handlePageChange}\n * siblingCount={2}\n * showFirstLast\n * size=\"lg\"\n * />\n * ```\n */\nexport const Pagination: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n showFirstLast = false,\n size = 'md',\n prevIcon,\n nextIcon,\n className,\n}) => {\n // Size configurations\n const sizeConfig = {\n sm: {\n button: 'h-8 w-8',\n text: 'text-xs',\n icon: 'text-xs',\n },\n md: {\n button: 'h-10 w-10',\n text: 'text-sm',\n icon: 'text-sm',\n },\n lg: {\n button: 'h-12 w-12',\n text: 'text-base',\n icon: 'text-base',\n },\n };\n\n const config = sizeConfig[size];\n\n // Generate page numbers to display\n const generatePageNumbers = (): (number | 'ellipsis')[] => {\n const pages: (number | 'ellipsis')[] = [];\n\n // Always show first page\n pages.push(1);\n\n // Calculate range around current page\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 2);\n const rightSiblingIndex = Math.min(\n currentPage + siblingCount,\n totalPages - 1\n );\n\n // Add left ellipsis if needed\n if (leftSiblingIndex > 2) {\n pages.push('ellipsis');\n }\n\n // Add pages around current page\n for (let i = leftSiblingIndex; i <= rightSiblingIndex; i++) {\n pages.push(i);\n }\n\n // Add right ellipsis if needed\n if (rightSiblingIndex < totalPages - 1) {\n pages.push('ellipsis');\n }\n\n // Always show last page (if more than 1 page)\n if (totalPages > 1) {\n pages.push(totalPages);\n }\n\n return pages;\n };\n\n const pages = generatePageNumbers();\n\n const handlePrevious = () => {\n if (currentPage > 1) {\n onPageChange(currentPage - 1);\n }\n };\n\n const handleNext = () => {\n if (currentPage < totalPages) {\n onPageChange(currentPage + 1);\n }\n };\n\n const handleFirst = () => {\n onPageChange(1);\n };\n\n const handleLast = () => {\n onPageChange(totalPages);\n };\n\n const buttonBaseClasses = cn(\n 'items-center justify-center rounded-md border border-gray-300 dark:border-gray-600'\n );\n\n const pageButtonClasses = (isActive: boolean) =>\n cn(\n buttonBaseClasses,\n config.button,\n isActive\n ? 'bg-blue-600 dark:bg-blue-500 border-blue-600 dark:border-blue-500'\n : 'bg-white dark:bg-gray-800'\n );\n\n const navButtonClasses = (disabled: boolean) =>\n cn(\n buttonBaseClasses,\n config.button,\n 'bg-white dark:bg-gray-800',\n disabled && 'opacity-50'\n );\n\n return (\n <View\n className={cn('flex-row items-center gap-1', className)}\n accessibilityRole='none'\n accessibilityLabel='Pagination'\n >\n {/* First button */}\n {showFirstLast && (\n <Pressable\n onPress={handleFirst}\n disabled={currentPage === 1}\n className={navButtonClasses(currentPage === 1)}\n accessibilityRole='button'\n accessibilityLabel='Go to first page'\n accessibilityState={{ disabled: currentPage === 1 }}\n >\n <Text className={cn(config.text, 'text-gray-700 dark:text-gray-300')}>\n First\n </Text>\n </Pressable>\n )}\n\n {/* Previous button */}\n <Pressable\n onPress={handlePrevious}\n disabled={currentPage === 1}\n className={navButtonClasses(currentPage === 1)}\n accessibilityRole='button'\n accessibilityLabel='Go to previous page'\n accessibilityState={{ disabled: currentPage === 1 }}\n >\n {prevIcon || (\n <Text className={cn(config.icon, 'text-gray-700 dark:text-gray-300')}>\n ‹\n </Text>\n )}\n </Pressable>\n\n {/* Page numbers */}\n {pages.map((page, index) => {\n if (page === 'ellipsis') {\n return (\n <View\n key={`ellipsis-${index}`}\n className={cn('items-center justify-center', config.button)}\n >\n <Text className='text-gray-400 dark:text-gray-500'>...</Text>\n </View>\n );\n }\n\n const isActive = page === currentPage;\n return (\n <Pressable\n key={page}\n onPress={() => onPageChange(page)}\n className={pageButtonClasses(isActive)}\n accessibilityRole='button'\n accessibilityLabel={`Go to page ${page}`}\n accessibilityState={{ selected: isActive }}\n >\n <Text\n className={cn(\n config.text,\n isActive ? 'text-white' : 'text-gray-700 dark:text-gray-300'\n )}\n >\n {page}\n </Text>\n </Pressable>\n );\n })}\n\n {/* Next button */}\n <Pressable\n onPress={handleNext}\n disabled={currentPage === totalPages}\n className={navButtonClasses(currentPage === totalPages)}\n accessibilityRole='button'\n accessibilityLabel='Go to next page'\n accessibilityState={{ disabled: currentPage === totalPages }}\n >\n {nextIcon || (\n <Text className={cn(config.icon, 'text-gray-700 dark:text-gray-300')}>\n ›\n </Text>\n )}\n </Pressable>\n\n {/* Last button */}\n {showFirstLast && (\n <Pressable\n onPress={handleLast}\n disabled={currentPage === totalPages}\n className={navButtonClasses(currentPage === totalPages)}\n accessibilityRole='button'\n accessibilityLabel='Go to last page'\n accessibilityState={{ disabled: currentPage === totalPages }}\n >\n <Text className={cn(config.text, 'text-gray-700 dark:text-gray-300')}>\n Last\n </Text>\n </Pressable>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\n/**\n * Setting item interface\n */\nexport interface SettingItem {\n /** Unique identifier */\n id: string;\n /** Setting title */\n title: string;\n /** Icon component or element */\n icon?: React.ReactNode;\n /** Optional description */\n description?: string;\n}\n\nexport interface SettingsListProps {\n /** Array of setting items to display */\n settings: SettingItem[];\n /** Currently selected setting ID */\n selectedSetting?: string;\n /** Callback when a setting is selected */\n onSettingSelect: (settingId: string) => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * SettingsList Component\n *\n * Displays a list of setting items for navigation, similar to how\n * mailboxes are displayed in a mail client sidebar.\n *\n * Features:\n * - Each item shows an icon and title\n * - Highlights the currently selected setting\n * - Active states for better UX\n * - Dark mode support\n * - Accessible navigation\n *\n * @example\n * ```tsx\n * <SettingsList\n * settings={[\n * { id: 'general', title: 'General', icon: <CogIcon /> },\n * { id: 'forwarding', title: 'Forwarding', icon: <ArrowRightIcon /> },\n * ]}\n * selectedSetting=\"general\"\n * onSettingSelect={handleSelect}\n * />\n * ```\n */\nexport const SettingsList: React.FC<SettingsListProps> = ({\n settings,\n selectedSetting,\n onSettingSelect,\n className,\n}) => {\n return (\n <View\n className={cn('gap-1', className)}\n accessibilityRole='list'\n accessibilityLabel='Settings navigation'\n >\n {settings.map(setting => {\n const isSelected = selectedSetting === setting.id;\n\n return (\n <Pressable\n key={setting.id}\n onPress={() => onSettingSelect(setting.id)}\n className={cn(\n 'flex-row items-center px-3 py-2.5 rounded-lg min-h-[44px]',\n isSelected\n ? 'bg-orange-100 dark:bg-orange-900/30'\n : 'active:bg-gray-100 dark:active:bg-gray-700'\n )}\n accessibilityRole='button'\n accessibilityState={{ selected: isSelected }}\n accessibilityLabel={setting.title}\n accessibilityHint={setting.description}\n >\n {setting.icon && (\n <View className='w-5 h-5 mr-3 flex-shrink-0'>{setting.icon}</View>\n )}\n <View className='flex-1 min-w-0'>\n <Text\n className={cn(\n 'text-sm',\n isSelected\n ? 'text-orange-700 dark:text-orange-300'\n : 'text-gray-700 dark:text-gray-300'\n )}\n numberOfLines={1}\n >\n {setting.title}\n </Text>\n </View>\n </Pressable>\n );\n })}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface NavigationItem {\n /** Unique identifier for the item */\n id: string;\n /** Display label */\n label: string;\n /** Optional description/subtitle */\n description?: string;\n /** Icon component or element */\n icon: React.ReactNode;\n /** Path or identifier for selection */\n path: string;\n /** Optional badge count */\n badge?: number;\n /** Whether the item is disabled */\n disabled?: boolean;\n}\n\nexport interface NavigationListProps {\n /** Array of navigation items */\n items: NavigationItem[];\n /** Currently selected item path */\n selectedPath?: string;\n /** Callback when an item is selected */\n onSelect: (path: string) => void;\n /** Variant of the navigation list */\n variant?: 'default' | 'compact' | 'sidebar';\n /** Additional className for the container */\n className?: string;\n}\n\n/**\n * NavigationList Component\n *\n * Displays a list of navigation items with icons, labels, and descriptions.\n * Commonly used in settings pages and documentation for master-detail layouts.\n *\n * @example\n * ```tsx\n * const items = [\n * {\n * id: 'general',\n * label: 'General',\n * description: 'Basic account settings',\n * icon: <Cog6ToothIcon />,\n * path: '/settings/general'\n * },\n * // ...\n * ];\n *\n * <NavigationList\n * items={items}\n * selectedPath={currentPath}\n * onSelect={handleSelect}\n * />\n * ```\n */\nexport const NavigationList: React.FC<NavigationListProps> = ({\n items,\n selectedPath,\n onSelect,\n variant = 'default',\n className,\n}) => {\n const containerClass = variant === 'compact' ? 'gap-1' : 'gap-0';\n\n return (\n <View className={cn(containerClass, className)} accessibilityRole='list'>\n {items.map((item, index) => {\n const isSelected = selectedPath === item.path;\n const isDisabled = item.disabled;\n const isLast = index === items.length - 1;\n\n return (\n <Pressable\n key={item.id}\n onPress={() => !isDisabled && onSelect(item.path)}\n disabled={isDisabled}\n className={cn(\n 'flex-row items-start',\n variant === 'compact'\n ? 'p-3 rounded-lg'\n : cn(\n 'p-4',\n !isLast && 'border-b border-gray-200 dark:border-gray-700'\n ),\n isDisabled && 'opacity-50',\n !isDisabled &&\n (isSelected\n ? 'bg-blue-50 dark:bg-blue-900/20'\n : 'active:bg-gray-50 dark:active:bg-gray-700')\n )}\n accessibilityRole='button'\n accessibilityState={{\n selected: isSelected,\n disabled: isDisabled,\n }}\n accessibilityLabel={item.label}\n accessibilityHint={item.description}\n >\n <View className='w-5 h-5 mt-0.5 mr-3 flex-shrink-0'>\n {item.icon}\n </View>\n <View className='flex-1 min-w-0'>\n <View className='flex-row items-center'>\n <Text\n className={cn(\n 'font-medium',\n isSelected\n ? 'text-blue-600 dark:text-blue-400'\n : 'text-gray-700 dark:text-gray-300'\n )}\n >\n {item.label}\n </Text>\n {item.badge !== undefined && item.badge > 0 && (\n <View className='ml-2 px-2 py-0.5 bg-blue-100 dark:bg-blue-900 rounded-full'>\n <Text className='text-xs font-medium text-blue-800 dark:text-blue-200'>\n {item.badge}\n </Text>\n </View>\n )}\n </View>\n {item.description && (\n <Text className='text-xs text-gray-500 dark:text-gray-400 mt-0.5'>\n {item.description}\n </Text>\n )}\n </View>\n </Pressable>\n );\n })}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useRef, useCallback } from 'react';\nimport {\n View,\n Pressable,\n Text,\n Modal,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface DropdownItem {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Icon component */\n icon?: React.ReactNode;\n /** Press handler */\n onPress: () => void;\n /** Whether item is disabled */\n disabled?: boolean;\n /** Whether to render as separator */\n separator?: boolean;\n}\n\nexport interface DropdownProps {\n /** Trigger element */\n trigger: React.ReactNode;\n /** Menu items */\n items: DropdownItem[];\n /** Alignment relative to trigger */\n align?: 'left' | 'right';\n /** Additional className for container */\n className?: string;\n /** Variant style */\n variant?: 'default' | 'bordered';\n}\n\n/**\n * Dropdown Component\n *\n * A dropdown menu that displays a list of actions when triggered.\n * Uses Modal for overlay behavior on React Native.\n *\n * @example\n * ```tsx\n * <Dropdown\n * trigger={<Button>Menu</Button>}\n * items={[\n * { id: '1', label: 'Edit', onPress: handleEdit },\n * { id: '2', label: 'Delete', onPress: handleDelete, variant: 'danger' },\n * ]}\n * />\n * ```\n */\nexport const Dropdown: React.FC<DropdownProps> = ({\n trigger,\n items,\n align = 'right',\n className,\n variant = 'default',\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [triggerLayout, setTriggerLayout] = useState({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n });\n const triggerRef = useRef<View>(null);\n\n const handleOpen = useCallback(() => {\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n setTriggerLayout({ x, y, width, height });\n setIsOpen(true);\n });\n }, []);\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const handleItemPress = useCallback((item: DropdownItem) => {\n if (!item.disabled) {\n item.onPress();\n setIsOpen(false);\n }\n }, []);\n\n // Calculate menu position\n const menuStyle = {\n position: 'absolute' as const,\n top: triggerLayout.y + triggerLayout.height + 4,\n ...(align === 'left'\n ? { left: triggerLayout.x }\n : {\n right: triggerLayout.x > 0 ? undefined : 16,\n left:\n align === 'right'\n ? triggerLayout.x + triggerLayout.width - 200\n : triggerLayout.x,\n }),\n minWidth: 160,\n maxWidth: 280,\n };\n\n return (\n <View className={cn('relative', className)} ref={triggerRef}>\n <Pressable\n onPress={handleOpen}\n className={cn(\n variant === 'bordered' &&\n 'border border-gray-300 dark:border-gray-600 rounded-md px-3 py-2'\n )}\n accessibilityRole='button'\n accessibilityLabel='Open menu'\n accessibilityState={{ expanded: isOpen }}\n >\n {trigger}\n </Pressable>\n\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={handleClose}\n >\n <TouchableWithoutFeedback onPress={handleClose}>\n <View className='flex-1'>\n <View\n style={menuStyle}\n className='bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 py-1 overflow-hidden'\n >\n {items.map(item =>\n item.separator ? (\n <View\n key={item.id}\n className='my-1 h-px bg-gray-200 dark:bg-gray-700'\n accessibilityRole='none'\n />\n ) : (\n <Pressable\n key={item.id}\n onPress={() => handleItemPress(item)}\n disabled={item.disabled}\n className={cn(\n 'flex-row items-center gap-2 px-4 py-2.5',\n item.disabled\n ? 'opacity-50'\n : 'active:bg-gray-100 dark:active:bg-gray-700'\n )}\n accessibilityRole='menuitem'\n accessibilityState={{ disabled: item.disabled }}\n >\n {item.icon && <View className='w-5 h-5'>{item.icon}</View>}\n <Text\n className={cn(\n 'text-sm',\n item.disabled\n ? 'text-gray-400 dark:text-gray-500'\n : 'text-gray-700 dark:text-gray-200'\n )}\n >\n {item.label}\n </Text>\n </Pressable>\n )\n )}\n </View>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, useWindowDimensions } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface AspectRatioProps {\n /** Content to maintain aspect ratio */\n children: React.ReactNode;\n /** Aspect ratio (width/height or preset) */\n ratio?: number | '16/9' | '4/3' | '1/1' | '21/9' | '3/2';\n /** Additional className */\n className?: string;\n /** Fixed width (optional, defaults to full width) */\n width?: number | 'full';\n}\n\n/**\n * AspectRatio Component\n *\n * Maintains a specific aspect ratio for its content.\n * Useful for responsive images, videos, and embeds.\n *\n * @example\n * ```tsx\n * <AspectRatio ratio=\"16/9\">\n * <Image source={{ uri: '/image.jpg' }} style={{ flex: 1 }} />\n * </AspectRatio>\n * ```\n *\n * @example\n * ```tsx\n * <AspectRatio ratio={1.5} width={200}>\n * <View style={{ backgroundColor: 'blue', flex: 1 }} />\n * </AspectRatio>\n * ```\n */\nexport const AspectRatio: React.FC<AspectRatioProps> = ({\n children,\n ratio = '16/9',\n className,\n width = 'full',\n}) => {\n const { width: screenWidth } = useWindowDimensions();\n\n // Convert preset ratios to numbers\n const ratioMap: Record<string, number> = {\n '16/9': 16 / 9,\n '4/3': 4 / 3,\n '1/1': 1,\n '21/9': 21 / 9,\n '3/2': 3 / 2,\n };\n\n const numericRatio = typeof ratio === 'string' ? ratioMap[ratio] : ratio;\n\n // Calculate container width\n const containerWidth = width === 'full' ? screenWidth : width;\n\n return (\n <View\n className={cn('relative overflow-hidden', className)}\n style={{\n width: width === 'full' ? '100%' : containerWidth,\n aspectRatio: numericRatio,\n }}\n >\n <View className='absolute inset-0'>{children}</View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, ScrollView } from 'react-native';\nimport type { LayoutChangeEvent } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface AspectFitViewProps {\n /** Aspect ratio as width / height (e.g. 16/9) */\n aspectRatio: number;\n /** Content to render inside the aspect ratio container */\n children: React.ReactNode;\n /** Additional className for the outer container */\n className?: string;\n /** Additional className for the inner aspect ratio box */\n innerClassName?: string;\n}\n\n/**\n * AspectFitView - A container that maintains a fixed aspect ratio using AspectFit behavior.\n *\n * The inner box scales to be as large as possible while fitting entirely within\n * the parent, constrained by both width and height. Content that overflows\n * the box is scrollable. The box is horizontally centered.\n *\n * @example\n * ```tsx\n * <AspectFitView aspectRatio={16 / 9}>\n * <MyContent />\n * </AspectFitView>\n * ```\n */\nexport const AspectFitView: React.FC<AspectFitViewProps> = ({\n aspectRatio,\n children,\n className,\n innerClassName,\n}) => {\n const [size, setSize] = React.useState<{\n width: number;\n height: number;\n } | null>(null);\n\n const onLayout = React.useCallback((event: LayoutChangeEvent) => {\n const { width, height } = event.nativeEvent.layout;\n setSize({ width, height });\n }, []);\n\n // Calculate AspectFit dimensions\n let innerWidth = 0;\n let innerHeight = 0;\n if (size) {\n const parentRatio = size.width / size.height;\n if (aspectRatio > parentRatio) {\n // Width-constrained\n innerWidth = size.width;\n innerHeight = size.width / aspectRatio;\n } else {\n // Height-constrained\n innerHeight = size.height;\n innerWidth = size.height * aspectRatio;\n }\n }\n\n return (\n <View className={cn('flex-1', className)} onLayout={onLayout}>\n {size && (\n <View className={cn('items-center', innerClassName)}>\n <ScrollView style={{ width: innerWidth, height: innerHeight }}>\n {children}\n </ScrollView>\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface QuickAction {\n /** Unique identifier */\n id: string;\n /** Button label */\n label: string;\n /** Icon component or element */\n icon?: React.ReactNode;\n /** Press handler */\n onPress: () => void;\n /** Button variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger';\n /** Whether button is disabled */\n disabled?: boolean;\n}\n\nexport interface QuickActionsProps {\n /** Actions to display */\n actions: QuickAction[];\n /** Layout orientation */\n orientation?: 'horizontal' | 'vertical' | 'grid';\n /** Grid columns (when orientation is grid) */\n columns?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * QuickActions Component\n *\n * Quick action buttons for dashboard.\n * Supports multiple layouts and variants.\n *\n * @example\n * ```tsx\n * <QuickActions\n * actions={[\n * { id: '1', label: 'New Project', icon: <PlusIcon />, onPress: () => {}, variant: 'primary' },\n * { id: '2', label: 'Upload File', icon: <UploadIcon />, onPress: () => {} },\n * { id: '3', label: 'Export Data', icon: <DownloadIcon />, onPress: () => {} }\n * ]}\n * orientation=\"grid\"\n * columns={3}\n * />\n * ```\n */\nexport const QuickActions: React.FC<QuickActionsProps> = ({\n actions,\n orientation = 'horizontal',\n columns = 3,\n className,\n}) => {\n const variantStyles = {\n default: {\n bg: 'bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',\n bgActive: 'active:bg-gray-50 dark:active:bg-gray-800',\n text: 'text-gray-900 dark:text-white',\n },\n primary: {\n bg: 'bg-blue-500 border-blue-500',\n bgActive: 'active:bg-blue-600',\n text: 'text-white',\n },\n success: {\n bg: 'bg-green-500 border-green-500',\n bgActive: 'active:bg-green-600',\n text: 'text-white',\n },\n warning: {\n bg: 'bg-yellow-500 border-yellow-500',\n bgActive: 'active:bg-yellow-600',\n text: 'text-white',\n },\n danger: {\n bg: 'bg-red-500 border-red-500',\n bgActive: 'active:bg-red-600',\n text: 'text-white',\n },\n };\n\n const layoutClasses = {\n horizontal: 'flex-row flex-wrap gap-2',\n vertical: 'flex-col gap-2',\n grid: 'flex-row flex-wrap gap-2',\n };\n\n // Calculate item flex for grid layout\n const getGridFlex = () => {\n if (orientation !== 'grid') return undefined;\n return 1 / columns;\n };\n\n return (\n <View className={cn(layoutClasses[orientation], className)}>\n {actions.map(action => {\n const variant = action.variant || 'default';\n const styles = variantStyles[variant];\n\n return (\n <Pressable\n key={action.id}\n onPress={action.onPress}\n disabled={action.disabled}\n className={cn(\n 'flex-row items-center justify-center gap-2 px-4 py-3 rounded-lg border',\n styles.bg,\n !action.disabled && styles.bgActive,\n action.disabled && 'opacity-50',\n orientation === 'vertical' && 'w-full'\n )}\n style={\n orientation === 'grid'\n ? { flex: getGridFlex(), minWidth: 100 }\n : undefined\n }\n accessibilityRole='button'\n accessibilityLabel={action.label}\n accessibilityState={{ disabled: action.disabled }}\n >\n {action.icon && <View className='w-5 h-5'>{action.icon}</View>}\n <Text className={cn('font-medium', styles.text)}>\n {action.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface EmptyStateProps {\n /** Icon or illustration to display */\n icon?: React.ReactNode;\n /** Main title */\n title: string;\n /** Description text */\n description?: string;\n /** Action button(s) */\n action?: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * EmptyState Component\n *\n * Displays a placeholder for empty lists, search results, or content areas.\n * Includes icon, title, description, and optional action button.\n *\n * @example\n * ```tsx\n * <EmptyState\n * icon={<InboxIcon className=\"w-12 h-12\" />}\n * title=\"No messages\"\n * description=\"You don't have any messages yet.\"\n * action={<Button onPress={handleCompose}>Compose</Button>}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <EmptyState\n * icon={<SearchIcon />}\n * title=\"No results found\"\n * description=\"Try adjusting your search or filter to find what you're looking for.\"\n * size=\"sm\"\n * />\n * ```\n */\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n icon,\n title,\n description,\n action,\n size = 'md',\n className,\n}) => {\n // Size configurations\n const sizeConfig = {\n sm: {\n container: 'py-6 px-4',\n iconContainer: 'w-10 h-10 mb-3',\n title: 'text-base',\n description: 'text-sm',\n },\n md: {\n container: 'py-10 px-6',\n iconContainer: 'w-14 h-14 mb-4',\n title: 'text-lg',\n description: 'text-base',\n },\n lg: {\n container: 'py-16 px-8',\n iconContainer: 'w-20 h-20 mb-6',\n title: 'text-xl',\n description: 'text-base',\n },\n };\n\n const config = sizeConfig[size];\n\n return (\n <View\n className={cn('items-center justify-center', config.container, className)}\n accessibilityRole='none'\n >\n {icon && (\n <View\n className={cn(\n 'items-center justify-center',\n config.iconContainer,\n 'text-gray-400 dark:text-gray-500'\n )}\n >\n {icon}\n </View>\n )}\n\n <Text\n className={cn(\n 'font-semibold text-gray-900 dark:text-white text-center',\n config.title\n )}\n >\n {title}\n </Text>\n\n {description && (\n <Text\n className={cn(\n 'text-gray-500 dark:text-gray-400 text-center mt-2 max-w-xs',\n config.description\n )}\n >\n {description}\n </Text>\n )}\n\n {action && <View className='mt-6'>{action}</View>}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CalendarProps {\n /** Selected date */\n value?: Date;\n /** Change handler */\n onChange: (date: Date) => void;\n /** Minimum selectable date */\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Disabled dates */\n disabledDates?: Date[];\n /** Show outside days */\n showOutsideDays?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Calendar Component\n *\n * Interactive calendar for date selection.\n * Supports min/max dates and disabled dates.\n *\n * @example\n * ```tsx\n * <Calendar\n * value={selectedDate}\n * onChange={setSelectedDate}\n * minDate={new Date()}\n * />\n * ```\n */\nexport const Calendar: React.FC<CalendarProps> = ({\n value,\n onChange,\n minDate,\n maxDate,\n disabledDates = [],\n showOutsideDays = true,\n className,\n}) => {\n const [currentMonth, setCurrentMonth] = useState(value || new Date());\n\n // Get days in month\n const getDaysInMonth = (date: Date) => {\n const year = date.getFullYear();\n const month = date.getMonth();\n return new Date(year, month + 1, 0).getDate();\n };\n\n // Get first day of month (0 = Sunday, 6 = Saturday)\n const getFirstDayOfMonth = (date: Date) => {\n const year = date.getFullYear();\n const month = date.getMonth();\n return new Date(year, month, 1).getDay();\n };\n\n // Check if date is same day\n const isSameDay = (date1: Date, date2: Date) => {\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n );\n };\n\n // Check if date is disabled\n const isDateDisabled = (date: Date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return disabledDates.some(disabledDate => isSameDay(date, disabledDate));\n };\n\n // Navigate months\n const goToPreviousMonth = () => {\n setCurrentMonth(\n new Date(currentMonth.getFullYear(), currentMonth.getMonth() - 1)\n );\n };\n\n const goToNextMonth = () => {\n setCurrentMonth(\n new Date(currentMonth.getFullYear(), currentMonth.getMonth() + 1)\n );\n };\n\n // Generate calendar days\n const generateCalendarDays = () => {\n const year = currentMonth.getFullYear();\n const month = currentMonth.getMonth();\n const daysInMonth = getDaysInMonth(currentMonth);\n const firstDay = getFirstDayOfMonth(currentMonth);\n const days: (Date | null)[] = [];\n\n // Add previous month days\n if (showOutsideDays) {\n const prevMonthDays = getDaysInMonth(new Date(year, month - 1));\n for (let i = firstDay - 1; i >= 0; i--) {\n days.push(new Date(year, month - 1, prevMonthDays - i));\n }\n } else {\n for (let i = 0; i < firstDay; i++) {\n days.push(null);\n }\n }\n\n // Add current month days\n for (let day = 1; day <= daysInMonth; day++) {\n days.push(new Date(year, month, day));\n }\n\n // Add next month days to fill grid\n if (showOutsideDays) {\n const remainingDays = 42 - days.length; // 6 rows * 7 days\n for (let day = 1; day <= remainingDays; day++) {\n days.push(new Date(year, month + 1, day));\n }\n }\n\n return days;\n };\n\n const calendarDays = generateCalendarDays();\n const weekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n const handleDayPress = (date: Date | null) => {\n if (!date || isDateDisabled(date)) return;\n onChange(date);\n };\n\n const monthYear = currentMonth.toLocaleDateString('en-US', {\n month: 'long',\n year: 'numeric',\n });\n\n // Split days into weeks for grid layout\n const weeks: (Date | null)[][] = [];\n for (let i = 0; i < calendarDays.length; i += 7) {\n weeks.push(calendarDays.slice(i, i + 7));\n }\n\n return (\n <View className={cn('bg-white dark:bg-gray-900 rounded-lg p-4', className)}>\n {/* Header */}\n <View className='flex-row items-center justify-between mb-4'>\n <Pressable\n onPress={goToPreviousMonth}\n className='p-2 active:bg-gray-100 dark:active:bg-gray-800 rounded-md'\n accessibilityRole='button'\n accessibilityLabel='Previous month'\n >\n <Text className='text-lg text-gray-700 dark:text-gray-300'>‹</Text>\n </Pressable>\n\n <Text className='text-base font-semibold text-gray-900 dark:text-white'>\n {monthYear}\n </Text>\n\n <Pressable\n onPress={goToNextMonth}\n className='p-2 active:bg-gray-100 dark:active:bg-gray-800 rounded-md'\n accessibilityRole='button'\n accessibilityLabel='Next month'\n >\n <Text className='text-lg text-gray-700 dark:text-gray-300'>›</Text>\n </Pressable>\n </View>\n\n {/* Week days header */}\n <View className='flex-row mb-2'>\n {weekDays.map(day => (\n <View key={day} className='flex-1 items-center py-2'>\n <Text className='text-xs font-medium text-gray-600 dark:text-gray-400'>\n {day}\n </Text>\n </View>\n ))}\n </View>\n\n {/* Calendar grid */}\n {weeks.map((week, weekIndex) => (\n <View key={weekIndex} className='flex-row'>\n {week.map((date, dayIndex) => {\n if (!date) {\n return (\n <View\n key={`empty-${dayIndex}`}\n className='flex-1 aspect-square'\n />\n );\n }\n\n const isCurrentMonth = date.getMonth() === currentMonth.getMonth();\n const isSelected = value && isSameDay(date, value);\n const isToday = isSameDay(date, new Date());\n const isDisabled = isDateDisabled(date);\n\n return (\n <Pressable\n key={`${date.getTime()}-${dayIndex}`}\n onPress={() => handleDayPress(date)}\n disabled={isDisabled}\n className={cn(\n 'flex-1 aspect-square items-center justify-center rounded-md m-0.5',\n !isDisabled && 'active:bg-gray-100 dark:active:bg-gray-800',\n isDisabled && 'opacity-40',\n isSelected && 'bg-blue-600 dark:bg-blue-500',\n isToday &&\n !isSelected &&\n 'border-2 border-blue-600 dark:border-blue-400'\n )}\n accessibilityRole='button'\n accessibilityLabel={date.toLocaleDateString()}\n accessibilityState={{\n selected: isSelected,\n disabled: isDisabled,\n }}\n >\n <Text\n className={cn(\n 'text-sm',\n isCurrentMonth\n ? 'text-gray-900 dark:text-white'\n : 'text-gray-400 dark:text-gray-600',\n isSelected && 'text-white font-semibold'\n )}\n >\n {date.getDate()}\n </Text>\n </Pressable>\n );\n })}\n </View>\n ))}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable, FlatList } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface DataListColumn<T> {\n /** Column key */\n key: string;\n /** Column label */\n label: string;\n /** Render cell content */\n render?: (row: T, index: number) => React.ReactNode;\n /** Flex value for width */\n flex?: number;\n /** Align content */\n align?: 'left' | 'center' | 'right';\n}\n\nexport interface DataListProps<T> {\n /** Table columns */\n columns: DataListColumn<T>[];\n /** Table data */\n data: T[];\n /** Row key extractor */\n keyExtractor: (row: T, index: number) => string;\n /** Row press handler */\n onRowPress?: (row: T, index: number) => void;\n /** Compact mode */\n compact?: boolean;\n /** Show column headers */\n showHeader?: boolean;\n /** Empty state message */\n emptyMessage?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * DataList Component\n *\n * Mobile-friendly data list component (alternative to table).\n * Uses FlatList for virtualization and performance.\n *\n * @example\n * ```tsx\n * <DataList\n * columns={[\n * { key: 'name', label: 'Name', flex: 2 },\n * { key: 'email', label: 'Email', flex: 3 },\n * { key: 'role', label: 'Role', flex: 1, align: 'right' }\n * ]}\n * data={users}\n * keyExtractor={(user) => user.id}\n * onRowPress={handleRowPress}\n * />\n * ```\n */\nexport function DataList<T extends Record<string, unknown>>({\n columns,\n data,\n keyExtractor,\n onRowPress,\n compact = false,\n showHeader = true,\n emptyMessage = 'No data available',\n className,\n}: DataListProps<T>) {\n const alignClasses = {\n left: 'items-start',\n center: 'items-center',\n right: 'items-end',\n };\n\n const renderHeader = () => {\n if (!showHeader) return null;\n\n return (\n <View className='flex-row bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700'>\n {columns.map(column => (\n <View\n key={column.key}\n className={cn(\n compact ? 'px-3 py-2' : 'px-4 py-3',\n alignClasses[column.align || 'left']\n )}\n style={{ flex: column.flex || 1 }}\n >\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 uppercase tracking-wider'>\n {column.label}\n </Text>\n </View>\n ))}\n </View>\n );\n };\n\n const renderRow = ({ item, index }: { item: T; index: number }) => {\n const isOdd = index % 2 === 1;\n\n return (\n <Pressable\n onPress={() => onRowPress?.(item, index)}\n className={cn(\n 'flex-row border-b border-gray-200 dark:border-gray-700',\n isOdd && 'bg-gray-50 dark:bg-gray-800/50',\n onRowPress && 'active:bg-gray-100 dark:active:bg-gray-800'\n )}\n disabled={!onRowPress}\n accessibilityRole={onRowPress ? 'button' : 'none'}\n >\n {columns.map(column => (\n <View\n key={column.key}\n className={cn(\n compact ? 'px-3 py-2' : 'px-4 py-3',\n alignClasses[column.align || 'left'],\n 'justify-center'\n )}\n style={{ flex: column.flex || 1 }}\n >\n {column.render ? (\n column.render(item, index)\n ) : (\n <Text\n className='text-sm text-gray-900 dark:text-white'\n numberOfLines={1}\n >\n {String(item[column.key] ?? '')}\n </Text>\n )}\n </View>\n ))}\n </Pressable>\n );\n };\n\n const renderEmpty = () => (\n <View className='py-8 items-center'>\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n {emptyMessage}\n </Text>\n </View>\n );\n\n return (\n <View className={cn('bg-white dark:bg-gray-900', className)}>\n {renderHeader()}\n <FlatList\n data={data}\n keyExtractor={keyExtractor}\n renderItem={renderRow}\n ListEmptyComponent={renderEmpty}\n showsVerticalScrollIndicator={false}\n />\n </View>\n );\n}\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Modal,\n TextInput,\n ScrollView,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface MultiSelectOption {\n /** Option value */\n value: string;\n /** Option label */\n label: string;\n /** Disabled state */\n disabled?: boolean;\n}\n\nexport interface MultiSelectProps {\n /** Available options */\n options: MultiSelectOption[];\n /** Selected values */\n value: string[];\n /** Change handler */\n onChange: (values: string[]) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** Enable search */\n searchable?: boolean;\n /** Max selected items to show */\n maxDisplay?: number;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * MultiSelect Component\n *\n * Multi-select dropdown with search and tags.\n * Shows selected items as removable tags.\n *\n * @example\n * ```tsx\n * <MultiSelect\n * options={categories}\n * value={selectedCategories}\n * onChange={setSelectedCategories}\n * placeholder=\"Select categories\"\n * searchable\n * />\n * ```\n */\nexport const MultiSelect: React.FC<MultiSelectProps> = ({\n options,\n value,\n onChange,\n placeholder = 'Select items...',\n searchPlaceholder = 'Search...',\n searchable = true,\n maxDisplay = 3,\n disabled = false,\n className,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n\n // Filter options based on search\n const filteredOptions = searchable\n ? options.filter(opt =>\n opt.label.toLowerCase().includes(searchQuery.toLowerCase())\n )\n : options;\n\n // Get selected option labels\n const selectedOptions = options.filter(opt => value.includes(opt.value));\n\n // Handle option toggle\n const toggleOption = useCallback(\n (optionValue: string) => {\n if (value.includes(optionValue)) {\n onChange(value.filter(v => v !== optionValue));\n } else {\n onChange([...value, optionValue]);\n }\n },\n [value, onChange]\n );\n\n // Remove selected item\n const removeItem = useCallback(\n (optionValue: string) => {\n onChange(value.filter(v => v !== optionValue));\n },\n [value, onChange]\n );\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n setSearchQuery('');\n }, []);\n\n const displayedCount = selectedOptions.length;\n const hiddenCount =\n displayedCount > maxDisplay ? displayedCount - maxDisplay : 0;\n\n return (\n <View className={cn('w-full', className)}>\n {/* Trigger */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'min-h-[44px] px-3 py-2',\n 'bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={placeholder}\n accessibilityState={{ disabled, expanded: isOpen }}\n >\n <View className='flex-row flex-wrap gap-1.5'>\n {selectedOptions.length === 0 ? (\n <Text className='text-sm text-gray-500 dark:text-gray-400 py-0.5'>\n {placeholder}\n </Text>\n ) : (\n <>\n {selectedOptions.slice(0, maxDisplay).map(opt => (\n <View\n key={opt.value}\n className='flex-row items-center gap-1 px-2 py-0.5 bg-blue-100 dark:bg-blue-900/30 rounded'\n >\n <Text className='text-xs font-medium text-blue-700 dark:text-blue-300'>\n {opt.label}\n </Text>\n <Pressable\n onPress={() => removeItem(opt.value)}\n hitSlop={8}\n accessibilityRole='button'\n accessibilityLabel={`Remove ${opt.label}`}\n >\n <Text className='text-blue-700 dark:text-blue-300'>×</Text>\n </Pressable>\n </View>\n ))}\n {hiddenCount > 0 && (\n <View className='px-2 py-0.5 bg-gray-200 dark:bg-gray-700 rounded'>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300'>\n +{hiddenCount} more\n </Text>\n </View>\n )}\n </>\n )}\n </View>\n </Pressable>\n\n {/* Dropdown Modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={handleClose}\n >\n <TouchableWithoutFeedback onPress={handleClose}>\n <View className='flex-1 justify-end bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-t-xl max-h-[70%]'>\n {/* Search */}\n {searchable && (\n <View className='p-3 border-b border-gray-200 dark:border-gray-700'>\n <TextInput\n value={searchQuery}\n onChangeText={setSearchQuery}\n placeholder={searchPlaceholder}\n placeholderTextColor='#9ca3af'\n className='px-3 py-2 text-sm bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white rounded-md'\n />\n </View>\n )}\n\n {/* Options */}\n <ScrollView className='max-h-80'>\n {filteredOptions.length === 0 ? (\n <View className='px-3 py-4 items-center'>\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n No options found\n </Text>\n </View>\n ) : (\n filteredOptions.map(option => {\n const isSelected = value.includes(option.value);\n\n return (\n <Pressable\n key={option.value}\n onPress={() =>\n !option.disabled && toggleOption(option.value)\n }\n disabled={option.disabled}\n className={cn(\n 'flex-row items-center gap-3 px-4 py-3',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n option.disabled && 'opacity-50'\n )}\n accessibilityRole='checkbox'\n accessibilityState={{\n checked: isSelected,\n disabled: option.disabled,\n }}\n >\n {/* Checkbox */}\n <View\n className={cn(\n 'w-5 h-5 border-2 rounded items-center justify-center',\n isSelected\n ? 'bg-blue-600 border-blue-600 dark:bg-blue-500 dark:border-blue-500'\n : 'border-gray-300 dark:border-gray-600'\n )}\n >\n {isSelected && (\n <Text className='text-xs text-white font-bold'>\n ✓\n </Text>\n )}\n </View>\n\n {/* Label */}\n <Text className='flex-1 text-sm text-gray-900 dark:text-white'>\n {option.label}\n </Text>\n </Pressable>\n );\n })\n )}\n </ScrollView>\n\n {/* Footer */}\n <View className='p-3 border-t border-gray-200 dark:border-gray-700 flex-row justify-between items-center'>\n <Text className='text-xs text-gray-600 dark:text-gray-400'>\n {value.length} selected\n </Text>\n <View className='flex-row gap-3'>\n {value.length > 0 && (\n <Pressable\n onPress={() => onChange([])}\n accessibilityRole='button'\n accessibilityLabel='Clear all'\n >\n <Text className='text-sm text-blue-600 dark:text-blue-400'>\n Clear all\n </Text>\n </Pressable>\n )}\n <Pressable\n onPress={handleClose}\n accessibilityRole='button'\n accessibilityLabel='Done'\n >\n <Text className='text-sm font-medium text-blue-600 dark:text-blue-400'>\n Done\n </Text>\n </Pressable>\n </View>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ProgressCircleProps {\n /** Progress value (0-100) */\n value: number;\n /** Circle size in pixels */\n size?: number;\n /** Stroke width */\n strokeWidth?: number;\n /** Show percentage text */\n showValue?: boolean;\n /** Custom label */\n label?: string;\n /** Color variant */\n variant?: 'primary' | 'success' | 'warning' | 'danger';\n /** Custom color (hex) */\n color?: string;\n /** Background track color (hex) */\n trackColor?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * ProgressCircle Component\n *\n * Circular progress indicator with customizable size and colors.\n * Displays percentage or custom label in the center.\n * Uses View-based approach for React Native compatibility.\n *\n * @example\n * ```tsx\n * <ProgressCircle\n * value={75}\n * size={120}\n * showValue\n * variant=\"success\"\n * />\n * ```\n */\nexport const ProgressCircle: React.FC<ProgressCircleProps> = ({\n value,\n size = 100,\n strokeWidth = 8,\n showValue = true,\n label,\n variant = 'primary',\n color,\n trackColor = '#e5e7eb',\n className,\n}) => {\n // Clamp value between 0 and 100\n const progress = Math.min(100, Math.max(0, value));\n\n // Color variants\n const variantColors = {\n primary: '#2563eb',\n success: '#16a34a',\n warning: '#ca8a04',\n danger: '#dc2626',\n };\n\n const progressColor = color || variantColors[variant];\n const innerSize = size - strokeWidth * 2;\n\n return (\n <View\n className={cn('items-center justify-center', className)}\n style={{ width: size, height: size }}\n >\n {/* Background circle */}\n <View\n style={{\n width: size,\n height: size,\n borderRadius: size / 2,\n borderWidth: strokeWidth,\n borderColor: trackColor,\n position: 'absolute',\n }}\n />\n\n {/* Progress indicator - simplified arc */}\n <View\n style={{\n width: size,\n height: size,\n borderRadius: size / 2,\n borderWidth: strokeWidth,\n borderColor: 'transparent',\n borderTopColor: progressColor,\n borderRightColor: progress > 25 ? progressColor : 'transparent',\n borderBottomColor: progress > 50 ? progressColor : 'transparent',\n borderLeftColor: progress > 75 ? progressColor : 'transparent',\n position: 'absolute',\n transform: [{ rotate: '-90deg' }],\n }}\n />\n\n {/* Center content */}\n <View\n style={{\n width: innerSize,\n height: innerSize,\n borderRadius: innerSize / 2,\n backgroundColor: 'transparent',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {(showValue || label) && (\n <View className='items-center justify-center'>\n {showValue && !label && (\n <Text\n className='font-bold text-gray-900 dark:text-white'\n style={{ fontSize: size * 0.2 }}\n >\n {Math.round(progress)}%\n </Text>\n )}\n {label && (\n <Text\n className='font-medium text-gray-900 dark:text-white text-center px-2'\n style={{ fontSize: size * 0.15 }}\n >\n {label}\n </Text>\n )}\n </View>\n )}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface NavItem {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Icon component or element */\n icon?: React.ReactNode;\n /** Press handler */\n onPress?: () => void;\n /** Active/selected state */\n active?: boolean;\n /** Badge content */\n badge?: string | number;\n}\n\nexport interface SideNavProps {\n /** Navigation items */\n items: NavItem[];\n /** Additional className */\n className?: string;\n}\n\n/**\n * SideNav Component\n *\n * Side navigation for drawer menus or sidebar layouts.\n * Displays items with icons, labels, and badges.\n *\n * @example\n * ```tsx\n * <SideNav\n * items={[\n * { id: 'home', label: 'Home', icon: <HomeIcon />, active: true },\n * { id: 'settings', label: 'Settings', icon: <CogIcon />, badge: 3 },\n * ]}\n * />\n * ```\n */\nexport const SideNav: React.FC<SideNavProps> = ({ items, className }) => {\n return (\n <View className={cn('gap-1', className)} accessibilityRole='list'>\n {items.map(item => (\n <Pressable\n key={item.id}\n onPress={item.onPress}\n className={cn(\n 'flex-row items-center gap-3 px-4 py-3 rounded-lg',\n item.active\n ? 'bg-blue-50 dark:bg-blue-900/20'\n : 'active:bg-gray-100 dark:active:bg-gray-800'\n )}\n accessibilityRole='button'\n accessibilityState={{ selected: item.active }}\n accessibilityLabel={item.label}\n >\n {item.icon && <View className='w-5 h-5'>{item.icon}</View>}\n <Text\n className={cn(\n 'flex-1 font-medium',\n item.active\n ? 'text-blue-600 dark:text-blue-400'\n : 'text-gray-700 dark:text-gray-300'\n )}\n >\n {item.label}\n </Text>\n {item.badge !== undefined && (\n <View className='px-2 py-0.5 bg-gray-200 dark:bg-gray-700 rounded'>\n <Text className='text-xs text-gray-700 dark:text-gray-300'>\n {item.badge}\n </Text>\n </View>\n )}\n </Pressable>\n ))}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable, ActivityIndicator } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SectionHeaderProps {\n /** The header text/title */\n title: string;\n /** Optional callback for the \"+\" button */\n onAdd?: () => void;\n /** Optional tooltip/title for the add button */\n addButtonLabel?: string;\n /** Optional loading indicator */\n loading?: boolean;\n /** Right side actions/buttons */\n actions?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * SectionHeader Component\n *\n * A reusable header component for sections with consistent styling.\n * Displays a title and an optional \"+\" action button.\n *\n * @example\n * ```tsx\n * <SectionHeader title=\"Emails\" />\n * <SectionHeader\n * title=\"Email Accounts\"\n * onAdd={handleAdd}\n * addButtonLabel=\"Add account\"\n * />\n * ```\n */\nexport const SectionHeader: React.FC<SectionHeaderProps> = ({\n title,\n onAdd,\n addButtonLabel = 'Add',\n loading,\n actions,\n className,\n}) => {\n return (\n <View\n className={cn(\n 'p-4 border-b border-gray-200 dark:border-gray-700',\n className\n )}\n >\n <View className='flex-row items-center justify-between'>\n <Text className='text-lg font-semibold text-gray-900 dark:text-gray-100'>\n {title}\n </Text>\n <View className='flex-row items-center gap-2'>\n {loading && <ActivityIndicator size='small' color='#2563eb' />}\n {actions}\n {onAdd && (\n <Pressable\n onPress={onAdd}\n className='p-2 rounded active:bg-gray-200 dark:active:bg-gray-700'\n accessibilityRole='button'\n accessibilityLabel={addButtonLabel}\n >\n <Text className='text-xl text-gray-600 dark:text-gray-400'>\n +\n </Text>\n </Pressable>\n )}\n </View>\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, ScrollView, SafeAreaView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PageContainerProps {\n /** Page content */\n children: React.ReactNode;\n /** Background variant */\n background?: 'default' | 'surface' | 'transparent';\n /** Enable scrolling */\n scrollable?: boolean;\n /** Use SafeAreaView */\n safeArea?: boolean;\n /** Padding variant */\n padding?: 'none' | 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * PageContainer Component\n *\n * Full-screen page container with background and safe area handling.\n * Provides consistent page layouts across the app.\n *\n * @example\n * ```tsx\n * <PageContainer>\n * <Header />\n * <Content />\n * </PageContainer>\n * ```\n *\n * @example\n * ```tsx\n * <PageContainer\n * background=\"surface\"\n * scrollable\n * safeArea\n * padding=\"md\"\n * >\n * <FormContent />\n * </PageContainer>\n * ```\n */\nexport const PageContainer: React.FC<PageContainerProps> = ({\n children,\n background = 'default',\n scrollable = false,\n safeArea = true,\n padding = 'none',\n className,\n}) => {\n const backgroundClasses = {\n default: 'bg-gray-50 dark:bg-gray-900',\n surface: 'bg-white dark:bg-gray-800',\n transparent: 'bg-transparent',\n };\n\n const paddingClasses = {\n none: '',\n sm: 'p-2',\n md: 'p-4',\n lg: 'p-6',\n };\n\n const containerClasses = cn(\n 'flex-1',\n backgroundClasses[background],\n paddingClasses[padding],\n className\n );\n\n const content = scrollable ? (\n <ScrollView\n className={containerClasses}\n contentContainerStyle={{ flexGrow: 1 }}\n showsVerticalScrollIndicator={false}\n >\n {children}\n </ScrollView>\n ) : (\n <View className={containerClasses}>{children}</View>\n );\n\n if (safeArea) {\n return (\n <SafeAreaView className={cn('flex-1', backgroundClasses[background])}>\n {content}\n </SafeAreaView>\n );\n }\n\n return content;\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Text, Pressable, StyleSheet } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface FloatingPanelProps {\n /** Panel content */\n children: React.ReactNode;\n /** Panel title */\n title?: string;\n /** Initial position */\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';\n /** Collapsible */\n collapsible?: boolean;\n /** Initially collapsed */\n defaultCollapsed?: boolean;\n /** Close button */\n closeable?: boolean;\n /** Close handler */\n onClose?: () => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * FloatingPanel Component\n *\n * Floating panel positioned at screen corners.\n * Useful for chat widgets, help panels, or notifications.\n *\n * @example\n * ```tsx\n * <FloatingPanel\n * title=\"Help & Support\"\n * position=\"bottom-right\"\n * collapsible\n * >\n * <ChatWidget />\n * </FloatingPanel>\n * ```\n */\nexport const FloatingPanel: React.FC<FloatingPanelProps> = ({\n children,\n title,\n position = 'bottom-right',\n collapsible = true,\n defaultCollapsed = false,\n closeable = false,\n onClose,\n className,\n}) => {\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n\n const positionStyles = {\n 'bottom-right': { bottom: 16, right: 16 },\n 'bottom-left': { bottom: 16, left: 16 },\n 'top-right': { top: 16, right: 16 },\n 'top-left': { top: 16, left: 16 },\n };\n\n return (\n <View\n style={[styles.container, positionStyles[position]]}\n className={cn(\n 'w-80 bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 rounded-lg shadow-2xl',\n className\n )}\n >\n {/* Header */}\n {(title || collapsible || closeable) && (\n <View className='flex-row items-center justify-between p-4 border-b border-gray-200 dark:border-gray-700'>\n {title && (\n <Text className='font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n )}\n\n <View className='flex-row items-center gap-2'>\n {collapsible && (\n <Pressable\n onPress={() => setIsCollapsed(!isCollapsed)}\n className='p-1 active:bg-gray-100 dark:active:bg-gray-800 rounded'\n accessibilityRole='button'\n accessibilityLabel={isCollapsed ? 'Expand' : 'Collapse'}\n >\n <Text\n className={cn(\n 'text-gray-600 dark:text-gray-400',\n isCollapsed && 'rotate-180'\n )}\n >\n ▼\n </Text>\n </Pressable>\n )}\n\n {closeable && (\n <Pressable\n onPress={onClose}\n className='p-1 active:bg-gray-100 dark:active:bg-gray-800 rounded'\n accessibilityRole='button'\n accessibilityLabel='Close'\n >\n <Text className='text-gray-600 dark:text-gray-400'>✕</Text>\n </Pressable>\n )}\n </View>\n </View>\n )}\n\n {/* Content */}\n {!isCollapsed && <View className='p-4'>{children}</View>}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n zIndex: 50,\n },\n});\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n TextInput,\n Pressable,\n Modal,\n ScrollView,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface Country {\n /** Country code (ISO 3166-1 alpha-2) */\n code: string;\n /** Country name */\n name: string;\n /** Dial code */\n dialCode: string;\n /** Flag emoji */\n flag: string;\n}\n\nexport interface PhoneInputProps {\n /** Phone value */\n value: string;\n /** Change handler */\n onChange: (value: string) => void;\n /** Selected country code */\n country?: string;\n /** Country change handler */\n onCountryChange?: (country: string) => void;\n /** Available countries (defaults to common countries) */\n countries?: Country[];\n /** Placeholder text */\n placeholder?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n// Common countries\nconst DEFAULT_COUNTRIES: Country[] = [\n { code: 'US', name: 'United States', dialCode: '+1', flag: '🇺🇸' },\n { code: 'GB', name: 'United Kingdom', dialCode: '+44', flag: '🇬🇧' },\n { code: 'CA', name: 'Canada', dialCode: '+1', flag: '🇨🇦' },\n { code: 'AU', name: 'Australia', dialCode: '+61', flag: '🇦🇺' },\n { code: 'DE', name: 'Germany', dialCode: '+49', flag: '🇩🇪' },\n { code: 'FR', name: 'France', dialCode: '+33', flag: '🇫🇷' },\n { code: 'IT', name: 'Italy', dialCode: '+39', flag: '🇮🇹' },\n { code: 'ES', name: 'Spain', dialCode: '+34', flag: '🇪🇸' },\n { code: 'MX', name: 'Mexico', dialCode: '+52', flag: '🇲🇽' },\n { code: 'BR', name: 'Brazil', dialCode: '+55', flag: '🇧🇷' },\n { code: 'IN', name: 'India', dialCode: '+91', flag: '🇮🇳' },\n { code: 'CN', name: 'China', dialCode: '+86', flag: '🇨🇳' },\n { code: 'JP', name: 'Japan', dialCode: '+81', flag: '🇯🇵' },\n { code: 'KR', name: 'South Korea', dialCode: '+82', flag: '🇰🇷' },\n { code: 'SG', name: 'Singapore', dialCode: '+65', flag: '🇸🇬' },\n];\n\n/**\n * PhoneInput Component\n *\n * Phone number input with country code selector.\n * Formats phone numbers and shows country flags.\n *\n * @example\n * ```tsx\n * <PhoneInput\n * value={phoneNumber}\n * onChange={setPhoneNumber}\n * country={selectedCountry}\n * onCountryChange={setSelectedCountry}\n * />\n * ```\n */\nexport const PhoneInput: React.FC<PhoneInputProps> = ({\n value,\n onChange,\n country: controlledCountry,\n onCountryChange,\n countries = DEFAULT_COUNTRIES,\n placeholder = 'Phone number',\n disabled = false,\n className,\n}) => {\n const [internalCountry, setInternalCountry] = useState(\n countries[0]?.code || 'US'\n );\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n\n const selectedCountryCode =\n controlledCountry !== undefined ? controlledCountry : internalCountry;\n\n const selectedCountry = countries.find(c => c.code === selectedCountryCode);\n\n // Handle country selection\n const handleCountrySelect = useCallback(\n (countryCode: string) => {\n if (controlledCountry !== undefined && onCountryChange) {\n onCountryChange(countryCode);\n } else {\n setInternalCountry(countryCode);\n }\n setIsOpen(false);\n setSearchQuery('');\n },\n [controlledCountry, onCountryChange]\n );\n\n // Format phone number (basic formatting)\n const formatPhoneNumber = (input: string): string => {\n // Remove all non-numeric characters\n const cleaned = input.replace(/\\D/g, '');\n\n // Basic US/CA formatting\n if (selectedCountry?.dialCode === '+1') {\n if (cleaned.length <= 3) return cleaned;\n if (cleaned.length <= 6)\n return `(${cleaned.slice(0, 3)}) ${cleaned.slice(3)}`;\n return `(${cleaned.slice(0, 3)}) ${cleaned.slice(3, 6)}-${cleaned.slice(6, 10)}`;\n }\n\n return cleaned;\n };\n\n // Handle input change\n const handleInputChange = (text: string) => {\n const formatted = formatPhoneNumber(text);\n onChange(formatted);\n };\n\n // Filter countries based on search\n const filteredCountries = countries.filter(\n country =>\n country.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n country.dialCode.includes(searchQuery) ||\n country.code.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n return (\n <View className={cn('w-full', className)}>\n <View className='flex-row gap-2'>\n {/* Country selector */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center gap-2 px-3 py-2 min-w-[120px]',\n 'bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Select country'\n >\n <Text className='text-xl'>{selectedCountry?.flag}</Text>\n <Text className='text-sm font-medium text-gray-900 dark:text-white'>\n {selectedCountry?.dialCode}\n </Text>\n <Text className='text-gray-600 dark:text-gray-400'>▼</Text>\n </Pressable>\n\n {/* Phone number input */}\n <TextInput\n value={value}\n onChangeText={handleInputChange}\n placeholder={placeholder}\n placeholderTextColor='#9ca3af'\n keyboardType='phone-pad'\n editable={!disabled}\n className={cn(\n 'flex-1 px-3 py-2 text-sm',\n 'bg-white dark:bg-gray-900 text-gray-900 dark:text-white',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n />\n </View>\n\n {/* Full number display */}\n {value && selectedCountry && (\n <Text className='mt-1.5 text-xs text-gray-600 dark:text-gray-400'>\n Full number: {selectedCountry.dialCode} {value}\n </Text>\n )}\n\n {/* Country picker modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='slide'\n onRequestClose={() => setIsOpen(false)}\n >\n <TouchableWithoutFeedback onPress={() => setIsOpen(false)}>\n <View className='flex-1 justify-end bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-t-xl max-h-[70%]'>\n {/* Search */}\n <View className='p-3 border-b border-gray-200 dark:border-gray-700'>\n <TextInput\n value={searchQuery}\n onChangeText={setSearchQuery}\n placeholder='Search countries...'\n placeholderTextColor='#9ca3af'\n className='px-3 py-2 text-sm bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white rounded-md'\n />\n </View>\n\n {/* Countries list */}\n <ScrollView className='max-h-80'>\n {filteredCountries.length === 0 ? (\n <View className='px-3 py-4 items-center'>\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n No countries found\n </Text>\n </View>\n ) : (\n filteredCountries.map(country => (\n <Pressable\n key={country.code}\n onPress={() => handleCountrySelect(country.code)}\n className={cn(\n 'flex-row items-center gap-3 px-4 py-3',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n country.code === selectedCountryCode &&\n 'bg-blue-50 dark:bg-blue-900/30'\n )}\n accessibilityRole='button'\n >\n <Text className='text-xl'>{country.flag}</Text>\n <Text className='flex-1 text-sm text-gray-900 dark:text-white'>\n {country.name}\n </Text>\n <Text className='text-sm text-gray-600 dark:text-gray-400'>\n {country.dialCode}\n </Text>\n </Pressable>\n ))\n )}\n </ScrollView>\n\n {/* Done button */}\n <View className='p-3 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={() => setIsOpen(false)}\n className='items-center py-3'\n accessibilityRole='button'\n >\n <Text className='text-sm font-medium text-blue-600 dark:text-blue-400'>\n Done\n </Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useEffect } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Modal,\n ScrollView,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TimePickerProps {\n /** Time value in HH:mm format (24-hour) */\n value: string;\n /** Change handler */\n onChange: (value: string) => void;\n /** Use 12-hour format */\n use12Hour?: boolean;\n /** Minute step interval */\n minuteStep?: number;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TimePicker Component\n *\n * Time selection with scrollable columns.\n * Supports 12-hour and 24-hour formats.\n *\n * @example\n * ```tsx\n * <TimePicker\n * value={time}\n * onChange={setTime}\n * use12Hour\n * minuteStep={15}\n * />\n * ```\n */\nexport const TimePicker: React.FC<TimePickerProps> = ({\n value,\n onChange,\n use12Hour = false,\n minuteStep = 1,\n disabled = false,\n className,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [internalHour, setInternalHour] = useState('12');\n const [internalMinute, setInternalMinute] = useState('00');\n const [period, setPeriod] = useState<'AM' | 'PM'>('AM');\n\n // Parse value to hours and minutes\n useEffect(() => {\n if (value) {\n const [hours, minutes] = value.split(':');\n const hour = parseInt(hours, 10);\n\n if (use12Hour) {\n const isPM = hour >= 12;\n const hour12 = hour === 0 ? 12 : hour > 12 ? hour - 12 : hour;\n setInternalHour(hour12.toString().padStart(2, '0'));\n setPeriod(isPM ? 'PM' : 'AM');\n } else {\n setInternalHour(hours);\n }\n\n setInternalMinute(minutes);\n }\n }, [value, use12Hour]);\n\n // Format display value\n const formatDisplay = (): string => {\n if (!value) return 'Select time';\n\n const [hours, minutes] = value.split(':');\n const hour = parseInt(hours, 10);\n\n if (use12Hour) {\n const hour12 = hour === 0 ? 12 : hour > 12 ? hour - 12 : hour;\n const displayPeriod = hour >= 12 ? 'PM' : 'AM';\n return `${hour12}:${minutes} ${displayPeriod}`;\n }\n\n return `${hours}:${minutes}`;\n };\n\n // Handle time selection\n const handleTimeChange = (\n newHour: string,\n newMinute: string,\n newPeriod?: 'AM' | 'PM'\n ) => {\n let hour = parseInt(newHour, 10);\n const minute = parseInt(newMinute, 10);\n\n if (use12Hour && newPeriod) {\n if (newPeriod === 'PM' && hour !== 12) {\n hour += 12;\n } else if (newPeriod === 'AM' && hour === 12) {\n hour = 0;\n }\n }\n\n const formattedTime = `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`;\n onChange(formattedTime);\n };\n\n // Generate hour options\n const hourOptions = use12Hour\n ? Array.from({ length: 12 }, (_, i) => (i + 1).toString().padStart(2, '0'))\n : Array.from({ length: 24 }, (_, i) => i.toString().padStart(2, '0'));\n\n // Generate minute options\n const minuteOptions = Array.from(\n { length: Math.ceil(60 / minuteStep) },\n (_, i) => (i * minuteStep).toString().padStart(2, '0')\n );\n\n return (\n <View className={cn('w-full', className)}>\n {/* Input trigger */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center justify-between px-3 py-2',\n 'bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Select time'\n >\n <Text\n className={cn(\n 'text-sm',\n value\n ? 'text-gray-900 dark:text-white'\n : 'text-gray-500 dark:text-gray-400'\n )}\n >\n {formatDisplay()}\n </Text>\n <Text className='text-gray-600 dark:text-gray-400'>🕐</Text>\n </Pressable>\n\n {/* Time picker modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='slide'\n onRequestClose={() => setIsOpen(false)}\n >\n <TouchableWithoutFeedback onPress={() => setIsOpen(false)}>\n <View className='flex-1 justify-end bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-t-xl'>\n <View className='flex-row p-4 gap-2'>\n {/* Hours */}\n <View className='flex-1'>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 text-center mb-2'>\n Hour\n </Text>\n <ScrollView className='h-48 border border-gray-200 dark:border-gray-700 rounded'>\n {hourOptions.map(hour => (\n <Pressable\n key={hour}\n onPress={() => {\n setInternalHour(hour);\n handleTimeChange(\n hour,\n internalMinute,\n use12Hour ? period : undefined\n );\n }}\n className={cn(\n 'px-3 py-2',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n hour === internalHour &&\n 'bg-blue-100 dark:bg-blue-900/30'\n )}\n >\n <Text\n className={cn(\n 'text-sm text-center',\n hour === internalHour\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n {hour}\n </Text>\n </Pressable>\n ))}\n </ScrollView>\n </View>\n\n {/* Minutes */}\n <View className='flex-1'>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 text-center mb-2'>\n Min\n </Text>\n <ScrollView className='h-48 border border-gray-200 dark:border-gray-700 rounded'>\n {minuteOptions.map(minute => (\n <Pressable\n key={minute}\n onPress={() => {\n setInternalMinute(minute);\n handleTimeChange(\n internalHour,\n minute,\n use12Hour ? period : undefined\n );\n }}\n className={cn(\n 'px-3 py-2',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n minute === internalMinute &&\n 'bg-blue-100 dark:bg-blue-900/30'\n )}\n >\n <Text\n className={cn(\n 'text-sm text-center',\n minute === internalMinute\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n {minute}\n </Text>\n </Pressable>\n ))}\n </ScrollView>\n </View>\n\n {/* AM/PM */}\n {use12Hour && (\n <View className='w-16'>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 text-center mb-2'>\n {' '}\n </Text>\n <View className='h-48 justify-center gap-2'>\n <Pressable\n onPress={() => {\n setPeriod('AM');\n handleTimeChange(\n internalHour,\n internalMinute,\n 'AM'\n );\n }}\n className={cn(\n 'px-3 py-2 rounded',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n period === 'AM' && 'bg-blue-100 dark:bg-blue-900/30'\n )}\n >\n <Text\n className={cn(\n 'text-sm text-center',\n period === 'AM'\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n AM\n </Text>\n </Pressable>\n <Pressable\n onPress={() => {\n setPeriod('PM');\n handleTimeChange(\n internalHour,\n internalMinute,\n 'PM'\n );\n }}\n className={cn(\n 'px-3 py-2 rounded',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n period === 'PM' && 'bg-blue-100 dark:bg-blue-900/30'\n )}\n >\n <Text\n className={cn(\n 'text-sm text-center',\n period === 'PM'\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n PM\n </Text>\n </Pressable>\n </View>\n </View>\n )}\n </View>\n\n {/* Done button */}\n <View className='p-3 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={() => setIsOpen(false)}\n className='items-center py-3'\n >\n <Text className='text-sm font-medium text-blue-600 dark:text-blue-400'>\n Done\n </Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n TextInput,\n Pressable,\n Modal,\n ScrollView,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ComboboxOption {\n /** Option value */\n value: string;\n /** Option label */\n label: string;\n /** Disabled state */\n disabled?: boolean;\n}\n\nexport interface ComboboxProps {\n /** Available options */\n options: ComboboxOption[];\n /** Selected value */\n value?: string;\n /** Change handler */\n onChange: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** Empty state message */\n emptyMessage?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Combobox Component\n *\n * Searchable select dropdown.\n * Combines input and select functionality.\n *\n * @example\n * ```tsx\n * <Combobox\n * options={[\n * { value: 'apple', label: 'Apple' },\n * { value: 'banana', label: 'Banana' },\n * { value: 'orange', label: 'Orange' }\n * ]}\n * value={selectedFruit}\n * onChange={setSelectedFruit}\n * placeholder=\"Select a fruit...\"\n * />\n * ```\n */\nexport const Combobox: React.FC<ComboboxProps> = ({\n options,\n value,\n onChange,\n placeholder = 'Select option...',\n searchPlaceholder = 'Search...',\n emptyMessage = 'No results found.',\n disabled = false,\n className,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n\n // Filter options based on search query\n const filteredOptions = options.filter(option =>\n option.label.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n // Get selected option label\n const selectedOption = options.find(opt => opt.value === value);\n\n const handleSelect = useCallback(\n (optionValue: string, optionDisabled?: boolean) => {\n if (optionDisabled) return;\n onChange(optionValue);\n setIsOpen(false);\n setSearchQuery('');\n },\n [onChange]\n );\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n setSearchQuery('');\n }, []);\n\n return (\n <View className={cn('w-full', className)}>\n {/* Trigger Button */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center justify-between px-3 py-2',\n 'bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={placeholder}\n accessibilityState={{ disabled, expanded: isOpen }}\n >\n <Text\n className={cn(\n 'flex-1 text-sm',\n selectedOption\n ? 'text-gray-900 dark:text-white'\n : 'text-gray-500 dark:text-gray-400'\n )}\n numberOfLines={1}\n >\n {selectedOption ? selectedOption.label : placeholder}\n </Text>\n <Text className='text-gray-600 dark:text-gray-400 ml-2'>▼</Text>\n </Pressable>\n\n {/* Dropdown Modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={handleClose}\n >\n <TouchableWithoutFeedback onPress={handleClose}>\n <View className='flex-1 justify-center px-4 bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-lg max-h-[70%] shadow-xl'>\n {/* Search Input */}\n <View className='p-3 border-b border-gray-200 dark:border-gray-700'>\n <TextInput\n value={searchQuery}\n onChangeText={setSearchQuery}\n placeholder={searchPlaceholder}\n placeholderTextColor='#9ca3af'\n autoFocus\n className='px-3 py-2 text-sm bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white rounded-md'\n />\n </View>\n\n {/* Options List */}\n <ScrollView className='max-h-80'>\n {filteredOptions.length === 0 ? (\n <View className='px-3 py-4 items-center'>\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n {emptyMessage}\n </Text>\n </View>\n ) : (\n filteredOptions.map(option => (\n <Pressable\n key={option.value}\n onPress={() =>\n handleSelect(option.value, option.disabled)\n }\n disabled={option.disabled}\n className={cn(\n 'px-4 py-3',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n option.disabled && 'opacity-50',\n option.value === value &&\n 'bg-blue-50 dark:bg-blue-900/30'\n )}\n accessibilityRole='button'\n accessibilityState={{\n selected: option.value === value,\n disabled: option.disabled,\n }}\n >\n <Text\n className={cn(\n 'text-sm',\n option.value === value\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n {option.label}\n </Text>\n </Pressable>\n ))\n )}\n </ScrollView>\n\n {/* Close button */}\n <View className='p-3 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={handleClose}\n className='items-center py-2'\n accessibilityRole='button'\n accessibilityLabel='Close'\n >\n <Text className='text-sm font-medium text-gray-600 dark:text-gray-400'>\n Cancel\n </Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TreeNode {\n /** Node ID */\n id: string;\n /** Node label */\n label: string;\n /** Node icon */\n icon?: React.ReactNode;\n /** Child nodes */\n children?: TreeNode[];\n /** Disabled state */\n disabled?: boolean;\n}\n\nexport interface TreeViewProps {\n /** Tree data */\n data: TreeNode[];\n /** Selected node ID */\n selectedId?: string;\n /** Selection handler */\n onSelect?: (node: TreeNode) => void;\n /** Expanded node IDs */\n expandedIds?: string[];\n /** Expand handler */\n onExpand?: (nodeId: string) => void;\n /** Default expanded */\n defaultExpanded?: boolean;\n /** Show lines */\n showLines?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TreeView Component\n *\n * Hierarchical tree view with expand/collapse.\n * Supports selection, custom icons, and indentation lines.\n *\n * @example\n * ```tsx\n * <TreeView\n * data={fileTree}\n * selectedId={selectedNode}\n * onSelect={handleSelect}\n * showLines\n * />\n * ```\n */\nexport const TreeView: React.FC<TreeViewProps> = ({\n data,\n selectedId,\n onSelect,\n expandedIds: controlledExpandedIds,\n onExpand,\n defaultExpanded = false,\n showLines = false,\n className,\n}) => {\n const [internalExpandedIds, setInternalExpandedIds] = useState<Set<string>>(\n new Set(defaultExpanded ? data.map(node => node.id) : [])\n );\n\n const expandedIds =\n controlledExpandedIds !== undefined\n ? new Set(controlledExpandedIds)\n : internalExpandedIds;\n\n const toggleExpand = useCallback(\n (nodeId: string) => {\n if (controlledExpandedIds !== undefined && onExpand) {\n onExpand(nodeId);\n } else {\n setInternalExpandedIds(prev => {\n const newSet = new Set(prev);\n if (newSet.has(nodeId)) {\n newSet.delete(nodeId);\n } else {\n newSet.add(nodeId);\n }\n return newSet;\n });\n }\n },\n [controlledExpandedIds, onExpand]\n );\n\n const handleSelect = useCallback(\n (node: TreeNode) => {\n if (!node.disabled && onSelect) {\n onSelect(node);\n }\n },\n [onSelect]\n );\n\n const renderNode = (node: TreeNode, level: number = 0) => {\n const hasChildren = node.children && node.children.length > 0;\n const isExpanded = expandedIds.has(node.id);\n const isSelected = selectedId === node.id;\n\n return (\n <View key={node.id}>\n {/* Node item */}\n <Pressable\n onPress={() => handleSelect(node)}\n disabled={node.disabled}\n className={cn(\n 'flex-row items-center gap-2 px-2 py-1.5 rounded-md',\n !node.disabled && 'active:bg-gray-100 dark:active:bg-gray-800',\n isSelected && 'bg-blue-50 dark:bg-blue-900/30',\n node.disabled && 'opacity-50'\n )}\n style={{ paddingLeft: level * 24 + 8 }}\n accessibilityRole='button'\n accessibilityState={{ selected: isSelected, disabled: node.disabled }}\n >\n {/* Expand/collapse button */}\n {hasChildren ? (\n <Pressable\n onPress={() => toggleExpand(node.id)}\n className='w-4 h-4 items-center justify-center active:bg-gray-200 dark:active:bg-gray-700 rounded'\n hitSlop={8}\n accessibilityRole='button'\n accessibilityLabel={isExpanded ? 'Collapse' : 'Expand'}\n >\n <Text\n className={cn(\n 'text-xs text-gray-600 dark:text-gray-400',\n isExpanded && 'rotate-90'\n )}\n >\n ▶\n </Text>\n </Pressable>\n ) : (\n <View className='w-4 h-4' />\n )}\n\n {/* Icon */}\n {node.icon && (\n <View className='w-4 h-4 flex-shrink-0'>{node.icon}</View>\n )}\n\n {/* Label */}\n <Text\n className={cn(\n 'flex-1 text-sm',\n isSelected\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n {node.label}\n </Text>\n </Pressable>\n\n {/* Children */}\n {hasChildren && isExpanded && (\n <View\n className={cn(\n showLines &&\n 'border-l-2 border-gray-200 dark:border-gray-700 ml-2'\n )}\n >\n {node.children!.map(child => renderNode(child, level + 1))}\n </View>\n )}\n </View>\n );\n };\n\n return (\n <View className={cn('w-full', className)}>\n {data.map(node => renderNode(node, 0))}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport { View, Text, Pressable, Linking } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface AddressLinkProps {\n /** The blockchain address to display */\n address: string;\n /** Chain ID for EVM chains (positive) or Solana chains (negative) */\n chainId?: number;\n /** Block explorer base URL (if not using chainId) */\n explorerUrl?: string;\n /** Label to display before the address */\n label?: string;\n /** Display format: 'short' (default), 'medium', or 'full' */\n format?: 'short' | 'medium' | 'full';\n /** Show copy button */\n showCopy?: boolean;\n /** Show explorer link button */\n showExplorer?: boolean;\n /** Custom copy handler - receives address string */\n onCopy?: (address: string) => Promise<void>;\n /** Custom className */\n className?: string;\n}\n\n/**\n * Get block explorer URL for an address\n */\nconst getExplorerUrl = (\n address: string,\n chainId?: number,\n explorerUrl?: string\n): string | null => {\n if (explorerUrl) {\n return `${explorerUrl}/address/${address}`;\n }\n\n if (!chainId) {\n return null;\n }\n\n // Solana chains (negative chainIds)\n if (chainId < 0) {\n const cluster =\n chainId === -101\n ? ''\n : chainId === -102\n ? '?cluster=devnet'\n : '?cluster=testnet';\n return `https://explorer.solana.com/address/${address}${cluster}`;\n }\n\n // EVM chains\n const explorerMap: Record<number, string> = {\n 1: 'https://etherscan.io',\n 11155111: 'https://sepolia.etherscan.io',\n 5: 'https://goerli.etherscan.io',\n 137: 'https://polygonscan.com',\n 80002: 'https://amoy.polygonscan.com',\n 42161: 'https://arbiscan.io',\n 421614: 'https://sepolia.arbiscan.io',\n 10: 'https://optimistic.etherscan.io',\n 11155420: 'https://sepolia-optimism.etherscan.io',\n 8453: 'https://basescan.org',\n 84532: 'https://sepolia.basescan.org',\n };\n\n const baseUrl = explorerMap[chainId];\n if (!baseUrl) {\n return null;\n }\n\n return `${baseUrl}/address/${address}`;\n};\n\n/**\n * Format address based on display format\n */\nconst formatAddress = (\n address: string,\n format: 'short' | 'medium' | 'full'\n): string => {\n if (format === 'full') {\n return address;\n }\n\n if (format === 'medium') {\n return `${address.substring(0, 10)}...${address.substring(address.length - 8)}`;\n }\n\n return `${address.substring(0, 6)}...${address.substring(address.length - 4)}`;\n};\n\n/**\n * AddressLink Component\n *\n * Displays a blockchain address with copy and block explorer link functionality.\n * Supports both EVM chains and Solana chains.\n *\n * @example\n * ```tsx\n * <AddressLink\n * address=\"0x1234...5678\"\n * chainId={1}\n * showCopy\n * showExplorer\n * />\n * ```\n */\nexport const AddressLink: React.FC<AddressLinkProps> = ({\n address,\n chainId,\n explorerUrl,\n label,\n format = 'short',\n showCopy = true,\n showExplorer = true,\n onCopy,\n className,\n}) => {\n const [copied, setCopied] = useState(false);\n\n const formattedAddress = formatAddress(address, format);\n const explorerLink = getExplorerUrl(address, chainId, explorerUrl);\n\n const handleCopy = useCallback(async () => {\n if (!onCopy) return;\n try {\n await onCopy(address);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Copy failed\n }\n }, [address, onCopy]);\n\n const handleOpenExplorer = useCallback(() => {\n if (explorerLink) {\n Linking.openURL(explorerLink);\n }\n }, [explorerLink]);\n\n return (\n <View className={cn('flex-row items-center gap-2', className)}>\n {label && (\n <Text className='text-sm text-gray-600 dark:text-gray-400'>\n {label}:\n </Text>\n )}\n\n <Text\n className={cn(\n 'font-mono text-sm text-gray-900 dark:text-white',\n format === 'full' && 'flex-1'\n )}\n numberOfLines={format === 'full' ? undefined : 1}\n >\n {formattedAddress}\n </Text>\n\n <View className='flex-row items-center gap-1'>\n {showCopy && onCopy && (\n <Pressable\n onPress={handleCopy}\n className='p-1 rounded active:bg-gray-100 dark:active:bg-gray-800'\n accessibilityRole='button'\n accessibilityLabel={copied ? 'Copied!' : 'Copy address'}\n >\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n {copied ? '✓' : '📋'}\n </Text>\n </Pressable>\n )}\n\n {showExplorer && explorerLink && (\n <Pressable\n onPress={handleOpenExplorer}\n className='p-1 rounded active:bg-gray-100 dark:active:bg-gray-800'\n accessibilityRole='link'\n accessibilityLabel='View on block explorer'\n >\n <Text className='text-sm text-blue-600 dark:text-blue-400'>↗</Text>\n </Pressable>\n )}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, ScrollView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CodeDisplayProps {\n /** Code or text to display */\n children: React.ReactNode;\n /** Visual variant */\n variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'neutral';\n /** Size variant */\n size?: 'xs' | 'sm' | 'md' | 'lg';\n /** Display as inline or block */\n inline?: boolean;\n /** Text alignment (for block display) */\n align?: 'left' | 'center' | 'right';\n /** Whether to enable text wrapping */\n wrap?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * CodeDisplay Component\n *\n * Displays code, wallet addresses, or monospace text in a styled container.\n * Commonly used for displaying blockchain addresses, code snippets, or\n * technical identifiers.\n *\n * @example\n * ```tsx\n * <CodeDisplay variant=\"primary\" size=\"lg\" align=\"center\">\n * wallet@example.com\n * </CodeDisplay>\n * ```\n *\n * @example\n * ```tsx\n * <CodeDisplay variant=\"success\" inline>\n * 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb\n * </CodeDisplay>\n * ```\n */\nexport const CodeDisplay: React.FC<CodeDisplayProps> = ({\n children,\n variant = 'primary',\n size = 'md',\n inline = false,\n align = 'left',\n wrap = false,\n className,\n}) => {\n // Color variant configurations\n const variantClasses = {\n primary: 'text-blue-600 dark:text-blue-400 bg-blue-50 dark:bg-blue-900/30',\n secondary:\n 'text-purple-600 dark:text-purple-400 bg-purple-50 dark:bg-purple-900/30',\n success:\n 'text-green-600 dark:text-green-400 bg-green-50 dark:bg-green-900/30',\n warning:\n 'text-yellow-700 dark:text-yellow-400 bg-yellow-50 dark:bg-yellow-900/30',\n neutral: 'text-gray-700 dark:text-gray-300 bg-gray-100 dark:bg-gray-800',\n };\n\n // Size configurations\n const sizeClasses = {\n xs: {\n text: 'text-xs',\n padding: inline ? 'px-1.5 py-0.5' : 'px-2 py-1',\n },\n sm: {\n text: 'text-sm',\n padding: inline ? 'px-2 py-0.5' : 'px-3 py-1.5',\n },\n md: {\n text: 'text-base',\n padding: inline ? 'px-2.5 py-1' : 'px-4 py-2',\n },\n lg: {\n text: 'text-lg',\n padding: inline ? 'px-3 py-1' : 'px-4 py-2',\n },\n };\n\n // Text alignment classes\n const alignClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n };\n\n const sizeConfig = sizeClasses[size];\n\n // Extract background and text color classes\n const [textColorClass, bgClass] = variantClasses[variant].split(' ');\n\n if (inline) {\n return (\n <Text\n className={cn(\n 'font-mono rounded-lg',\n textColorClass,\n bgClass,\n sizeConfig.text,\n sizeConfig.padding,\n className\n )}\n >\n {children}\n </Text>\n );\n }\n\n const content = (\n <Text\n className={cn(\n 'font-mono',\n textColorClass,\n sizeConfig.text,\n !inline && alignClasses[align],\n wrap ? 'flex-wrap' : ''\n )}\n numberOfLines={wrap ? undefined : 1}\n >\n {children}\n </Text>\n );\n\n if (wrap) {\n return (\n <View\n className={cn('rounded-lg', bgClass, sizeConfig.padding, className)}\n >\n {content}\n </View>\n );\n }\n\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n className={cn('rounded-lg', bgClass, className)}\n contentContainerStyle={{ padding: 0 }}\n >\n <View className={sizeConfig.padding}>{content}</View>\n </ScrollView>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Modal,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { Calendar } from '../Calendar';\n\nexport interface DateInputProps {\n /** Current value (ISO date string YYYY-MM-DD or Date object) */\n value: string | Date;\n /** Callback when value changes */\n onChange: (value: string) => void;\n /** Minimum date */\n minDate?: Date;\n /** Maximum date */\n maxDate?: Date;\n /** Disabled state */\n disabled?: boolean;\n /** Placeholder text */\n placeholder?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * DateInput Component\n *\n * Date input field that opens a calendar picker.\n * Displays selected date in a readable format.\n *\n * @example\n * ```tsx\n * <DateInput\n * value={startDate}\n * onChange={setStartDate}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <DateInput\n * value={appointmentDate}\n * onChange={setAppointmentDate}\n * minDate={new Date()}\n * placeholder=\"Select date\"\n * />\n * ```\n */\nexport const DateInput: React.FC<DateInputProps> = ({\n value,\n onChange,\n minDate,\n maxDate,\n disabled = false,\n placeholder = 'Select date',\n size = 'md',\n className,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n\n // Size configurations\n const sizeClasses = {\n sm: 'py-1.5 px-3 text-sm',\n md: 'py-2 px-4 text-base',\n lg: 'py-3 px-4 text-lg',\n };\n\n // Convert value to Date\n const dateValue =\n value instanceof Date ? value : value ? new Date(value) : null;\n\n // Format date for display\n const formatDisplay = (date: Date | null): string => {\n if (!date) return '';\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n };\n\n // Handle date selection\n const handleDateChange = useCallback(\n (date: Date) => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n onChange(`${year}-${month}-${day}`);\n setIsOpen(false);\n },\n [onChange]\n );\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n return (\n <View className={cn('w-full', className)}>\n {/* Trigger Button */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center justify-between',\n 'bg-white dark:bg-gray-800',\n 'border border-gray-300 dark:border-gray-600',\n 'rounded-lg',\n sizeClasses[size],\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={placeholder}\n accessibilityState={{ disabled }}\n >\n <Text\n className={cn(\n 'flex-1',\n dateValue\n ? 'text-gray-900 dark:text-gray-100'\n : 'text-gray-400 dark:text-gray-500'\n )}\n >\n {dateValue ? formatDisplay(dateValue) : placeholder}\n </Text>\n <Text className='text-gray-400 dark:text-gray-500 ml-2'>📅</Text>\n </Pressable>\n\n {/* Calendar Modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={handleClose}\n >\n <TouchableWithoutFeedback onPress={handleClose}>\n <View className='flex-1 justify-center px-4 bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-lg p-4 shadow-xl'>\n <Calendar\n value={dateValue || new Date()}\n onChange={handleDateChange}\n minDate={minDate}\n maxDate={maxDate}\n />\n\n {/* Close button */}\n <View className='mt-4 pt-4 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={handleClose}\n className='items-center py-2'\n accessibilityRole='button'\n accessibilityLabel='Cancel'\n >\n <Text className='text-sm font-medium text-gray-600 dark:text-gray-400'>\n Cancel\n </Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Modal,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { Calendar } from '../Calendar';\nimport { TimePicker } from '../TimePicker';\n\nexport interface DateTimePickerProps {\n /** Date time value */\n value: Date;\n /** Change handler */\n onChange: (value: Date) => void;\n /** Use 12-hour format for time */\n use12Hour?: boolean;\n /** Minute step interval */\n minuteStep?: number;\n /** Minimum date */\n minDate?: Date;\n /** Maximum date */\n maxDate?: Date;\n /** Disabled state */\n disabled?: boolean;\n /** Placeholder text */\n placeholder?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * DateTimePicker Component\n *\n * Combined date and time picker with calendar and time selection.\n * Supports min/max dates and 12/24 hour formats.\n *\n * @example\n * ```tsx\n * <DateTimePicker\n * value={appointment}\n * onChange={setAppointment}\n * use12Hour\n * minDate={new Date()}\n * />\n * ```\n */\nexport const DateTimePicker: React.FC<DateTimePickerProps> = ({\n value,\n onChange,\n use12Hour = false,\n minuteStep = 1,\n minDate,\n maxDate,\n disabled = false,\n placeholder = 'Select date and time',\n className,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [selectedDate, setSelectedDate] = useState<Date>(value);\n\n // Format date time for display\n const formatDisplay = (date: Date): string => {\n const dateStr = date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n\n const hours = date.getHours();\n const minutes = date.getMinutes();\n\n if (use12Hour) {\n const hour12 = hours === 0 ? 12 : hours > 12 ? hours - 12 : hours;\n const period = hours >= 12 ? 'PM' : 'AM';\n return `${dateStr}, ${hour12}:${minutes.toString().padStart(2, '0')} ${period}`;\n }\n\n return `${dateStr}, ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;\n };\n\n // Handle date change\n const handleDateChange = useCallback(\n (date: Date) => {\n const newDateTime = new Date(date);\n newDateTime.setHours(selectedDate.getHours());\n newDateTime.setMinutes(selectedDate.getMinutes());\n setSelectedDate(newDateTime);\n },\n [selectedDate]\n );\n\n // Handle time change\n const handleTimeChange = useCallback(\n (timeStr: string) => {\n const [hours, minutes] = timeStr.split(':').map(Number);\n const newDateTime = new Date(selectedDate);\n newDateTime.setHours(hours);\n newDateTime.setMinutes(minutes);\n setSelectedDate(newDateTime);\n },\n [selectedDate]\n );\n\n // Get time string from date\n const getTimeString = (date: Date): string => {\n const hours = date.getHours();\n const minutes = date.getMinutes();\n return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;\n };\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n setSelectedDate(value);\n }, [value]);\n\n const handleConfirm = useCallback(() => {\n onChange(selectedDate);\n setIsOpen(false);\n }, [selectedDate, onChange]);\n\n const handleOpen = useCallback(() => {\n setSelectedDate(value);\n setIsOpen(true);\n }, [value]);\n\n return (\n <View className={cn('w-full', className)}>\n {/* Trigger Button */}\n <Pressable\n onPress={() => !disabled && handleOpen()}\n disabled={disabled}\n className={cn(\n 'flex-row items-center justify-between px-3 py-2',\n 'bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={placeholder}\n accessibilityState={{ disabled }}\n >\n <Text className='text-sm text-gray-900 dark:text-white'>\n {formatDisplay(value)}\n </Text>\n <Text className='text-gray-600 dark:text-gray-400'>📅</Text>\n </Pressable>\n\n {/* Picker Modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={handleClose}\n >\n <TouchableWithoutFeedback onPress={handleClose}>\n <View className='flex-1 justify-center px-4 bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-lg p-4 shadow-xl'>\n {/* Calendar */}\n <View className='mb-4'>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 mb-2'>\n Select Date\n </Text>\n <Calendar\n value={selectedDate}\n onChange={handleDateChange}\n minDate={minDate}\n maxDate={maxDate}\n />\n </View>\n\n {/* Divider */}\n <View className='h-px bg-gray-200 dark:bg-gray-700 my-3' />\n\n {/* Time picker */}\n <View>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 mb-2'>\n Select Time\n </Text>\n <TimePicker\n value={getTimeString(selectedDate)}\n onChange={handleTimeChange}\n use12Hour={use12Hour}\n minuteStep={minuteStep}\n />\n </View>\n\n {/* Actions */}\n <View className='flex-row gap-2 pt-4 mt-4 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={handleClose}\n className={cn(\n 'flex-1 items-center py-2',\n 'bg-gray-100 dark:bg-gray-800',\n 'rounded-md',\n 'active:bg-gray-200 dark:active:bg-gray-700'\n )}\n accessibilityRole='button'\n accessibilityLabel='Cancel'\n >\n <Text className='text-sm text-gray-700 dark:text-gray-300'>\n Cancel\n </Text>\n </Pressable>\n <Pressable\n onPress={handleConfirm}\n className={cn(\n 'flex-1 items-center py-2',\n 'bg-blue-600 dark:bg-blue-500',\n 'rounded-md',\n 'active:bg-blue-700 dark:active:bg-blue-600'\n )}\n accessibilityRole='button'\n accessibilityLabel='Confirm'\n >\n <Text className='text-sm text-white font-medium'>OK</Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useCallback } from 'react';\nimport {\n View,\n Text,\n FlatList,\n ActivityIndicator,\n Pressable,\n RefreshControl,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface InfiniteScrollProps<T> {\n /** Data items to render */\n data: T[];\n /** Render function for each item */\n renderItem: (item: T, index: number) => React.ReactNode;\n /** Key extractor for list items */\n keyExtractor: (item: T, index: number) => string;\n /** Load more callback */\n onLoadMore: () => void | Promise<void>;\n /** Loading state */\n loading?: boolean;\n /** Has more data */\n hasMore?: boolean;\n /** Pull to refresh handler */\n onRefresh?: () => void | Promise<void>;\n /** Refreshing state */\n refreshing?: boolean;\n /** Loading component */\n loader?: React.ReactNode;\n /** End message component */\n endMessage?: React.ReactNode;\n /** Empty state component */\n emptyComponent?: React.ReactNode;\n /** List header component */\n headerComponent?: React.ReactNode;\n /** Threshold to trigger load more (0-1) */\n threshold?: number;\n /** Horizontal scroll */\n horizontal?: boolean;\n /** Show scroll to top button */\n showScrollTop?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * InfiniteScroll Component\n *\n * FlatList wrapper with infinite scrolling support.\n * Automatically loads more data when approaching the end.\n *\n * @example\n * ```tsx\n * <InfiniteScroll\n * data={items}\n * renderItem={(item) => <ItemCard {...item} />}\n * keyExtractor={(item) => item.id}\n * onLoadMore={loadMoreItems}\n * loading={isLoading}\n * hasMore={hasNextPage}\n * />\n * ```\n */\nexport function InfiniteScroll<T>({\n data,\n renderItem,\n keyExtractor,\n onLoadMore,\n loading = false,\n hasMore = true,\n onRefresh,\n refreshing = false,\n loader,\n endMessage,\n emptyComponent,\n headerComponent,\n threshold = 0.5,\n horizontal = false,\n showScrollTop = false,\n className,\n}: InfiniteScrollProps<T>) {\n const flatListRef = React.useRef<FlatList>(null);\n const [showScrollTopButton, setShowScrollTopButton] = React.useState(false);\n\n // Handle end reached\n const handleEndReached = useCallback(() => {\n if (!loading && hasMore) {\n onLoadMore();\n }\n }, [loading, hasMore, onLoadMore]);\n\n // Handle scroll for scroll-to-top button\n const handleScroll = useCallback(\n (event: { nativeEvent: { contentOffset: { y: number } } }) => {\n if (showScrollTop && !horizontal) {\n setShowScrollTopButton(event.nativeEvent.contentOffset.y > 300);\n }\n },\n [showScrollTop, horizontal]\n );\n\n // Scroll to top\n const scrollToTop = useCallback(() => {\n flatListRef.current?.scrollToOffset({ offset: 0, animated: true });\n }, []);\n\n // Default empty component\n const defaultEmptyComponent = (\n <View className='flex-1 justify-center items-center py-8'>\n <Text className='text-gray-500 dark:text-gray-400'>No items found</Text>\n </View>\n );\n\n // Footer component\n const ListFooterComponent = useCallback(() => {\n const footerLoader = (\n <View className='flex-row justify-center items-center py-4'>\n <ActivityIndicator size='small' color='#3b82f6' />\n <Text className='ml-2 text-sm text-gray-600 dark:text-gray-400'>\n Loading...\n </Text>\n </View>\n );\n\n const footerEndMessage = (\n <View className='flex-row justify-center items-center py-4'>\n <Text className='text-sm text-gray-600 dark:text-gray-400'>\n No more items to load\n </Text>\n </View>\n );\n\n if (loading) {\n return <>{loader || footerLoader}</>;\n }\n if (!hasMore && data.length > 0) {\n return <>{endMessage || footerEndMessage}</>;\n }\n return null;\n }, [loading, hasMore, data.length, loader, endMessage]);\n\n return (\n <View className={cn('flex-1', className)}>\n <FlatList\n ref={flatListRef}\n data={data}\n renderItem={({ item, index }: { item: T; index: number }) => (\n <>{renderItem(item, index)}</>\n )}\n keyExtractor={keyExtractor}\n onEndReached={handleEndReached}\n onEndReachedThreshold={threshold}\n horizontal={horizontal}\n showsVerticalScrollIndicator={!horizontal}\n showsHorizontalScrollIndicator={horizontal}\n ListHeaderComponent={headerComponent ? <>{headerComponent}</> : null}\n ListFooterComponent={ListFooterComponent}\n ListEmptyComponent={\n !loading ? <>{emptyComponent || defaultEmptyComponent}</> : null\n }\n onScroll={showScrollTop ? handleScroll : undefined}\n scrollEventThrottle={showScrollTop ? 16 : undefined}\n refreshControl={\n onRefresh ? (\n <RefreshControl refreshing={refreshing} onRefresh={onRefresh} />\n ) : undefined\n }\n />\n\n {/* Scroll to top button */}\n {showScrollTop && showScrollTopButton && (\n <Pressable\n onPress={scrollToTop}\n className={cn(\n 'absolute bottom-4 right-4',\n 'w-12 h-12 rounded-full',\n 'bg-blue-600 dark:bg-blue-500',\n 'items-center justify-center',\n 'shadow-lg',\n 'active:bg-blue-700 dark:active:bg-blue-600'\n )}\n accessibilityRole='button'\n accessibilityLabel='Scroll to top'\n >\n <Text className='text-white text-lg'>↑</Text>\n </Pressable>\n )}\n </View>\n );\n}\n","import * as React from 'react';\nimport { useCallback } from 'react';\nimport { Text, Pressable, Linking } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ExternalLinkProps {\n /** Link URL */\n href: string;\n /** Link text content */\n children: React.ReactNode;\n /** Show external icon */\n showIcon?: boolean;\n /** Icon position */\n iconPosition?: 'left' | 'right';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'default' | 'primary' | 'muted';\n /** Additional className */\n className?: string;\n /** Press handler (called before navigation) */\n onPress?: () => void;\n}\n\n/**\n * ExternalLink Component\n *\n * Opens external URLs in the device browser.\n * Includes optional external link icon indicator.\n *\n * @example\n * ```tsx\n * <ExternalLink href=\"https://example.com\">\n * Visit Example\n * </ExternalLink>\n * ```\n *\n * @example\n * ```tsx\n * <ExternalLink\n * href=\"https://docs.example.com\"\n * variant=\"primary\"\n * iconPosition=\"left\"\n * >\n * Read Documentation\n * </ExternalLink>\n * ```\n */\nexport const ExternalLink: React.FC<ExternalLinkProps> = ({\n href,\n children,\n showIcon = true,\n iconPosition = 'right',\n size = 'md',\n variant = 'default',\n className,\n onPress,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n };\n\n // Color variant configurations\n const variantClasses = {\n default: 'text-blue-600 dark:text-blue-400',\n primary: 'text-blue-700 dark:text-blue-300 font-semibold',\n muted: 'text-gray-600 dark:text-gray-400',\n };\n\n const handlePress = useCallback(async () => {\n onPress?.();\n try {\n const canOpen = await Linking.canOpenURL(href);\n if (canOpen) {\n await Linking.openURL(href);\n }\n } catch {\n // Failed to open URL\n }\n }, [href, onPress]);\n\n return (\n <Pressable\n onPress={handlePress}\n className={cn('flex-row items-center gap-1', className)}\n accessibilityRole='link'\n accessibilityLabel={\n typeof children === 'string' ? children : 'External link'\n }\n accessibilityHint='Opens in external browser'\n >\n {showIcon && iconPosition === 'left' && (\n <Text className={cn(sizeClasses[size], variantClasses[variant])}>\n ↗\n </Text>\n )}\n <Text\n className={cn(sizeClasses[size], variantClasses[variant], 'underline')}\n >\n {children}\n </Text>\n {showIcon && iconPosition === 'right' && (\n <Text className={cn(sizeClasses[size], variantClasses[variant])}>\n ↗\n </Text>\n )}\n </Pressable>\n );\n};\n","import * as React from 'react';\nimport { useState, useEffect, useCallback } from 'react';\nimport {\n View,\n Text,\n TextInput,\n Pressable,\n Modal,\n TouchableWithoutFeedback,\n KeyboardAvoidingView,\n Platform,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TextInputModalProps {\n /** Modal visibility */\n isOpen: boolean;\n /** Close handler */\n onClose: () => void;\n /** Submit handler */\n onSubmit: (value: string) => void | Promise<void>;\n /** Modal title */\n title: string;\n /** Modal description */\n description: string;\n /** Input placeholder */\n placeholder?: string;\n /** Initial input value */\n initialValue?: string;\n /** Cancel button text */\n cancelText?: string;\n /** Confirm button text */\n confirmText?: string;\n /** Loading state */\n isLoading?: boolean;\n /** Loading button text */\n loadingText?: string;\n /** Max input length */\n maxLength?: number;\n /** Required validation */\n required?: boolean;\n /** Custom validation function */\n validate?: (value: string) => string | null;\n}\n\n/**\n * TextInputModal Component\n *\n * Modal dialog with text input for collecting user input.\n * Supports validation, loading states, and customization.\n *\n * @example\n * ```tsx\n * <TextInputModal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * onSubmit={handleSubmit}\n * title=\"Rename Item\"\n * description=\"Enter a new name for this item\"\n * placeholder=\"New name...\"\n * initialValue={currentName}\n * />\n * ```\n */\nexport const TextInputModal: React.FC<TextInputModalProps> = ({\n isOpen,\n onClose,\n onSubmit,\n title,\n description,\n placeholder = '',\n initialValue = '',\n cancelText = 'Cancel',\n confirmText = 'Confirm',\n isLoading = false,\n loadingText = 'Processing...',\n maxLength,\n required = true,\n validate,\n}) => {\n const [value, setValue] = useState(initialValue);\n const [error, setError] = useState<string | null>(null);\n\n // Reset value when modal opens\n useEffect(() => {\n if (isOpen) {\n setValue(initialValue);\n setError(null);\n }\n }, [isOpen, initialValue]);\n\n const handleSubmit = useCallback(async () => {\n // Clear previous errors\n setError(null);\n\n // Validate required\n if (required && !value.trim()) {\n setError('This field is required');\n return;\n }\n\n // Custom validation\n if (validate) {\n const validationError = validate(value);\n if (validationError) {\n setError(validationError);\n return;\n }\n }\n\n // Submit\n try {\n await onSubmit(value.trim());\n } catch (err) {\n setError(err instanceof Error ? err.message : 'An error occurred');\n }\n }, [value, required, validate, onSubmit]);\n\n const handleCancel = useCallback(() => {\n setValue(initialValue);\n setError(null);\n onClose();\n }, [initialValue, onClose]);\n\n const canSubmit = required ? value.trim().length > 0 : true;\n\n return (\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={isLoading ? undefined : handleCancel}\n >\n <TouchableWithoutFeedback onPress={isLoading ? undefined : handleCancel}>\n <View className='flex-1 justify-center px-4 bg-black/50'>\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n >\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-lg shadow-xl'>\n {/* Content */}\n <View className='p-4'>\n <Text className='text-lg font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n <Text className='text-sm text-gray-600 dark:text-gray-400 mt-2 mb-4'>\n {description}\n </Text>\n\n <TextInput\n value={value}\n onChangeText={setValue}\n placeholder={placeholder}\n placeholderTextColor='#9ca3af'\n maxLength={maxLength}\n editable={!isLoading}\n autoFocus\n className={cn(\n 'px-3 py-2 text-sm',\n 'bg-gray-50 dark:bg-gray-800',\n 'text-gray-900 dark:text-white',\n 'border rounded-md',\n error\n ? 'border-red-500 dark:border-red-400'\n : 'border-gray-300 dark:border-gray-600'\n )}\n accessibilityLabel={placeholder || title}\n />\n\n {error && (\n <Text\n className='text-xs text-red-600 dark:text-red-400 mt-2'\n accessibilityRole='alert'\n >\n {error}\n </Text>\n )}\n </View>\n\n {/* Footer */}\n <View className='flex-row gap-2 p-4 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={handleCancel}\n disabled={isLoading}\n className={cn(\n 'flex-1 items-center py-2',\n 'bg-gray-100 dark:bg-gray-800',\n 'rounded-md',\n 'active:bg-gray-200 dark:active:bg-gray-700',\n isLoading && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={cancelText}\n >\n <Text className='text-sm text-gray-700 dark:text-gray-300'>\n {cancelText}\n </Text>\n </Pressable>\n\n <Pressable\n onPress={handleSubmit}\n disabled={!canSubmit || isLoading}\n className={cn(\n 'flex-1 items-center py-2',\n 'bg-blue-600 dark:bg-blue-500',\n 'rounded-md',\n 'active:bg-blue-700 dark:active:bg-blue-600',\n (!canSubmit || isLoading) && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={confirmText}\n >\n <Text className='text-sm text-white font-medium'>\n {isLoading ? loadingText : confirmText}\n </Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </KeyboardAvoidingView>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n );\n};\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { Alert } from '../Alert';\n\nexport interface FormAlertsProps {\n /** Success message to display */\n successMessage?: string;\n /** Error message to display */\n errorMessage?: string;\n /** Title for success alert */\n successTitle?: string;\n /** Title for error alert */\n errorTitle?: string;\n /** Auto-dismiss success message after milliseconds (0 = no auto-dismiss) */\n autoDismissDelay?: number;\n /** Callback when success message should be cleared */\n onSuccessDismiss?: () => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * FormAlerts Component\n *\n * Displays success and error alerts for form submissions.\n * Success messages can auto-dismiss after a configured delay.\n *\n * @example\n * ```tsx\n * const [success, setSuccess] = useState('');\n * const [error, setError] = useState('');\n *\n * <FormAlerts\n * successMessage={success}\n * errorMessage={error}\n * onSuccessDismiss={() => setSuccess('')}\n * autoDismissDelay={3000}\n * />\n * ```\n */\nexport const FormAlerts: React.FC<FormAlertsProps> = ({\n successMessage,\n errorMessage,\n successTitle = 'Success',\n errorTitle = 'Error',\n autoDismissDelay = 0,\n onSuccessDismiss,\n className,\n}) => {\n // Auto-dismiss success message\n useEffect(() => {\n if (successMessage && autoDismissDelay > 0 && onSuccessDismiss) {\n const timer = setTimeout(() => {\n onSuccessDismiss();\n }, autoDismissDelay);\n\n return () => clearTimeout(timer);\n }\n }, [successMessage, autoDismissDelay, onSuccessDismiss]);\n\n if (!successMessage && !errorMessage) {\n return null;\n }\n\n return (\n <View className={cn('gap-3', className)}>\n {errorMessage && (\n <Alert variant='error' title={errorTitle} description={errorMessage} />\n )}\n {successMessage && (\n <Alert\n variant='success'\n title={successTitle}\n description={successMessage}\n />\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { ScrollView, View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ScrollAreaProps {\n /** Scrollable content */\n children: React.ReactNode;\n /** Maximum height */\n maxHeight?: number;\n /** Hide scrollbar */\n hideScrollbar?: boolean;\n /** Scroll direction */\n direction?: 'vertical' | 'horizontal' | 'both';\n /** Show scroll indicators */\n showsIndicator?: boolean;\n /** Additional className */\n className?: string;\n /** Content container className */\n contentClassName?: string;\n}\n\n/**\n * ScrollArea Component\n *\n * Container with scrollable content and optional scroll indicators.\n * Provides consistent scrollable areas across the application.\n *\n * @example\n * ```tsx\n * <ScrollArea maxHeight={400}>\n * <View>Long content...</View>\n * </ScrollArea>\n * ```\n *\n * @example\n * ```tsx\n * <ScrollArea direction=\"horizontal\" hideScrollbar>\n * <View className=\"w-[2000px]\">Wide content</View>\n * </ScrollArea>\n * ```\n */\nexport const ScrollArea: React.FC<ScrollAreaProps> = ({\n children,\n maxHeight,\n hideScrollbar = false,\n direction = 'vertical',\n showsIndicator = true,\n className,\n contentClassName,\n}) => {\n const isVertical = direction === 'vertical' || direction === 'both';\n const isHorizontal = direction === 'horizontal' || direction === 'both';\n\n return (\n <View\n className={cn('relative', className)}\n style={maxHeight ? { maxHeight } : undefined}\n >\n <ScrollView\n horizontal={direction === 'horizontal'}\n showsVerticalScrollIndicator={\n isVertical && showsIndicator && !hideScrollbar\n }\n showsHorizontalScrollIndicator={\n isHorizontal && showsIndicator && !hideScrollbar\n }\n scrollEnabled\n nestedScrollEnabled\n contentContainerStyle={\n direction === 'horizontal' ? { flexDirection: 'row' } : undefined\n }\n >\n <View className={contentClassName}>{children}</View>\n </ScrollView>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SectionBadgeProps {\n /** Icon element */\n icon: React.ReactNode;\n /** Badge text */\n text: string;\n /** Visual variant */\n variant?: 'default' | 'premium' | 'primary' | 'light';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * SectionBadge Component\n *\n * Badge with icon for section headers and feature highlights.\n * Commonly used for premium features, new features, or category labels.\n *\n * @example\n * ```tsx\n * <SectionBadge\n * icon={<StarIcon />}\n * text=\"Premium Feature\"\n * variant=\"premium\"\n * />\n * ```\n */\nexport const SectionBadge: React.FC<SectionBadgeProps> = ({\n icon,\n text,\n variant = 'default',\n size = 'md',\n className,\n}) => {\n // Variant color configurations\n const variantClasses = {\n default: 'bg-gray-100 dark:bg-gray-800',\n premium: 'bg-amber-100 dark:bg-amber-900/30',\n primary: 'bg-blue-100 dark:bg-blue-900/30',\n light:\n 'bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700',\n };\n\n const iconColorClasses = {\n default: 'text-gray-600 dark:text-gray-400',\n premium: 'text-amber-600 dark:text-amber-400',\n primary: 'text-blue-600 dark:text-blue-400',\n light: 'text-gray-600 dark:text-gray-400',\n };\n\n const textColorClasses = {\n default: 'text-gray-900 dark:text-white',\n premium: 'text-amber-900 dark:text-amber-100',\n primary: 'text-blue-900 dark:text-blue-100',\n light: 'text-gray-900 dark:text-white',\n };\n\n // Size configurations\n const sizeClasses = {\n sm: {\n container: 'px-4 py-2',\n iconSize: 'w-4 h-4',\n text: 'text-xs',\n },\n md: {\n container: 'px-6 py-3',\n iconSize: 'w-5 h-5',\n text: 'text-sm',\n },\n lg: {\n container: 'px-8 py-4',\n iconSize: 'w-6 h-6',\n text: 'text-base',\n },\n };\n\n const sizeConfig = sizeClasses[size];\n\n return (\n <View\n className={cn(\n 'flex-row items-center rounded-full mb-6',\n variantClasses[variant],\n sizeConfig.container,\n className\n )}\n >\n <View className={cn('mr-2', iconColorClasses[variant])}>{icon}</View>\n <Text\n className={cn(\n 'font-semibold',\n sizeConfig.text,\n textColorClasses[variant]\n )}\n >\n {text}\n </Text>\n </View>\n );\n};\n","import React from 'react';\nimport { View, Text, type ViewProps } from 'react-native';\nimport { cn } from '../lib/utils';\n\nexport type ChainType = 'evm' | 'solana' | 'bitcoin' | 'cosmos';\n\nexport interface ChainBadgeProps extends ViewProps {\n chainType: ChainType;\n size?: 'sm' | 'md' | 'lg';\n showLabel?: boolean;\n}\n\nconst chainConfig: Record<\n ChainType,\n { label: string; emoji: string; bgColor: string; textColor: string }\n> = {\n evm: {\n label: 'EVM',\n emoji: '⟠',\n bgColor:\n 'bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800',\n textColor: 'text-blue-700 dark:text-blue-300',\n },\n solana: {\n label: 'SOL',\n emoji: '◎',\n bgColor:\n 'bg-purple-50 dark:bg-purple-900/20 border-purple-200 dark:border-purple-800',\n textColor: 'text-purple-700 dark:text-purple-300',\n },\n bitcoin: {\n label: 'BTC',\n emoji: '₿',\n bgColor:\n 'bg-orange-50 dark:bg-orange-900/20 border-orange-200 dark:border-orange-800',\n textColor: 'text-orange-700 dark:text-orange-300',\n },\n cosmos: {\n label: 'ATOM',\n emoji: '⚛',\n bgColor:\n 'bg-indigo-50 dark:bg-indigo-900/20 border-indigo-200 dark:border-indigo-800',\n textColor: 'text-indigo-700 dark:text-indigo-300',\n },\n};\n\nconst sizeConfig = {\n sm: { padding: 'px-1.5 py-0.5', text: 'text-xs', gap: 'gap-0.5' },\n md: { padding: 'px-2 py-1', text: 'text-sm', gap: 'gap-1' },\n lg: { padding: 'px-2.5 py-1.5', text: 'text-base', gap: 'gap-1.5' },\n};\n\nexport const ChainBadge: React.FC<ChainBadgeProps> = ({\n chainType,\n size = 'md',\n showLabel = true,\n className,\n ...props\n}) => {\n const chain = chainConfig[chainType];\n const sizeStyles = sizeConfig[size];\n\n return (\n <View\n className={cn(\n 'flex-row items-center rounded-md border',\n chain.bgColor,\n sizeStyles.padding,\n sizeStyles.gap,\n className\n )}\n accessibilityLabel={`${chain.label} chain`}\n {...props}\n >\n <Text className={cn(sizeStyles.text, chain.textColor)}>\n {chain.emoji}\n </Text>\n {showLabel && (\n <Text className={cn('font-medium', sizeStyles.text, chain.textColor)}>\n {chain.label}\n </Text>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable, ActivityIndicator } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ListItemWithActionProps {\n /** Main content/text to display */\n children: React.ReactNode;\n /** Action to perform */\n onAction: () => void;\n /** Action button text */\n actionText?: string;\n /** Action button icon */\n actionIcon?: React.ReactNode;\n /** Whether the action is destructive */\n destructive?: boolean;\n /** Whether the action is in progress */\n isProcessing?: boolean;\n /** Variant of the list item */\n variant?: 'default' | 'compact' | 'elevated';\n /** Additional className */\n className?: string;\n}\n\n/**\n * ListItemWithAction Component\n *\n * Displays a list item with an action button (typically remove/delete).\n * Commonly used for managing lists of items with actions.\n *\n * @example\n * ```tsx\n * <ListItemWithAction\n * onAction={() => handleRemove(item.id)}\n * actionText=\"Remove\"\n * destructive\n * isProcessing={isDeleting}\n * >\n * user@example.com\n * </ListItemWithAction>\n * ```\n */\nexport const ListItemWithAction: React.FC<ListItemWithActionProps> = ({\n children,\n onAction,\n actionText = 'Remove',\n actionIcon,\n destructive = true,\n isProcessing = false,\n variant = 'default',\n className,\n}) => {\n const variantClasses = {\n default: 'bg-gray-50 dark:bg-gray-700',\n compact: 'bg-gray-50 dark:bg-gray-700 py-2 px-3',\n elevated:\n 'bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 shadow-sm',\n };\n\n return (\n <View\n className={cn(\n 'flex-row items-center justify-between p-4 rounded-lg',\n variantClasses[variant],\n className\n )}\n >\n <View className='flex-1 mr-4'>\n {typeof children === 'string' ? (\n <Text className='text-sm text-gray-900 dark:text-white'>\n {children}\n </Text>\n ) : (\n children\n )}\n </View>\n\n <Pressable\n onPress={onAction}\n disabled={isProcessing}\n className={cn(\n 'flex-row items-center px-3 py-1.5 rounded-md',\n destructive\n ? 'active:bg-red-50 dark:active:bg-red-900/20'\n : 'bg-gray-100 dark:bg-gray-600 active:bg-gray-200 dark:active:bg-gray-500',\n isProcessing && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={actionText}\n accessibilityState={{ disabled: isProcessing }}\n >\n {isProcessing ? (\n <ActivityIndicator\n size='small'\n color={destructive ? '#dc2626' : '#6b7280'}\n />\n ) : (\n <>\n {actionIcon && <View className='mr-1'>{actionIcon}</View>}\n <Text\n className={cn(\n 'text-sm font-medium',\n destructive\n ? 'text-red-600 dark:text-red-400'\n : 'text-gray-700 dark:text-gray-300'\n )}\n >\n {actionText}\n </Text>\n </>\n )}\n </Pressable>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Pressable, Modal, StyleSheet } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface OverlayProps {\n /** Whether overlay is visible */\n isOpen: boolean;\n /** Click handler for overlay backdrop */\n onClose?: () => void;\n /** Overlay content */\n children?: React.ReactNode;\n /** Opacity level */\n opacity?: 'light' | 'medium' | 'dark';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Overlay Component\n *\n * Full-screen backdrop overlay with optional content.\n * Typically used with modals, drawers, and popups.\n *\n * @example\n * ```tsx\n * <Overlay isOpen={isModalOpen} onClose={() => setIsModalOpen(false)}>\n * <Modal>Content</Modal>\n * </Overlay>\n * ```\n *\n * @example\n * ```tsx\n * <Overlay isOpen={true} opacity=\"dark\" />\n * ```\n */\nexport const Overlay: React.FC<OverlayProps> = ({\n isOpen,\n onClose,\n children,\n opacity = 'medium',\n className,\n}) => {\n if (!isOpen) return null;\n\n // Opacity configurations\n const opacityClasses = {\n light: 'bg-black/20',\n medium: 'bg-black/50',\n dark: 'bg-black/75',\n };\n\n return (\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={onClose}\n >\n <View style={styles.container}>\n <Pressable\n style={StyleSheet.absoluteFill}\n className={cn(opacityClasses[opacity], className)}\n onPress={onClose}\n accessibilityRole='button'\n accessibilityLabel='Close overlay'\n />\n {children && (\n <View style={styles.content} pointerEvents='box-none'>\n {children}\n </View>\n )}\n </View>\n </Modal>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n content: {\n ...StyleSheet.absoluteFillObject,\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport { View, Text, TextInput, Pressable, ScrollView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TransferListItem {\n /** Item ID */\n id: string;\n /** Item label */\n label: string;\n /** Optional description */\n description?: string;\n /** Disabled state */\n disabled?: boolean;\n}\n\nexport interface TransferListProps {\n /** Available items */\n source: TransferListItem[];\n /** Selected items */\n target: TransferListItem[];\n /** Change handler */\n onChange: (source: TransferListItem[], target: TransferListItem[]) => void;\n /** Source list title */\n sourceTitle?: string;\n /** Target list title */\n targetTitle?: string;\n /** Enable search */\n searchable?: boolean;\n /** Source search placeholder */\n sourceSearchPlaceholder?: string;\n /** Target search placeholder */\n targetSearchPlaceholder?: string;\n /** List height */\n height?: number;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TransferList Component\n *\n * Dual-list component for moving items between available and selected.\n * Supports search, bulk operations, and individual item transfer.\n *\n * @example\n * ```tsx\n * <TransferList\n * source={availableUsers}\n * target={selectedUsers}\n * onChange={(source, target) => {\n * setAvailableUsers(source);\n * setSelectedUsers(target);\n * }}\n * sourceTitle=\"Available Users\"\n * targetTitle=\"Selected Users\"\n * searchable\n * />\n * ```\n */\nexport const TransferList: React.FC<TransferListProps> = ({\n source,\n target,\n onChange,\n sourceTitle = 'Available',\n targetTitle = 'Selected',\n searchable = true,\n sourceSearchPlaceholder = 'Search available...',\n targetSearchPlaceholder = 'Search selected...',\n height = 300,\n disabled = false,\n className,\n}) => {\n const [sourceSearch, setSourceSearch] = useState('');\n const [targetSearch, setTargetSearch] = useState('');\n const [sourceSelected, setSourceSelected] = useState<Set<string>>(new Set());\n const [targetSelected, setTargetSelected] = useState<Set<string>>(new Set());\n\n // Filter items based on search\n const filteredSource = searchable\n ? source.filter(item =>\n item.label.toLowerCase().includes(sourceSearch.toLowerCase())\n )\n : source;\n\n const filteredTarget = searchable\n ? target.filter(item =>\n item.label.toLowerCase().includes(targetSearch.toLowerCase())\n )\n : target;\n\n // Toggle item selection\n const toggleSourceSelection = useCallback((id: string) => {\n setSourceSelected(prev => {\n const newSet = new Set(prev);\n if (newSet.has(id)) {\n newSet.delete(id);\n } else {\n newSet.add(id);\n }\n return newSet;\n });\n }, []);\n\n const toggleTargetSelection = useCallback((id: string) => {\n setTargetSelected(prev => {\n const newSet = new Set(prev);\n if (newSet.has(id)) {\n newSet.delete(id);\n } else {\n newSet.add(id);\n }\n return newSet;\n });\n }, []);\n\n // Move selected items to target\n const moveToTarget = useCallback(() => {\n const itemsToMove = source.filter(item => sourceSelected.has(item.id));\n const newSource = source.filter(item => !sourceSelected.has(item.id));\n const newTarget = [...target, ...itemsToMove];\n onChange(newSource, newTarget);\n setSourceSelected(new Set());\n }, [source, target, sourceSelected, onChange]);\n\n // Move selected items to source\n const moveToSource = useCallback(() => {\n const itemsToMove = target.filter(item => targetSelected.has(item.id));\n const newTarget = target.filter(item => !targetSelected.has(item.id));\n const newSource = [...source, ...itemsToMove];\n onChange(newSource, newTarget);\n setTargetSelected(new Set());\n }, [source, target, targetSelected, onChange]);\n\n // Move all items\n const moveAllToTarget = useCallback(() => {\n onChange([], [...target, ...source]);\n setSourceSelected(new Set());\n }, [source, target, onChange]);\n\n const moveAllToSource = useCallback(() => {\n onChange([...source, ...target], []);\n setTargetSelected(new Set());\n }, [source, target, onChange]);\n\n // Render list panel\n const renderList = (\n items: TransferListItem[],\n title: string,\n selected: Set<string>,\n onToggle: (id: string) => void,\n searchValue: string,\n onSearchChange: (value: string) => void,\n searchPlaceholder: string\n ) => (\n <View className='flex-1 border border-gray-300 dark:border-gray-700 rounded-md bg-white dark:bg-gray-900'>\n {/* Header */}\n <View className='px-3 py-2 border-b border-gray-300 dark:border-gray-700 bg-gray-50 dark:bg-gray-800'>\n <Text className='text-sm font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n <Text className='text-xs text-gray-600 dark:text-gray-400'>\n {items.length} item{items.length !== 1 ? 's' : ''}\n </Text>\n </View>\n\n {/* Search */}\n {searchable && (\n <View className='p-2 border-b border-gray-200 dark:border-gray-700'>\n <TextInput\n value={searchValue}\n onChangeText={onSearchChange}\n placeholder={searchPlaceholder}\n placeholderTextColor='#9ca3af'\n className='px-3 py-2 text-sm bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white border border-gray-300 dark:border-gray-700 rounded-md'\n />\n </View>\n )}\n\n {/* List */}\n <ScrollView style={{ height: searchable ? height - 120 : height - 60 }}>\n {items.length === 0 ? (\n <View className='flex-1 items-center justify-center py-8'>\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n No items\n </Text>\n </View>\n ) : (\n items.map(item => {\n const isSelected = selected.has(item.id);\n\n return (\n <Pressable\n key={item.id}\n onPress={() => !item.disabled && !disabled && onToggle(item.id)}\n disabled={item.disabled || disabled}\n className={cn(\n 'mx-2 my-1 px-3 py-2 rounded-md',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n (item.disabled || disabled) && 'opacity-50',\n isSelected &&\n 'bg-blue-50 dark:bg-blue-900/30 border border-blue-200 dark:border-blue-700'\n )}\n accessibilityRole='checkbox'\n accessibilityState={{\n checked: isSelected,\n disabled: item.disabled || disabled,\n }}\n >\n <View className='flex-row items-start gap-2'>\n {/* Checkbox */}\n <View\n className={cn(\n 'w-4 h-4 border-2 rounded items-center justify-center mt-0.5',\n isSelected\n ? 'bg-blue-600 border-blue-600 dark:bg-blue-500 dark:border-blue-500'\n : 'border-gray-300 dark:border-gray-600'\n )}\n >\n {isSelected && (\n <Text className='text-white text-xs'>✓</Text>\n )}\n </View>\n\n {/* Content */}\n <View className='flex-1'>\n <Text className='text-sm font-medium text-gray-900 dark:text-white'>\n {item.label}\n </Text>\n {item.description && (\n <Text className='text-xs text-gray-600 dark:text-gray-400'>\n {item.description}\n </Text>\n )}\n </View>\n </View>\n </Pressable>\n );\n })\n )}\n </ScrollView>\n </View>\n );\n\n return (\n <View className={cn('flex-row gap-4', className)}>\n {/* Source list */}\n {renderList(\n filteredSource,\n sourceTitle,\n sourceSelected,\n toggleSourceSelection,\n sourceSearch,\n setSourceSearch,\n sourceSearchPlaceholder\n )}\n\n {/* Transfer buttons */}\n <View className='justify-center gap-2'>\n <Pressable\n onPress={moveAllToTarget}\n disabled={disabled || source.length === 0}\n className={cn(\n 'px-3 py-2 bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n 'active:bg-gray-50 dark:active:bg-gray-800',\n (disabled || source.length === 0) && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Move all to selected'\n >\n <Text className='text-gray-700 dark:text-gray-300'>»</Text>\n </Pressable>\n\n <Pressable\n onPress={moveToTarget}\n disabled={disabled || sourceSelected.size === 0}\n className={cn(\n 'px-3 py-2 bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n 'active:bg-gray-50 dark:active:bg-gray-800',\n (disabled || sourceSelected.size === 0) && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Move selected to target'\n >\n <Text className='text-gray-700 dark:text-gray-300'>›</Text>\n </Pressable>\n\n <Pressable\n onPress={moveToSource}\n disabled={disabled || targetSelected.size === 0}\n className={cn(\n 'px-3 py-2 bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n 'active:bg-gray-50 dark:active:bg-gray-800',\n (disabled || targetSelected.size === 0) && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Move selected to source'\n >\n <Text className='text-gray-700 dark:text-gray-300'>‹</Text>\n </Pressable>\n\n <Pressable\n onPress={moveAllToSource}\n disabled={disabled || target.length === 0}\n className={cn(\n 'px-3 py-2 bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n 'active:bg-gray-50 dark:active:bg-gray-800',\n (disabled || target.length === 0) && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Move all to available'\n >\n <Text className='text-gray-700 dark:text-gray-300'>«</Text>\n </Pressable>\n </View>\n\n {/* Target list */}\n {renderList(\n filteredTarget,\n targetTitle,\n targetSelected,\n toggleTargetSelection,\n targetSearch,\n setTargetSearch,\n targetSearchPlaceholder\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable, ScrollView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface FileInfo {\n /** File name */\n name: string;\n /** File size in bytes */\n size: number;\n /** File type/mime */\n type?: string;\n /** File URI (for RN) */\n uri?: string;\n}\n\nexport interface FileInputProps {\n /** Callback when files should be selected (opens picker) */\n onSelectFiles: () => void;\n /** Current files */\n files?: FileInfo[];\n /** Callback to remove a file */\n onRemove?: (index: number) => void;\n /** Disabled state */\n disabled?: boolean;\n /** Show drop zone style */\n showDropZone?: boolean;\n /** Show file list */\n showFileList?: boolean;\n /** Maximum file size in bytes (for display) */\n maxSize?: number;\n /** Button text */\n buttonText?: string;\n /** Drop zone text */\n dropZoneText?: string;\n /** Error message */\n error?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * FileInput Component\n *\n * File input button/zone that triggers file selection callback.\n * The actual file picking should be handled by the parent using\n * expo-document-picker or similar library.\n *\n * @example\n * ```tsx\n * <FileInput\n * onSelectFiles={pickDocuments}\n * files={selectedFiles}\n * onRemove={removeFile}\n * showDropZone\n * />\n * ```\n */\nexport const FileInput: React.FC<FileInputProps> = ({\n onSelectFiles,\n files = [],\n onRemove,\n disabled = false,\n showDropZone = false,\n showFileList = true,\n maxSize,\n buttonText = 'Choose Files',\n dropZoneText = 'Tap to select files',\n error,\n className,\n}) => {\n // Format file size to human-readable string\n const formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];\n };\n\n // Drop zone UI\n if (showDropZone) {\n return (\n <View className={cn('w-full', className)}>\n <Pressable\n onPress={onSelectFiles}\n disabled={disabled}\n className={cn(\n 'border-2 border-dashed rounded-lg p-8',\n 'border-gray-300 dark:border-gray-600',\n 'active:border-blue-500 active:bg-blue-50 dark:active:bg-blue-900/10',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={buttonText}\n accessibilityState={{ disabled }}\n >\n <View className='items-center justify-center gap-3'>\n <Text className='text-4xl text-gray-400 dark:text-gray-500'>\n 📁\n </Text>\n <Text className='text-sm text-gray-600 dark:text-gray-400 text-center'>\n {dropZoneText}\n </Text>\n {maxSize && (\n <Text className='text-xs text-gray-500 dark:text-gray-500'>\n Max file size: {formatFileSize(maxSize)}\n </Text>\n )}\n </View>\n </Pressable>\n\n {error && (\n <Text className='mt-2 text-sm text-red-600 dark:text-red-400'>\n {error}\n </Text>\n )}\n\n {showFileList && files.length > 0 && (\n <FileList\n files={files}\n onRemove={onRemove}\n formatFileSize={formatFileSize}\n />\n )}\n </View>\n );\n }\n\n // Button UI\n return (\n <View className={cn('w-full', className)}>\n <Pressable\n onPress={onSelectFiles}\n disabled={disabled}\n className={cn(\n 'flex-row items-center px-4 py-2',\n 'border border-gray-300 dark:border-gray-600',\n 'rounded-lg',\n 'bg-white dark:bg-gray-800',\n 'active:bg-gray-50 dark:active:bg-gray-700',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={buttonText}\n accessibilityState={{ disabled }}\n >\n <Text className='text-lg mr-2'>📄</Text>\n <Text className='text-sm font-medium text-gray-700 dark:text-gray-300'>\n {buttonText}\n </Text>\n </Pressable>\n\n {error && (\n <Text className='mt-2 text-sm text-red-600 dark:text-red-400'>\n {error}\n </Text>\n )}\n\n {showFileList && files.length > 0 && (\n <FileList\n files={files}\n onRemove={onRemove}\n formatFileSize={formatFileSize}\n />\n )}\n </View>\n );\n};\n\n/**\n * FileList Component - Internal\n */\nconst FileList: React.FC<{\n files: FileInfo[];\n onRemove?: (index: number) => void;\n formatFileSize: (bytes: number) => string;\n}> = ({ files, onRemove, formatFileSize }) => {\n return (\n <ScrollView className='mt-3 max-h-48'>\n {files.map((file, index) => (\n <View\n key={`${file.name}-${index}`}\n className='flex-row items-center justify-between p-2 mb-2 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700'\n >\n <View className='flex-row items-center flex-1 mr-2'>\n <Text className='text-lg mr-2'>📄</Text>\n <View className='flex-1'>\n <Text\n className='text-sm font-medium text-gray-900 dark:text-gray-100'\n numberOfLines={1}\n >\n {file.name}\n </Text>\n <Text className='text-xs text-gray-500 dark:text-gray-400'>\n {formatFileSize(file.size)}\n </Text>\n </View>\n </View>\n\n {onRemove && (\n <Pressable\n onPress={() => onRemove(index)}\n className='p-1 active:bg-red-100 dark:active:bg-red-900/20 rounded'\n accessibilityRole='button'\n accessibilityLabel='Remove file'\n >\n <Text className='text-red-500 dark:text-red-400'>✕</Text>\n </Pressable>\n )}\n </View>\n ))}\n </ScrollView>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n Text,\n Image,\n Pressable,\n ImageSourcePropType,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface LogoProps {\n /** Logo size */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Additional className */\n className?: string;\n /** Show text alongside logo */\n showText?: boolean;\n /** Press handler */\n onPress?: () => void;\n /** Logo image source */\n logoSource?: ImageSourcePropType;\n /** Logo alt text */\n logoAlt?: string;\n /** Logo text (required) */\n logoText: string;\n}\n\n/**\n * Logo Component\n *\n * Displays a logo with optional text.\n * Supports multiple sizes and optional press handler.\n *\n * @example\n * ```tsx\n * <Logo\n * logoText=\"MyApp\"\n * logoSource={require('./assets/logo.png')}\n * size=\"lg\"\n * onPress={() => navigation.navigate('Home')}\n * />\n * ```\n */\nexport const Logo: React.FC<LogoProps> = ({\n size = 'md',\n className,\n showText = true,\n onPress,\n logoSource,\n logoAlt = 'Logo',\n logoText,\n}) => {\n // Size configurations\n const sizeConfig = {\n sm: {\n container: 'gap-2',\n image: { width: 24, height: 24 },\n text: 'text-lg',\n },\n md: {\n container: 'gap-2',\n image: { width: 32, height: 32 },\n text: 'text-2xl',\n },\n lg: {\n container: 'gap-3',\n image: { width: 40, height: 40 },\n text: 'text-3xl',\n },\n xl: {\n container: 'gap-4',\n image: { width: 48, height: 48 },\n text: 'text-4xl',\n },\n };\n\n const config = sizeConfig[size];\n\n const logoContent = (\n <>\n {logoSource && (\n <Image\n source={logoSource}\n style={config.image}\n accessibilityLabel={logoAlt}\n resizeMode='contain'\n />\n )}\n {showText && (\n <Text\n className={cn(\n 'font-bold text-gray-900 dark:text-gray-100',\n config.text\n )}\n >\n {logoText}\n </Text>\n )}\n </>\n );\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n className={cn(\n 'flex-row items-center',\n config.container,\n 'active:opacity-80',\n className\n )}\n accessibilityRole='button'\n accessibilityLabel={`${logoText} logo`}\n >\n {logoContent}\n </Pressable>\n );\n }\n\n return (\n <View\n className={cn('flex-row items-center', config.container, className)}\n accessibilityRole='image'\n accessibilityLabel={`${logoText} logo`}\n >\n {logoContent}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { Text, Animated } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface AnimatedCounterProps {\n /** Target value to count to */\n value: number;\n /** Animation duration in milliseconds */\n duration?: number;\n /** Number of decimal places */\n decimals?: number;\n /** Prefix (e.g., \"$\") */\n prefix?: string;\n /** Suffix (e.g., \"%\") */\n suffix?: string;\n /** Format with commas */\n formatWithCommas?: boolean;\n /** Additional className */\n className?: string;\n /** Text color className */\n textClassName?: string;\n}\n\n/**\n * AnimatedCounter Component\n *\n * Animated number counter that counts up/down to target value.\n * Useful for statistics, dashboards, and metrics display.\n *\n * @example\n * ```tsx\n * <AnimatedCounter\n * value={1234}\n * duration={2000}\n * prefix=\"$\"\n * formatWithCommas\n * />\n * ```\n *\n * @example\n * ```tsx\n * <AnimatedCounter\n * value={99.9}\n * decimals={1}\n * suffix=\"%\"\n * />\n * ```\n */\nexport const AnimatedCounter: React.FC<AnimatedCounterProps> = ({\n value,\n duration = 1000,\n decimals = 0,\n prefix = '',\n suffix = '',\n formatWithCommas = false,\n className,\n textClassName,\n}) => {\n const [displayValue, setDisplayValue] = useState(0);\n const animatedValue = useRef(new Animated.Value(0)).current;\n const previousValue = useRef(0);\n\n useEffect(() => {\n // Listen to animated value changes\n const listenerId = animatedValue.addListener(({ value: animValue }) => {\n setDisplayValue(animValue);\n });\n\n // Animate from previous value to new value\n Animated.timing(animatedValue, {\n toValue: value,\n duration,\n useNativeDriver: false,\n }).start();\n\n previousValue.current = value;\n\n return () => {\n animatedValue.removeListener(listenerId);\n };\n }, [value, duration, animatedValue]);\n\n // Format the display value\n const formatValue = (val: number): string => {\n const fixed = val.toFixed(decimals);\n\n if (formatWithCommas) {\n const parts = fixed.split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return parts.join('.');\n }\n\n return fixed;\n };\n\n return (\n <Text\n className={cn(\n 'text-2xl font-bold text-gray-900 dark:text-white',\n textClassName,\n className\n )}\n >\n {prefix}\n {formatValue(displayValue)}\n {suffix}\n </Text>\n );\n};\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { Animated, ViewStyle } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport type AnimationType =\n | 'fade-in'\n | 'fade-in-up'\n | 'fade-in-down'\n | 'fade-in-left'\n | 'fade-in-right'\n | 'scale-in';\n\nexport interface AnimatedSectionProps {\n /** Animation type */\n animation?: AnimationType;\n /** Animation delay in milliseconds */\n delay?: number;\n /** Animation duration in milliseconds */\n duration?: number;\n /** Children to animate */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n /** Additional style */\n style?: ViewStyle;\n}\n\n/**\n * AnimatedSection Component\n *\n * Wrapper component that animates its children on mount.\n * Supports various animation types for entrance animations.\n *\n * @example\n * ```tsx\n * <AnimatedSection animation=\"fade-in-up\" delay={200}>\n * <Card>Content</Card>\n * </AnimatedSection>\n * ```\n */\nexport const AnimatedSection: React.FC<AnimatedSectionProps> = ({\n animation = 'fade-in',\n delay = 0,\n duration = 400,\n children,\n className,\n style,\n}) => {\n const opacity = useRef(new Animated.Value(0)).current;\n const translateY = useRef(new Animated.Value(0)).current;\n const translateX = useRef(new Animated.Value(0)).current;\n const scale = useRef(new Animated.Value(1)).current;\n\n useEffect(() => {\n // Set initial values based on animation type\n switch (animation) {\n case 'fade-in':\n opacity.setValue(0);\n break;\n case 'fade-in-up':\n opacity.setValue(0);\n translateY.setValue(20);\n break;\n case 'fade-in-down':\n opacity.setValue(0);\n translateY.setValue(-20);\n break;\n case 'fade-in-left':\n opacity.setValue(0);\n translateX.setValue(-20);\n break;\n case 'fade-in-right':\n opacity.setValue(0);\n translateX.setValue(20);\n break;\n case 'scale-in':\n opacity.setValue(0);\n scale.setValue(0.9);\n break;\n }\n\n // Animate to final values\n const animations: Animated.CompositeAnimation[] = [];\n\n animations.push(\n Animated.timing(opacity, {\n toValue: 1,\n duration,\n delay,\n useNativeDriver: true,\n })\n );\n\n if (animation === 'fade-in-up' || animation === 'fade-in-down') {\n animations.push(\n Animated.timing(translateY, {\n toValue: 0,\n duration,\n delay,\n useNativeDriver: true,\n })\n );\n }\n\n if (animation === 'fade-in-left' || animation === 'fade-in-right') {\n animations.push(\n Animated.timing(translateX, {\n toValue: 0,\n duration,\n delay,\n useNativeDriver: true,\n })\n );\n }\n\n if (animation === 'scale-in') {\n animations.push(\n Animated.timing(scale, {\n toValue: 1,\n duration,\n delay,\n useNativeDriver: true,\n })\n );\n }\n\n Animated.parallel(animations).start();\n }, [animation, delay, duration, opacity, translateY, translateX, scale]);\n\n return (\n <Animated.View\n className={cn(className)}\n style={[\n style,\n {\n opacity,\n transform: [{ translateY }, { translateX }, { scale }],\n },\n ]}\n >\n {children}\n </Animated.View>\n );\n};\n\n// Utility components for common animation patterns\nexport const FadeIn: React.FC<{\n children: React.ReactNode;\n delay?: number;\n className?: string;\n}> = ({ children, delay = 0, className }) => (\n <AnimatedSection animation='fade-in' delay={delay} className={className}>\n {children}\n </AnimatedSection>\n);\n\nexport const FadeInUp: React.FC<{\n children: React.ReactNode;\n delay?: number;\n className?: string;\n}> = ({ children, delay = 0, className }) => (\n <AnimatedSection animation='fade-in-up' delay={delay} className={className}>\n {children}\n </AnimatedSection>\n);\n\nexport const FadeInScale: React.FC<{\n children: React.ReactNode;\n delay?: number;\n className?: string;\n}> = ({ children, delay = 0, className }) => (\n <AnimatedSection animation='scale-in' delay={delay} className={className}>\n {children}\n </AnimatedSection>\n);\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface MasonryProps {\n /** Children elements */\n children: React.ReactNode;\n /** Number of columns */\n columns?: number;\n /** Gap between items */\n gap?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Masonry Component\n *\n * Pinterest-style masonry grid layout for React Native.\n * Distributes items across columns for optimal spacing.\n *\n * @example\n * ```tsx\n * <Masonry columns={2} gap={16}>\n * {items.map(item => <Card key={item.id}>{item.content}</Card>)}\n * </Masonry>\n * ```\n */\nexport const Masonry: React.FC<MasonryProps> = ({\n children,\n columns = 2,\n gap = 16,\n className,\n}) => {\n // Distribute items into columns\n const childArray = React.Children.toArray(children);\n const columnArrays: React.ReactNode[][] = Array.from(\n { length: columns },\n () => []\n );\n\n childArray.forEach((child, index) => {\n columnArrays[index % columns].push(child);\n });\n\n return (\n <View className={cn('flex-row', className)} style={{ gap }}>\n {columnArrays.map((column, columnIndex) => (\n <View key={columnIndex} className='flex-1' style={{ gap }}>\n {column.map((item, itemIndex) => (\n <View key={itemIndex}>{item}</View>\n ))}\n </View>\n ))}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface IconContainerProps {\n /** Icon element */\n children: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Color variant */\n variant?:\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'error'\n | 'neutral';\n /** Shape variant */\n shape?: 'square' | 'rounded' | 'circle';\n /** Additional className */\n className?: string;\n}\n\n/**\n * IconContainer Component\n *\n * Styled container for displaying icons with consistent sizing and colors.\n * Commonly used in feature lists, settings, and navigation.\n *\n * @example\n * ```tsx\n * <IconContainer size=\"lg\" variant=\"primary\" shape=\"rounded\">\n * <SettingsIcon />\n * </IconContainer>\n * ```\n */\nexport const IconContainer: React.FC<IconContainerProps> = ({\n children,\n size = 'md',\n variant = 'primary',\n shape = 'rounded',\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'w-10 h-10',\n md: 'w-12 h-12',\n lg: 'w-16 h-16',\n xl: 'w-20 h-20',\n };\n\n // Variant configurations\n const variantClasses = {\n primary: 'bg-blue-100 dark:bg-blue-900/30',\n secondary: 'bg-purple-100 dark:bg-purple-900/30',\n success: 'bg-green-100 dark:bg-green-900/30',\n warning: 'bg-yellow-100 dark:bg-yellow-900/30',\n error: 'bg-red-100 dark:bg-red-900/30',\n neutral: 'bg-gray-100 dark:bg-gray-800',\n };\n\n // Shape configurations\n const shapeClasses = {\n square: 'rounded-lg',\n rounded: 'rounded-2xl',\n circle: 'rounded-full',\n };\n\n return (\n <View\n className={cn(\n 'items-center justify-center',\n sizeClasses[size],\n variantClasses[variant],\n shapeClasses[shape],\n className\n )}\n >\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, StyleSheet } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface GradientIconContainerProps {\n /** Icon element */\n children: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Shape variant */\n shape?: 'square' | 'rounded' | 'circle';\n /** Color variant */\n variant?: 'blue' | 'purple' | 'green' | 'orange' | 'gray';\n /** Additional className */\n className?: string;\n}\n\n/**\n * GradientIconContainer Component\n *\n * Container for icons with gradient-like background colors.\n * Note: True gradients require expo-linear-gradient; this uses solid colors.\n *\n * @example\n * ```tsx\n * <GradientIconContainer size=\"lg\" variant=\"blue\" shape=\"rounded\">\n * <ShieldIcon />\n * </GradientIconContainer>\n * ```\n */\nexport const GradientIconContainer: React.FC<GradientIconContainerProps> = ({\n children,\n size = 'md',\n shape = 'rounded',\n variant = 'blue',\n className,\n}) => {\n // Size configurations\n const sizeConfig = {\n sm: { container: 'w-10 h-10', icon: styles.iconSm },\n md: { container: 'w-12 h-12', icon: styles.iconMd },\n lg: { container: 'w-16 h-16', icon: styles.iconLg },\n xl: { container: 'w-20 h-20', icon: styles.iconXl },\n };\n\n // Shape configurations\n const shapeClasses = {\n square: 'rounded-lg',\n rounded: 'rounded-xl',\n circle: 'rounded-full',\n };\n\n // Color variants (solid colors approximating gradients)\n const variantClasses = {\n blue: 'bg-blue-600',\n purple: 'bg-purple-600',\n green: 'bg-green-600',\n orange: 'bg-orange-600',\n gray: 'bg-gray-700 dark:bg-gray-600',\n };\n\n const config = sizeConfig[size];\n\n return (\n <View\n className={cn(\n 'items-center justify-center',\n config.container,\n shapeClasses[shape],\n variantClasses[variant],\n className\n )}\n >\n <View style={config.icon}>{children}</View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n iconSm: { width: 20, height: 20 },\n iconMd: { width: 24, height: 24 },\n iconLg: { width: 32, height: 32 },\n iconXl: { width: 40, height: 40 },\n});\n","import * as React from 'react';\nimport { View, Text, ActivityIndicator } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PageSectionHeaderProps {\n /** Section title */\n title: string;\n /** Optional subtitle/description */\n description?: string;\n /** Item count to display */\n count?: number;\n /** Count label (e.g., \"items\", \"templates\") */\n countLabel?: string;\n /** Action button(s) */\n action?: React.ReactNode;\n /** Show loading indicator */\n loading?: boolean;\n /** Loading text */\n loadingText?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * PageSectionHeader Component\n *\n * A flexible header for page sections with title, description, count, and actions.\n * Commonly used at the top of content sections to provide context and actions.\n *\n * @example\n * ```tsx\n * <PageSectionHeader\n * title=\"Templates\"\n * count={templates.length}\n * action={<Button onPress={handleAdd}>Add Template</Button>}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <PageSectionHeader\n * title=\"Email Filters\"\n * description=\"Manage your email filtering rules\"\n * count={12}\n * countLabel=\"filters\"\n * loading={isRefreshing}\n * />\n * ```\n */\nexport const PageSectionHeader: React.FC<PageSectionHeaderProps> = ({\n title,\n description,\n count,\n countLabel,\n action,\n loading = false,\n loadingText = 'Loading...',\n size = 'md',\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: {\n title: 'text-lg font-semibold',\n description: 'text-sm',\n count: 'text-xs',\n },\n md: {\n title: 'text-xl font-semibold',\n description: 'text-base',\n count: 'text-sm',\n },\n lg: {\n title: 'text-2xl font-bold',\n description: 'text-lg',\n count: 'text-base',\n },\n };\n\n const sizeConfig = sizeClasses[size];\n\n return (\n <View\n className={cn('flex-row items-start justify-between gap-4', className)}\n >\n <View className='flex-1'>\n <View className='flex-row items-center gap-3 flex-wrap'>\n <Text\n className={cn(sizeConfig.title, 'text-gray-900 dark:text-gray-100')}\n >\n {title}\n </Text>\n\n {count !== undefined && (\n <Text\n className={cn(\n sizeConfig.count,\n 'text-gray-500 dark:text-gray-400'\n )}\n >\n ({count}\n {countLabel && ` ${countLabel}`})\n </Text>\n )}\n\n {loading && (\n <View className='flex-row items-center gap-2'>\n <ActivityIndicator size='small' color='#3b82f6' />\n <Text\n className={cn(\n sizeConfig.count,\n 'text-gray-500 dark:text-gray-400'\n )}\n >\n {loadingText}\n </Text>\n </View>\n )}\n </View>\n\n {description && (\n <Text\n className={cn(\n sizeConfig.description,\n 'mt-1 text-gray-600 dark:text-gray-400'\n )}\n >\n {description}\n </Text>\n )}\n </View>\n\n {action && <View>{action}</View>}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, StyleSheet } from 'react-native';\n\nexport interface VisuallyHiddenProps {\n /** Content to hide visually but keep accessible to screen readers */\n children: React.ReactNode;\n}\n\n/**\n * VisuallyHidden Component\n *\n * Hides content visually while keeping it accessible to screen readers.\n * In React Native, this uses accessibilityElementsHidden with absolute positioning.\n *\n * @example\n * ```tsx\n * <Pressable onPress={handleDelete}>\n * <TrashIcon />\n * <VisuallyHidden>Delete item</VisuallyHidden>\n * </Pressable>\n * ```\n */\nexport const VisuallyHidden: React.FC<VisuallyHiddenProps> = ({ children }) => {\n return (\n <View\n style={styles.hidden}\n accessibilityElementsHidden={false}\n importantForAccessibility='yes'\n >\n {typeof children === 'string' ? (\n <Text accessibilityRole='text'>{children}</Text>\n ) : (\n children\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n hidden: {\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n // clip is deprecated but needed for older devices\n // clipPath: 'inset(50%)', // Not supported in RN\n },\n});\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface BreadcrumbNavItem {\n /** Item label */\n label: string;\n /** Navigation handler */\n onPress?: () => void;\n}\n\nexport interface BreadcrumbNavProps {\n /** Breadcrumb items */\n items: BreadcrumbNavItem[];\n /** Custom separator */\n separator?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * BreadcrumbNav Component\n *\n * Simple breadcrumb navigation for React Native.\n * Shows a trail of navigational links.\n *\n * @example\n * ```tsx\n * <BreadcrumbNav\n * items={[\n * { label: 'Home', onPress: () => navigate('home') },\n * { label: 'Products', onPress: () => navigate('products') },\n * { label: 'Electronics' }\n * ]}\n * />\n * ```\n */\nexport const BreadcrumbNav: React.FC<BreadcrumbNavProps> = ({\n items,\n separator = '/',\n className,\n}) => {\n return (\n <View\n className={cn('flex-row items-center gap-2', className)}\n accessibilityRole='none'\n accessibilityLabel='Breadcrumb navigation'\n >\n {items.map((item, index) => (\n <React.Fragment key={index}>\n {index > 0 && (\n <Text className='text-gray-400 dark:text-gray-600 text-sm'>\n {typeof separator === 'string' ? separator : separator}\n </Text>\n )}\n {index === items.length - 1 ? (\n <Text className='text-gray-900 dark:text-white font-medium text-sm'>\n {item.label}\n </Text>\n ) : (\n <Pressable\n onPress={item.onPress}\n accessibilityRole='link'\n accessibilityLabel={item.label}\n >\n <Text className='text-blue-600 dark:text-blue-400 text-sm'>\n {item.label}\n </Text>\n </Pressable>\n )}\n </React.Fragment>\n ))}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface KbdProps {\n /** Keyboard key(s) to display */\n children: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Kbd Component\n *\n * Displays keyboard shortcuts with consistent styling.\n * Used to represent user input from keyboard.\n *\n * @example\n * ```tsx\n * <View className=\"flex-row items-center gap-1\">\n * <Kbd>Ctrl</Kbd>\n * <Text>+</Text>\n * <Kbd>C</Kbd>\n * </View>\n * ```\n *\n * @example\n * ```tsx\n * <Text>Press <Kbd size=\"sm\">Enter</Kbd> to submit</Text>\n * ```\n */\nexport const Kbd: React.FC<KbdProps> = ({\n children,\n size = 'md',\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'text-xs px-1.5 py-0.5',\n md: 'text-sm px-2 py-1',\n lg: 'text-base px-2.5 py-1.5',\n };\n\n return (\n <View\n className={cn(\n 'items-center justify-center',\n 'bg-gray-100 dark:bg-gray-800',\n 'border border-gray-300 dark:border-gray-600',\n 'rounded',\n sizeClasses[size],\n className\n )}\n accessibilityRole='text'\n >\n <Text\n className={cn(\n 'font-mono font-semibold',\n 'text-gray-900 dark:text-gray-100',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n size === 'lg' && 'text-base'\n )}\n >\n {children}\n </Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, ScrollView, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TableColumn<T> {\n /** Column key */\n key: string;\n /** Column label */\n label: React.ReactNode;\n /** Render cell content */\n render?: (row: T, index: number) => React.ReactNode;\n /** Column width */\n width?: number;\n /** Sortable column */\n sortable?: boolean;\n /** Align content */\n align?: 'left' | 'center' | 'right';\n}\n\nexport interface TableProps<T> {\n /** Table columns */\n columns: TableColumn<T>[];\n /** Table data */\n data: T[];\n /** Row key extractor */\n keyExtractor: (row: T, index: number) => string;\n /** Sort configuration */\n sort?: {\n column: string;\n direction: 'asc' | 'desc';\n };\n /** Sort handler */\n onSort?: (column: string) => void;\n /** Row click handler */\n onRowPress?: (row: T, index: number) => void;\n /** Striped rows */\n striped?: boolean;\n /** Compact mode */\n compact?: boolean;\n /** Show border */\n bordered?: boolean;\n /** Empty state message */\n emptyMessage?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Table Component\n *\n * Data table with sorting and customization for React Native.\n * Generic component supporting any data type.\n *\n * @example\n * ```tsx\n * <Table\n * columns={[\n * { key: 'name', label: 'Name', sortable: true },\n * { key: 'email', label: 'Email' },\n * { key: 'role', label: 'Role', align: 'center' }\n * ]}\n * data={users}\n * keyExtractor={(user) => user.id}\n * sort={sort}\n * onSort={handleSort}\n * onRowPress={handleRowPress}\n * />\n * ```\n */\nexport function Table<T extends Record<string, unknown>>({\n columns,\n data,\n keyExtractor,\n sort,\n onSort,\n onRowPress,\n striped = false,\n compact = false,\n bordered = false,\n emptyMessage = 'No data available',\n className,\n}: TableProps<T>) {\n const handleSort = (column: TableColumn<T>) => {\n if (column.sortable && onSort) {\n onSort(column.key);\n }\n };\n\n const alignClasses = {\n left: 'items-start',\n center: 'items-center',\n right: 'items-end',\n };\n\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={true}\n className={cn('w-full', className)}\n >\n <View className='flex-1'>\n {/* Header */}\n <View\n className={cn(\n 'flex-row bg-gray-50 dark:bg-gray-800',\n 'border-b border-gray-200 dark:border-gray-700'\n )}\n >\n {columns.map(column => (\n <Pressable\n key={column.key}\n onPress={() => column.sortable && handleSort(column)}\n disabled={!column.sortable}\n className={cn(\n compact ? 'px-3 py-2' : 'px-4 py-3',\n bordered &&\n 'border-r border-gray-200 dark:border-gray-700 last:border-r-0'\n )}\n style={{ width: column.width }}\n accessibilityRole='button'\n accessibilityLabel={`Sort by ${column.label}`}\n >\n <View\n className={cn(\n 'flex-row items-center gap-2',\n alignClasses[column.align || 'left']\n )}\n >\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 uppercase tracking-wider'>\n {column.label}\n </Text>\n {column.sortable && sort?.column === column.key && (\n <Text className='text-xs text-gray-500'>\n {sort.direction === 'asc' ? '↑' : '↓'}\n </Text>\n )}\n </View>\n </Pressable>\n ))}\n </View>\n\n {/* Body */}\n <View className='bg-white dark:bg-gray-900'>\n {data.length === 0 ? (\n <View className='px-4 py-8'>\n <Text className='text-center text-sm text-gray-500 dark:text-gray-400'>\n {emptyMessage}\n </Text>\n </View>\n ) : (\n data.map((row, rowIndex) => (\n <Pressable\n key={keyExtractor(row, rowIndex)}\n onPress={() => onRowPress?.(row, rowIndex)}\n disabled={!onRowPress}\n className={cn(\n 'flex-row',\n 'border-b border-gray-200 dark:border-gray-700',\n striped &&\n rowIndex % 2 === 1 &&\n 'bg-gray-50 dark:bg-gray-800/50'\n )}\n accessibilityRole='button'\n >\n {columns.map(column => (\n <View\n key={column.key}\n className={cn(\n compact ? 'px-3 py-2' : 'px-4 py-3',\n alignClasses[column.align || 'left'],\n bordered &&\n 'border-r border-gray-200 dark:border-gray-700 last:border-r-0'\n )}\n style={{ width: column.width }}\n >\n {column.render ? (\n column.render(row, rowIndex)\n ) : (\n <Text className='text-sm text-gray-900 dark:text-white'>\n {String(row[column.key] ?? '')}\n </Text>\n )}\n </View>\n ))}\n </Pressable>\n ))\n )}\n </View>\n </View>\n </ScrollView>\n );\n}\n","import * as React from 'react';\nimport { useState, useEffect, useRef } from 'react';\nimport {\n View,\n Text,\n TextInput,\n Pressable,\n ScrollView,\n Modal,\n KeyboardAvoidingView,\n Platform,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CommandItem {\n /** Item ID */\n id: string;\n /** Item label */\n label: string;\n /** Item icon */\n icon?: React.ReactNode;\n /** Action handler */\n onSelect: () => void;\n /** Group/category */\n group?: string;\n /** Keyboard shortcut display */\n shortcut?: string;\n /** Keywords for search */\n keywords?: string[];\n}\n\nexport interface CommandProps {\n /** Whether command palette is open */\n isOpen: boolean;\n /** Close handler */\n onClose: () => void;\n /** Available command items */\n items: CommandItem[];\n /** Placeholder text */\n placeholder?: string;\n /** Empty state message */\n emptyMessage?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Command Component\n *\n * Command palette for quick actions and navigation in React Native.\n * Searchable interface with grouping support.\n *\n * @example\n * ```tsx\n * <Command\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * items={[\n * { id: 'new', label: 'New File', icon: <PlusIcon />, onSelect: handleNew },\n * { id: 'open', label: 'Open File', icon: <FolderIcon />, onSelect: handleOpen }\n * ]}\n * placeholder=\"Type a command or search...\"\n * />\n * ```\n */\nexport const Command: React.FC<CommandProps> = ({\n isOpen,\n onClose,\n items,\n placeholder = 'Type a command or search...',\n emptyMessage = 'No results found.',\n className,\n}) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedIndex, setSelectedIndex] = useState(0);\n const inputRef = useRef<TextInput>(null);\n\n // Filter items based on search query\n const filteredItems = items.filter(item => {\n const query = searchQuery.toLowerCase();\n return (\n item.label.toLowerCase().includes(query) ||\n item.keywords?.some(keyword => keyword.toLowerCase().includes(query)) ||\n item.group?.toLowerCase().includes(query)\n );\n });\n\n // Group items\n const groupedItems = filteredItems.reduce(\n (groups, item) => {\n const group = item.group || 'Commands';\n if (!groups[group]) {\n groups[group] = [];\n }\n groups[group].push(item);\n return groups;\n },\n {} as Record<string, CommandItem[]>\n );\n\n // Reset state when closing\n useEffect(() => {\n if (!isOpen) {\n setSearchQuery('');\n setSelectedIndex(0);\n }\n }, [isOpen]);\n\n // Focus input when opening\n useEffect(() => {\n if (isOpen && inputRef.current) {\n setTimeout(() => inputRef.current?.focus(), 100);\n }\n }, [isOpen]);\n\n // Reset selected index when search changes\n useEffect(() => {\n setSelectedIndex(0);\n }, [searchQuery]);\n\n const handleSelect = (item: CommandItem) => {\n item.onSelect();\n onClose();\n };\n\n return (\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={onClose}\n >\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n className='flex-1'\n >\n {/* Backdrop */}\n <Pressable\n className='flex-1 bg-black/50 justify-start pt-20'\n onPress={onClose}\n >\n {/* Command Palette */}\n <Pressable\n className={cn(\n 'mx-4 bg-white dark:bg-gray-900 rounded-xl overflow-hidden',\n 'shadow-xl',\n className\n )}\n onPress={e => e.stopPropagation()}\n >\n {/* Search Input */}\n <View className='border-b border-gray-200 dark:border-gray-700 p-4'>\n <View className='flex-row items-center gap-3'>\n <View className='w-5 h-5 items-center justify-center'>\n <Text className='text-gray-400'>🔍</Text>\n </View>\n <TextInput\n ref={inputRef}\n value={searchQuery}\n onChangeText={setSearchQuery}\n placeholder={placeholder}\n placeholderTextColor='#9ca3af'\n className='flex-1 text-gray-900 dark:text-white text-base'\n autoCapitalize='none'\n autoCorrect={false}\n returnKeyType='search'\n />\n </View>\n </View>\n\n {/* Results */}\n <ScrollView\n className='max-h-96'\n keyboardShouldPersistTaps='handled'\n >\n <View className='p-2'>\n {Object.keys(groupedItems).length === 0 ? (\n <View className='px-4 py-8'>\n <Text className='text-sm text-gray-500 dark:text-gray-400 text-center'>\n {emptyMessage}\n </Text>\n </View>\n ) : (\n Object.entries(groupedItems).map(\n ([groupName, groupItems]) => (\n <View key={groupName} className='mb-4'>\n {/* Group Header */}\n <Text className='px-3 py-2 text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider'>\n {groupName}\n </Text>\n\n {/* Group Items */}\n <View className='gap-1'>\n {groupItems.map(item => {\n const globalIndex = filteredItems.indexOf(item);\n const isSelected = globalIndex === selectedIndex;\n\n return (\n <Pressable\n key={item.id}\n onPress={() => handleSelect(item)}\n className={cn(\n 'flex-row items-center gap-3 px-3 py-2 rounded-md',\n isSelected\n ? 'bg-blue-50 dark:bg-blue-900/30'\n : 'active:bg-gray-100 dark:active:bg-gray-800'\n )}\n accessibilityRole='button'\n accessibilityLabel={item.label}\n >\n {item.icon && (\n <View className='w-4 h-4'>{item.icon}</View>\n )}\n <Text\n className={cn(\n 'flex-1 text-sm',\n isSelected\n ? 'text-blue-700 dark:text-blue-300'\n : 'text-gray-900 dark:text-white'\n )}\n numberOfLines={1}\n >\n {item.label}\n </Text>\n {item.shortcut && (\n <Text className='text-xs text-gray-500 dark:text-gray-400 font-mono'>\n {item.shortcut}\n </Text>\n )}\n </Pressable>\n );\n })}\n </View>\n </View>\n )\n )\n )}\n </View>\n </ScrollView>\n\n {/* Footer */}\n <View className='border-t border-gray-200 dark:border-gray-700 px-4 py-2'>\n <Text className='text-xs text-gray-500 dark:text-gray-400 text-center'>\n Tap an item to select\n </Text>\n </View>\n </Pressable>\n </Pressable>\n </KeyboardAvoidingView>\n </Modal>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n Text,\n Pressable,\n ScrollView,\n useWindowDimensions,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\n/**\n * MasterListItem - Standardized list item with selection styling\n */\nexport interface MasterListItemProps {\n /** Whether this item is currently selected */\n isSelected: boolean;\n /** Press handler */\n onPress: () => void;\n /** Icon element to display (optional) */\n icon?: React.ReactNode;\n /** Main label text */\n label: string;\n /** Description text (optional) */\n description?: string;\n /** Additional className */\n className?: string;\n}\n\nexport const MasterListItem: React.FC<MasterListItemProps> = ({\n isSelected,\n onPress,\n icon,\n label,\n description,\n className,\n}) => {\n return (\n <Pressable\n onPress={onPress}\n className={cn(\n 'relative p-4 border-b border-gray-200 dark:border-gray-700',\n className\n )}\n accessibilityRole='button'\n accessibilityState={{ selected: isSelected }}\n >\n {/* Selection overlay */}\n {isSelected && (\n <View className='absolute inset-1 bg-blue-500/10 dark:bg-blue-400/10 rounded-lg' />\n )}\n\n {/* Content */}\n <View className='relative flex-row items-start'>\n {icon && (\n <View\n className={cn(\n 'mr-3 mt-0.5',\n isSelected\n ? 'text-blue-600 dark:text-blue-400'\n : 'text-gray-500 dark:text-gray-400'\n )}\n >\n {icon}\n </View>\n )}\n <View className='flex-1'>\n <Text\n className={cn(\n 'font-medium',\n isSelected\n ? 'text-blue-600 dark:text-blue-400'\n : 'text-gray-900 dark:text-gray-100'\n )}\n >\n {label}\n </Text>\n {description && (\n <Text\n className={cn(\n 'text-xs mt-0.5',\n isSelected\n ? 'text-blue-500 dark:text-blue-300'\n : 'text-gray-500 dark:text-gray-400'\n )}\n >\n {description}\n </Text>\n )}\n </View>\n </View>\n </Pressable>\n );\n};\n\nexport interface MasterDetailLayoutProps {\n /** Title shown above the master panel */\n masterTitle?: string;\n /** Subtitle shown below master title */\n masterSubtitle?: string;\n /** Text shown in the back button on mobile */\n backButtonText?: string;\n /** Content for the master panel */\n masterContent: React.ReactNode;\n /** Content for the detail panel */\n detailContent: React.ReactNode;\n /** Title for the detail panel */\n detailTitle?: string;\n /** Current mobile view state */\n mobileView?: 'navigation' | 'content';\n /** Callback when user wants to switch to navigation view */\n onBackToNavigation?: () => void;\n /** Custom class for master panel */\n masterClassName?: string;\n /** Custom class for detail panel */\n detailClassName?: string;\n /** Width of master panel on tablet (default: 320) */\n masterWidth?: number;\n /** Breakpoint for tablet layout (default: 768) */\n tabletBreakpoint?: number;\n}\n\n/**\n * MasterDetailLayout Component\n *\n * A responsive master-detail layout for React Native.\n * - Mobile: Toggle between master (navigation) and detail (content) views\n * - Tablet/Desktop: Side-by-side layout\n *\n * @example\n * ```tsx\n * <MasterDetailLayout\n * masterTitle=\"Table of Contents\"\n * masterContent={<NavigationMenu items={sections} />}\n * detailContent={<Article content={currentSection} />}\n * mobileView={view}\n * onBackToNavigation={() => setView('navigation')}\n * />\n * ```\n */\nexport const MasterDetailLayout: React.FC<MasterDetailLayoutProps> = ({\n masterTitle,\n masterSubtitle,\n backButtonText,\n masterContent,\n detailContent,\n detailTitle,\n mobileView = 'navigation',\n onBackToNavigation,\n masterClassName,\n detailClassName,\n masterWidth = 320,\n tabletBreakpoint = 768,\n}) => {\n const { width } = useWindowDimensions();\n const isTablet = width >= tabletBreakpoint;\n\n // Extract first part of title for back button\n const extractFirstPart = (text: string | undefined) => {\n if (!text) return 'Back';\n return text.split('-')[0].trim();\n };\n\n const buttonText = backButtonText\n ? extractFirstPart(backButtonText)\n : masterTitle\n ? extractFirstPart(masterTitle)\n : 'Back';\n\n // Tablet/Desktop: Side-by-side layout\n if (isTablet) {\n return (\n <View className='flex-1 flex-row gap-8 p-4'>\n {/* Master Panel */}\n <View style={{ width: masterWidth }}>\n {masterTitle && (\n <Text className='text-lg font-semibold text-gray-900 dark:text-white mb-4'>\n {masterTitle}\n </Text>\n )}\n {masterSubtitle && (\n <Text className='text-sm text-gray-600 dark:text-gray-400 mb-6'>\n {masterSubtitle}\n </Text>\n )}\n <View\n className={cn(\n 'bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700',\n masterClassName\n )}\n >\n <ScrollView>{masterContent}</ScrollView>\n </View>\n </View>\n\n {/* Detail Panel */}\n <View className='flex-1'>\n <View\n className={cn(\n 'bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 p-6',\n detailClassName\n )}\n >\n {detailTitle && (\n <Text className='text-2xl font-bold text-gray-900 dark:text-white mb-6'>\n {detailTitle}\n </Text>\n )}\n <ScrollView>{detailContent}</ScrollView>\n </View>\n </View>\n </View>\n );\n }\n\n // Mobile: Toggle between views\n return (\n <View className='flex-1'>\n {/* Mobile Navigation View */}\n {mobileView === 'navigation' && (\n <View className='flex-1 bg-white dark:bg-gray-800 p-6'>\n {masterTitle && (\n <Text className='text-xl font-semibold text-gray-900 dark:text-white mb-4'>\n {masterTitle}\n </Text>\n )}\n {masterSubtitle && (\n <Text className='text-sm text-gray-600 dark:text-gray-400 mb-6'>\n {masterSubtitle}\n </Text>\n )}\n <View className={masterClassName}>\n <ScrollView>{masterContent}</ScrollView>\n </View>\n </View>\n )}\n\n {/* Mobile Content View */}\n {mobileView === 'content' && (\n <View className='flex-1 p-4'>\n {/* Back button */}\n {onBackToNavigation && (\n <Pressable\n onPress={onBackToNavigation}\n className='mb-4 px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-800 self-start'\n accessibilityRole='button'\n accessibilityLabel={`Back to ${buttonText}`}\n >\n <Text className='text-sm font-medium text-gray-700 dark:text-gray-300'>\n ← {buttonText}\n </Text>\n </Pressable>\n )}\n\n {/* Detail content */}\n <View\n className={cn(\n 'flex-1 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 p-6',\n detailClassName\n )}\n >\n {detailTitle && (\n <Text className='text-2xl font-bold text-gray-900 dark:text-white mb-6'>\n {detailTitle}\n </Text>\n )}\n <ScrollView>{detailContent}</ScrollView>\n </View>\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PageHeaderProps {\n /** Page title */\n title?: string;\n /** Page description */\n description?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * PageHeader Component\n *\n * Simple page header with title and description.\n *\n * @example\n * ```tsx\n * <PageHeader\n * title=\"Dashboard\"\n * description=\"Welcome back! Here's your overview.\"\n * />\n * ```\n */\nexport const PageHeader: React.FC<PageHeaderProps> = ({\n title,\n description,\n className,\n}) => {\n return (\n <View className={cn('mb-8', className)}>\n {title && (\n <Text className='text-3xl font-bold text-gray-900 dark:text-white'>\n {title}\n </Text>\n )}\n {description && (\n <Text className='mt-2 text-gray-600 dark:text-gray-400'>\n {description}\n </Text>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface StandardPageLayoutProps {\n /** Page content */\n children: React.ReactNode;\n /** Background className */\n backgroundClassName?: string;\n /** Content className */\n contentClassName?: string;\n}\n\n/**\n * StandardPageLayout Component\n *\n * A simple page layout wrapper that applies consistent background\n * and content styling.\n *\n * @example\n * ```tsx\n * <StandardPageLayout\n * backgroundClassName=\"bg-gray-100 dark:bg-gray-900\"\n * contentClassName=\"p-4\"\n * >\n * <YourPageContent />\n * </StandardPageLayout>\n * ```\n */\nexport const StandardPageLayout: React.FC<StandardPageLayoutProps> = ({\n children,\n backgroundClassName,\n contentClassName,\n}) => {\n return (\n <View className={cn('flex-1', backgroundClassName)}>\n <View className={cn('flex-1', contentClassName)}>{children}</View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface StepListItem {\n /** Step content */\n content: React.ReactNode;\n /** Sub-items under this step */\n subItems?: React.ReactNode[];\n}\n\nexport interface StepListProps {\n /** List items (string or StepListItem) */\n items: (string | StepListItem)[];\n /** List type */\n type?: 'ordered' | 'unordered';\n /** Visual variant */\n variant?: 'default' | 'enhanced' | 'minimal';\n /** Additional className */\n className?: string;\n /** Item className */\n itemClassName?: string;\n}\n\n/**\n * StepList Component\n *\n * Displays a list of steps with optional numbering and sub-items.\n * Supports ordered/unordered lists with different visual styles.\n *\n * @example\n * ```tsx\n * <StepList\n * items={[\n * 'First step',\n * 'Second step',\n * { content: 'Third step', subItems: ['Sub-item A', 'Sub-item B'] }\n * ]}\n * type=\"ordered\"\n * variant=\"enhanced\"\n * />\n * ```\n */\nexport const StepList: React.FC<StepListProps> = ({\n items,\n type = 'ordered',\n variant = 'default',\n className,\n itemClassName,\n}) => {\n const renderStepNumber = (index: number) => {\n if (type === 'ordered') {\n if (variant === 'enhanced') {\n return (\n <View className='w-6 h-6 bg-blue-600 rounded-full items-center justify-center mr-3'>\n <Text className='text-white text-sm font-medium'>{index + 1}</Text>\n </View>\n );\n }\n if (variant === 'minimal') {\n return (\n <View className='w-6 h-6 bg-blue-100 dark:bg-blue-900/20 rounded-full items-center justify-center mr-3'>\n <Text className='text-blue-600 dark:text-blue-400 text-sm font-medium'>\n {index + 1}\n </Text>\n </View>\n );\n }\n return (\n <Text className='text-gray-600 dark:text-gray-400 mr-2'>\n {index + 1}.\n </Text>\n );\n }\n\n // Unordered\n if (variant === 'minimal') {\n return <View className='w-2 h-2 bg-blue-600 rounded-full mr-3 mt-2' />;\n }\n return <Text className='text-gray-600 dark:text-gray-400 mr-2'>•</Text>;\n };\n\n const renderItem = (item: string | StepListItem, index: number) => {\n const isStepItem = typeof item === 'object';\n const content = isStepItem ? item.content : item;\n const subItems = isStepItem ? item.subItems : undefined;\n\n return (\n <View\n key={index}\n className={cn(\n 'flex-row',\n variant === 'enhanced' && 'pb-4',\n variant === 'enhanced' &&\n index < items.length - 1 &&\n 'border-l-2 border-gray-200 dark:border-gray-700 ml-3 pl-6',\n itemClassName\n )}\n >\n {/* Step indicator */}\n {variant !== 'enhanced' || type === 'unordered' ? (\n renderStepNumber(index)\n ) : (\n <View className='absolute -left-3'>{renderStepNumber(index)}</View>\n )}\n\n {/* Content */}\n <View className='flex-1'>\n {typeof content === 'string' ? (\n <Text className='text-gray-600 dark:text-gray-400'>{content}</Text>\n ) : (\n content\n )}\n\n {/* Sub-items */}\n {subItems && subItems.length > 0 && (\n <View className='mt-2 ml-4 gap-1'>\n {subItems.map((subItem, subIndex) => (\n <View key={subIndex} className='flex-row'>\n <Text className='text-gray-500 dark:text-gray-500 mr-2'>\n •\n </Text>\n {typeof subItem === 'string' ? (\n <Text className='text-sm text-gray-500 dark:text-gray-500 flex-1'>\n {subItem}\n </Text>\n ) : (\n subItem\n )}\n </View>\n ))}\n </View>\n )}\n </View>\n </View>\n );\n };\n\n return (\n <View\n className={cn(\n variant === 'default' && 'gap-2',\n variant === 'enhanced' && 'gap-0',\n variant === 'minimal' && 'gap-3',\n className\n )}\n >\n {items.map(renderItem)}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport type FeatureCardColor =\n | 'green'\n | 'blue'\n | 'purple'\n | 'orange'\n | 'red'\n | 'indigo'\n | 'cyan'\n | 'emerald'\n | 'pink'\n | 'gray';\n\nexport interface FeatureCardProps {\n /** Icon or emoji to display */\n icon: React.ReactNode;\n /** Title of the feature */\n title: string;\n /** Description of the feature */\n description: string;\n /** List of benefits (shown as bullet points) */\n benefits?: string[];\n /** Metrics to display */\n metrics?: { [key: string]: string };\n /** Color theme */\n color?: FeatureCardColor;\n /** Highlight with gradient background */\n isHighlight?: boolean;\n /** Optional CTA element */\n cta?: React.ReactNode;\n /** Press handler */\n onPress?: () => void;\n /** Show colored left border */\n borderColor?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * FeatureCard Component\n *\n * Card component for displaying features with icon, title, description,\n * benefits, and metrics.\n *\n * @example\n * ```tsx\n * <FeatureCard\n * icon={<ShieldIcon />}\n * title=\"Security\"\n * description=\"End-to-end encryption for all your data\"\n * benefits={['256-bit encryption', 'Zero-knowledge architecture']}\n * color=\"blue\"\n * />\n * ```\n */\nexport const FeatureCard: React.FC<FeatureCardProps> = ({\n icon,\n title,\n description,\n benefits,\n metrics,\n color = 'blue',\n isHighlight = false,\n cta,\n onPress,\n borderColor = false,\n className,\n}) => {\n // Color configurations\n const colorClasses: Record<FeatureCardColor, string> = {\n blue: 'text-blue-600 dark:text-blue-400',\n green: 'text-green-600 dark:text-green-400',\n purple: 'text-purple-600 dark:text-purple-400',\n orange: 'text-orange-600 dark:text-orange-400',\n pink: 'text-pink-600 dark:text-pink-400',\n gray: 'text-gray-600 dark:text-gray-400',\n red: 'text-red-600 dark:text-red-400',\n indigo: 'text-indigo-600 dark:text-indigo-400',\n cyan: 'text-cyan-600 dark:text-cyan-400',\n emerald: 'text-emerald-600 dark:text-emerald-400',\n };\n\n const borderColorClasses: Record<FeatureCardColor, string> = {\n green: 'border-l-4 border-l-green-500',\n blue: 'border-l-4 border-l-blue-500',\n purple: 'border-l-4 border-l-purple-500',\n orange: 'border-l-4 border-l-orange-500',\n red: 'border-l-4 border-l-red-500',\n indigo: 'border-l-4 border-l-indigo-500',\n cyan: 'border-l-4 border-l-cyan-500',\n emerald: 'border-l-4 border-l-emerald-500',\n pink: 'border-l-4 border-l-pink-500',\n gray: 'border-l-4 border-l-gray-500',\n };\n\n const iconBackgroundClasses: Record<FeatureCardColor, string> = {\n green: 'bg-green-100 dark:bg-green-900/20',\n blue: 'bg-blue-100 dark:bg-blue-900/20',\n purple: 'bg-purple-100 dark:bg-purple-900/20',\n orange: 'bg-orange-100 dark:bg-orange-900/20',\n red: 'bg-red-100 dark:bg-red-900/20',\n indigo: 'bg-indigo-100 dark:bg-indigo-900/20',\n cyan: 'bg-cyan-100 dark:bg-cyan-900/20',\n emerald: 'bg-emerald-100 dark:bg-emerald-900/20',\n pink: 'bg-pink-100 dark:bg-pink-900/20',\n gray: 'bg-gray-100 dark:bg-gray-900/20',\n };\n\n const bulletColorClasses: Record<FeatureCardColor, string> = {\n green: 'bg-green-500',\n blue: 'bg-blue-500',\n purple: 'bg-purple-500',\n orange: 'bg-orange-500',\n red: 'bg-red-500',\n indigo: 'bg-indigo-500',\n cyan: 'bg-cyan-500',\n emerald: 'bg-emerald-500',\n pink: 'bg-pink-500',\n gray: 'bg-gray-500',\n };\n\n const CardContent = () => (\n <>\n {/* Icon */}\n {borderColor ? (\n <View\n className={cn(\n 'w-12 h-12 rounded-lg items-center justify-center mb-4',\n iconBackgroundClasses[color]\n )}\n >\n <View className={colorClasses[color]}>{icon}</View>\n </View>\n ) : (\n <View className={cn('mb-4', colorClasses[color])}>{icon}</View>\n )}\n\n {/* Title */}\n <Text className='text-xl font-semibold text-gray-900 dark:text-white mb-3'>\n {title}\n </Text>\n\n {/* Description */}\n <Text className='text-gray-600 dark:text-gray-300 mb-4 leading-relaxed'>\n {description}\n </Text>\n\n {/* CTA */}\n {cta && <View className='mt-3 mb-4'>{cta}</View>}\n\n {/* Benefits */}\n {benefits && benefits.length > 0 && (\n <View className='gap-2 mb-4'>\n {benefits.map((benefit, index) => (\n <View key={index} className='flex-row items-start'>\n <View\n className={cn(\n 'w-2 h-2 rounded-full mt-2 mr-3',\n bulletColorClasses[color]\n )}\n />\n <Text className='flex-1 text-sm text-gray-600 dark:text-gray-400'>\n {benefit}\n </Text>\n </View>\n ))}\n </View>\n )}\n\n {/* Metrics */}\n {metrics && Object.keys(metrics).length > 0 && (\n <View className='flex-row flex-wrap gap-4 mt-4'>\n {Object.entries(metrics).map(([key, value], index) => (\n <View\n key={index}\n className='flex-1 min-w-[80px] items-center p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg'\n >\n <Text className={cn('text-lg font-bold', colorClasses[color])}>\n {value}\n </Text>\n <Text className='text-xs text-gray-500 dark:text-gray-400 mt-1'>\n {key}\n </Text>\n </View>\n ))}\n </View>\n )}\n </>\n );\n\n const baseClasses = cn(\n 'p-6 rounded-xl',\n borderColor && borderColorClasses[color],\n isHighlight\n ? 'bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800'\n : 'bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700',\n className\n );\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n className={baseClasses}\n accessibilityRole='button'\n accessibilityLabel={title}\n >\n <CardContent />\n </Pressable>\n );\n }\n\n return (\n <View className={baseClasses}>\n <CardContent />\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface Feature {\n /** Unique identifier */\n id?: string;\n /** Icon element */\n icon: React.ReactNode;\n /** Feature title */\n title: string;\n /** Feature description */\n description: string | React.ReactNode;\n /** Badge text and variant */\n badge?: {\n text: string;\n variant?: 'success' | 'info' | 'warning' | 'default';\n };\n}\n\nexport interface FeatureGridProps {\n /** Array of features to display */\n features: Feature[];\n /** Number of columns */\n columns?: 1 | 2 | 3 | 4;\n /** Gap between items */\n gap?: 'sm' | 'md' | 'lg';\n /** Card style variant */\n cardVariant?: 'default' | 'card' | 'minimal';\n /** Icon size */\n iconSize?: 'sm' | 'md' | 'lg';\n /** Feature press handler */\n onFeaturePress?: (feature: Feature) => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * FeatureGrid Component\n *\n * Grid layout for displaying feature cards.\n *\n * @example\n * ```tsx\n * <FeatureGrid\n * features={[\n * { icon: <Icon1 />, title: 'Feature 1', description: 'Description 1' },\n * { icon: <Icon2 />, title: 'Feature 2', description: 'Description 2' },\n * ]}\n * columns={2}\n * />\n * ```\n */\nexport const FeatureGrid: React.FC<FeatureGridProps> = ({\n features,\n columns = 2,\n gap = 'md',\n cardVariant = 'default',\n iconSize = 'md',\n onFeaturePress,\n className,\n}) => {\n const gapClasses = {\n sm: 'gap-4',\n md: 'gap-6',\n lg: 'gap-8',\n };\n\n const iconSizeClasses = {\n sm: 'w-12 h-12',\n md: 'w-16 h-16',\n lg: 'w-20 h-20',\n };\n\n const badgeVariants = {\n success:\n 'bg-green-100 dark:bg-green-900/30 text-green-800 dark:text-green-300',\n info: 'bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-300',\n warning:\n 'bg-amber-100 dark:bg-amber-900/30 text-amber-800 dark:text-amber-300',\n default: 'bg-gray-100 dark:bg-gray-800 text-gray-800 dark:text-gray-300',\n };\n\n const renderFeature = (feature: Feature, index: number) => {\n const content = (\n <View\n className={cn(\n 'items-center',\n cardVariant === 'card' &&\n 'bg-white dark:bg-gray-800 rounded-2xl p-6 shadow-lg',\n cardVariant === 'minimal' && 'gap-4'\n )}\n >\n {/* Badge */}\n {feature.badge && (\n <View className='mb-4'>\n <View\n className={cn(\n 'px-2.5 py-0.5 rounded-full',\n badgeVariants[feature.badge.variant || 'default']\n )}\n >\n <Text className='text-xs font-medium'>{feature.badge.text}</Text>\n </View>\n </View>\n )}\n\n {/* Icon */}\n <View\n className={cn(\n 'items-center justify-center rounded-2xl mb-4',\n 'bg-blue-100 dark:bg-blue-900/30',\n iconSizeClasses[iconSize]\n )}\n >\n <View className='text-blue-600 dark:text-blue-400'>\n {feature.icon}\n </View>\n </View>\n\n {/* Title */}\n <Text className='text-lg font-bold text-gray-900 dark:text-white mb-2 text-center'>\n {feature.title}\n </Text>\n\n {/* Description */}\n {typeof feature.description === 'string' ? (\n <Text className='text-gray-600 dark:text-gray-300 text-center leading-relaxed'>\n {feature.description}\n </Text>\n ) : (\n feature.description\n )}\n </View>\n );\n\n if (onFeaturePress) {\n return (\n <Pressable\n key={feature.id || index}\n onPress={() => onFeaturePress(feature)}\n className='flex-1'\n style={{ minWidth: `${100 / columns - 5}%` }}\n accessibilityRole='button'\n accessibilityLabel={feature.title}\n >\n {content}\n </Pressable>\n );\n }\n\n return (\n <View\n key={feature.id || index}\n className='flex-1'\n style={{ minWidth: `${100 / columns - 5}%` }}\n >\n {content}\n </View>\n );\n };\n\n return (\n <View className={cn('flex-row flex-wrap', gapClasses[gap], className)}>\n {features.map(renderFeature)}\n </View>\n );\n};\n\n// Helper function to create feature objects\nexport const createFeature = (\n icon: React.ReactNode,\n title: string,\n description: string | React.ReactNode,\n options?: Partial<Feature>\n): Feature => ({\n icon,\n title,\n description,\n ...options,\n});\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CTAButton {\n /** Button label */\n label: string;\n /** Press handler */\n onPress: () => void;\n /** Button variant */\n variant?: 'primary' | 'secondary' | 'outline';\n}\n\nexport interface CTASectionProps {\n /** Section title */\n title: string;\n /** Section description */\n description: string;\n /** Primary CTA button */\n primaryButton: CTAButton;\n /** Secondary CTA button */\n secondaryButton?: CTAButton;\n /** Gradient preset */\n gradient?: 'blue-purple' | 'green-blue' | 'orange-red' | 'purple-pink';\n /** Text color theme */\n textColor?: 'light' | 'dark';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * CTASection Component\n *\n * Call-to-action section with gradient background and buttons.\n *\n * @example\n * ```tsx\n * <CTASection\n * title=\"Ready to get started?\"\n * description=\"Join thousands of users today.\"\n * primaryButton={{ label: 'Sign Up', onPress: handleSignUp }}\n * secondaryButton={{ label: 'Learn More', onPress: handleLearnMore }}\n * />\n * ```\n */\nexport const CTASection: React.FC<CTASectionProps> = ({\n title,\n description,\n primaryButton,\n secondaryButton,\n gradient = 'blue-purple',\n textColor = 'light',\n size = 'lg',\n className,\n}) => {\n const gradientClasses = {\n 'blue-purple': 'bg-blue-600 dark:bg-blue-700',\n 'green-blue': 'bg-green-600 dark:bg-green-700',\n 'orange-red': 'bg-orange-600 dark:bg-orange-700',\n 'purple-pink': 'bg-purple-600 dark:bg-purple-700',\n };\n\n const sizeClasses = {\n sm: 'py-8 px-4',\n md: 'py-12 px-6',\n lg: 'py-16 px-8',\n };\n\n const titleSizeClasses = {\n sm: 'text-2xl',\n md: 'text-3xl',\n lg: 'text-4xl',\n };\n\n const descriptionSizeClasses = {\n sm: 'text-base',\n md: 'text-lg',\n lg: 'text-xl',\n };\n\n const textColorClass = textColor === 'light' ? 'text-white' : 'text-gray-900';\n\n const renderButton = (button: CTAButton, isPrimary: boolean) => (\n <Pressable\n onPress={button.onPress}\n className={cn(\n 'px-6 py-3 rounded-lg',\n isPrimary ? 'bg-white' : 'bg-white/20 border border-white/30'\n )}\n accessibilityRole='button'\n accessibilityLabel={button.label}\n >\n <Text\n className={cn(\n 'text-base font-semibold text-center',\n isPrimary ? 'text-blue-600' : 'text-white'\n )}\n >\n {button.label}\n </Text>\n </Pressable>\n );\n\n return (\n <View\n className={cn(\n 'rounded-2xl overflow-hidden',\n gradientClasses[gradient],\n sizeClasses[size],\n className\n )}\n >\n <View className='items-center'>\n {/* Title */}\n <Text\n className={cn(\n 'font-bold mb-4 text-center',\n titleSizeClasses[size],\n textColorClass\n )}\n >\n {title}\n </Text>\n\n {/* Description */}\n <Text\n className={cn(\n 'mb-8 text-center opacity-90 max-w-lg',\n descriptionSizeClasses[size],\n textColorClass\n )}\n >\n {description}\n </Text>\n\n {/* Buttons */}\n <View className='flex-row gap-4'>\n {renderButton(primaryButton, true)}\n {secondaryButton && renderButton(secondaryButton, false)}\n </View>\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PromotionalBannerProps {\n /** Banner title */\n title: string;\n /** Optional subtitle */\n subtitle?: string;\n /** Button text */\n buttonText: string;\n /** Button press handler */\n onButtonPress: () => void;\n /** Visual variant */\n variant?: 'default' | 'prominent';\n /** Badge text */\n badgeText?: string;\n /** Icon element (optional) */\n icon?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * PromotionalBanner Component\n *\n * Banner for promotions, announcements, or CTAs.\n *\n * @example\n * ```tsx\n * <PromotionalBanner\n * title=\"Get Started Free\"\n * subtitle=\"No credit card required\"\n * buttonText=\"Sign Up\"\n * onButtonPress={handleSignUp}\n * badgeText=\"FREE\"\n * />\n * ```\n */\nexport const PromotionalBanner: React.FC<PromotionalBannerProps> = ({\n title,\n subtitle,\n buttonText,\n onButtonPress,\n variant = 'default',\n badgeText = 'FREE',\n icon,\n className,\n}) => {\n const isProminent = variant === 'prominent';\n\n return (\n <View\n className={cn(\n 'bg-green-50 dark:bg-green-900/20',\n 'border-b border-green-200 dark:border-green-700',\n isProminent && 'border-b-2',\n className\n )}\n >\n <View className='px-4 py-4'>\n <View className='flex-row items-center justify-between gap-4 flex-wrap'>\n {/* Left side: Badge + Title */}\n <View className='flex-row items-center flex-1'>\n {/* Badge */}\n <View className='bg-green-500 px-3 py-1 rounded-full mr-3'>\n <Text className='text-white text-xs font-bold'>{badgeText}</Text>\n </View>\n\n {/* Title & Subtitle */}\n <View className='flex-1'>\n <Text\n className={cn(\n 'text-green-800 dark:text-green-200 font-semibold',\n isProminent && 'text-lg'\n )}\n >\n {title}\n </Text>\n {subtitle && (\n <Text className='text-green-700 dark:text-green-300 text-sm'>\n {subtitle}\n </Text>\n )}\n </View>\n </View>\n\n {/* CTA Button */}\n <Pressable\n onPress={onButtonPress}\n className={cn(\n 'bg-green-600 dark:bg-green-700 rounded-lg',\n 'flex-row items-center',\n isProminent ? 'px-6 py-3' : 'px-4 py-2'\n )}\n accessibilityRole='button'\n accessibilityLabel={buttonText}\n >\n {icon && <View className='mr-2'>{icon}</View>}\n <Text\n className={cn(\n 'text-white font-bold',\n isProminent ? 'text-base' : 'text-sm'\n )}\n >\n {buttonText}\n </Text>\n </Pressable>\n </View>\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useRef, useEffect } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Animated,\n LayoutAnimation,\n Platform,\n UIManager,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\n// Enable LayoutAnimation on Android\nif (\n Platform.OS === 'android' &&\n UIManager.setLayoutAnimationEnabledExperimental\n) {\n UIManager.setLayoutAnimationEnabledExperimental(true);\n}\n\nexport interface CollapsibleSectionItem {\n /** Unique identifier */\n id: string;\n /** Item title */\n title: string;\n /** Item content */\n content?: React.ReactNode;\n}\n\nexport interface CollapsibleSectionProps {\n /** Section ID */\n id: string;\n /** Section title */\n title: string;\n /** Section content (shown when no subsections) */\n content?: React.ReactNode;\n /** Subsections */\n subsections?: CollapsibleSectionItem[];\n /** Whether section is selected */\n isSelected?: boolean;\n /** Currently selected subsection ID */\n selectedSubsection?: string | null;\n /** Section select handler */\n onSectionSelect?: (sectionId: string) => void;\n /** Subsection select handler */\n onSubsectionSelect?: (subsectionId: string, parentSectionId: string) => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * CollapsibleSection Component\n *\n * Collapsible section with optional subsections.\n * Useful for documentation, FAQs, or navigation.\n *\n * @example\n * ```tsx\n * <CollapsibleSection\n * id=\"getting-started\"\n * title=\"Getting Started\"\n * subsections={[\n * { id: 'install', title: 'Installation' },\n * { id: 'setup', title: 'Setup' },\n * ]}\n * isSelected={selectedSection === 'getting-started'}\n * onSectionSelect={setSelectedSection}\n * onSubsectionSelect={handleSubsectionSelect}\n * />\n * ```\n */\nexport const CollapsibleSection: React.FC<CollapsibleSectionProps> = ({\n id,\n title,\n subsections,\n isSelected = false,\n selectedSubsection = null,\n onSectionSelect,\n onSubsectionSelect,\n className,\n}) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const rotateAnim = useRef(new Animated.Value(0)).current;\n\n const hasSubsections = subsections && subsections.length > 0;\n\n useEffect(() => {\n Animated.timing(rotateAnim, {\n toValue: isExpanded ? 1 : 0,\n duration: 200,\n useNativeDriver: true,\n }).start();\n }, [isExpanded, rotateAnim]);\n\n const handleToggle = () => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n setIsExpanded(!isExpanded);\n };\n\n const handleSectionPress = () => {\n onSectionSelect?.(id);\n };\n\n const rotation = rotateAnim.interpolate({\n inputRange: [0, 1],\n outputRange: ['0deg', '90deg'],\n });\n\n return (\n <View className={className}>\n {/* Section Header */}\n <View className='flex-row items-center'>\n {/* Selection overlay */}\n {isSelected && !selectedSubsection && (\n <View className='absolute top-1 bottom-1 left-1 right-10 bg-blue-500/20 dark:bg-blue-400/20 rounded-lg' />\n )}\n\n {/* Title button */}\n <Pressable\n onPress={handleSectionPress}\n className='flex-1 py-4 pl-4 pr-2'\n accessibilityRole='button'\n accessibilityLabel={title}\n accessibilityState={{ selected: isSelected && !selectedSubsection }}\n >\n <Text\n className={cn(\n 'text-base font-medium',\n isSelected && !selectedSubsection\n ? 'text-blue-700 dark:text-blue-300'\n : 'text-gray-700 dark:text-gray-300'\n )}\n >\n {title}\n </Text>\n </Pressable>\n\n {/* Expand/collapse button */}\n {hasSubsections && (\n <Pressable\n onPress={handleToggle}\n className='p-2 rounded-md'\n accessibilityRole='button'\n accessibilityLabel={isExpanded ? 'Collapse' : 'Expand'}\n >\n <Animated.View style={{ transform: [{ rotate: rotation }] }}>\n <Text className='text-gray-500 text-lg'>›</Text>\n </Animated.View>\n </Pressable>\n )}\n </View>\n\n {/* Subsections */}\n {hasSubsections && isExpanded && (\n <View className='ml-6 mb-2'>\n {subsections.map(subsection => (\n <View key={subsection.id} className='relative'>\n {/* Selection overlay */}\n {selectedSubsection === subsection.id && (\n <View className='absolute top-0.5 bottom-0.5 left-0 right-8 bg-blue-500/20 dark:bg-blue-400/20 rounded-lg' />\n )}\n\n <Pressable\n onPress={() => onSubsectionSelect?.(subsection.id, id)}\n className='py-2 pl-4 pr-3'\n accessibilityRole='button'\n accessibilityLabel={subsection.title}\n accessibilityState={{\n selected: selectedSubsection === subsection.id,\n }}\n >\n <Text\n className={cn(\n 'text-sm',\n selectedSubsection === subsection.id\n ? 'text-blue-700 dark:text-blue-300'\n : 'text-gray-600 dark:text-gray-400'\n )}\n >\n {subsection.title}\n </Text>\n </Pressable>\n </View>\n ))}\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface DashboardStatCardProps {\n /** Stat title */\n title: string;\n /** Stat value */\n value: string | number;\n /** Change percentage */\n change?: number;\n /** Change period description */\n changePeriod?: string;\n /** Icon element */\n icon?: React.ReactNode;\n /** Color variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger';\n /** Additional className */\n className?: string;\n}\n\n/**\n * DashboardStatCard Component\n *\n * Statistics display card for dashboards.\n * Shows value, change indicator, and optional icon.\n *\n * @example\n * ```tsx\n * <DashboardStatCard\n * title=\"Total Revenue\"\n * value=\"$45,231\"\n * change={12.5}\n * changePeriod=\"vs last month\"\n * variant=\"success\"\n * />\n * ```\n */\nexport const DashboardStatCard: React.FC<DashboardStatCardProps> = ({\n title,\n value,\n change,\n changePeriod = 'vs last period',\n icon,\n variant = 'default',\n className,\n}) => {\n const variantClasses = {\n default: 'bg-white dark:bg-gray-900',\n primary: 'bg-blue-50 dark:bg-blue-900/20',\n success: 'bg-green-50 dark:bg-green-900/20',\n warning: 'bg-yellow-50 dark:bg-yellow-900/20',\n danger: 'bg-red-50 dark:bg-red-900/20',\n };\n\n const isPositive = change !== undefined && change >= 0;\n\n return (\n <View\n className={cn(\n 'rounded-lg border border-gray-200 dark:border-gray-700 p-6',\n variantClasses[variant],\n className\n )}\n >\n {/* Header */}\n <View className='flex-row items-start justify-between mb-2'>\n <Text className='text-sm font-medium text-gray-600 dark:text-gray-400'>\n {title}\n </Text>\n {icon && (\n <View className='text-gray-400 dark:text-gray-600'>{icon}</View>\n )}\n </View>\n\n {/* Value */}\n <Text className='text-3xl font-bold text-gray-900 dark:text-white'>\n {value}\n </Text>\n\n {/* Change indicator */}\n {change !== undefined && (\n <View className='flex-row items-center gap-1 mt-2'>\n <Text\n className={cn(\n 'text-sm font-medium',\n isPositive\n ? 'text-green-600 dark:text-green-400'\n : 'text-red-600 dark:text-red-400'\n )}\n >\n {isPositive ? '↑' : '↓'} {Math.abs(change)}%\n </Text>\n <Text className='text-xs text-gray-500 dark:text-gray-400'>\n {changePeriod}\n </Text>\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface StatDisplayProps {\n /** The main value/number to display */\n value: string | number;\n /** Label/description for the stat */\n label: string;\n /** Color variant */\n variant?: 'primary' | 'success' | 'warning' | 'danger' | 'neutral' | 'white';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Text alignment */\n align?: 'left' | 'center' | 'right';\n /** Icon element */\n icon?: React.ReactNode;\n /** Icon position */\n iconPosition?: 'top' | 'left';\n /** Additional className */\n className?: string;\n}\n\n/**\n * StatDisplay Component\n *\n * Displays a statistic or metric with a value and label.\n * Commonly used in dashboards, hero sections, and analytics.\n *\n * @example\n * ```tsx\n * <StatDisplay value=\"5K\" label=\"Gas Overhead\" variant=\"primary\" />\n * <StatDisplay value=\"42\" label=\"Active Users\" variant=\"success\" size=\"lg\" />\n * ```\n */\nexport const StatDisplay: React.FC<StatDisplayProps> = ({\n value,\n label,\n variant = 'neutral',\n size = 'md',\n align = 'center',\n icon,\n iconPosition = 'top',\n className,\n}) => {\n const variantClasses = {\n primary: {\n value: 'text-blue-600 dark:text-blue-400',\n label: 'text-blue-600/70 dark:text-blue-400/70',\n },\n success: {\n value: 'text-green-600 dark:text-green-400',\n label: 'text-green-600/70 dark:text-green-400/70',\n },\n warning: {\n value: 'text-yellow-600 dark:text-yellow-400',\n label: 'text-yellow-600/70 dark:text-yellow-400/70',\n },\n danger: {\n value: 'text-red-600 dark:text-red-400',\n label: 'text-red-600/70 dark:text-red-400/70',\n },\n neutral: {\n value: 'text-gray-900 dark:text-gray-100',\n label: 'text-gray-600 dark:text-gray-400',\n },\n white: {\n value: 'text-white',\n label: 'text-white/70',\n },\n };\n\n const sizeClasses = {\n sm: { value: 'text-xl', label: 'text-xs' },\n md: { value: 'text-2xl', label: 'text-sm' },\n lg: { value: 'text-3xl', label: 'text-base' },\n xl: { value: 'text-4xl', label: 'text-lg' },\n };\n\n const alignClasses = {\n left: 'items-start',\n center: 'items-center',\n right: 'items-end',\n };\n\n const variantConfig = variantClasses[variant];\n const sizeConfig = sizeClasses[size];\n\n if (iconPosition === 'left' && icon) {\n return (\n <View\n className={cn(\n 'flex-row items-center gap-3',\n align === 'center' && 'justify-center',\n className\n )}\n >\n <View className={variantConfig.value}>{icon}</View>\n <View>\n <Text\n className={cn('font-bold', sizeConfig.value, variantConfig.value)}\n >\n {value}\n </Text>\n <Text className={cn(sizeConfig.label, variantConfig.label)}>\n {label}\n </Text>\n </View>\n </View>\n );\n }\n\n return (\n <View className={cn(alignClasses[align], className)}>\n {icon && iconPosition === 'top' && (\n <View className={cn('mb-2', variantConfig.value)}>{icon}</View>\n )}\n <Text className={cn('font-bold', sizeConfig.value, variantConfig.value)}>\n {value}\n </Text>\n <Text className={cn(sizeConfig.label, variantConfig.label)}>{label}</Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface KeyValuePairProps {\n /** Label/key text */\n label: string;\n /** Value content */\n value: React.ReactNode;\n /** Layout orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Alignment for horizontal layout */\n align?: 'start' | 'center' | 'between';\n /** Label width (for horizontal layout) */\n labelWidth?: 'auto' | 'sm' | 'md' | 'lg';\n /** Text size */\n size?: 'sm' | 'md' | 'lg';\n /** Show separator */\n separator?: boolean;\n /** Label color variant */\n labelVariant?: 'default' | 'muted' | 'strong';\n /** Value color variant */\n valueVariant?: 'default' | 'muted' | 'strong' | 'primary';\n /** Additional className */\n className?: string;\n}\n\n/**\n * KeyValuePair Component\n *\n * Displays a label-value pair with flexible layout options.\n * Commonly used in forms, details pages, and data displays.\n *\n * @example\n * ```tsx\n * <KeyValuePair label=\"Email\" value=\"user@example.com\" />\n * <KeyValuePair\n * label=\"Status\"\n * value=\"Active\"\n * orientation=\"horizontal\"\n * align=\"between\"\n * />\n * ```\n */\nexport const KeyValuePair: React.FC<KeyValuePairProps> = ({\n label,\n value,\n orientation = 'vertical',\n align = 'start',\n labelWidth = 'auto',\n size = 'md',\n separator = false,\n labelVariant = 'muted',\n valueVariant = 'default',\n className,\n}) => {\n const sizeClasses = {\n sm: { label: 'text-sm', value: 'text-sm', gap: 'gap-1' },\n md: { label: 'text-base', value: 'text-base', gap: 'gap-2' },\n lg: { label: 'text-lg', value: 'text-lg', gap: 'gap-3' },\n };\n\n const labelWidthStyles = {\n auto: undefined,\n sm: 96,\n md: 128,\n lg: 160,\n };\n\n const alignClasses = {\n start: 'justify-start',\n center: 'justify-center',\n between: 'justify-between',\n };\n\n const labelVariantClasses = {\n default: 'text-gray-700 dark:text-gray-300',\n muted: 'text-gray-600 dark:text-gray-400',\n strong: 'text-gray-900 dark:text-gray-100 font-semibold',\n };\n\n const valueVariantClasses = {\n default: 'text-gray-900 dark:text-gray-100',\n muted: 'text-gray-600 dark:text-gray-400',\n strong: 'text-gray-900 dark:text-gray-100 font-semibold',\n primary: 'text-blue-600 dark:text-blue-400',\n };\n\n const sizeConfig = sizeClasses[size];\n\n return (\n <View\n className={cn(\n orientation === 'horizontal' ? 'flex-row items-center' : 'flex-col',\n orientation === 'horizontal' && alignClasses[align],\n sizeConfig.gap,\n separator && 'pb-3 mb-3 border-b border-gray-200 dark:border-gray-700',\n className\n )}\n >\n <Text\n className={cn(sizeConfig.label, labelVariantClasses[labelVariant])}\n style={\n orientation === 'horizontal' && labelWidth !== 'auto'\n ? { width: labelWidthStyles[labelWidth] }\n : undefined\n }\n >\n {label}\n </Text>\n {typeof value === 'string' || typeof value === 'number' ? (\n <Text\n className={cn(\n sizeConfig.value,\n valueVariantClasses[valueVariant],\n orientation === 'horizontal' && 'flex-1'\n )}\n >\n {value}\n </Text>\n ) : (\n <View className={cn(orientation === 'horizontal' && 'flex-1')}>\n {value}\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { Text, Pressable, Linking, Alert } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SmartLinkProps {\n /** Link destination - URL or internal path */\n to?: string;\n /** Alternative prop name for destination */\n href?: string;\n /** Force external link behavior */\n external?: boolean;\n /** Link text/content */\n children: React.ReactNode;\n /** Link variant */\n variant?: 'subtle' | 'default' | 'muted' | 'external' | 'inherit';\n /** Text size */\n size?: 'sm' | 'default' | 'lg';\n /** Navigation handler for internal links */\n onNavigate?: (path: string) => void;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * SmartLink Component\n *\n * Intelligent link component that handles both internal and external links.\n * External links open in browser, internal links use the onNavigate callback.\n *\n * @example\n * ```tsx\n * <SmartLink to=\"/profile\" onNavigate={navigate}>\n * View Profile\n * </SmartLink>\n * <SmartLink href=\"https://example.com\" external>\n * Visit Website\n * </SmartLink>\n * ```\n */\nexport const SmartLink: React.FC<SmartLinkProps> = ({\n to,\n href,\n external,\n children,\n variant = 'subtle',\n size = 'default',\n onNavigate,\n disabled = false,\n className,\n}) => {\n const destination = to || href;\n\n const variantClasses = {\n subtle: 'text-gray-700 dark:text-gray-300',\n default: 'text-blue-600 dark:text-blue-400 underline',\n muted: 'text-gray-500 dark:text-gray-500',\n external: 'text-blue-600 dark:text-blue-400 underline',\n inherit: 'text-inherit',\n };\n\n const sizeClasses = {\n sm: 'text-sm',\n default: 'text-base',\n lg: 'text-lg',\n };\n\n const handlePress = async () => {\n if (disabled || !destination) return;\n\n // Check if external\n const isExternal =\n external ||\n destination.startsWith('http') ||\n destination.startsWith('mailto:') ||\n destination.startsWith('tel:');\n\n if (isExternal) {\n // Open in browser\n try {\n const canOpen = await Linking.canOpenURL(destination);\n if (canOpen) {\n await Linking.openURL(destination);\n } else {\n Alert.alert('Error', 'Cannot open this link');\n }\n } catch {\n Alert.alert('Error', 'Failed to open link');\n }\n } else {\n // Internal navigation\n if (onNavigate) {\n onNavigate(destination);\n }\n }\n };\n\n // If no destination, render as plain text\n if (!destination) {\n return (\n <Text\n className={cn(\n variantClasses[variant],\n sizeClasses[size],\n disabled && 'opacity-50',\n className\n )}\n >\n {children}\n </Text>\n );\n }\n\n // Determine if external for styling\n const isExternal =\n external ||\n destination.startsWith('http') ||\n destination.startsWith('mailto:') ||\n destination.startsWith('tel:');\n\n const appliedVariant =\n isExternal && variant === 'subtle' ? 'external' : variant;\n\n return (\n <Pressable\n onPress={handlePress}\n disabled={disabled}\n accessibilityRole='link'\n accessibilityLabel={typeof children === 'string' ? children : undefined}\n accessibilityState={{ disabled }}\n >\n {({ pressed }) => (\n <Text\n className={cn(\n variantClasses[appliedVariant],\n sizeClasses[size],\n pressed && 'opacity-70',\n disabled && 'opacity-50',\n className\n )}\n >\n {children}\n {isExternal && appliedVariant === 'external' && ' ↗'}\n </Text>\n )}\n </Pressable>\n );\n};\n\nexport interface SmartContentProps {\n /** Content with potential links */\n children: string;\n /** Link mappings from text to paths */\n mappings?: Record<string, string>;\n /** Navigation handler for internal links */\n onNavigate?: (path: string) => void;\n /** Link variant */\n variant?: SmartLinkProps['variant'];\n /** Additional className */\n className?: string;\n}\n\n/**\n * SmartContent Component\n *\n * Automatically converts text matches to links based on mappings.\n *\n * @example\n * ```tsx\n * <SmartContent\n * mappings={{ 'privacy policy': '/privacy', 'contact us': '/contact' }}\n * onNavigate={navigate}\n * >\n * Please read our privacy policy or contact us for help.\n * </SmartContent>\n * ```\n */\nexport const SmartContent: React.FC<SmartContentProps> = ({\n children,\n mappings = {},\n onNavigate,\n variant = 'subtle',\n className,\n}) => {\n const processedContent = React.useMemo(() => {\n if (!children || typeof children !== 'string') {\n return {\n parts: [children || ''],\n links: [] as { text: string; path: string; index: number }[],\n };\n }\n\n let content = children;\n const links: { text: string; path: string; index: number }[] = [];\n\n // Sort by length (longest first) to avoid partial replacements\n const sortedMappings = Object.entries(mappings).sort(\n ([a], [b]) => b.length - a.length\n );\n\n let placeholderIndex = 0;\n sortedMappings.forEach(([text, path]) => {\n if (text && path) {\n const regex = new RegExp(\n `\\\\b${text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}\\\\b`,\n 'gi'\n );\n content = content.replace(regex, match => {\n links.push({ text: match, path, index: placeholderIndex });\n return `__LINK_${placeholderIndex++}__`;\n });\n }\n });\n\n // Split content by placeholders\n const parts = content.split(/(__LINK_\\d+__)/);\n\n return { parts, links };\n }, [children, mappings]);\n\n const { parts, links } = processedContent;\n\n return (\n <Text className={cn('text-gray-900 dark:text-gray-100', className)}>\n {parts.map((part, index) => {\n const linkMatch = part.match(/__LINK_(\\d+)__/);\n if (linkMatch) {\n const linkIndex = parseInt(linkMatch[1], 10);\n const link = links.find(l => l.index === linkIndex);\n if (link) {\n return (\n <SmartLink\n key={index}\n to={link.path}\n variant={variant}\n onNavigate={onNavigate}\n >\n {link.text}\n </SmartLink>\n );\n }\n }\n return <Text key={index}>{part}</Text>;\n })}\n </Text>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n Text,\n Pressable,\n ScrollView,\n NativeScrollEvent,\n NativeSyntheticEvent,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ScrollSpySection {\n /** Section ID */\n id: string;\n /** Section label */\n label: string;\n /** Subsections */\n subsections?: ScrollSpySection[];\n}\n\nexport interface ScrollSpyProps {\n /** Sections to track */\n sections: ScrollSpySection[];\n /** Active section ID */\n activeId?: string;\n /** Active section change handler */\n onActiveChange?: (id: string) => void;\n /** Section press handler - called when user taps a section link */\n onSectionPress?: (id: string) => void;\n /** Show subsections */\n showSubsections?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * ScrollSpy Component\n *\n * Navigation that highlights the active section.\n * Pairs with ScrollSpyContainer for automatic scroll tracking.\n *\n * @example\n * ```tsx\n * <ScrollSpy\n * sections={[\n * { id: 'intro', label: 'Introduction' },\n * { id: 'features', label: 'Features' },\n * { id: 'pricing', label: 'Pricing' }\n * ]}\n * activeId={activeSection}\n * onSectionPress={(id) => scrollToSection(id)}\n * />\n * ```\n */\nexport const ScrollSpy: React.FC<ScrollSpyProps> = ({\n sections,\n activeId,\n onActiveChange,\n onSectionPress,\n showSubsections = true,\n className,\n}) => {\n const handlePress = (id: string) => {\n if (onActiveChange) {\n onActiveChange(id);\n }\n if (onSectionPress) {\n onSectionPress(id);\n }\n };\n\n // Render section\n const renderSection = (section: ScrollSpySection, level: number = 0) => {\n const isActive = activeId === section.id;\n const hasActiveChild =\n section.subsections?.some(sub => activeId === sub.id) || false;\n\n return (\n <View key={section.id}>\n <Pressable\n onPress={() => handlePress(section.id)}\n className={cn(\n 'py-2 px-3 rounded-lg',\n isActive\n ? 'bg-blue-50 dark:bg-blue-900/30'\n : 'active:bg-gray-100 dark:active:bg-gray-800'\n )}\n style={{ paddingLeft: level * 12 + 12 }}\n accessibilityRole='button'\n accessibilityLabel={section.label}\n accessibilityState={{ selected: isActive }}\n >\n <Text\n className={cn(\n 'text-sm',\n level === 0 ? 'font-medium' : 'font-normal',\n isActive\n ? 'text-blue-700 dark:text-blue-300'\n : hasActiveChild\n ? 'text-gray-700 dark:text-gray-300'\n : 'text-gray-600 dark:text-gray-400'\n )}\n >\n {section.label}\n </Text>\n </Pressable>\n\n {/* Subsections */}\n {showSubsections &&\n section.subsections &&\n section.subsections.length > 0 && (\n <View className='ml-3 border-l-2 border-gray-200 dark:border-gray-700'>\n {section.subsections.map(subsection =>\n renderSection(subsection, level + 1)\n )}\n </View>\n )}\n </View>\n );\n };\n\n return (\n <View className={cn('gap-1', className)}>\n {sections.map(section => renderSection(section, 0))}\n </View>\n );\n};\n\nexport interface SectionPosition {\n id: string;\n y: number;\n height: number;\n}\n\nexport interface ScrollSpyContainerProps {\n /** Children content with sections */\n children: React.ReactNode;\n /** Sections configuration for tracking */\n sections: ScrollSpySection[];\n /** Active section change handler */\n onActiveChange?: (id: string) => void;\n /** Offset from top for determining active section */\n offset?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * ScrollSpyContainer Component\n *\n * Scrollable container that tracks section visibility.\n * Use with ScrollSpySection to mark sections for tracking.\n *\n * @example\n * ```tsx\n * <ScrollSpyContainer\n * sections={tocSections}\n * onActiveChange={setActiveSection}\n * >\n * <ScrollSpySection id=\"intro\">\n * <Introduction />\n * </ScrollSpySection>\n * <ScrollSpySection id=\"features\">\n * <Features />\n * </ScrollSpySection>\n * </ScrollSpyContainer>\n * ```\n */\nexport const ScrollSpyContainer: React.FC<ScrollSpyContainerProps> = ({\n children,\n sections,\n onActiveChange,\n offset = 80,\n className,\n}) => {\n const scrollViewRef = React.useRef<ScrollView>(null);\n const sectionPositions = React.useRef<Map<string, SectionPosition>>(\n new Map()\n );\n\n // Handle scroll event\n const handleScroll = (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n const y = event.nativeEvent.contentOffset.y;\n\n // Find active section based on scroll position\n const getAllIds = (secs: ScrollSpySection[]): string[] => {\n return secs.flatMap(section => [\n section.id,\n ...(section.subsections ? getAllIds(section.subsections) : []),\n ]);\n };\n\n const allIds = getAllIds(sections);\n let activeId = allIds[0];\n\n for (const id of allIds) {\n const position = sectionPositions.current.get(id);\n if (position && position.y <= y + offset) {\n activeId = id;\n }\n }\n\n if (onActiveChange) {\n onActiveChange(activeId);\n }\n };\n\n // Scroll to section\n const scrollToSection = React.useCallback(\n (id: string) => {\n const position = sectionPositions.current.get(id);\n if (position && scrollViewRef.current) {\n scrollViewRef.current.scrollTo({\n y: Math.max(0, position.y - offset + 1),\n animated: true,\n });\n }\n },\n [offset]\n );\n\n // Context for child sections to register positions\n const contextValue = React.useMemo(\n () => ({\n registerSection: (id: string, y: number, height: number) => {\n sectionPositions.current.set(id, { id, y, height });\n },\n unregisterSection: (id: string) => {\n sectionPositions.current.delete(id);\n },\n scrollToSection,\n }),\n [scrollToSection]\n );\n\n return (\n <ScrollSpyContext.Provider value={contextValue}>\n <ScrollView\n ref={scrollViewRef}\n onScroll={handleScroll}\n scrollEventThrottle={16}\n className={cn('flex-1', className)}\n >\n {children}\n </ScrollView>\n </ScrollSpyContext.Provider>\n );\n};\n\n// Context for section registration\ninterface ScrollSpyContextType {\n registerSection: (id: string, y: number, height: number) => void;\n unregisterSection: (id: string) => void;\n scrollToSection: (id: string) => void;\n}\n\nconst ScrollSpyContext = React.createContext<ScrollSpyContextType | null>(null);\n\nexport const useScrollSpy = () => {\n const context = React.useContext(ScrollSpyContext);\n return context;\n};\n\nexport interface ScrollSpySectionWrapperProps {\n /** Section ID - must match an ID in ScrollSpy sections */\n id: string;\n /** Section content */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * ScrollSpySectionWrapper Component\n *\n * Wrapper for content sections that should be tracked by ScrollSpy.\n *\n * @example\n * ```tsx\n * <ScrollSpySectionWrapper id=\"features\">\n * <FeaturesList />\n * </ScrollSpySectionWrapper>\n * ```\n */\nexport const ScrollSpySectionWrapper: React.FC<\n ScrollSpySectionWrapperProps\n> = ({ id, children, className }) => {\n const context = React.useContext(ScrollSpyContext);\n\n const handleLayout = React.useCallback(\n (event: { nativeEvent: { layout: { y: number; height: number } } }) => {\n if (context) {\n const { y, height } = event.nativeEvent.layout;\n context.registerSection(id, y, height);\n }\n },\n [context, id]\n );\n\n React.useEffect(() => {\n return () => {\n if (context) {\n context.unregisterSection(id);\n }\n };\n }, [context, id]);\n\n return (\n <View onLayout={handleLayout} className={className}>\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n PanResponder,\n GestureResponderEvent,\n PanResponderGestureState,\n LayoutChangeEvent,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SplitPaneProps {\n /** Left/Top panel content */\n left: React.ReactNode;\n /** Right/Bottom panel content */\n right: React.ReactNode;\n /** Split direction */\n direction?: 'horizontal' | 'vertical';\n /** Initial split position (0-1) */\n initialSplit?: number;\n /** Controlled split position */\n split?: number;\n /** Split change handler */\n onSplitChange?: (split: number) => void;\n /** Minimum left/top panel size (pixels) */\n minLeftSize?: number;\n /** Minimum right/bottom panel size (pixels) */\n minRightSize?: number;\n /** Divider size in pixels */\n dividerSize?: number;\n /** Allow resize */\n resizable?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * SplitPane Component\n *\n * Resizable split panel layout with draggable divider.\n * Supports horizontal and vertical splits.\n *\n * @example\n * ```tsx\n * <SplitPane\n * left={<Sidebar />}\n * right={<MainContent />}\n * direction=\"horizontal\"\n * initialSplit={0.3}\n * minLeftSize={200}\n * minRightSize={400}\n * />\n * ```\n */\nexport const SplitPane: React.FC<SplitPaneProps> = ({\n left,\n right,\n direction = 'horizontal',\n initialSplit = 0.5,\n split: controlledSplit,\n onSplitChange,\n minLeftSize = 100,\n minRightSize = 100,\n dividerSize = 12,\n resizable = true,\n className,\n}) => {\n const [internalSplit, setInternalSplit] = React.useState(initialSplit);\n const [isDragging, setIsDragging] = React.useState(false);\n const [containerSize, setContainerSize] = React.useState({\n width: 0,\n height: 0,\n });\n\n const split = controlledSplit !== undefined ? controlledSplit : internalSplit;\n const isHorizontal = direction === 'horizontal';\n\n // Handle layout change to get container dimensions\n const handleLayout = (event: LayoutChangeEvent) => {\n const { width, height } = event.nativeEvent.layout;\n setContainerSize({ width, height });\n };\n\n // Calculate new split value from gesture\n const calculateSplit = React.useCallback(\n (gestureState: PanResponderGestureState): number => {\n const totalSize = isHorizontal\n ? containerSize.width\n : containerSize.height;\n if (totalSize === 0) return split;\n\n const delta = isHorizontal ? gestureState.dx : gestureState.dy;\n const currentPosition = split * totalSize + delta;\n let newSplit = currentPosition / totalSize;\n\n // Clamp between 0 and 1\n newSplit = Math.max(0, Math.min(1, newSplit));\n\n // Apply min sizes\n const minLeftRatio = minLeftSize / totalSize;\n const maxLeftRatio = 1 - minRightSize / totalSize;\n\n newSplit = Math.max(minLeftRatio, Math.min(maxLeftRatio, newSplit));\n\n return newSplit;\n },\n [isHorizontal, containerSize, split, minLeftSize, minRightSize]\n );\n\n // Create PanResponder for gesture handling\n const panResponder = React.useMemo(\n () =>\n PanResponder.create({\n onStartShouldSetPanResponder: () => resizable,\n onMoveShouldSetPanResponder: () => resizable,\n onPanResponderGrant: () => {\n setIsDragging(true);\n },\n onPanResponderMove: (\n _event: GestureResponderEvent,\n gestureState: PanResponderGestureState\n ) => {\n const newSplit = calculateSplit(gestureState);\n\n if (controlledSplit !== undefined && onSplitChange) {\n onSplitChange(newSplit);\n } else {\n setInternalSplit(newSplit);\n }\n },\n onPanResponderRelease: () => {\n setIsDragging(false);\n },\n onPanResponderTerminate: () => {\n setIsDragging(false);\n },\n }),\n [resizable, controlledSplit, onSplitChange, calculateSplit]\n );\n\n // Calculate panel sizes\n const totalSize = isHorizontal ? containerSize.width : containerSize.height;\n const leftSize = Math.max(0, split * totalSize - dividerSize / 2);\n const rightSize = Math.max(0, (1 - split) * totalSize - dividerSize / 2);\n\n return (\n <View\n onLayout={handleLayout}\n className={cn(\n 'flex-1',\n isHorizontal ? 'flex-row' : 'flex-col',\n className\n )}\n >\n {/* Left/Top panel */}\n <View\n className='overflow-hidden'\n style={{\n [isHorizontal ? 'width' : 'height']: leftSize,\n }}\n >\n {left}\n </View>\n\n {/* Divider */}\n <View\n {...(resizable ? panResponder.panHandlers : {})}\n className={cn(\n 'items-center justify-center',\n 'bg-gray-200 dark:bg-gray-700',\n isDragging && 'bg-blue-500 dark:bg-blue-400',\n resizable && 'active:bg-blue-500 dark:active:bg-blue-400'\n )}\n style={{\n [isHorizontal ? 'width' : 'height']: dividerSize,\n }}\n >\n {/* Divider handle indicator */}\n {resizable && (\n <View\n className={cn(\n 'rounded-full',\n 'bg-gray-400 dark:bg-gray-500',\n isDragging && 'bg-white'\n )}\n style={{\n [isHorizontal ? 'width' : 'height']: 4,\n [isHorizontal ? 'height' : 'width']: 40,\n }}\n />\n )}\n </View>\n\n {/* Right/Bottom panel */}\n <View\n className='overflow-hidden flex-1'\n style={{\n [isHorizontal ? 'width' : 'height']: rightSize,\n }}\n >\n {right}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n FlatList,\n ListRenderItemInfo,\n StyleProp,\n ViewStyle,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface VirtualListProps<T> {\n /** List items */\n items: T[];\n /** Item height in pixels (for optimization) */\n itemHeight?: number;\n /** Container height */\n height?: number;\n /** Render item function */\n renderItem: (item: T, index: number) => React.ReactNode;\n /** Item key extractor */\n keyExtractor: (item: T, index: number) => string;\n /** Overscan count (items to render outside viewport) */\n overscan?: number;\n /** Show separator between items */\n showSeparator?: boolean;\n /** Separator style */\n separatorClassName?: string;\n /** Empty list message */\n emptyMessage?: React.ReactNode;\n /** Loading state */\n loading?: boolean;\n /** Pull to refresh handler */\n onRefresh?: () => void;\n /** Refreshing state */\n refreshing?: boolean;\n /** End reached handler */\n onEndReached?: () => void;\n /** End reached threshold (0-1) */\n onEndReachedThreshold?: number;\n /** Horizontal list */\n horizontal?: boolean;\n /** Additional className */\n className?: string;\n /** Content container className */\n contentClassName?: string;\n /** Style prop for height */\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * VirtualList Component\n *\n * Virtualized list for rendering large datasets efficiently.\n * Built on top of React Native's FlatList.\n *\n * @example\n * ```tsx\n * <VirtualList\n * items={largeDataset}\n * itemHeight={48}\n * height={600}\n * renderItem={(item) => <Text>{item.name}</Text>}\n * keyExtractor={(item) => item.id}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <VirtualList\n * items={messages}\n * itemHeight={80}\n * renderItem={(msg, index) => <MessageItem message={msg} index={index} />}\n * keyExtractor={(msg) => msg.id}\n * onEndReached={loadMore}\n * onRefresh={refresh}\n * refreshing={isRefreshing}\n * />\n * ```\n */\nexport function VirtualList<T>({\n items,\n itemHeight,\n height,\n renderItem,\n keyExtractor,\n overscan = 5,\n showSeparator = false,\n separatorClassName,\n emptyMessage,\n loading = false,\n onRefresh,\n refreshing = false,\n onEndReached,\n onEndReachedThreshold = 0.5,\n horizontal = false,\n className,\n contentClassName,\n style,\n}: VirtualListProps<T>) {\n // Render a single item\n const renderItemWrapper = React.useCallback(\n ({ item, index }: ListRenderItemInfo<T>) => {\n return <View>{renderItem(item, index)}</View>;\n },\n [renderItem]\n );\n\n // Item separator\n const ItemSeparator = React.useCallback(() => {\n if (!showSeparator) return null;\n return (\n <View\n className={cn(\n horizontal ? 'w-px h-full' : 'h-px w-full',\n 'bg-gray-200 dark:bg-gray-700',\n separatorClassName\n )}\n />\n );\n }, [showSeparator, horizontal, separatorClassName]);\n\n // Empty component\n const ListEmpty = React.useCallback(() => {\n if (loading) return null;\n if (emptyMessage) {\n return (\n <View className='flex-1 items-center justify-center p-4'>\n {emptyMessage}\n </View>\n );\n }\n return null;\n }, [loading, emptyMessage]);\n\n // Get item layout for optimization\n const getItemLayout = React.useMemo(() => {\n if (!itemHeight) return undefined;\n return (_data: T[] | null | undefined, index: number) => ({\n length: itemHeight,\n offset: itemHeight * index,\n index,\n });\n }, [itemHeight]);\n\n return (\n <View\n className={cn('flex-1', className)}\n style={[height ? { height } : undefined, style]}\n >\n <FlatList\n data={items}\n renderItem={renderItemWrapper}\n keyExtractor={keyExtractor}\n horizontal={horizontal}\n showsVerticalScrollIndicator={!horizontal}\n showsHorizontalScrollIndicator={horizontal}\n ItemSeparatorComponent={showSeparator ? ItemSeparator : undefined}\n ListEmptyComponent={ListEmpty}\n onRefresh={onRefresh}\n refreshing={refreshing}\n onEndReached={onEndReached}\n onEndReachedThreshold={onEndReachedThreshold}\n getItemLayout={getItemLayout}\n windowSize={overscan * 2 + 1}\n maxToRenderPerBatch={overscan * 2}\n initialNumToRender={overscan * 2}\n removeClippedSubviews={true}\n contentContainerStyle={contentClassName ? undefined : undefined}\n />\n </View>\n );\n}\n\nexport interface VirtualGridProps<T> {\n /** Grid items */\n items: T[];\n /** Number of columns */\n numColumns: number;\n /** Render item function */\n renderItem: (item: T, index: number) => React.ReactNode;\n /** Item key extractor */\n keyExtractor: (item: T, index: number) => string;\n /** Item height for optimization */\n itemHeight?: number;\n /** Gap between items */\n gap?: number;\n /** Empty list message */\n emptyMessage?: React.ReactNode;\n /** Loading state */\n loading?: boolean;\n /** Pull to refresh handler */\n onRefresh?: () => void;\n /** Refreshing state */\n refreshing?: boolean;\n /** End reached handler */\n onEndReached?: () => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * VirtualGrid Component\n *\n * Virtualized grid for rendering large datasets in grid layout.\n *\n * @example\n * ```tsx\n * <VirtualGrid\n * items={products}\n * numColumns={2}\n * renderItem={(product) => <ProductCard product={product} />}\n * keyExtractor={(product) => product.id}\n * gap={16}\n * />\n * ```\n */\nexport function VirtualGrid<T>({\n items,\n numColumns,\n renderItem,\n keyExtractor,\n itemHeight,\n gap = 8,\n emptyMessage,\n loading = false,\n onRefresh,\n refreshing = false,\n onEndReached,\n className,\n}: VirtualGridProps<T>) {\n // Render a single item\n const renderItemWrapper = React.useCallback(\n ({ item, index }: ListRenderItemInfo<T>) => {\n return (\n <View style={{ flex: 1, margin: gap / 2 }}>\n {renderItem(item, index)}\n </View>\n );\n },\n [renderItem, gap]\n );\n\n // Empty component\n const ListEmpty = React.useCallback(() => {\n if (loading) return null;\n if (emptyMessage) {\n return (\n <View className='flex-1 items-center justify-center p-4'>\n {emptyMessage}\n </View>\n );\n }\n return null;\n }, [loading, emptyMessage]);\n\n // Get item layout for optimization\n const getItemLayout = React.useMemo(() => {\n if (!itemHeight) return undefined;\n return (_data: T[] | null | undefined, index: number) => ({\n length: itemHeight + gap,\n offset: (itemHeight + gap) * Math.floor(index / numColumns),\n index,\n });\n }, [itemHeight, gap, numColumns]);\n\n return (\n <View className={cn('flex-1', className)}>\n <FlatList\n data={items}\n renderItem={renderItemWrapper}\n keyExtractor={keyExtractor}\n numColumns={numColumns}\n showsVerticalScrollIndicator={true}\n ListEmptyComponent={ListEmpty}\n onRefresh={onRefresh}\n refreshing={refreshing}\n onEndReached={onEndReached}\n onEndReachedThreshold={0.5}\n getItemLayout={getItemLayout}\n contentContainerStyle={{ padding: gap / 2 }}\n removeClippedSubviews={true}\n />\n </View>\n );\n}\n"],"names":["clsx","require$$0","React","ReactDebugCurrentFrame","jsxRuntimeModule","require$$1","sizeMap","cva","v","jsxs","Pressable","jsx","ActivityIndicator","Text","getCardVariantColors","View","textVariants","TextInput","SCREEN_WIDTH","Dimensions","useState","Animated","sizeConfig","useCallback","Fragment","Modal","SafeAreaView","FlatList","RNText","name","Image","useRef","useEffect","RNModal","KeyboardAvoidingView","Platform","ScrollView","createContext","useContext","PanResponder","Linking","pages","TouchableWithoutFeedback","useWindowDimensions","styles","StyleSheet","RefreshControl","CardContent","UIManager","LayoutAnimation","isExternal","Alert","links","parts","totalSize"],"mappings":"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","x_google_ignoreList":[1,2,3]}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/lib/utils.ts","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../node_modules/@sudobility/types/dist/types/business/enums.js","../node_modules/@sudobility/types/dist/types/business/wallet-status.js","../node_modules/@sudobility/types/dist/types/blockchain/common.js","../node_modules/@sudobility/types/dist/utils/blockchain/address.js","../node_modules/@sudobility/types/dist/types/blockchain/validation.js","../node_modules/@sudobility/types/dist/types/config/environment.js","../node_modules/@sudobility/types/dist/types/infrastructure/analytics.js","../node_modules/@sudobility/types/dist/types/infrastructure/api.js","../node_modules/@sudobility/types/dist/types/infrastructure/network.js","../node_modules/@sudobility/types/dist/types/infrastructure/wallet.js","../node_modules/@sudobility/types/dist/types/subscription/rate-limits.js","../node_modules/@sudobility/types/dist/types/subscription/period.js","../node_modules/@sudobility/types/dist/types/subscription/entitlements.js","../node_modules/@sudobility/types/dist/types/entity/entity.js","../node_modules/@sudobility/types/dist/types/entity/permissions.js","../node_modules/@sudobility/types/dist/utils/validation/web3-username-validator.js","../node_modules/@sudobility/types/dist/utils/validation/type-validation.js","../node_modules/@sudobility/types/dist/utils/blockchain/event-helpers.js","../node_modules/@sudobility/types/dist/utils/auth/auth.js","../node_modules/@sudobility/types/dist/utils/auth/admin-emails.js","../node_modules/@sudobility/types/dist/utils/formatting/currency.js","../node_modules/@sudobility/types/dist/utils/formatting/date.js","../node_modules/@sudobility/types/dist/utils/formatting/string.js","../node_modules/@sudobility/types/dist/utils/constants/application.js","../node_modules/@sudobility/types/dist/utils/constants/status-values.js","../node_modules/@sudobility/types/dist/utils/logging/logger.js","../node_modules/@sudobility/types/dist/utils/url/url-params.js","../node_modules/@sudobility/types/dist/utils/async-helpers.js","../node_modules/@sudobility/types/dist/index.js","../src/ui/Banner/Banner.tsx","../src/ui/Button/Button.shared.ts","../src/ui/Button/Button.tsx","../src/ui/Card/Card.tsx","../src/ui/Input/Input.tsx","../src/ui/Spinner/Spinner.tsx","../src/ui/Alert/Alert.tsx","../src/ui/ActionButton/ActionButton.tsx","../src/ui/Box/Box.tsx","../src/ui/Flex/Flex.tsx","../src/ui/Stack/Stack.tsx","../src/ui/Divider/Divider.tsx","../src/ui/Separator/Separator.tsx","../src/ui/Container/Container.tsx","../src/ui/Center/Center.tsx","../src/ui/Spacer/Spacer.tsx","../src/ui/Grid/Grid.tsx","../src/ui/Label/Label.tsx","../src/ui/TextArea/TextArea.tsx","../src/ui/Checkbox/Checkbox.tsx","../src/ui/Switch/Switch.tsx","../src/ui/HelperText/HelperText.tsx","../src/ui/Select/Select.tsx","../src/ui/SearchInput/SearchInput.tsx","../src/ui/NumberInput/NumberInput.tsx","../src/ui/Text/Text.tsx","../src/ui/Heading/Heading.tsx","../src/ui/Code/Code.tsx","../src/ui/TruncatedText/TruncatedText.tsx","../src/ui/Badge/Badge.tsx","../src/ui/Avatar/Avatar.tsx","../src/ui/Skeleton/Skeleton.tsx","../src/ui/List/List.tsx","../src/ui/IconText/IconText.tsx","../src/ui/FormattedNumber/FormattedNumber.tsx","../src/ui/InfoBox/InfoBox.tsx","../src/ui/Progress/Progress.tsx","../src/ui/Modal/Modal.tsx","../src/ui/Toast/Toast.tsx","../src/ui/LoadingOverlay/LoadingOverlay.tsx","../src/ui/LoadingDots/LoadingDots.tsx","../src/ui/Backdrop/Backdrop.tsx","../src/ui/Sheet/Sheet.tsx","../src/ui/Tooltip/Tooltip.tsx","../src/ui/Dialog/Dialog.tsx","../src/ui/Popover/Popover.tsx","../src/ui/Tabs/Tabs.tsx","../src/ui/Link/Link.tsx","../src/ui/Breadcrumb/Breadcrumb.tsx","../src/ui/Pagination/Pagination.tsx","../src/ui/SettingsList/SettingsList.tsx","../src/ui/NavigationList/NavigationList.tsx","../src/ui/Dropdown/Dropdown.tsx","../src/ui/AspectRatio/AspectRatio.tsx","../src/ui/AspectFitView/AspectFitView.tsx","../src/ui/QuickActions/QuickActions.tsx","../src/ui/EmptyState/EmptyState.tsx","../src/ui/Calendar/Calendar.tsx","../src/ui/DataList/DataList.tsx","../src/ui/MultiSelect/MultiSelect.tsx","../src/ui/ProgressCircle/ProgressCircle.tsx","../src/ui/SideNav/SideNav.tsx","../src/ui/SectionHeader/SectionHeader.tsx","../src/ui/PageContainer/PageContainer.tsx","../src/ui/FloatingPanel/FloatingPanel.tsx","../src/ui/PhoneInput/PhoneInput.tsx","../src/ui/TimePicker/TimePicker.tsx","../src/ui/Combobox/Combobox.tsx","../src/ui/TreeView/TreeView.tsx","../src/ui/AddressLink/AddressLink.tsx","../src/ui/CodeDisplay/CodeDisplay.tsx","../src/ui/DateInput/DateInput.tsx","../src/ui/DateTimePicker/DateTimePicker.tsx","../src/ui/InfiniteScroll/InfiniteScroll.tsx","../src/ui/ExternalLink/ExternalLink.tsx","../src/ui/TextInputModal/TextInputModal.tsx","../src/ui/FormAlerts/FormAlerts.tsx","../src/ui/ScrollArea/ScrollArea.tsx","../src/ui/SectionBadge/SectionBadge.tsx","../src/ui/ChainBadge.tsx","../src/ui/ListItemWithAction/ListItemWithAction.tsx","../src/ui/Overlay/Overlay.tsx","../src/ui/TransferList/TransferList.tsx","../src/ui/FileInput/FileInput.tsx","../src/ui/Logo/Logo.tsx","../src/ui/AnimatedCounter/AnimatedCounter.tsx","../src/ui/AnimatedSection/AnimatedSection.tsx","../src/ui/Masonry/Masonry.tsx","../src/ui/IconContainer/IconContainer.tsx","../src/ui/GradientIconContainer/GradientIconContainer.tsx","../src/ui/PageSectionHeader/PageSectionHeader.tsx","../src/ui/VisuallyHidden/VisuallyHidden.tsx","../src/ui/BreadcrumbNav/BreadcrumbNav.tsx","../src/ui/Kbd/Kbd.tsx","../src/ui/Table/Table.tsx","../src/ui/Command/Command.tsx","../src/ui/MasterDetailLayout/MasterDetailLayout.tsx","../src/ui/PageHeader/PageHeader.tsx","../src/ui/StandardPageLayout/StandardPageLayout.tsx","../src/ui/StepList/StepList.tsx","../src/ui/FeatureCard/FeatureCard.tsx","../src/ui/FeatureGrid/FeatureGrid.tsx","../src/ui/CTASection/CTASection.tsx","../src/ui/PromotionalBanner/PromotionalBanner.tsx","../src/ui/CollapsibleSection/CollapsibleSection.tsx","../src/ui/DashboardStatCard/DashboardStatCard.tsx","../src/ui/StatDisplay/StatDisplay.tsx","../src/ui/KeyValuePair/KeyValuePair.tsx","../src/ui/SmartLink/SmartLink.tsx","../src/ui/ScrollSpy/ScrollSpy.tsx","../src/ui/SplitPane/SplitPane.tsx","../src/ui/VirtualList/VirtualList.tsx"],"sourcesContent":["import { type ClassValue, clsx } from 'clsx';\n\n/**\n * Merges class names for React Native with NativeWind.\n * Unlike web version, we don't need tailwind-merge since NativeWind\n * processes Tailwind classes at build time.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return clsx(inputs);\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),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:!0,ref:!0,__self:!0,__source:!0};\nfunction 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}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar React = require('react');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n 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 ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n 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\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n // eslint-disable-next-line no-fallthrough\n }\n }\n\n return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if ( !fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n 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`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n 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);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n return type;\n }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n 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);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n 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);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner$1.current) {\n var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement$1(element);\n\n 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);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object') {\n return;\n }\n\n if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n {\n if (hasOwnProperty.call(props, 'key')) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(props).filter(function (k) {\n return k !== 'key';\n });\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, true);\n }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, false);\n }\n}\n\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs = jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","\"use strict\";\n/**\n * Platform-agnostic enums for discrete states\n * These replace string literals throughout the application\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Currency = exports.ErrorType = exports.FeatureFlag = exports.EmailValidationState = exports.PlatformType = exports.ConnectionState = exports.ConnectionType = exports.EmailSortCriteria = exports.SortOrder = exports.EmailAddressType = exports.InfoType = exports.NotificationType = exports.RequestStatus = exports.SubscriptionAction = exports.EmailAction = exports.MediumView = exports.MobileView = exports.EmailComposeType = exports.FontSize = exports.Theme = exports.Chain = exports.ChainType = exports.AuthStatus = void 0;\n// Authentication states - aligned with @johnqh/di\nvar AuthStatus;\n(function (AuthStatus) {\n AuthStatus[\"CONNECTED\"] = \"connected\";\n AuthStatus[\"DISCONNECTED\"] = \"disconnected\";\n AuthStatus[\"VERIFIED\"] = \"verified\";\n})(AuthStatus || (exports.AuthStatus = AuthStatus = {}));\n// Chain types (more specific than @johnqh/di version)\nvar ChainType;\n(function (ChainType) {\n ChainType[\"EVM\"] = \"evm\";\n ChainType[\"SOLANA\"] = \"solana\";\n})(ChainType || (exports.ChainType = ChainType = {}));\n// Supported blockchain networks\nvar Chain;\n(function (Chain) {\n // Ethereum\n Chain[\"ETH_MAINNET\"] = \"eth-mainnet\";\n Chain[\"ETH_SEPOLIA\"] = \"eth-sepolia\";\n Chain[\"ETH_GOERLI\"] = \"eth-goerli\";\n // Polygon\n Chain[\"POLYGON_MAINNET\"] = \"polygon-mainnet\";\n Chain[\"POLYGON_MUMBAI\"] = \"polygon-mumbai\";\n Chain[\"POLYGON_AMOY\"] = \"polygon-amoy\";\n // Optimism\n Chain[\"OPTIMISM_MAINNET\"] = \"optimism-mainnet\";\n Chain[\"OPTIMISM_SEPOLIA\"] = \"optimism-sepolia\";\n Chain[\"OPTIMISM_GOERLI\"] = \"optimism-goerli\";\n // Arbitrum\n Chain[\"ARBITRUM_MAINNET\"] = \"arbitrum-mainnet\";\n Chain[\"ARBITRUM_SEPOLIA\"] = \"arbitrum-sepolia\";\n Chain[\"ARBITRUM_GOERLI\"] = \"arbitrum-goerli\";\n // Base\n Chain[\"BASE_MAINNET\"] = \"base-mainnet\";\n Chain[\"BASE_SEPOLIA\"] = \"base-sepolia\";\n Chain[\"BASE_GOERLI\"] = \"base-goerli\";\n // Avalanche\n Chain[\"AVALANCHE_MAINNET\"] = \"avalanche-mainnet\";\n Chain[\"AVALANCHE_FUJI\"] = \"avalanche-fuji\";\n // BNB Chain (formerly Binance Smart Chain)\n Chain[\"BNB_MAINNET\"] = \"bnb-mainnet\";\n Chain[\"BNB_TESTNET\"] = \"bnb-testnet\";\n // Gnosis Chain (formerly xDai)\n Chain[\"GNOSIS_MAINNET\"] = \"gnosis-mainnet\";\n Chain[\"GNOSIS_CHIADO\"] = \"gnosis-chiado\";\n // Celo\n Chain[\"CELO_MAINNET\"] = \"celo-mainnet\";\n Chain[\"CELO_ALFAJORES\"] = \"celo-alfajores\";\n // zkSync\n Chain[\"ZKSYNC_MAINNET\"] = \"zksync-mainnet\";\n Chain[\"ZKSYNC_SEPOLIA\"] = \"zksync-sepolia\";\n // Linea\n Chain[\"LINEA_MAINNET\"] = \"linea-mainnet\";\n Chain[\"LINEA_SEPOLIA\"] = \"linea-sepolia\";\n // Scroll\n Chain[\"SCROLL_MAINNET\"] = \"scroll-mainnet\";\n Chain[\"SCROLL_SEPOLIA\"] = \"scroll-sepolia\";\n // Monad\n Chain[\"MONAD_MAINNET\"] = \"monad-mainnet\";\n Chain[\"MONAD_TESTNET\"] = \"monad-testnet\";\n // Story Protocol\n Chain[\"STORY_MAINNET\"] = \"story-mainnet\";\n Chain[\"STORY_TESTNET\"] = \"story-testnet\";\n // Plume Network\n Chain[\"PLUME_MAINNET\"] = \"plume-mainnet\";\n Chain[\"PLUME_TESTNET\"] = \"plume-testnet\";\n // Nexus\n Chain[\"NEXUS_MAINNET\"] = \"nexus-mainnet\";\n Chain[\"NEXUS_TESTNET\"] = \"nexus-testnet\";\n // HyperEVM\n Chain[\"HYPEREVM_MAINNET\"] = \"hyperevm-mainnet\";\n Chain[\"HYPEREVM_TESTNET\"] = \"hyperevm-testnet\";\n // Sonic (gaming-focused chain)\n Chain[\"SONIC_MAINNET\"] = \"sonic-mainnet\";\n Chain[\"SONIC_TESTNET\"] = \"sonic-testnet\";\n Chain[\"SONIC_BLAZE\"] = \"sonic-blaze\";\n // Unichain (Uniswap L2)\n Chain[\"UNICHAIN_MAINNET\"] = \"unichain-mainnet\";\n Chain[\"UNICHAIN_SEPOLIA\"] = \"unichain-sepolia\";\n // World Chain (Worldcoin L2)\n Chain[\"WORLD_MAINNET\"] = \"world-mainnet\";\n // XDC Network\n Chain[\"XDC_MAINNET\"] = \"xdc-mainnet\";\n // Ink\n Chain[\"INK_TESTNET\"] = \"ink-testnet\";\n // AI-focused chains\n // Bittensor (TAO) - Substrate-based, not EVM\n // Fetch.ai\n Chain[\"FETCH_MAINNET\"] = \"fetch-mainnet\";\n Chain[\"FETCH_TESTNET\"] = \"fetch-testnet\";\n // Akash Network - Cosmos-based, not EVM\n // Gensyn - AI compute chain\n Chain[\"GENSYN_MAINNET\"] = \"gensyn-mainnet\";\n Chain[\"GENSYN_TESTNET\"] = \"gensyn-testnet\";\n // Ritual - AI inference chain\n Chain[\"RITUAL_MAINNET\"] = \"ritual-mainnet\";\n Chain[\"RITUAL_TESTNET\"] = \"ritual-testnet\";\n // Solana\n Chain[\"SOLANA_MAINNET\"] = \"solana-mainnet\";\n Chain[\"SOLANA_DEVNET\"] = \"solana-devnet\";\n Chain[\"SOLANA_TESTNET\"] = \"solana-testnet\";\n // Local development\n Chain[\"EVM_LOCAL\"] = \"evm-local\";\n Chain[\"SOLANA_LOCAL\"] = \"solana-local\";\n})(Chain || (exports.Chain = Chain = {}));\n// Theme states\nvar Theme;\n(function (Theme) {\n Theme[\"LIGHT\"] = \"light\";\n Theme[\"DARK\"] = \"dark\";\n Theme[\"SYSTEM\"] = \"system\";\n})(Theme || (exports.Theme = Theme = {}));\n// Font sizes\nvar FontSize;\n(function (FontSize) {\n FontSize[\"SMALL\"] = \"small\";\n FontSize[\"MEDIUM\"] = \"medium\";\n FontSize[\"LARGE\"] = \"large\";\n})(FontSize || (exports.FontSize = FontSize = {}));\n// Email compose types\nvar EmailComposeType;\n(function (EmailComposeType) {\n EmailComposeType[\"NEW\"] = \"new\";\n EmailComposeType[\"REPLY\"] = \"reply\";\n EmailComposeType[\"REPLY_ALL\"] = \"replyAll\";\n EmailComposeType[\"FORWARD\"] = \"forward\";\n})(EmailComposeType || (exports.EmailComposeType = EmailComposeType = {}));\n// Mobile navigation views\nvar MobileView;\n(function (MobileView) {\n MobileView[\"EMAIL_ADDRESSES\"] = \"emailAddresses\";\n MobileView[\"FOLDERS\"] = \"folders\";\n MobileView[\"EMAILS\"] = \"emails\";\n MobileView[\"EMAIL_BODY\"] = \"emailBody\";\n})(MobileView || (exports.MobileView = MobileView = {}));\n// Medium screen navigation\nvar MediumView;\n(function (MediumView) {\n MediumView[\"LEFT\"] = \"left\";\n MediumView[\"RIGHT\"] = \"right\";\n})(MediumView || (exports.MediumView = MediumView = {}));\n// Email actions\nvar EmailAction;\n(function (EmailAction) {\n EmailAction[\"OPEN\"] = \"open\";\n EmailAction[\"REPLY\"] = \"reply\";\n EmailAction[\"FORWARD\"] = \"forward\";\n EmailAction[\"DELETE\"] = \"delete\";\n EmailAction[\"STAR\"] = \"star\";\n EmailAction[\"UNSTAR\"] = \"unstar\";\n EmailAction[\"MARK_READ\"] = \"mark_read\";\n EmailAction[\"MARK_UNREAD\"] = \"mark_unread\";\n})(EmailAction || (exports.EmailAction = EmailAction = {}));\n// Subscription actions\nvar SubscriptionAction;\n(function (SubscriptionAction) {\n SubscriptionAction[\"VIEW\"] = \"view\";\n SubscriptionAction[\"PURCHASE\"] = \"purchase\";\n SubscriptionAction[\"CANCEL\"] = \"cancel\";\n SubscriptionAction[\"RESTORE\"] = \"restore\";\n})(SubscriptionAction || (exports.SubscriptionAction = SubscriptionAction = {}));\n// Network request states\nvar RequestStatus;\n(function (RequestStatus) {\n RequestStatus[\"IDLE\"] = \"idle\";\n RequestStatus[\"LOADING\"] = \"loading\";\n RequestStatus[\"SUCCESS\"] = \"success\";\n RequestStatus[\"ERROR\"] = \"error\";\n})(RequestStatus || (exports.RequestStatus = RequestStatus = {}));\n// Notification types\nvar NotificationType;\n(function (NotificationType) {\n NotificationType[\"INFO\"] = \"info\";\n NotificationType[\"SUCCESS\"] = \"success\";\n NotificationType[\"WARNING\"] = \"warning\";\n NotificationType[\"ERROR\"] = \"error\";\n})(NotificationType || (exports.NotificationType = NotificationType = {}));\n// Info types for UI feedback\nvar InfoType;\n(function (InfoType) {\n InfoType[\"INFO\"] = \"info\";\n InfoType[\"SUCCESS\"] = \"success\";\n InfoType[\"WARNING\"] = \"warning\";\n InfoType[\"ERROR\"] = \"error\";\n})(InfoType || (exports.InfoType = InfoType = {}));\n// Email address types\nvar EmailAddressType;\n(function (EmailAddressType) {\n EmailAddressType[\"DIRECT\"] = \"direct\";\n EmailAddressType[\"ENS\"] = \"ens\";\n EmailAddressType[\"SNS\"] = \"sns\";\n EmailAddressType[\"CUSTOM\"] = \"custom\";\n})(EmailAddressType || (exports.EmailAddressType = EmailAddressType = {}));\n// Mailbox sort orders\nvar SortOrder;\n(function (SortOrder) {\n SortOrder[\"ASC\"] = \"asc\";\n SortOrder[\"DESC\"] = \"desc\";\n})(SortOrder || (exports.SortOrder = SortOrder = {}));\n// Email sort criteria\nvar EmailSortCriteria;\n(function (EmailSortCriteria) {\n EmailSortCriteria[\"DATE\"] = \"date\";\n EmailSortCriteria[\"SUBJECT\"] = \"subject\";\n EmailSortCriteria[\"FROM\"] = \"from\";\n EmailSortCriteria[\"SIZE\"] = \"size\";\n})(EmailSortCriteria || (exports.EmailSortCriteria = EmailSortCriteria = {}));\n// Connection types\nvar ConnectionType;\n(function (ConnectionType) {\n ConnectionType[\"UNKNOWN\"] = \"unknown\";\n ConnectionType[\"NONE\"] = \"none\";\n ConnectionType[\"WIFI\"] = \"wifi\";\n ConnectionType[\"CELLULAR_2G\"] = \"2g\";\n ConnectionType[\"CELLULAR_3G\"] = \"3g\";\n ConnectionType[\"CELLULAR_4G\"] = \"4g\";\n ConnectionType[\"CELLULAR_5G\"] = \"5g\";\n ConnectionType[\"ETHERNET\"] = \"ethernet\";\n})(ConnectionType || (exports.ConnectionType = ConnectionType = {}));\n// Connection states (consolidated from WalletConnectionState, NetworkStatus, and ConnectionState)\nvar ConnectionState;\n(function (ConnectionState) {\n ConnectionState[\"UNKNOWN\"] = \"unknown\";\n ConnectionState[\"DISCONNECTED\"] = \"disconnected\";\n ConnectionState[\"CONNECTING\"] = \"connecting\";\n ConnectionState[\"CONNECTED\"] = \"connected\";\n ConnectionState[\"RECONNECTING\"] = \"reconnecting\";\n ConnectionState[\"VERIFIED\"] = \"verified\";\n ConnectionState[\"LIMITED\"] = \"limited\";\n ConnectionState[\"ERROR\"] = \"error\";\n})(ConnectionState || (exports.ConnectionState = ConnectionState = {}));\n// Platform types\nvar PlatformType;\n(function (PlatformType) {\n PlatformType[\"WEB\"] = \"web\";\n PlatformType[\"REACT_NATIVE\"] = \"react_native\";\n PlatformType[\"DESKTOP\"] = \"desktop\";\n})(PlatformType || (exports.PlatformType = PlatformType = {}));\n// Email validation states\nvar EmailValidationState;\n(function (EmailValidationState) {\n EmailValidationState[\"VALID\"] = \"valid\";\n EmailValidationState[\"INVALID\"] = \"invalid\";\n EmailValidationState[\"PENDING\"] = \"pending\";\n EmailValidationState[\"UNKNOWN\"] = \"unknown\";\n})(EmailValidationState || (exports.EmailValidationState = EmailValidationState = {}));\n// Feature flags\nvar FeatureFlag;\n(function (FeatureFlag) {\n FeatureFlag[\"AI_SEARCH\"] = \"ai_search\";\n FeatureFlag[\"SMART_COMPOSE\"] = \"smart_compose\";\n FeatureFlag[\"ADVANCED_FILTERS\"] = \"advanced_filters\";\n FeatureFlag[\"DARK_MODE\"] = \"dark_mode\";\n FeatureFlag[\"NOTIFICATIONS\"] = \"notifications\";\n FeatureFlag[\"ANALYTICS\"] = \"analytics\";\n})(FeatureFlag || (exports.FeatureFlag = FeatureFlag = {}));\n// Error types\nvar ErrorType;\n(function (ErrorType) {\n ErrorType[\"NETWORK\"] = \"network\";\n ErrorType[\"AUTH\"] = \"auth\";\n ErrorType[\"VALIDATION\"] = \"validation\";\n ErrorType[\"PERMISSION\"] = \"permission\";\n ErrorType[\"UNKNOWN\"] = \"unknown\";\n})(ErrorType || (exports.ErrorType = ErrorType = {}));\n// Currency types for subscriptions\nvar Currency;\n(function (Currency) {\n Currency[\"USD\"] = \"USD\";\n Currency[\"EUR\"] = \"EUR\";\n Currency[\"GBP\"] = \"GBP\";\n Currency[\"CAD\"] = \"CAD\";\n Currency[\"AUD\"] = \"AUD\";\n})(Currency || (exports.Currency = Currency = {}));\n//# sourceMappingURL=enums.js.map","\"use strict\";\n/**\n * Wallet status management types\n * Defines the structure for tracking wallet connection and verification state\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getWalletConnectionState = exports.isWalletVerified = exports.isWalletConnected = void 0;\nconst enums_1 = require(\"./enums\");\n/**\n * Type guard to check if wallet status is defined\n */\nconst isWalletConnected = (status) => {\n return (status !== undefined && status !== null && Boolean(status.walletAddress));\n};\nexports.isWalletConnected = isWalletConnected;\n/**\n * Type guard to check if wallet is verified (has message and signature)\n */\nconst isWalletVerified = (status) => {\n return ((0, exports.isWalletConnected)(status) &&\n Boolean(status.message) &&\n Boolean(status.signature));\n};\nexports.isWalletVerified = isWalletVerified;\n/**\n * Get current wallet connection state\n */\nconst getWalletConnectionState = (status) => {\n if (!(0, exports.isWalletConnected)(status)) {\n return enums_1.ConnectionState.DISCONNECTED;\n }\n if ((0, exports.isWalletVerified)(status)) {\n return enums_1.ConnectionState.VERIFIED;\n }\n return enums_1.ConnectionState.CONNECTED;\n};\nexports.getWalletConnectionState = getWalletConnectionState;\n//# sourceMappingURL=wallet-status.js.map","\"use strict\";\n/**\n * @fileoverview Common type definitions for multi-chain MailBox system\n * @description Shared types and interfaces for EVM and Solana implementations\n * @author MailBox Team\n * @version 1.4.2\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PROTOCOL_CONSTANTS = exports.TransactionStatus = exports.MessageType = void 0;\nexports.isSolanaAddress = isSolanaAddress;\nexports.isEvmAddress = isEvmAddress;\nexports.isSolanaRecipient = isSolanaRecipient;\nexports.isEvmRecipient = isEvmRecipient;\n/**\n * Message type enumeration\n * @enum MessageType\n */\nvar MessageType;\n(function (MessageType) {\n /** Standard message with 10% fee */\n MessageType[\"STANDARD\"] = \"standard\";\n /** Priority message with full fee and 90% revenue share */\n MessageType[\"PRIORITY\"] = \"priority\";\n /** Pre-prepared standard message */\n MessageType[\"PREPARED_STANDARD\"] = \"prepared_standard\";\n /** Pre-prepared priority message */\n MessageType[\"PREPARED_PRIORITY\"] = \"prepared_priority\";\n})(MessageType || (exports.MessageType = MessageType = {}));\n/**\n * Transaction status enumeration\n * @enum TransactionStatus\n */\nvar TransactionStatus;\n(function (TransactionStatus) {\n /** Transaction successful */\n TransactionStatus[\"SUCCESS\"] = \"success\";\n /** Transaction failed */\n TransactionStatus[\"FAILED\"] = \"failed\";\n /** Transaction pending confirmation */\n TransactionStatus[\"PENDING\"] = \"pending\";\n})(TransactionStatus || (exports.TransactionStatus = TransactionStatus = {}));\n// ============================================================================\n// TYPE GUARDS\n// ============================================================================\n/**\n * Type guard to check if a value is a Solana PublicKey string\n * @param value - Value to check\n * @returns True if value is a valid Solana address\n */\nfunction isSolanaAddress(address) {\n try {\n // Solana addresses are base58 encoded and typically 32-44 characters\n if (address.length < 32 || address.length > 44) {\n return false;\n }\n // Base58 alphabet: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\n // Note: excludes 0, O, I, l to avoid ambiguity\n const base58Regex = /^[1-9A-HJ-NP-Za-km-z]+$/;\n if (!base58Regex.test(address)) {\n return false;\n }\n // Additional validation: try to decode with bs58 if available\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const bs58 = require('bs58');\n const decoded = bs58.decode(address);\n return decoded.length === 32; // Solana addresses decode to 32 bytes\n }\n catch {\n // If bs58 is not available, rely on regex validation\n return true;\n }\n }\n catch {\n return false;\n }\n}\n/**\n * Type guard to check if a value is an EVM address\n * @param value - Value to check\n * @returns True if value is EVM address string\n */\nfunction isEvmAddress(address) {\n return /^0x[a-fA-F0-9]{40}$/.test(address);\n}\n/**\n * Type guard to check if recipient is for Solana\n * @param recipient - Message recipient\n * @returns True if recipient is Solana address\n */\nfunction isSolanaRecipient(recipient) {\n return isSolanaAddress(recipient);\n}\n/**\n * Type guard to check if recipient is for EVM\n * @param recipient - Message recipient\n * @returns True if recipient is EVM address\n */\nfunction isEvmRecipient(recipient) {\n return isEvmAddress(recipient);\n}\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n/**\n * Protocol constants used across implementations\n */\nexports.PROTOCOL_CONSTANTS = {\n /** Base send fee: 0.1 USDC (100,000 with 6 decimals) */\n SEND_FEE: 100000n,\n /** Claim period: 60 days in seconds */\n CLAIM_PERIOD: 60 * 24 * 60 * 60,\n /** Revenue share percentages */\n REVENUE_SHARES: {\n SENDER: 90,\n OWNER: 10,\n },\n /** USDC token decimals */\n USDC_DECIMALS: 6,\n /** Maximum message lengths */\n MAX_LENGTHS: {\n SUBJECT: 200,\n BODY: 2000,\n MAIL_ID: 100,\n },\n};\n//# sourceMappingURL=common.js.map","\"use strict\";\n/**\n * Blockchain address utilities for multi-chain support\n *\n * Provides validation and detection for various blockchain address formats\n * including EVM addresses, Solana addresses, ENS names, and SNS names.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AddressType = void 0;\nexports.isENSName = isENSName;\nexports.isSNSName = isSNSName;\nexports.getAddressType = getAddressType;\nexports.isValidWalletAddress = isValidWalletAddress;\nexports.isValidSignature = isValidSignature;\nexports.parseEmailAddress = parseEmailAddress;\nexports.formatWalletAddress = formatWalletAddress;\nexports.getChainDisplayName = getChainDisplayName;\nconst enums_1 = require(\"../../types/business/enums\");\n// Import base validation functions from common types\nconst common_1 = require(\"../../types/blockchain/common\");\n/**\n * Address type enumeration\n */\nvar AddressType;\n(function (AddressType) {\n AddressType[\"EVMAddress\"] = \"EVMAddress\";\n AddressType[\"SolanaAddress\"] = \"SolanaAddress\";\n AddressType[\"ENSName\"] = \"ENSName\";\n AddressType[\"SNSName\"] = \"SNSName\";\n})(AddressType || (exports.AddressType = AddressType = {}));\n// Address validation functions are now imported directly from common.ts\n// Use isEvmAddress and isSolanaAddress from '../../types/blockchain/common'\n/**\n * Check if address is an ENS name (.eth or .box)\n */\nfunction isENSName(address) {\n const lowerAddress = address.toLowerCase();\n // ENS names end with .eth or .box\n if (!lowerAddress.endsWith('.eth') && !lowerAddress.endsWith('.box')) {\n return false;\n }\n // Extract the name part (without .eth or .box)\n const nameWithoutTLD = lowerAddress.endsWith('.eth')\n ? lowerAddress.slice(0, -4)\n : lowerAddress.slice(0, -4);\n if (nameWithoutTLD.length === 0) {\n return false;\n }\n // ENS names can have multiple labels separated by dots\n const labels = nameWithoutTLD.split('.');\n // Each label must be valid\n const validLabelRegex = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/;\n for (const label of labels) {\n if (label.length === 0 || !validLabelRegex.test(label)) {\n return false;\n }\n // No consecutive hyphens allowed\n if (label.includes('--')) {\n return false;\n }\n }\n return true;\n}\n/**\n * Check if address is an SNS name (Solana name service)\n * Supports: .sol, .abc, .bonk, .poor, .gm, .dao, .defi, .web3\n */\nfunction isSNSName(address) {\n const lowerAddress = address.toLowerCase();\n // List of supported Solana name extensions\n const snsExtensions = [\n '.sol',\n '.abc',\n '.bonk',\n '.poor',\n '.gm',\n '.dao',\n '.defi',\n '.web3',\n ];\n // Check if address ends with any supported extension\n const matchingExtension = snsExtensions.find((ext) => lowerAddress.endsWith(ext));\n if (!matchingExtension) {\n return false;\n }\n // Extract the name part (without the extension)\n const nameWithoutTLD = lowerAddress.slice(0, -matchingExtension.length);\n if (nameWithoutTLD.length === 0) {\n return false;\n }\n // SNS names can have multiple labels separated by dots\n const labels = nameWithoutTLD.split('.');\n // Each label must be valid\n const validLabelRegex = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/;\n for (const label of labels) {\n if (label.length === 0 || !validLabelRegex.test(label)) {\n return false;\n }\n // No consecutive hyphens allowed\n if (label.includes('--')) {\n return false;\n }\n }\n return true;\n}\n/**\n * Determine the address type from a string\n * Case insensitive as addresses/names are often case insensitive\n */\nfunction getAddressType(address, parentAddressType = undefined) {\n // Check for EVM address (0x followed by 40 hex characters)\n if ((0, common_1.isEvmAddress)(address)) {\n return AddressType.EVMAddress;\n }\n // Check for Solana address (base58 encoded, 32-44 characters)\n if ((0, common_1.isSolanaAddress)(address)) {\n return AddressType.SolanaAddress;\n }\n // If parent address type is provided and address contains \".\", it's a domain name\n if (parentAddressType && address.includes('.')) {\n if (parentAddressType === AddressType.EVMAddress) {\n return AddressType.ENSName;\n }\n if (parentAddressType === AddressType.SolanaAddress) {\n return AddressType.SNSName;\n }\n }\n return undefined;\n}\n/**\n * Validate a wallet address for a specific chain type\n */\nfunction isValidWalletAddress(address, chainType) {\n if (!address || typeof address !== 'string') {\n return false;\n }\n const addressType = getAddressType(address);\n switch (chainType) {\n case enums_1.ChainType.EVM:\n return (addressType === AddressType.EVMAddress ||\n addressType === AddressType.ENSName);\n case enums_1.ChainType.SOLANA:\n return (addressType === AddressType.SolanaAddress ||\n addressType === AddressType.SNSName);\n default:\n // Unknown chain type, accept any known address format\n return !!addressType;\n }\n}\n/**\n * Check if a signature is valid for a specific chain type\n */\nfunction isValidSignature(signature, chainType) {\n if (!signature || typeof signature !== 'string') {\n return false;\n }\n switch (chainType) {\n case enums_1.ChainType.EVM:\n // EVM signature validation (0x followed by 130 hex characters)\n return /^0x[a-fA-F0-9]{130}$/.test(signature);\n case enums_1.ChainType.SOLANA:\n // Solana signature validation (base58 encoded, typically 87-88 characters)\n return /^[1-9A-HJ-NP-Za-km-z]{87,88}$/.test(signature);\n default:\n // Basic validation for unknown chain types\n return signature.length > 50;\n }\n}\n/**\n * Parse an email address into its components\n */\nfunction parseEmailAddress(email) {\n if (!email || typeof email !== 'string') {\n return undefined;\n }\n const parts = email.split('@');\n if (parts.length !== 2) {\n return undefined;\n }\n const [address, domain] = parts;\n if (!address || !domain) {\n return undefined;\n }\n const type = getAddressType(address);\n return {\n address,\n domain,\n type,\n };\n}\n/**\n * Format a wallet address for display\n * Shows first 6 and last 4 characters with ellipsis\n */\nfunction formatWalletAddress(address) {\n if (!address || address.length < 10) {\n return address;\n }\n // For ENS/SNS names, show them in full if they're short enough\n const addressType = getAddressType(address);\n if ((addressType === AddressType.ENSName ||\n addressType === AddressType.SNSName) &&\n address.length <= 20) {\n return address;\n }\n // Show first 6 and last 4 characters with ellipsis\n return `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n/**\n * Get display name for a chain type\n */\nfunction getChainDisplayName(chainType) {\n if (!chainType) {\n return 'Unknown Chain';\n }\n switch (chainType) {\n case enums_1.ChainType.EVM:\n return 'EVM Chain';\n case enums_1.ChainType.SOLANA:\n return 'Solana';\n default:\n return 'Blockchain';\n }\n}\n//# sourceMappingURL=address.js.map","\"use strict\";\n/**\n * Validation utilities for multi-chain operations\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateDomain = validateDomain;\nexports.validateMessage = validateMessage;\nexports.validateAddress = validateAddress;\nexports.validateAmount = validateAmount;\nconst address_1 = require(\"../../utils/blockchain/address\");\nfunction validateDomain(domain) {\n if (!domain || domain.length === 0) {\n throw new Error('Domain cannot be empty');\n }\n if (domain.length > 100) {\n throw new Error('Domain cannot exceed 100 characters');\n }\n // Basic domain validation - can be expanded\n const domainRegex = /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n if (!domainRegex.test(domain)) {\n throw new Error('Invalid domain format');\n }\n return true;\n}\nfunction validateMessage(subject, body) {\n if (!subject || subject.length === 0) {\n throw new Error('Message subject cannot be empty');\n }\n if (subject.length > 200) {\n throw new Error('Message subject cannot exceed 200 characters');\n }\n if (!body || body.length === 0) {\n throw new Error('Message body cannot be empty');\n }\n if (body.length > 10000) {\n throw new Error('Message body cannot exceed 10000 characters');\n }\n return true;\n}\nfunction validateAddress(address, chainType) {\n if (!address || address.length === 0) {\n throw new Error('Address cannot be empty');\n }\n if (!(0, address_1.isValidWalletAddress)(address, chainType)) {\n throw new Error(`Invalid ${chainType} address format`);\n }\n return true;\n}\nfunction validateAmount(amount) {\n // Check for null, undefined, or empty string\n if (amount === null ||\n amount === undefined ||\n amount === '' ||\n (typeof amount === 'string' && amount.trim() === '')) {\n throw new Error('Invalid amount format');\n }\n let amountBigInt;\n try {\n if (typeof amount === 'string') {\n // Check for non-numeric strings\n if (!/^-?\\d+$/.test(amount.trim())) {\n throw new Error('Invalid amount format');\n }\n amountBigInt = BigInt(amount);\n }\n else if (typeof amount === 'number') {\n // Check for NaN or Infinity\n if (!Number.isFinite(amount)) {\n throw new Error('Invalid amount format');\n }\n amountBigInt = BigInt(Math.floor(amount));\n }\n else if (typeof amount === 'bigint') {\n amountBigInt = amount;\n }\n else {\n throw new Error('Invalid amount format');\n }\n }\n catch {\n throw new Error('Invalid amount format');\n }\n if (amountBigInt < 0n) {\n throw new Error('Amount cannot be negative');\n }\n return amountBigInt;\n}\n//# sourceMappingURL=validation.js.map","\"use strict\";\n/**\n * Environment configuration types for cross-platform applications\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StorageType = void 0;\n/**\n * Storage type enumeration for cross-platform storage abstraction.\n *\n * Provides runtime-accessible values for different storage mechanisms\n * across web browsers, React Native, and Node.js environments.\n */\nvar StorageType;\n(function (StorageType) {\n /** Web browser localStorage for persistent client-side storage */\n StorageType[\"LOCAL_STORAGE\"] = \"localStorage\";\n /** Web browser sessionStorage for session-based storage */\n StorageType[\"SESSION_STORAGE\"] = \"sessionStorage\";\n /** React Native AsyncStorage for mobile persistent storage */\n StorageType[\"ASYNC_STORAGE\"] = \"asyncStorage\";\n /** In-memory storage for testing or temporary data */\n StorageType[\"MEMORY\"] = \"memory\";\n})(StorageType || (exports.StorageType = StorageType = {}));\n//# sourceMappingURL=environment.js.map","\"use strict\";\n/**\n * Analytics types and interfaces\n * Platform-agnostic analytics service interface for dependency injection\n *\n * @ai-context Core analytics interface for dependency injection\n * @ai-pattern Service interface with comprehensive event tracking\n * @ai-platform Cross-platform compatible (Web, React Native, Node.js)\n * @ai-usage Implement this interface to create analytics services for Firebase, Mixpanel, etc.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AnalyticsEventBuilder = exports.AnalyticsEvent = void 0;\n/**\n * Standardized analytics events enumeration.\n *\n * Provides consistent event naming for common application analytics scenarios.\n * Organized by functional categories for better code organization and analytics reporting.\n *\n * @example\n * ```typescript\n * // Use predefined events for consistency\n * analytics.track(AnalyticsEvent.USER_LOGIN, { method: 'email' });\n * analytics.track(AnalyticsEvent.EMAIL_OPENED, { email_id: 'msg-123' });\n * ```\n */\nvar AnalyticsEvent;\n(function (AnalyticsEvent) {\n /** User successfully logged into the application */\n AnalyticsEvent[\"USER_LOGIN\"] = \"user_login\";\n /** User logged out of the application */\n AnalyticsEvent[\"USER_LOGOUT\"] = \"user_logout\";\n /** New user completed account registration */\n AnalyticsEvent[\"USER_SIGNUP\"] = \"user_signup\";\n /** User sent an email message */\n AnalyticsEvent[\"EMAIL_SENT\"] = \"email_sent\";\n /** User received a new email message */\n AnalyticsEvent[\"EMAIL_RECEIVED\"] = \"email_received\";\n /** User opened an email message (consolidated from EMAIL_OPENED and EMAIL_OPEN) */\n AnalyticsEvent[\"EMAIL_OPENED\"] = \"email_opened\";\n /** User replied to an email message */\n AnalyticsEvent[\"EMAIL_REPLY\"] = \"email_reply\";\n /** User forwarded an email message */\n AnalyticsEvent[\"EMAIL_FORWARD\"] = \"email_forward\";\n /** User deleted an email message */\n AnalyticsEvent[\"EMAIL_DELETE\"] = \"email_delete\";\n /** User starred an email message */\n AnalyticsEvent[\"EMAIL_STAR\"] = \"email_star\";\n /** User composed a new email */\n AnalyticsEvent[\"EMAIL_COMPOSE\"] = \"email_compose\";\n /** User clicked a link within an email */\n AnalyticsEvent[\"EMAIL_CLICKED\"] = \"email_clicked\";\n /** User viewed a web page */\n AnalyticsEvent[\"PAGE_VIEW\"] = \"page_view\";\n /** User viewed a mobile screen */\n AnalyticsEvent[\"SCREEN_VIEW\"] = \"screen_view\";\n /** User switched between folders */\n AnalyticsEvent[\"FOLDER_SWITCH\"] = \"folder_switch\";\n /** User viewed subscription options */\n AnalyticsEvent[\"SUBSCRIPTION_VIEW\"] = \"subscription_view\";\n /** User purchased a subscription */\n AnalyticsEvent[\"SUBSCRIPTION_PURCHASE\"] = \"subscription_purchase\";\n /** User cancelled a subscription */\n AnalyticsEvent[\"SUBSCRIPTION_CANCEL\"] = \"subscription_cancel\";\n /** User performed a search */\n AnalyticsEvent[\"SEARCH_PERFORMED\"] = \"search_performed\";\n /** User changed application settings */\n AnalyticsEvent[\"SETTINGS_CHANGED\"] = \"settings_changed\";\n /** An application error occurred */\n AnalyticsEvent[\"ERROR_OCCURRED\"] = \"error_occurred\";\n /** User viewed an A/B test variant */\n AnalyticsEvent[\"AB_TEST_VIEWED\"] = \"ab_test_viewed\";\n /** User converted on an A/B test */\n AnalyticsEvent[\"AB_TEST_CONVERTED\"] = \"ab_test_converted\";\n /** Custom application-specific event */\n AnalyticsEvent[\"CUSTOM_EVENT\"] = \"custom_event\";\n})(AnalyticsEvent || (exports.AnalyticsEvent = AnalyticsEvent = {}));\n/**\n * Utility class for building standardized analytics event properties.\n *\n * Provides static methods to create consistent event property objects\n * for common analytics scenarios. Ensures proper naming conventions\n * and includes standard fields like timestamps.\n *\n * @ai-utility-class Event property builders\n * @ai-pattern Factory pattern for event properties\n * @ai-standardization Ensures consistent event property naming\n *\n * @example\n * ```typescript\n * // Use builders to create standardized event properties\n * const properties = AnalyticsEventBuilder.emailAction('read', 'email-123', 'inbox');\n * analytics.trackEvent(AnalyticsEvent.EMAIL_OPENED, properties);\n * ```\n */\nclass AnalyticsEventBuilder {\n /**\n * Build properties for email action events.\n *\n * @param action Email action performed (read, sent, archived, etc.)\n * @param emailId Unique identifier for the email\n * @param folder Email folder context (inbox, sent, trash, etc.)\n * @returns Standardized event properties object\n *\n * @ai-builder Email action properties\n * @ai-standardization Consistent email event tracking\n */\n static emailAction(action, emailId, folder) {\n return {\n action,\n email_id: emailId,\n folder,\n timestamp: Date.now(),\n };\n }\n /**\n * Build properties for page/screen view events.\n *\n * @param pageName Human-readable page name\n * @param pagePath URL path or screen identifier\n * @returns Standardized page view properties\n *\n * @ai-builder Navigation tracking properties\n * @ai-cross-platform Works for web pages and mobile screens\n */\n static pageView(pageName, pagePath) {\n return {\n page_name: pageName,\n page_path: pagePath,\n timestamp: Date.now(),\n };\n }\n /**\n * Build properties for error tracking events.\n *\n * @param errorType Category of error (network, validation, runtime, etc.)\n * @param errorMessage Error message or description\n * @param pageName Page/screen where error occurred\n * @returns Standardized error event properties\n *\n * @ai-builder Error tracking properties\n * @ai-debugging Consistent error event structure\n */\n static error(errorType, errorMessage, pageName) {\n return {\n error_type: errorType,\n error_message: errorMessage,\n page_name: pageName,\n timestamp: Date.now(),\n };\n }\n /**\n * Build properties for subscription/revenue events.\n *\n * @param action Subscription action (subscribe, upgrade, cancel, etc.)\n * @param planType Subscription plan type (free, premium, pro, etc.)\n * @param amount Monetary amount (for revenue tracking)\n * @param currency Currency code (USD, EUR, etc.)\n * @returns Standardized subscription event properties\n *\n * @ai-builder Revenue tracking properties\n * @ai-business-metrics Subscription and revenue analytics\n */\n static subscription(action, planType, amount, currency) {\n return {\n action,\n plan_type: planType,\n amount,\n currency,\n timestamp: Date.now(),\n };\n }\n /**\n * Build properties for user engagement events.\n *\n * @param feature Feature name or component identifier\n * @param interaction Type of interaction (click, scroll, hover, etc.)\n * @param duration Time spent on interaction (milliseconds)\n * @returns Standardized engagement event properties\n *\n * @ai-builder User engagement properties\n * @ai-ux-analytics User experience and interaction tracking\n */\n static engagement(feature, interaction, duration) {\n return {\n feature,\n interaction,\n duration,\n timestamp: Date.now(),\n };\n }\n /**\n * Build properties for performance monitoring events.\n *\n * @param metric Performance metric name (load_time, api_response, etc.)\n * @param value Metric value (usually in milliseconds)\n * @param context Additional context about the performance event\n * @returns Standardized performance event properties\n *\n * @ai-builder Performance monitoring properties\n * @ai-performance Application performance tracking\n */\n static performance(metric, value, context) {\n return {\n metric,\n value,\n context,\n timestamp: Date.now(),\n };\n }\n}\nexports.AnalyticsEventBuilder = AnalyticsEventBuilder;\n//# sourceMappingURL=analytics.js.map","\"use strict\";\n/**\n * @fileoverview Core API Type Definitions\n * @description Centralized type definitions for API requests/responses and data structures\n * @version 2.0.0\n *\n * This file provides comprehensive type safety for:\n * - API request/response interfaces\n * - Multi-chain data structures\n * - Database entity interfaces\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ProcessedEventName = exports.ContractType = exports.ChainType = void 0;\n// Re-export ChainType from business enums\nvar enums_1 = require(\"../business/enums\");\nObject.defineProperty(exports, \"ChainType\", { enumerable: true, get: function () { return enums_1.ChainType; } });\n/**\n * Contract types supported by the indexer\n */\nvar ContractType;\n(function (ContractType) {\n ContractType[\"Mailer\"] = \"Mailer\";\n ContractType[\"MailService\"] = \"MailService\";\n})(ContractType || (exports.ContractType = ContractType = {}));\n/**\n * Event names processed by the indexer\n */\nvar ProcessedEventName;\n(function (ProcessedEventName) {\n ProcessedEventName[\"MailSent\"] = \"MailSent\";\n ProcessedEventName[\"PreparedMailSent\"] = \"PreparedMailSent\";\n ProcessedEventName[\"DelegationSet\"] = \"DelegationSet\";\n ProcessedEventName[\"DelegationCleared\"] = \"DelegationCleared\";\n ProcessedEventName[\"DomainRegistered\"] = \"DomainRegistered\";\n ProcessedEventName[\"DomainExtended\"] = \"DomainExtended\";\n ProcessedEventName[\"DomainReleased\"] = \"DomainReleased\";\n ProcessedEventName[\"FeeUpdated\"] = \"FeeUpdated\";\n ProcessedEventName[\"SharesRecorded\"] = \"SharesRecorded\";\n ProcessedEventName[\"RecipientClaimed\"] = \"RecipientClaimed\";\n ProcessedEventName[\"OwnerClaimed\"] = \"OwnerClaimed\";\n ProcessedEventName[\"ExpiredSharesClaimed\"] = \"ExpiredSharesClaimed\";\n})(ProcessedEventName || (exports.ProcessedEventName = ProcessedEventName = {}));\n//# sourceMappingURL=api.js.map","\"use strict\";\n/**\n * Network client interface for dependency injection\n * Platform-agnostic HTTP client interface\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NetworkError = void 0;\nclass NetworkError extends Error {\n constructor(message, status, statusText, response) {\n super(message);\n this.name = 'NetworkError';\n this.status = status;\n this.statusText = statusText;\n this.response = response;\n }\n}\nexports.NetworkError = NetworkError;\n//# sourceMappingURL=network.js.map","\"use strict\";\n/**\n * Wallet and blockchain types\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WalletType = void 0;\n/**\n * Cryptocurrency wallet type enumeration.\n *\n * Identifies different wallet providers and connection methods for blockchain interactions.\n * Supports both browser extension wallets and protocol-based connections.\n *\n * @example\n * ```typescript\n * // Wallet-specific connection logic\n * switch (walletType) {\n * case WalletType.METAMASK:\n * return connectMetaMask();\n * case WalletType.WALLETCONNECT:\n * return connectWalletConnect();\n * }\n * ```\n */\nvar WalletType;\n(function (WalletType) {\n /** MetaMask browser extension wallet */\n WalletType[\"METAMASK\"] = \"metamask\";\n /** Phantom wallet (primarily for Solana) */\n WalletType[\"PHANTOM\"] = \"phantom\";\n /** Coinbase Wallet */\n WalletType[\"COINBASE\"] = \"coinbase\";\n /** WalletConnect protocol for mobile wallets */\n WalletType[\"WALLETCONNECT\"] = \"walletconnect\";\n /** Generic injected wallet provider */\n WalletType[\"INJECTED\"] = \"injected\";\n})(WalletType || (exports.WalletType = WalletType = {}));\n//# sourceMappingURL=wallet.js.map","\"use strict\";\n/**\n * @fileoverview Rate Limit Type Definitions\n * @description Types for rate limiting endpoints across sudojo_api, shapeshyft_api, and whisperly_api\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RateLimitPeriodType = void 0;\n// ========================================\n// RATE LIMIT HISTORY TYPES\n// ========================================\n/**\n * Valid period types for rate limit history.\n */\nvar RateLimitPeriodType;\n(function (RateLimitPeriodType) {\n RateLimitPeriodType[\"HOUR\"] = \"hour\";\n RateLimitPeriodType[\"DAY\"] = \"day\";\n RateLimitPeriodType[\"MONTH\"] = \"month\";\n})(RateLimitPeriodType || (exports.RateLimitPeriodType = RateLimitPeriodType = {}));\n//# sourceMappingURL=rate-limits.js.map","\"use strict\";\n/**\n * Subscription Period Types\n *\n * Standard subscription periods and utilities for period comparison.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ALL_PERIODS = exports.PERIOD_RANKS = void 0;\n/**\n * Period ranking for comparison (higher = longer)\n */\nexports.PERIOD_RANKS = {\n weekly: 1,\n monthly: 2,\n quarterly: 3,\n yearly: 4,\n lifetime: 5,\n};\n/**\n * All supported periods in order\n */\nexports.ALL_PERIODS = [\n 'weekly',\n 'monthly',\n 'quarterly',\n 'yearly',\n 'lifetime',\n];\n//# sourceMappingURL=period.js.map","\"use strict\";\n/**\n * Subscription Entitlement Constants\n *\n * Shared constants for subscription entitlement management.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NONE_ENTITLEMENT = void 0;\n/**\n * The special entitlement name for users without any subscription.\n * This is returned when a user has no active entitlements in RevenueCat.\n */\nexports.NONE_ENTITLEMENT = \"none\";\n//# sourceMappingURL=entitlements.js.map","\"use strict\";\n/**\n * @fileoverview Entity Type Definitions\n * @description Core types for the entity/organization system used across shapeshyft and whisperly\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.InvitationStatus = exports.EntityRole = exports.EntityType = void 0;\n// ========================================\n// ENUMS\n// ========================================\n/**\n * Type of entity.\n * - personal: Auto-created for each user, cannot be deleted\n * - organization: User-created, supports multiple members\n */\nvar EntityType;\n(function (EntityType) {\n EntityType[\"PERSONAL\"] = \"personal\";\n EntityType[\"ORGANIZATION\"] = \"organization\";\n})(EntityType || (exports.EntityType = EntityType = {}));\n/**\n * Role of a user within an entity.\n * Determines permissions for various operations.\n * - OWNER: Only for organizations. Full access including user management.\n * - MANAGER: Can manage projects and endpoints. Used for personal entities.\n * - MEMBER: Read-only access to projects and endpoints.\n */\nvar EntityRole;\n(function (EntityRole) {\n /** Organization owner: full access including invite users, change roles, manage projects/endpoints */\n EntityRole[\"OWNER\"] = \"owner\";\n /** Can manage projects and endpoints, but cannot manage users. Default role for personal entities. */\n EntityRole[\"MANAGER\"] = \"manager\";\n /** Read-only access to projects and endpoints */\n EntityRole[\"MEMBER\"] = \"member\";\n})(EntityRole || (exports.EntityRole = EntityRole = {}));\n/**\n * Status of an entity invitation.\n */\nvar InvitationStatus;\n(function (InvitationStatus) {\n /** Invitation sent, awaiting response */\n InvitationStatus[\"PENDING\"] = \"pending\";\n /** Invitation accepted, user is now a member */\n InvitationStatus[\"ACCEPTED\"] = \"accepted\";\n /** Invitation declined by the invitee */\n InvitationStatus[\"DECLINED\"] = \"declined\";\n /** Invitation expired (not accepted within time limit) */\n InvitationStatus[\"EXPIRED\"] = \"expired\";\n})(InvitationStatus || (exports.InvitationStatus = InvitationStatus = {}));\n//# sourceMappingURL=entity.js.map","\"use strict\";\n/**\n * @fileoverview Entity Permission Type Definitions\n * @description Permission types and constants for role-based access control\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ROLE_PERMISSIONS = exports.MEMBER_PERMISSIONS = exports.MANAGER_PERMISSIONS = exports.OWNER_PERMISSIONS = void 0;\nexports.getPermissionsForRole = getPermissionsForRole;\nexports.hasPermission = hasPermission;\nconst entity_1 = require(\"./entity\");\n// ========================================\n// ROLE PERMISSION MAPPINGS\n// ========================================\n/**\n * Permission set for the Owner role (organizations only).\n * Full access including user management, project and endpoint management.\n * Organizations have exactly one owner; personal entities don't use this role.\n */\nexports.OWNER_PERMISSIONS = {\n canViewEntity: true,\n canEditEntity: true,\n canDeleteEntity: true,\n canManageMembers: true,\n canInviteMembers: true,\n canManageProjects: true,\n canCreateProjects: true,\n canViewProjects: true,\n canManageApiKeys: true,\n canViewApiKeys: true,\n};\n/**\n * Permission set for the Manager role.\n * Can manage projects and endpoints, but cannot manage users.\n * This is the default role for personal entities.\n */\nexports.MANAGER_PERMISSIONS = {\n canViewEntity: true,\n canEditEntity: true,\n canDeleteEntity: false,\n canManageMembers: false,\n canInviteMembers: false,\n canManageProjects: true,\n canCreateProjects: true,\n canViewProjects: true,\n canManageApiKeys: true,\n canViewApiKeys: true,\n};\n/**\n * Permission set for the Member role.\n * Read-only access to projects and endpoints.\n */\nexports.MEMBER_PERMISSIONS = {\n canViewEntity: true,\n canEditEntity: false,\n canDeleteEntity: false,\n canManageMembers: false,\n canInviteMembers: false,\n canManageProjects: false,\n canCreateProjects: false,\n canViewProjects: true,\n canManageApiKeys: false,\n canViewApiKeys: true,\n};\n/**\n * Maps each role to its permission set.\n * Used by permission checking utilities.\n */\nexports.ROLE_PERMISSIONS = {\n [entity_1.EntityRole.OWNER]: exports.OWNER_PERMISSIONS,\n [entity_1.EntityRole.MANAGER]: exports.MANAGER_PERMISSIONS,\n [entity_1.EntityRole.MEMBER]: exports.MEMBER_PERMISSIONS,\n};\n// ========================================\n// UTILITY FUNCTIONS\n// ========================================\n/**\n * Get permissions for a given role.\n * @param role - The entity role\n * @returns The permission set for that role\n */\nfunction getPermissionsForRole(role) {\n return exports.ROLE_PERMISSIONS[role];\n}\n/**\n * Check if a role has a specific permission.\n * @param role - The entity role to check\n * @param permission - The permission key to check\n * @returns Whether the role has the permission\n */\nfunction hasPermission(role, permission) {\n return exports.ROLE_PERMISSIONS[role][permission];\n}\n//# sourceMappingURL=permissions.js.map","\"use strict\";\n/**\n * @fileoverview Address Validation Utility\n * @description Centralized address validation for EVM, Solana, ENS, and SNS addresses\n * Eliminates code duplication across multiple files\n *\n * Pure TypeScript implementation with no external dependencies\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Web3UsernameValidator = void 0;\n// Import ChainType from business enums\nconst enums_1 = require(\"../../types/business/enums\");\nclass Web3UsernameValidator {\n /**\n * Comprehensive address validation for API endpoint\n * Returns AddressValidationResult for valid addresses, undefined for invalid ones\n */\n static validate(address) {\n if (!address) {\n return undefined;\n }\n // 1. Check if it's a valid EVM address (0x + 40 hex characters)\n if (this.EVM_REGEX.test(address)) {\n return {\n name: null,\n address: address.toLowerCase(),\n chainType: enums_1.ChainType.EVM,\n };\n }\n // 2. Check if it's a valid Solana address (Base58, 32-44 characters, no 0x prefix)\n if (!address.startsWith('0x') &&\n address.length >= 32 &&\n address.length <= 44 &&\n this.BASE58_REGEX.test(address)) {\n return {\n name: null,\n address: address, // Keep case for Solana\n chainType: enums_1.ChainType.SOLANA,\n };\n }\n // 3. Check if it's a valid ENS name (.eth or .box)\n if ((address.toLowerCase().endsWith('.eth') ||\n address.toLowerCase().endsWith('.box')) &&\n address.length >= 5 && // minimum: \"a.eth\" = 5 chars\n this.ENS_REGEX.test(address)) {\n return {\n name: address.toLowerCase(),\n address: null,\n chainType: enums_1.ChainType.EVM, // ENS resolves to EVM addresses\n };\n }\n // 4. Check if it's a valid SNS name (Solana Name Service)\n if (address.toLowerCase().includes('.')) {\n const parts = address.toLowerCase().split('.');\n if (parts.length === 2) {\n const [name, tld] = parts;\n if (this.VALID_SNS_TLDS.includes(tld) &&\n this.SNS_NAME_REGEX.test(name) &&\n name.length >= 1) {\n return {\n name: address.toLowerCase(),\n address: null,\n chainType: enums_1.ChainType.SOLANA, // SNS resolves to Solana addresses\n };\n }\n }\n }\n // If no format matches, return undefined\n return undefined;\n }\n /**\n * Quick EVM address validation\n */\n static isValidEVMAddress(address) {\n return this.EVM_REGEX.test(address);\n }\n /**\n * Quick Solana address validation\n */\n static isValidSolanaAddress(address) {\n return (!address.startsWith('0x') &&\n address.length >= 32 &&\n address.length <= 44 &&\n this.BASE58_REGEX.test(address));\n }\n /**\n * Quick ENS name validation\n */\n static isValidENSName(address) {\n return ((address.toLowerCase().endsWith('.eth') ||\n address.toLowerCase().endsWith('.box')) &&\n address.length >= 5 &&\n this.ENS_REGEX.test(address));\n }\n /**\n * Quick SNS name validation\n */\n static isValidSNSName(address) {\n if (!address.toLowerCase().includes('.'))\n return false;\n const parts = address.toLowerCase().split('.');\n if (parts.length !== 2)\n return false;\n const [name, tld] = parts;\n return (this.VALID_SNS_TLDS.includes(tld) &&\n this.SNS_NAME_REGEX.test(name) &&\n name.length >= 1);\n }\n}\nexports.Web3UsernameValidator = Web3UsernameValidator;\n// Regex patterns for different address types\nWeb3UsernameValidator.EVM_REGEX = /^0x[a-fA-F0-9]{40}$/;\nWeb3UsernameValidator.BASE58_REGEX = /^[1-9A-HJ-NP-Za-km-z]+$/;\nWeb3UsernameValidator.ENS_REGEX = /^[a-zA-Z0-9]([a-zA-Z0-9]|(-[a-zA-Z0-9]))*\\.(eth|box)$/i;\nWeb3UsernameValidator.SNS_NAME_REGEX = /^[a-zA-Z0-9]([a-zA-Z0-9]|(-[a-zA-Z0-9]))*$/;\n// Valid SNS top-level domains\nWeb3UsernameValidator.VALID_SNS_TLDS = [\n 'sol',\n 'abc',\n 'backpack',\n 'bonk',\n 'coin',\n 'dao',\n 'defi',\n 'gm',\n 'poor',\n 'pump',\n 'shdw',\n 'stepn',\n 'web3',\n];\n//# sourceMappingURL=web3-username-validator.js.map","\"use strict\";\n/**\n * Type validation utilities for runtime type checking\n *\n * These utilities help ensure type safety at runtime, especially useful\n * for validating API responses and external data.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseJson = exports.createAssertion = exports.isUrl = exports.isEmail = exports.isValidDate = exports.isErrorResponse = exports.isSuccessResponse = exports.isApiResponse = exports.optional = exports.validateArray = exports.hasRequiredProperties = exports.isNullish = exports.isArray = exports.isObject = exports.isBoolean = exports.isNumber = exports.isString = exports.createValidator = void 0;\n/**\n * Creates a validation function that safely checks if a value matches expected type\n */\nconst createValidator = (validationFn, typeName) => {\n return (data) => {\n try {\n if (validationFn(data)) {\n return { isValid: true, data };\n }\n return { isValid: false, error: `Invalid ${typeName}`, data: null };\n }\n catch (error) {\n return {\n isValid: false,\n error: `Validation error for ${typeName}: ${error instanceof Error ? error.message : 'Unknown error'}`,\n data: null,\n };\n }\n };\n};\nexports.createValidator = createValidator;\n/**\n * Basic type validators\n */\nconst isString = (value) => typeof value === 'string';\nexports.isString = isString;\nconst isNumber = (value) => typeof value === 'number' && !isNaN(value);\nexports.isNumber = isNumber;\nconst isBoolean = (value) => typeof value === 'boolean';\nexports.isBoolean = isBoolean;\nconst isObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);\nexports.isObject = isObject;\nconst isArray = (value) => Array.isArray(value);\nexports.isArray = isArray;\nconst isNullish = (value) => value === null || value === undefined;\nexports.isNullish = isNullish;\n/**\n * Validates that an object has required properties\n */\nconst hasRequiredProperties = (obj, requiredProps) => {\n if (!(0, exports.isObject)(obj))\n return false;\n return requiredProps.every((prop) => prop in obj);\n};\nexports.hasRequiredProperties = hasRequiredProperties;\n/**\n * Validates array of objects with a validator function\n */\nconst validateArray = (data, itemValidator) => {\n if (!(0, exports.isArray)(data))\n return false;\n return data.every(itemValidator);\n};\nexports.validateArray = validateArray;\n/**\n * Creates optional property validator\n */\nconst optional = (validator) => (value) => {\n return value === undefined || validator(value);\n};\nexports.optional = optional;\n/**\n * Common pattern validators for API responses\n */\nconst isApiResponse = (data) => {\n return (0, exports.isObject)(data) && (0, exports.isBoolean)(data.success);\n};\nexports.isApiResponse = isApiResponse;\nconst isSuccessResponse = (data, dataValidator) => {\n if (!(0, exports.isApiResponse)(data) || !data.success)\n return false;\n if (dataValidator && 'data' in data) {\n return dataValidator(data.data);\n }\n return true;\n};\nexports.isSuccessResponse = isSuccessResponse;\nconst isErrorResponse = (data) => {\n return ((0, exports.isApiResponse)(data) &&\n !data.success &&\n 'error' in data &&\n (0, exports.isString)(data.error));\n};\nexports.isErrorResponse = isErrorResponse;\n/**\n * Date validation\n */\nconst isValidDate = (value) => {\n if (!(0, exports.isString)(value))\n return false;\n const date = new Date(value);\n return !isNaN(date.getTime());\n};\nexports.isValidDate = isValidDate;\n/**\n * Email validation (basic)\n */\nconst isEmail = (value) => {\n if (!(0, exports.isString)(value))\n return false;\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(value);\n};\nexports.isEmail = isEmail;\n/**\n * URL validation (basic)\n */\nconst isUrl = (value) => {\n if (!(0, exports.isString)(value))\n return false;\n try {\n new URL(value);\n return true;\n }\n catch {\n return false;\n }\n};\nexports.isUrl = isUrl;\n/**\n * Creates a type assertion function that throws on invalid data\n */\nconst createAssertion = (validator, typeName) => {\n return (data, context = typeName) => {\n if (!validator(data)) {\n throw new TypeError(`Invalid ${context}: expected ${typeName}`);\n }\n };\n};\nexports.createAssertion = createAssertion;\n/**\n * Safe JSON parsing with validation\n */\nconst parseJson = (jsonString, validator) => {\n try {\n const parsed = JSON.parse(jsonString);\n if (validator) {\n if (validator(parsed)) {\n return { isValid: true, data: parsed };\n }\n return {\n isValid: false,\n error: 'Parsed JSON does not match expected type',\n data: null,\n };\n }\n return { isValid: true, data: parsed };\n }\n catch (error) {\n return {\n isValid: false,\n error: `JSON parse error: ${error instanceof Error ? error.message : 'Unknown error'}`,\n data: null,\n };\n }\n};\nexports.parseJson = parseJson;\n//# sourceMappingURL=type-validation.js.map","\"use strict\";\n/**\n * @fileoverview Pure Event Helper Functions\n * @description Pure utility functions for multi-chain event processing\n * @version 2.0.0\n *\n * This file provides clean, type-safe utility functions with no external dependencies:\n * - Multi-chain ID generation\n * - Address normalization\n * - BigInt formatting\n * - Address validation\n * - Testnet detection\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createMultiChainId = createMultiChainId;\nexports.createUserMultiChainId = createUserMultiChainId;\nexports.createChainStatsId = createChainStatsId;\nexports.createDelegationId = createDelegationId;\nexports.normalizeAddress = normalizeAddress;\nexports.formatBigInt = formatBigInt;\nexports.isZeroAddress = isZeroAddress;\nexports.isTestNet = isTestNet;\nexports.validateEventArgs = validateEventArgs;\n// ========================================\n// ID GENERATION UTILITIES\n// ========================================\n/**\n * Generate unique multi-chain entity ID\n *\n * @param chainId - Network chain ID (e.g., 1 for Ethereum)\n * @param txHash - Transaction hash\n * @param logIndex - Event log index within transaction\n * @returns Formatted ID: \"chainId-txHash-logIndex\"\n *\n * @example\n * ```typescript\n * const id = createMultiChainId(1, \"0x123...\", 0);\n * // Result: \"1-0x123...-0\"\n * ```\n */\nfunction createMultiChainId(chainId, txHash, logIndex) {\n return `${chainId}-${txHash}-${logIndex}`;\n}\n/**\n * Generate user-specific multi-chain ID\n *\n * @param chainId - Network chain ID\n * @param address - User wallet address (will be normalized to lowercase)\n * @returns Formatted ID: \"chainId-address\"\n *\n * @example\n * ```typescript\n * const userId = createUserMultiChainId(137, \"0xABC...\");\n * // Result: \"137-0xabc...\"\n * ```\n */\nfunction createUserMultiChainId(chainId, address) {\n return `${chainId}-${address.toLowerCase()}`;\n}\n/**\n * Generate chain-specific statistics ID\n *\n * @param chainId - Network chain ID\n * @returns Formatted ID: \"chainId-global\"\n */\nfunction createChainStatsId(chainId) {\n return `${chainId}-global`;\n}\n/**\n * Generate delegation ID based on delegator address and testnet status\n *\n * @param delegatorAddress - The wallet address that is delegating\n * @param isTestNet - Whether the chain is a testnet\n * @returns Formatted ID: \"delegatorAddress-testNet\"\n */\nfunction createDelegationId(delegatorAddress, isTestNet) {\n return `${delegatorAddress.toLowerCase()}-${isTestNet}`;\n}\n// ========================================\n// UTILITY FUNCTIONS\n// ========================================\n/**\n * Normalize address to lowercase\n */\nfunction normalizeAddress(address) {\n return address.toLowerCase();\n}\n/**\n * Format bigint for display\n */\nfunction formatBigInt(value, decimals = 18) {\n const divisor = BigInt(10 ** decimals);\n const whole = value / divisor;\n const fraction = value % divisor;\n if (fraction === 0n) {\n return whole.toString();\n }\n return `${whole}.${fraction.toString().padStart(decimals, '0').replace(/0+$/, '')}`;\n}\n/**\n * Check if address is zero address (delegation clearing)\n */\nfunction isZeroAddress(address) {\n return address.toLowerCase() === '0x0000000000000000000000000000000000000000';\n}\n/**\n * Determine if a chain ID represents a testnet\n * @param chainId The blockchain chain ID\n * @returns true if the chain is a testnet, false if mainnet\n */\nfunction isTestNet(chainId) {\n // EVM Testnets (positive chain IDs)\n const evmTestnets = new Set([\n 31337, // Hardhat (local development)\n 11155111, // Ethereum Sepolia\n 80001, // Polygon Mumbai (if configured)\n 80002, // Polygon Amoy (if configured)\n 421614, // Arbitrum Sepolia (if configured)\n 11155420, // OP Sepolia (if configured)\n 84532, // Base Sepolia (if configured)\n 43113, // Avalanche Fuji (if configured)\n ]);\n // Solana Testnets (negative chain IDs)\n const solanaTestnets = new Set([\n -102, // Solana Devnet\n -103, // Solana Testnet\n -104, // Solana Localnet\n ]);\n return evmTestnets.has(chainId) || solanaTestnets.has(chainId);\n}\n/**\n * Validate event arguments\n */\nfunction validateEventArgs(args, requiredFields) {\n for (const field of requiredFields) {\n if (args[field] === undefined || args[field] === null) {\n console.error(`❌ Missing required field: ${String(field)}`);\n return false;\n }\n }\n return true;\n}\n//# sourceMappingURL=event-helpers.js.map","\"use strict\";\n/**\n * Authentication utilities for wallet-based authentication\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generateAuthMessage = generateAuthMessage;\nexports.isAuthExpired = isAuthExpired;\nexports.getAuthStatusText = getAuthStatusText;\nexports.canAccessProtectedFeatures = canAccessProtectedFeatures;\nexports.isAuthStatusConnected = isAuthStatusConnected;\nexports.generateNonce = generateNonce;\nexports.extractNonceFromMessage = extractNonceFromMessage;\nexports.isValidNonce = isValidNonce;\nconst enums_1 = require(\"../../types/business/enums\");\n/**\n * Generate an authentication message with a nonce\n * @param emailDomain - The email domain/service name to display in the auth message\n * @param nonce - Optional nonce value. If not provided, a random one will be generated\n * @returns Authentication message string\n */\nfunction generateAuthMessage(emailDomain, nonce) {\n const actualNonce = nonce || `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n return `Authenticate with ${emailDomain}\\nNonce: ${actualNonce}`;\n}\n/**\n * Check if authentication is expired\n * @param createdAt - The date when authentication was created\n * @param expirationHours - Number of hours until expiration (default: 24)\n */\nfunction isAuthExpired(createdAt, expirationHours = 24) {\n const expirationTime = new Date(createdAt.getTime() + expirationHours * 60 * 60 * 1000);\n return new Date() > expirationTime;\n}\n/**\n * Get human-readable text for authentication status\n */\nfunction getAuthStatusText(status) {\n switch (status) {\n case enums_1.AuthStatus.DISCONNECTED:\n return 'Not connected';\n case enums_1.AuthStatus.CONNECTED:\n return 'Connected - Please verify';\n case enums_1.AuthStatus.VERIFIED:\n return 'Authenticated';\n default:\n return 'Unknown status';\n }\n}\n/**\n * Check if user can access protected features\n */\nfunction canAccessProtectedFeatures(status) {\n return status === enums_1.AuthStatus.VERIFIED;\n}\n/**\n * Check if auth status indicates wallet is connected (either connected or verified)\n */\nfunction isAuthStatusConnected(status) {\n return status === enums_1.AuthStatus.CONNECTED || status === enums_1.AuthStatus.VERIFIED;\n}\n/**\n * Generate a random nonce for authentication\n */\nfunction generateNonce() {\n return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n/**\n * Extract nonce from an authentication message\n */\nfunction extractNonceFromMessage(message) {\n const match = message.match(/Nonce:\\s*(.+)$/m);\n return match ? match[1].trim() : undefined;\n}\n/**\n * Validate that a nonce meets basic requirements\n */\nfunction isValidNonce(nonce) {\n if (!nonce || typeof nonce !== 'string') {\n return false;\n }\n // Nonce should be at least 10 characters\n if (nonce.length < 10) {\n return false;\n }\n // Nonce should not be too old (check if it starts with a timestamp)\n const parts = nonce.split('-');\n if (parts.length >= 2) {\n const timestamp = parseInt(parts[0], 10);\n if (!isNaN(timestamp)) {\n // Check if timestamp is within last 24 hours\n const oneDayAgo = Date.now() - 24 * 60 * 60 * 1000;\n if (timestamp < oneDayAgo) {\n return false;\n }\n }\n }\n return true;\n}\n//# sourceMappingURL=auth.js.map","\"use strict\";\n/**\n * @fileoverview Admin email whitelist utilities\n *\n * Pure utility functions for parsing and checking admin email whitelists.\n * Used by both frontend (auth_lib) and backend (auth_service) packages.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseAdminEmails = parseAdminEmails;\nexports.isAdminEmail = isAdminEmail;\nexports.createAdminChecker = createAdminChecker;\n/**\n * Parse admin emails from environment variable or string\n *\n * @param input - Comma-separated string of admin emails (e.g., \"admin@example.com, other@example.com\")\n * @returns Array of normalized (lowercase, trimmed) email addresses\n *\n * @example\n * ```typescript\n * const adminEmails = parseAdminEmails(process.env.ADMIN_EMAILS || \"\");\n * // Returns: [\"admin@example.com\", \"other@example.com\"]\n * ```\n */\nfunction parseAdminEmails(input) {\n if (!input) {\n return [];\n }\n return input\n .split(',')\n .map((email) => email.trim().toLowerCase())\n .filter((email) => email.length > 0 && email.includes('@'));\n}\n/**\n * Check if an email is in the admin whitelist\n *\n * @param email - Email address to check\n * @param adminEmails - Array of admin emails (from parseAdminEmails)\n * @returns True if the email is an admin\n *\n * @example\n * ```typescript\n * const adminEmails = parseAdminEmails(process.env.ADMIN_EMAILS || \"\");\n * if (isAdminEmail(user.email, adminEmails)) {\n * // Skip rate limiting, subscription checks, etc.\n * }\n * ```\n */\nfunction isAdminEmail(email, adminEmails) {\n if (!email) {\n return false;\n }\n return adminEmails.includes(email.toLowerCase());\n}\n/**\n * Create a cached admin email checker\n *\n * Parses the admin emails once and returns a checker function.\n * Useful for middleware where you don't want to re-parse on every request.\n *\n * @param input - Comma-separated string of admin emails\n * @returns Function that checks if an email is an admin\n *\n * @example\n * ```typescript\n * const isAdmin = createAdminChecker(process.env.ADMIN_EMAILS);\n *\n * // In middleware:\n * if (isAdmin(user.email)) {\n * // Bypass checks\n * }\n * ```\n */\nfunction createAdminChecker(input) {\n const adminEmails = parseAdminEmails(input);\n return (email) => {\n return isAdminEmail(email, adminEmails);\n };\n}\n//# sourceMappingURL=admin-emails.js.map","\"use strict\";\n/**\n * Currency formatting utilities for USDC and other tokens\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CLAIM_PERIOD_DAYS = exports.USDC_DECIMALS = void 0;\nexports.formatUSDC = formatUSDC;\nexports.parseUSDC = parseUSDC;\n// USDC configuration constants\nexports.USDC_DECIMALS = 6;\nexports.CLAIM_PERIOD_DAYS = 60;\n/**\n * Format USDC amount from smallest unit to human-readable string\n * @param amount - Amount in smallest USDC units (with 6 decimals)\n * @returns Formatted string with 2 decimal places\n *\n * @example\n * formatUSDC(1000000) // Returns \"1.00\"\n * formatUSDC(2500000) // Returns \"2.50\"\n */\nfunction formatUSDC(amount) {\n return (amount / Math.pow(10, exports.USDC_DECIMALS)).toFixed(2);\n}\n/**\n * Parse USDC amount from human-readable string to smallest unit\n * @param amount - Human-readable amount string\n * @returns Amount in smallest USDC units (with 6 decimals)\n *\n * @example\n * parseUSDC(\"1.00\") // Returns 1000000\n * parseUSDC(\"2.50\") // Returns 2500000\n */\nfunction parseUSDC(amount) {\n return Math.floor(parseFloat(amount) * Math.pow(10, exports.USDC_DECIMALS));\n}\n//# sourceMappingURL=currency.js.map","\"use strict\";\n/**\n * Date formatting utilities\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatEmailDate = formatEmailDate;\nexports.formatTimestamp = formatTimestamp;\nexports.formatRelativeTime = formatRelativeTime;\nexports.parseDate = parseDate;\nexports.isDateInRange = isDateInRange;\nexports.addDays = addDays;\nexports.addHours = addHours;\n/**\n * Format a date for display in email list\n */\nfunction formatEmailDate(date) {\n const dateObj = typeof date === 'string' ? new Date(date) : date;\n if (isNaN(dateObj.getTime())) {\n return 'Invalid date';\n }\n const now = new Date();\n const diffMs = now.getTime() - dateObj.getTime();\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n // Today: show time only\n if (diffDays === 0) {\n return dateObj.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n });\n }\n // Yesterday\n if (diffDays === 1) {\n return 'Yesterday';\n }\n // Within a week: show day name\n if (diffDays < 7) {\n return dateObj.toLocaleDateString('en-US', {\n weekday: 'long',\n });\n }\n // Within this year: show month and day\n if (dateObj.getFullYear() === now.getFullYear()) {\n return dateObj.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n });\n }\n // Different year: show full date\n return dateObj.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n });\n}\n/**\n * Format a timestamp to ISO string\n */\nfunction formatTimestamp(timestamp) {\n return new Date(timestamp).toISOString();\n}\n/**\n * Format a date to a relative time string (e.g., \"2 hours ago\")\n */\nfunction formatRelativeTime(date) {\n const dateObj = typeof date === 'string' || typeof date === 'number'\n ? new Date(date)\n : date;\n if (isNaN(dateObj.getTime())) {\n return 'Invalid date';\n }\n const now = new Date();\n const diffMs = now.getTime() - dateObj.getTime();\n const diffSeconds = Math.floor(diffMs / 1000);\n const diffMinutes = Math.floor(diffSeconds / 60);\n const diffHours = Math.floor(diffMinutes / 60);\n const diffDays = Math.floor(diffHours / 24);\n const diffWeeks = Math.floor(diffDays / 7);\n const diffMonths = Math.floor(diffDays / 30);\n const diffYears = Math.floor(diffDays / 365);\n if (diffSeconds < 60) {\n return 'just now';\n }\n if (diffMinutes < 60) {\n return diffMinutes === 1 ? '1 minute ago' : `${diffMinutes} minutes ago`;\n }\n if (diffHours < 24) {\n return diffHours === 1 ? '1 hour ago' : `${diffHours} hours ago`;\n }\n if (diffDays < 7) {\n return diffDays === 1 ? '1 day ago' : `${diffDays} days ago`;\n }\n if (diffWeeks < 4) {\n return diffWeeks === 1 ? '1 week ago' : `${diffWeeks} weeks ago`;\n }\n if (diffMonths < 12) {\n return diffMonths === 1 ? '1 month ago' : `${diffMonths} months ago`;\n }\n return diffYears === 1 ? '1 year ago' : `${diffYears} years ago`;\n}\n/**\n * Parse a date string safely\n */\nfunction parseDate(dateString) {\n try {\n const date = new Date(dateString);\n if (isNaN(date.getTime())) {\n return null;\n }\n return date;\n }\n catch {\n return null;\n }\n}\n/**\n * Check if a date is within a range\n */\nfunction isDateInRange(date, startDate, endDate) {\n return date >= startDate && date <= endDate;\n}\n/**\n * Add days to a date\n */\nfunction addDays(date, days) {\n const result = new Date(date);\n result.setDate(result.getDate() + days);\n return result;\n}\n/**\n * Add hours to a date\n */\nfunction addHours(date, hours) {\n const result = new Date(date);\n result.setHours(result.getHours() + hours);\n return result;\n}\n//# sourceMappingURL=date.js.map","\"use strict\";\n/**\n * String formatting and manipulation utilities\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.truncate = truncate;\nexports.capitalize = capitalize;\nexports.toTitleCase = toTitleCase;\nexports.toKebabCase = toKebabCase;\nexports.toCamelCase = toCamelCase;\nexports.toSnakeCase = toSnakeCase;\nexports.normalizeWhitespace = normalizeWhitespace;\nexports.isBlank = isBlank;\nexports.isNotBlank = isNotBlank;\nexports.escapeHtml = escapeHtml;\nexports.stripHtml = stripHtml;\nexports.getInitials = getInitials;\nexports.formatBytes = formatBytes;\nexports.randomString = randomString;\nexports.pluralize = pluralize;\nexports.formatNumber = formatNumber;\n/**\n * Truncate a string to a maximum length with ellipsis\n */\nfunction truncate(str, maxLength, suffix = '...') {\n if (!str || str.length <= maxLength) {\n return str;\n }\n return str.slice(0, maxLength - suffix.length) + suffix;\n}\n/**\n * Capitalize the first letter of a string\n */\nfunction capitalize(str) {\n if (!str)\n return str;\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n/**\n * Convert a string to title case\n */\nfunction toTitleCase(str) {\n if (!str)\n return str;\n return str\n .toLowerCase()\n .split(' ')\n .map((word) => capitalize(word))\n .join(' ');\n}\n/**\n * Convert a string to kebab case\n */\nfunction toKebabCase(str) {\n if (!str)\n return str;\n return str\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n/**\n * Convert a string to camel case\n */\nfunction toCamelCase(str) {\n if (!str)\n return str;\n return str\n .replace(/[-_\\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : ''))\n .replace(/^./, (char) => char.toLowerCase());\n}\n/**\n * Convert a string to snake case\n */\nfunction toSnakeCase(str) {\n if (!str)\n return str;\n return str\n .replace(/([a-z])([A-Z])/g, '$1_$2')\n .replace(/[\\s-]+/g, '_')\n .toLowerCase();\n}\n/**\n * Remove extra whitespace from a string\n */\nfunction normalizeWhitespace(str) {\n if (!str)\n return str;\n return str.replace(/\\s+/g, ' ').trim();\n}\n/**\n * Check if a string is empty or only whitespace\n */\nfunction isBlank(str) {\n return !str || str.trim().length === 0;\n}\n/**\n * Check if a string is not empty and not only whitespace\n */\nfunction isNotBlank(str) {\n return !isBlank(str);\n}\n/**\n * Escape HTML special characters\n */\nfunction escapeHtml(str) {\n if (!str)\n return str;\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n };\n return str.replace(/[&<>\"']/g, (char) => htmlEscapes[char]);\n}\n/**\n * Remove HTML tags from a string\n */\nfunction stripHtml(str) {\n if (!str)\n return str;\n return str.replace(/<[^>]*>/g, '');\n}\n/**\n * Extract initials from a name\n */\nfunction getInitials(name, maxInitials = 2) {\n if (!name)\n return '';\n const words = name.trim().split(/\\s+/);\n const initials = words\n .slice(0, maxInitials)\n .map((word) => word.charAt(0).toUpperCase())\n .join('');\n return initials;\n}\n/**\n * Format bytes to human-readable size\n */\nfunction formatBytes(bytes, decimals = 2) {\n if (bytes === 0)\n return '0 Bytes';\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n}\n/**\n * Generate a random string\n */\nfunction randomString(length, charset = 'alphanumeric') {\n let chars;\n switch (charset) {\n case 'alpha':\n chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n break;\n case 'numeric':\n chars = '0123456789';\n break;\n case 'alphanumeric':\n chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';\n break;\n case 'hex':\n chars = '0123456789abcdef';\n break;\n default:\n chars = charset;\n }\n let result = '';\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return result;\n}\n/**\n * Pluralize a word based on count\n */\nfunction pluralize(count, singular, plural) {\n if (count === 1) {\n return singular;\n }\n return plural || `${singular}s`;\n}\n/**\n * Format a number with commas as thousands separators\n */\nfunction formatNumber(num) {\n return num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n}\n//# sourceMappingURL=string.js.map","\"use strict\";\n// Application constants\n// For UI-related constants (gradients, spacing, etc.), see:\n// - ./gradients.ts - Gradient utilities and color schemes\n// - ./ui-constants.ts - Layout, typography, and component patterns\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Z_INDEX = exports.ANIMATION = exports.NETWORK_IDS = exports.WALLET_NAMES = exports.CONTACT_INFO = exports.ROUTES = exports.SUCCESS_MESSAGES = exports.ERROR_MESSAGES = exports.TIME_FORMAT = exports.SUBSCRIPTION_TIERS = exports.EMAIL_CONFIG = exports.STORAGE_KEYS = exports.CHAIN_TYPE = exports.AUTH_STATUS = exports.API_RETRY_DELAY = exports.API_RETRY_ATTEMPTS = exports.API_TIMEOUT = void 0;\n// API Configuration\nconst API_TIMEOUT = 30000; // 30 seconds\nexports.API_TIMEOUT = API_TIMEOUT;\nconst API_RETRY_ATTEMPTS = 3;\nexports.API_RETRY_ATTEMPTS = API_RETRY_ATTEMPTS;\nconst API_RETRY_DELAY = 1000; // 1 second\nexports.API_RETRY_DELAY = API_RETRY_DELAY;\n// Authentication\nconst AUTH_STATUS = {\n DISCONNECTED: 'disconnected',\n CONNECTED: 'connected',\n VERIFIED: 'verified',\n};\nexports.AUTH_STATUS = AUTH_STATUS;\n// Chain Types\nconst CHAIN_TYPE = {\n EVM: 'evm',\n SOLANA: 'solana',\n UNKNOWN: 'unknown',\n};\nexports.CHAIN_TYPE = CHAIN_TYPE;\n// Storage Keys\nconst STORAGE_KEYS = {\n AUTH_TOKEN: 'authToken',\n USER_DATA: 'userData',\n THEME: 'theme',\n EMAIL_CACHE: 'emailCache',\n WALLET_ADDRESS: 'walletAddress',\n CHAIN_TYPE: 'chainType',\n};\nexports.STORAGE_KEYS = STORAGE_KEYS;\n// Email Configuration\nconst EMAIL_CONFIG = {\n MAX_ATTACHMENT_SIZE: 25 * 1024 * 1024, // 25MB\n MAX_RECIPIENTS: 100,\n ITEMS_PER_PAGE: 50,\n REFRESH_INTERVAL: 60000, // 1 minute\n NOTIFICATION_COOLDOWN: 300000, // 5 minutes\n};\nexports.EMAIL_CONFIG = EMAIL_CONFIG;\n// Subscription Tiers\nconst SUBSCRIPTION_TIERS = {\n FREE: 'free',\n BASIC: 'basic',\n PRO: 'pro',\n ENTERPRISE: 'enterprise',\n};\nexports.SUBSCRIPTION_TIERS = SUBSCRIPTION_TIERS;\n// Time Formats\nconst TIME_FORMAT = {\n SHORT_DATE: 'MMM d',\n FULL_DATE: 'MMM d, yyyy',\n DATE_TIME: 'MMM d, yyyy h:mm a',\n RELATIVE: 'relative',\n};\nexports.TIME_FORMAT = TIME_FORMAT;\n// Error Messages\nconst ERROR_MESSAGES = {\n WALLET_NOT_CONNECTED: 'Please connect your wallet first',\n INVALID_ADDRESS: 'Please enter a valid address',\n NETWORK_ERROR: 'Network error. Please try again.',\n AUTHENTICATION_FAILED: 'Authentication failed. Please sign in again.',\n TRANSACTION_FAILED: 'Transaction failed. Please try again.',\n INSUFFICIENT_FUNDS: 'Insufficient funds for this operation',\n RATE_LIMITED: 'Too many requests. Please wait a moment.',\n SESSION_EXPIRED: 'Your session has expired. Please sign in again.',\n PERMISSION_DENIED: 'You do not have permission to perform this action',\n};\nexports.ERROR_MESSAGES = ERROR_MESSAGES;\n// Success Messages\nconst SUCCESS_MESSAGES = {\n EMAIL_SENT: 'Email sent successfully',\n EMAIL_DELETED: 'Email deleted successfully',\n PREFERENCES_SAVED: 'Preferences saved successfully',\n WALLET_CONNECTED: 'Wallet connected successfully',\n AUTHENTICATION_SUCCESS: 'Authentication successful',\n DELEGATION_SUCCESS: 'Delegation successful',\n SUBSCRIPTION_ACTIVATED: 'Subscription activated successfully',\n};\nexports.SUCCESS_MESSAGES = SUCCESS_MESSAGES;\n// Routes\nconst ROUTES = {\n HOME: '/',\n ABOUT: '/about',\n CONNECT: '/connect',\n MAIL: '/mail',\n COMPOSE: '/mail/compose',\n PREFERENCES: '/preferences',\n TERMS: '/terms',\n PRIVACY: '/privacy',\n DOCUMENTATION: '/document',\n WEB3_USERS: '/web3-users',\n WEB3_PROJECTS: '/web3-projects',\n};\nexports.ROUTES = ROUTES;\n// Contact Information\nconst CONTACT_INFO = {\n SUPPORT_EMAIL: 'support@sudobility.com',\n CONTACT_EMAIL: 'info@sudobility.com',\n};\nexports.CONTACT_INFO = CONTACT_INFO;\n// Wallet Names\nconst WALLET_NAMES = {\n METAMASK: 'MetaMask',\n WALLETCONNECT: 'WalletConnect',\n COINBASE: 'Coinbase Wallet',\n PHANTOM: 'Phantom',\n SAFE: 'Safe',\n ARGENT: 'Argent',\n RAINBOW: 'Rainbow',\n TRUST: 'Trust Wallet',\n LEDGER: 'Ledger',\n TREZOR: 'Trezor',\n};\nexports.WALLET_NAMES = WALLET_NAMES;\n// Network IDs\nconst NETWORK_IDS = {\n ETHEREUM_MAINNET: 1,\n POLYGON: 137,\n ARBITRUM: 42161,\n OPTIMISM: 10,\n BASE: 8453,\n SOLANA_MAINNET: 'mainnet-beta',\n SOLANA_DEVNET: 'devnet',\n};\nexports.NETWORK_IDS = NETWORK_IDS;\n// Animation Durations\nconst ANIMATION = {\n FAST: 150,\n NORMAL: 300,\n SLOW: 500,\n VERY_SLOW: 1000,\n};\nexports.ANIMATION = ANIMATION;\n// Z-Index Layers\nconst Z_INDEX = {\n DROPDOWN: 10,\n OVERLAY: 20,\n MODAL: 30,\n POPOVER: 40,\n TOOLTIP: 50,\n TOAST: 60,\n};\nexports.Z_INDEX = Z_INDEX;\n//# sourceMappingURL=application.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.STATUS_VALUES = void 0;\n/**\n * Shared status value constants\n * Used across multiple enums to ensure consistency and avoid duplication\n */\nexports.STATUS_VALUES = {\n SUCCESS: 'success',\n PENDING: 'pending',\n FAILED: 'failed',\n ERROR: 'error',\n};\n//# sourceMappingURL=status-values.js.map","\"use strict\";\n/**\n * Centralized logging utility\n * Provides consistent logging across the application with proper formatting\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.storageLogger = exports.ensLogger = exports.contractLogger = exports.apiLogger = exports.authLogger = exports.logger = exports.LogLevel = void 0;\nvar LogLevel;\n(function (LogLevel) {\n LogLevel[\"ERROR\"] = \"error\";\n LogLevel[\"WARN\"] = \"warn\";\n LogLevel[\"INFO\"] = \"info\";\n LogLevel[\"DEBUG\"] = \"debug\";\n})(LogLevel || (exports.LogLevel = LogLevel = {}));\nclass Logger {\n constructor() {\n this.isDevelopment = process.env.NODE_ENV === 'development';\n }\n formatTimestamp() {\n return new Date().toISOString();\n }\n formatMessage(_level, message, context) {\n const timestamp = this.formatTimestamp();\n const contextStr = context ? ` [${context}]` : '';\n return `[${timestamp}]${contextStr} ${message}`;\n }\n shouldLog(level) {\n // In production, only log warnings and errors\n if (!this.isDevelopment) {\n return level === LogLevel.ERROR || level === LogLevel.WARN;\n }\n return true;\n }\n error(message, context, data) {\n if (this.shouldLog(LogLevel.ERROR)) {\n console.error(this.formatMessage(LogLevel.ERROR, message, context));\n if (data) {\n console.error(data);\n }\n }\n }\n warn(message, context, data) {\n if (this.shouldLog(LogLevel.WARN)) {\n console.warn(this.formatMessage(LogLevel.WARN, message, context));\n if (data) {\n console.warn(data);\n }\n }\n }\n info(message, context, data) {\n if (this.shouldLog(LogLevel.INFO)) {\n console.log(this.formatMessage(LogLevel.INFO, message, context));\n if (data) {\n console.log(data);\n }\n }\n }\n debug(message, context, data) {\n if (this.shouldLog(LogLevel.DEBUG)) {\n console.log(this.formatMessage(LogLevel.DEBUG, message, context));\n if (data) {\n console.log(data);\n }\n }\n }\n /**\n * Create a contextual logger that automatically includes context in all calls\n */\n withContext(context) {\n return {\n error: (message, data) => this.error(message, context, data),\n warn: (message, data) => this.warn(message, context, data),\n info: (message, data) => this.info(message, context, data),\n debug: (message, data) => this.debug(message, context, data),\n };\n }\n}\n// Export singleton instance\nconst logger = new Logger();\nexports.logger = logger;\n// Export contextual loggers for common areas\nconst authLogger = logger.withContext('AUTH');\nexports.authLogger = authLogger;\nconst apiLogger = logger.withContext('API');\nexports.apiLogger = apiLogger;\nconst contractLogger = logger.withContext('CONTRACT');\nexports.contractLogger = contractLogger;\nconst ensLogger = logger.withContext('ENS');\nexports.ensLogger = ensLogger;\nconst storageLogger = logger.withContext('STORAGE');\nexports.storageLogger = storageLogger;\n//# sourceMappingURL=logger.js.map","\"use strict\";\n/**\n * Platform-agnostic URLSearchParams wrapper\n * Provides URLSearchParams functionality with React Native compatibility\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createURLSearchParams = createURLSearchParams;\nexports.createSearchParams = createSearchParams;\nexports.searchParamsToString = searchParamsToString;\nexports.parseSearchParams = parseSearchParams;\n/**\n * Simple URLSearchParams implementation for environments that don't have it\n */\nclass SimpleURLSearchParams {\n constructor(init) {\n this.params = new Map();\n if (init) {\n if (typeof init === 'string') {\n this.parseString(init);\n }\n else if (Array.isArray(init)) {\n for (const [key, value] of init) {\n this.append(key, value);\n }\n }\n else {\n for (const [key, value] of Object.entries(init)) {\n if (value !== undefined) {\n this.append(key, value);\n }\n }\n }\n }\n }\n parseString(str) {\n const params = str.startsWith('?') ? str.slice(1) : str;\n if (!params)\n return;\n for (const pair of params.split('&')) {\n const [key, value = ''] = pair.split('=');\n if (key) {\n this.append(decodeURIComponent(key), decodeURIComponent(value));\n }\n }\n }\n append(name, value) {\n if (!this.params.has(name)) {\n this.params.set(name, []);\n }\n const existingValues = this.params.get(name);\n if (existingValues) {\n existingValues.push(value);\n }\n }\n delete(name) {\n this.params.delete(name);\n }\n get(name) {\n const values = this.params.get(name);\n return values && values.length > 0 ? values[0] : null;\n }\n getAll(name) {\n return this.params.get(name) || [];\n }\n has(name) {\n return this.params.has(name);\n }\n set(name, value) {\n this.params.set(name, [value]);\n }\n toString() {\n const pairs = [];\n this.params.forEach((values, key) => {\n for (const value of values) {\n pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);\n }\n });\n return pairs.join('&');\n }\n forEach(callback) {\n this.params.forEach((values, key) => {\n for (const value of values) {\n callback(value, key);\n }\n });\n }\n}\n/**\n * Create a URLSearchParams instance with cross-platform compatibility\n */\nfunction createURLSearchParams(init) {\n // Check if native URLSearchParams is available\n if (typeof URLSearchParams !== 'undefined') {\n return new URLSearchParams(init);\n }\n // Fall back to our implementation for React Native or other environments\n return new SimpleURLSearchParams(init);\n}\n/**\n * Convenience function to create URL search params from an object\n */\nfunction createSearchParams(params) {\n const searchParams = createURLSearchParams(undefined);\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value));\n }\n }\n return searchParams;\n}\n/**\n * Convert search params to a query string\n */\nfunction searchParamsToString(params) {\n return params.toString();\n}\n/**\n * Parse a query string into an object\n */\nfunction parseSearchParams(queryString) {\n const params = createURLSearchParams(queryString);\n const result = {};\n params.forEach((value, key) => {\n result[key] = value;\n });\n return result;\n}\n//# sourceMappingURL=url-params.js.map","\"use strict\";\n/**\n * Common async operation patterns and helpers\n * Reduces boilerplate code for common async operations\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.debounceAsync = exports.clearExpiredCache = exports.withCache = exports.withTimeout = exports.safeParallel = exports.withLoadingState = exports.safeAsync = void 0;\nconst logger_1 = require(\"./logging/logger\");\n/**\n * Safely execute an async operation with error handling\n * Returns a result object instead of throwing\n */\nconst safeAsync = async (operation, context) => {\n try {\n const data = await operation();\n return { data, success: true };\n }\n catch (error) {\n const errorObj = error instanceof Error ? error : new Error(String(error));\n logger_1.logger.error(`Async operation failed: ${errorObj.message}`, context, error);\n return { error: errorObj, success: false };\n }\n};\nexports.safeAsync = safeAsync;\n/**\n * Execute async operation with loading state tracking\n */\nconst withLoadingState = async (operation, setLoading, setError, context) => {\n setLoading(true);\n setError(null);\n try {\n const result = await operation();\n return result;\n }\n catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n setError(errorMessage);\n logger_1.logger.error(`Operation failed: ${errorMessage}`, context, error);\n return undefined;\n }\n finally {\n setLoading(false);\n }\n};\nexports.withLoadingState = withLoadingState;\n/**\n * Execute multiple async operations in parallel with error handling\n */\nconst safeParallel = async (operations, context) => {\n try {\n const results = await Promise.all(operations.map(op => op()));\n return { data: results, success: true };\n }\n catch (error) {\n const errorObj = error instanceof Error ? error : new Error(String(error));\n logger_1.logger.error(`Parallel operations failed: ${errorObj.message}`, context, error);\n return { error: errorObj, success: false };\n }\n};\nexports.safeParallel = safeParallel;\n/**\n * Execute async operation with timeout\n */\nconst withTimeout = async (operation, timeoutMs, context) => {\n const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error(`Operation timed out after ${timeoutMs}ms`)), timeoutMs));\n try {\n return await Promise.race([operation(), timeoutPromise]);\n }\n catch (error) {\n logger_1.logger.error(`Timeout operation failed`, context, error);\n throw error;\n }\n};\nexports.withTimeout = withTimeout;\n/**\n * Cache async operation results with TTL\n */\nconst cache = new Map();\nconst withCache = async (key, operation, ttlMs = 5 * 60 * 1000 // 5 minutes default\n) => {\n const cached = cache.get(key);\n const now = Date.now();\n if (cached && now - cached.timestamp < cached.ttl) {\n return cached.data;\n }\n const result = await operation();\n cache.set(key, { data: result, timestamp: now, ttl: ttlMs });\n return result;\n};\nexports.withCache = withCache;\n/**\n * Clear expired cache entries\n */\nconst clearExpiredCache = () => {\n const now = Date.now();\n for (const [key, entry] of cache.entries()) {\n if (now - entry.timestamp >= entry.ttl) {\n cache.delete(key);\n }\n }\n};\nexports.clearExpiredCache = clearExpiredCache;\n/**\n * Debounce async operations\n */\nconst debounceMap = new Map();\nconst debounceAsync = (fn, delay, key) => {\n return (...args) => {\n return new Promise(resolve => {\n const existingTimeout = debounceMap.get(key);\n if (existingTimeout) {\n clearTimeout(existingTimeout);\n }\n const timeout = setTimeout(async () => {\n debounceMap.delete(key);\n try {\n const result = await fn(...args);\n resolve(result);\n }\n catch (error) {\n logger_1.logger.error(`Debounced operation failed`, key, error);\n resolve(undefined);\n }\n }, delay);\n debounceMap.set(key, timeout);\n });\n };\n};\nexports.debounceAsync = debounceAsync;\n//# sourceMappingURL=async-helpers.js.map","\"use strict\";\n/**\n * @johnqh/types - Common TypeScript types for Web3 email projects\n *\n * This package contains all shared TypeScript definitions used across\n * Web3 email applications including business logic types, blockchain\n * types, configuration interfaces, infrastructure types, and utility functions.\n *\n * @version 1.0.0\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EntityRole = exports.EntityType = exports.NONE_ENTITLEMENT = exports.ALL_PERIODS = exports.PERIOD_RANKS = exports.RateLimitPeriodType = exports.WalletType = exports.NetworkError = exports.ProcessedEventName = exports.ContractType = exports.AnalyticsEventBuilder = exports.AnalyticsEvent = exports.StorageType = exports.validateMessage = exports.validateDomain = exports.validateAmount = exports.validateAddress = exports.isSolanaRecipient = exports.isSolanaAddress = exports.isEvmRecipient = exports.isEvmAddress = exports.TransactionStatus = exports.PROTOCOL_CONSTANTS = exports.MessageType = exports.isWalletVerified = exports.isWalletConnected = exports.getWalletConnectionState = exports.Theme = exports.SubscriptionAction = exports.SortOrder = exports.RequestStatus = exports.PlatformType = exports.NotificationType = exports.MobileView = exports.MediumView = exports.InfoType = exports.FontSize = exports.FeatureFlag = exports.ErrorType = exports.EmailValidationState = exports.EmailSortCriteria = exports.EmailComposeType = exports.EmailAddressType = exports.EmailAction = exports.Currency = exports.ConnectionType = exports.ConnectionState = exports.ChainType = exports.Chain = exports.AuthStatus = void 0;\nexports.isAuthStatusConnected = exports.isAuthExpired = exports.getAuthStatusText = exports.generateNonce = exports.generateAuthMessage = exports.extractNonceFromMessage = exports.canAccessProtectedFeatures = exports.validateEventArgs = exports.normalizeAddress = exports.isZeroAddress = exports.isTestNet = exports.formatBigInt = exports.createUserMultiChainId = exports.createMultiChainId = exports.createDelegationId = exports.createChainStatsId = exports.parseEmailAddress = exports.isValidWalletAddress = exports.isValidSignature = exports.isSNSName = exports.isENSName = exports.getChainDisplayName = exports.getAddressType = exports.formatWalletAddress = exports.AddressType = exports.validateArray = exports.parseJson = exports.optional = exports.isValidDate = exports.isUrl = exports.isSuccessResponse = exports.isString = exports.isObject = exports.isNumber = exports.isNullish = exports.isErrorResponse = exports.isEmail = exports.isBoolean = exports.isArray = exports.isApiResponse = exports.hasRequiredProperties = exports.createValidator = exports.createAssertion = exports.Web3UsernameValidator = exports.hasPermission = exports.getPermissionsForRole = exports.MEMBER_PERMISSIONS = exports.MANAGER_PERMISSIONS = exports.OWNER_PERMISSIONS = exports.InvitationStatus = void 0;\nexports.LogLevel = exports.STATUS_VALUES = exports.Z_INDEX = exports.ANIMATION = exports.NETWORK_IDS = exports.WALLET_NAMES = exports.CONTACT_INFO = exports.ROUTES = exports.SUCCESS_MESSAGES = exports.ERROR_MESSAGES = exports.TIME_FORMAT = exports.SUBSCRIPTION_TIERS = exports.EMAIL_CONFIG = exports.STORAGE_KEYS = exports.CHAIN_TYPE = exports.AUTH_STATUS = exports.API_RETRY_DELAY = exports.API_RETRY_ATTEMPTS = exports.API_TIMEOUT = exports.truncate = exports.toTitleCase = exports.toSnakeCase = exports.toKebabCase = exports.toCamelCase = exports.stripHtml = exports.randomString = exports.pluralize = exports.normalizeWhitespace = exports.isNotBlank = exports.isBlank = exports.getInitials = exports.formatNumber = exports.formatBytes = exports.escapeHtml = exports.capitalize = exports.parseDate = exports.isDateInRange = exports.formatTimestamp = exports.formatRelativeTime = exports.formatEmailDate = exports.addHours = exports.addDays = exports.parseUSDC = exports.formatUSDC = exports.USDC_DECIMALS = exports.CLAIM_PERIOD_DAYS = exports.createAdminChecker = exports.isAdminEmail = exports.parseAdminEmails = exports.isValidNonce = void 0;\nexports.debounceAsync = exports.clearExpiredCache = exports.withCache = exports.withTimeout = exports.safeParallel = exports.withLoadingState = exports.safeAsync = exports.parseSearchParams = exports.searchParamsToString = exports.createSearchParams = exports.createURLSearchParams = exports.storageLogger = exports.ensLogger = exports.contractLogger = exports.apiLogger = exports.authLogger = exports.logger = void 0;\n// ============================================================================\n// TYPES - Business\n// ============================================================================\n// Enums\nvar enums_1 = require(\"./types/business/enums\");\nObject.defineProperty(exports, \"AuthStatus\", { enumerable: true, get: function () { return enums_1.AuthStatus; } });\nObject.defineProperty(exports, \"Chain\", { enumerable: true, get: function () { return enums_1.Chain; } });\nObject.defineProperty(exports, \"ChainType\", { enumerable: true, get: function () { return enums_1.ChainType; } });\nObject.defineProperty(exports, \"ConnectionState\", { enumerable: true, get: function () { return enums_1.ConnectionState; } });\nObject.defineProperty(exports, \"ConnectionType\", { enumerable: true, get: function () { return enums_1.ConnectionType; } });\nObject.defineProperty(exports, \"Currency\", { enumerable: true, get: function () { return enums_1.Currency; } });\nObject.defineProperty(exports, \"EmailAction\", { enumerable: true, get: function () { return enums_1.EmailAction; } });\nObject.defineProperty(exports, \"EmailAddressType\", { enumerable: true, get: function () { return enums_1.EmailAddressType; } });\nObject.defineProperty(exports, \"EmailComposeType\", { enumerable: true, get: function () { return enums_1.EmailComposeType; } });\nObject.defineProperty(exports, \"EmailSortCriteria\", { enumerable: true, get: function () { return enums_1.EmailSortCriteria; } });\nObject.defineProperty(exports, \"EmailValidationState\", { enumerable: true, get: function () { return enums_1.EmailValidationState; } });\nObject.defineProperty(exports, \"ErrorType\", { enumerable: true, get: function () { return enums_1.ErrorType; } });\nObject.defineProperty(exports, \"FeatureFlag\", { enumerable: true, get: function () { return enums_1.FeatureFlag; } });\nObject.defineProperty(exports, \"FontSize\", { enumerable: true, get: function () { return enums_1.FontSize; } });\nObject.defineProperty(exports, \"InfoType\", { enumerable: true, get: function () { return enums_1.InfoType; } });\nObject.defineProperty(exports, \"MediumView\", { enumerable: true, get: function () { return enums_1.MediumView; } });\nObject.defineProperty(exports, \"MobileView\", { enumerable: true, get: function () { return enums_1.MobileView; } });\nObject.defineProperty(exports, \"NotificationType\", { enumerable: true, get: function () { return enums_1.NotificationType; } });\nObject.defineProperty(exports, \"PlatformType\", { enumerable: true, get: function () { return enums_1.PlatformType; } });\nObject.defineProperty(exports, \"RequestStatus\", { enumerable: true, get: function () { return enums_1.RequestStatus; } });\nObject.defineProperty(exports, \"SortOrder\", { enumerable: true, get: function () { return enums_1.SortOrder; } });\nObject.defineProperty(exports, \"SubscriptionAction\", { enumerable: true, get: function () { return enums_1.SubscriptionAction; } });\nObject.defineProperty(exports, \"Theme\", { enumerable: true, get: function () { return enums_1.Theme; } });\nvar wallet_status_1 = require(\"./types/business/wallet-status\");\nObject.defineProperty(exports, \"getWalletConnectionState\", { enumerable: true, get: function () { return wallet_status_1.getWalletConnectionState; } });\nObject.defineProperty(exports, \"isWalletConnected\", { enumerable: true, get: function () { return wallet_status_1.isWalletConnected; } });\nObject.defineProperty(exports, \"isWalletVerified\", { enumerable: true, get: function () { return wallet_status_1.isWalletVerified; } });\nvar common_1 = require(\"./types/blockchain/common\");\nObject.defineProperty(exports, \"MessageType\", { enumerable: true, get: function () { return common_1.MessageType; } });\nObject.defineProperty(exports, \"PROTOCOL_CONSTANTS\", { enumerable: true, get: function () { return common_1.PROTOCOL_CONSTANTS; } });\nObject.defineProperty(exports, \"TransactionStatus\", { enumerable: true, get: function () { return common_1.TransactionStatus; } });\nObject.defineProperty(exports, \"isEvmAddress\", { enumerable: true, get: function () { return common_1.isEvmAddress; } });\nObject.defineProperty(exports, \"isEvmRecipient\", { enumerable: true, get: function () { return common_1.isEvmRecipient; } });\nObject.defineProperty(exports, \"isSolanaAddress\", { enumerable: true, get: function () { return common_1.isSolanaAddress; } });\nObject.defineProperty(exports, \"isSolanaRecipient\", { enumerable: true, get: function () { return common_1.isSolanaRecipient; } });\nvar validation_1 = require(\"./types/blockchain/validation\");\nObject.defineProperty(exports, \"validateAddress\", { enumerable: true, get: function () { return validation_1.validateAddress; } });\nObject.defineProperty(exports, \"validateAmount\", { enumerable: true, get: function () { return validation_1.validateAmount; } });\nObject.defineProperty(exports, \"validateDomain\", { enumerable: true, get: function () { return validation_1.validateDomain; } });\nObject.defineProperty(exports, \"validateMessage\", { enumerable: true, get: function () { return validation_1.validateMessage; } });\nvar environment_1 = require(\"./types/config/environment\");\nObject.defineProperty(exports, \"StorageType\", { enumerable: true, get: function () { return environment_1.StorageType; } });\nvar analytics_1 = require(\"./types/infrastructure/analytics\");\nObject.defineProperty(exports, \"AnalyticsEvent\", { enumerable: true, get: function () { return analytics_1.AnalyticsEvent; } });\nObject.defineProperty(exports, \"AnalyticsEventBuilder\", { enumerable: true, get: function () { return analytics_1.AnalyticsEventBuilder; } });\nvar api_1 = require(\"./types/infrastructure/api\");\nObject.defineProperty(exports, \"ContractType\", { enumerable: true, get: function () { return api_1.ContractType; } });\nObject.defineProperty(exports, \"ProcessedEventName\", { enumerable: true, get: function () { return api_1.ProcessedEventName; } });\nvar network_1 = require(\"./types/infrastructure/network\");\nObject.defineProperty(exports, \"NetworkError\", { enumerable: true, get: function () { return network_1.NetworkError; } });\n// Wallet\nvar wallet_1 = require(\"./types/infrastructure/wallet\");\nObject.defineProperty(exports, \"WalletType\", { enumerable: true, get: function () { return wallet_1.WalletType; } });\nvar rate_limits_1 = require(\"./types/subscription/rate-limits\");\nObject.defineProperty(exports, \"RateLimitPeriodType\", { enumerable: true, get: function () { return rate_limits_1.RateLimitPeriodType; } });\nvar period_1 = require(\"./types/subscription/period\");\nObject.defineProperty(exports, \"PERIOD_RANKS\", { enumerable: true, get: function () { return period_1.PERIOD_RANKS; } });\nObject.defineProperty(exports, \"ALL_PERIODS\", { enumerable: true, get: function () { return period_1.ALL_PERIODS; } });\n// Entitlements\nvar entitlements_1 = require(\"./types/subscription/entitlements\");\nObject.defineProperty(exports, \"NONE_ENTITLEMENT\", { enumerable: true, get: function () { return entitlements_1.NONE_ENTITLEMENT; } });\n// ============================================================================\n// TYPES - Entity\n// ============================================================================\n// Core entity types\nvar entity_1 = require(\"./types/entity/entity\");\nObject.defineProperty(exports, \"EntityType\", { enumerable: true, get: function () { return entity_1.EntityType; } });\nObject.defineProperty(exports, \"EntityRole\", { enumerable: true, get: function () { return entity_1.EntityRole; } });\nObject.defineProperty(exports, \"InvitationStatus\", { enumerable: true, get: function () { return entity_1.InvitationStatus; } });\nvar permissions_1 = require(\"./types/entity/permissions\");\nObject.defineProperty(exports, \"OWNER_PERMISSIONS\", { enumerable: true, get: function () { return permissions_1.OWNER_PERMISSIONS; } });\nObject.defineProperty(exports, \"MANAGER_PERMISSIONS\", { enumerable: true, get: function () { return permissions_1.MANAGER_PERMISSIONS; } });\nObject.defineProperty(exports, \"MEMBER_PERMISSIONS\", { enumerable: true, get: function () { return permissions_1.MEMBER_PERMISSIONS; } });\nObject.defineProperty(exports, \"getPermissionsForRole\", { enumerable: true, get: function () { return permissions_1.getPermissionsForRole; } });\nObject.defineProperty(exports, \"hasPermission\", { enumerable: true, get: function () { return permissions_1.hasPermission; } });\nvar web3_username_validator_1 = require(\"./utils/validation/web3-username-validator\");\nObject.defineProperty(exports, \"Web3UsernameValidator\", { enumerable: true, get: function () { return web3_username_validator_1.Web3UsernameValidator; } });\nvar type_validation_1 = require(\"./utils/validation/type-validation\");\nObject.defineProperty(exports, \"createAssertion\", { enumerable: true, get: function () { return type_validation_1.createAssertion; } });\nObject.defineProperty(exports, \"createValidator\", { enumerable: true, get: function () { return type_validation_1.createValidator; } });\nObject.defineProperty(exports, \"hasRequiredProperties\", { enumerable: true, get: function () { return type_validation_1.hasRequiredProperties; } });\nObject.defineProperty(exports, \"isApiResponse\", { enumerable: true, get: function () { return type_validation_1.isApiResponse; } });\nObject.defineProperty(exports, \"isArray\", { enumerable: true, get: function () { return type_validation_1.isArray; } });\nObject.defineProperty(exports, \"isBoolean\", { enumerable: true, get: function () { return type_validation_1.isBoolean; } });\nObject.defineProperty(exports, \"isEmail\", { enumerable: true, get: function () { return type_validation_1.isEmail; } });\nObject.defineProperty(exports, \"isErrorResponse\", { enumerable: true, get: function () { return type_validation_1.isErrorResponse; } });\nObject.defineProperty(exports, \"isNullish\", { enumerable: true, get: function () { return type_validation_1.isNullish; } });\nObject.defineProperty(exports, \"isNumber\", { enumerable: true, get: function () { return type_validation_1.isNumber; } });\nObject.defineProperty(exports, \"isObject\", { enumerable: true, get: function () { return type_validation_1.isObject; } });\nObject.defineProperty(exports, \"isString\", { enumerable: true, get: function () { return type_validation_1.isString; } });\nObject.defineProperty(exports, \"isSuccessResponse\", { enumerable: true, get: function () { return type_validation_1.isSuccessResponse; } });\nObject.defineProperty(exports, \"isUrl\", { enumerable: true, get: function () { return type_validation_1.isUrl; } });\nObject.defineProperty(exports, \"isValidDate\", { enumerable: true, get: function () { return type_validation_1.isValidDate; } });\nObject.defineProperty(exports, \"optional\", { enumerable: true, get: function () { return type_validation_1.optional; } });\nObject.defineProperty(exports, \"parseJson\", { enumerable: true, get: function () { return type_validation_1.parseJson; } });\nObject.defineProperty(exports, \"validateArray\", { enumerable: true, get: function () { return type_validation_1.validateArray; } });\nvar address_1 = require(\"./utils/blockchain/address\");\nObject.defineProperty(exports, \"AddressType\", { enumerable: true, get: function () { return address_1.AddressType; } });\nObject.defineProperty(exports, \"formatWalletAddress\", { enumerable: true, get: function () { return address_1.formatWalletAddress; } });\nObject.defineProperty(exports, \"getAddressType\", { enumerable: true, get: function () { return address_1.getAddressType; } });\nObject.defineProperty(exports, \"getChainDisplayName\", { enumerable: true, get: function () { return address_1.getChainDisplayName; } });\nObject.defineProperty(exports, \"isENSName\", { enumerable: true, get: function () { return address_1.isENSName; } });\nObject.defineProperty(exports, \"isSNSName\", { enumerable: true, get: function () { return address_1.isSNSName; } });\nObject.defineProperty(exports, \"isValidSignature\", { enumerable: true, get: function () { return address_1.isValidSignature; } });\nObject.defineProperty(exports, \"isValidWalletAddress\", { enumerable: true, get: function () { return address_1.isValidWalletAddress; } });\nObject.defineProperty(exports, \"parseEmailAddress\", { enumerable: true, get: function () { return address_1.parseEmailAddress; } });\nvar event_helpers_1 = require(\"./utils/blockchain/event-helpers\");\nObject.defineProperty(exports, \"createChainStatsId\", { enumerable: true, get: function () { return event_helpers_1.createChainStatsId; } });\nObject.defineProperty(exports, \"createDelegationId\", { enumerable: true, get: function () { return event_helpers_1.createDelegationId; } });\nObject.defineProperty(exports, \"createMultiChainId\", { enumerable: true, get: function () { return event_helpers_1.createMultiChainId; } });\nObject.defineProperty(exports, \"createUserMultiChainId\", { enumerable: true, get: function () { return event_helpers_1.createUserMultiChainId; } });\nObject.defineProperty(exports, \"formatBigInt\", { enumerable: true, get: function () { return event_helpers_1.formatBigInt; } });\nObject.defineProperty(exports, \"isTestNet\", { enumerable: true, get: function () { return event_helpers_1.isTestNet; } });\nObject.defineProperty(exports, \"isZeroAddress\", { enumerable: true, get: function () { return event_helpers_1.isZeroAddress; } });\nObject.defineProperty(exports, \"normalizeAddress\", { enumerable: true, get: function () { return event_helpers_1.normalizeAddress; } });\nObject.defineProperty(exports, \"validateEventArgs\", { enumerable: true, get: function () { return event_helpers_1.validateEventArgs; } });\n// ============================================================================\n// UTILS - Auth\n// ============================================================================\nvar auth_1 = require(\"./utils/auth/auth\");\nObject.defineProperty(exports, \"canAccessProtectedFeatures\", { enumerable: true, get: function () { return auth_1.canAccessProtectedFeatures; } });\nObject.defineProperty(exports, \"extractNonceFromMessage\", { enumerable: true, get: function () { return auth_1.extractNonceFromMessage; } });\nObject.defineProperty(exports, \"generateAuthMessage\", { enumerable: true, get: function () { return auth_1.generateAuthMessage; } });\nObject.defineProperty(exports, \"generateNonce\", { enumerable: true, get: function () { return auth_1.generateNonce; } });\nObject.defineProperty(exports, \"getAuthStatusText\", { enumerable: true, get: function () { return auth_1.getAuthStatusText; } });\nObject.defineProperty(exports, \"isAuthExpired\", { enumerable: true, get: function () { return auth_1.isAuthExpired; } });\nObject.defineProperty(exports, \"isAuthStatusConnected\", { enumerable: true, get: function () { return auth_1.isAuthStatusConnected; } });\nObject.defineProperty(exports, \"isValidNonce\", { enumerable: true, get: function () { return auth_1.isValidNonce; } });\nvar admin_emails_1 = require(\"./utils/auth/admin-emails\");\nObject.defineProperty(exports, \"parseAdminEmails\", { enumerable: true, get: function () { return admin_emails_1.parseAdminEmails; } });\nObject.defineProperty(exports, \"isAdminEmail\", { enumerable: true, get: function () { return admin_emails_1.isAdminEmail; } });\nObject.defineProperty(exports, \"createAdminChecker\", { enumerable: true, get: function () { return admin_emails_1.createAdminChecker; } });\n// ============================================================================\n// UTILS - Formatting\n// ============================================================================\n// Currency\nvar currency_1 = require(\"./utils/formatting/currency\");\nObject.defineProperty(exports, \"CLAIM_PERIOD_DAYS\", { enumerable: true, get: function () { return currency_1.CLAIM_PERIOD_DAYS; } });\nObject.defineProperty(exports, \"USDC_DECIMALS\", { enumerable: true, get: function () { return currency_1.USDC_DECIMALS; } });\nObject.defineProperty(exports, \"formatUSDC\", { enumerable: true, get: function () { return currency_1.formatUSDC; } });\nObject.defineProperty(exports, \"parseUSDC\", { enumerable: true, get: function () { return currency_1.parseUSDC; } });\n// Date\nvar date_1 = require(\"./utils/formatting/date\");\nObject.defineProperty(exports, \"addDays\", { enumerable: true, get: function () { return date_1.addDays; } });\nObject.defineProperty(exports, \"addHours\", { enumerable: true, get: function () { return date_1.addHours; } });\nObject.defineProperty(exports, \"formatEmailDate\", { enumerable: true, get: function () { return date_1.formatEmailDate; } });\nObject.defineProperty(exports, \"formatRelativeTime\", { enumerable: true, get: function () { return date_1.formatRelativeTime; } });\nObject.defineProperty(exports, \"formatTimestamp\", { enumerable: true, get: function () { return date_1.formatTimestamp; } });\nObject.defineProperty(exports, \"isDateInRange\", { enumerable: true, get: function () { return date_1.isDateInRange; } });\nObject.defineProperty(exports, \"parseDate\", { enumerable: true, get: function () { return date_1.parseDate; } });\n// String\nvar string_1 = require(\"./utils/formatting/string\");\nObject.defineProperty(exports, \"capitalize\", { enumerable: true, get: function () { return string_1.capitalize; } });\nObject.defineProperty(exports, \"escapeHtml\", { enumerable: true, get: function () { return string_1.escapeHtml; } });\nObject.defineProperty(exports, \"formatBytes\", { enumerable: true, get: function () { return string_1.formatBytes; } });\nObject.defineProperty(exports, \"formatNumber\", { enumerable: true, get: function () { return string_1.formatNumber; } });\nObject.defineProperty(exports, \"getInitials\", { enumerable: true, get: function () { return string_1.getInitials; } });\nObject.defineProperty(exports, \"isBlank\", { enumerable: true, get: function () { return string_1.isBlank; } });\nObject.defineProperty(exports, \"isNotBlank\", { enumerable: true, get: function () { return string_1.isNotBlank; } });\nObject.defineProperty(exports, \"normalizeWhitespace\", { enumerable: true, get: function () { return string_1.normalizeWhitespace; } });\nObject.defineProperty(exports, \"pluralize\", { enumerable: true, get: function () { return string_1.pluralize; } });\nObject.defineProperty(exports, \"randomString\", { enumerable: true, get: function () { return string_1.randomString; } });\nObject.defineProperty(exports, \"stripHtml\", { enumerable: true, get: function () { return string_1.stripHtml; } });\nObject.defineProperty(exports, \"toCamelCase\", { enumerable: true, get: function () { return string_1.toCamelCase; } });\nObject.defineProperty(exports, \"toKebabCase\", { enumerable: true, get: function () { return string_1.toKebabCase; } });\nObject.defineProperty(exports, \"toSnakeCase\", { enumerable: true, get: function () { return string_1.toSnakeCase; } });\nObject.defineProperty(exports, \"toTitleCase\", { enumerable: true, get: function () { return string_1.toTitleCase; } });\nObject.defineProperty(exports, \"truncate\", { enumerable: true, get: function () { return string_1.truncate; } });\n// ============================================================================\n// UTILS - Constants\n// ============================================================================\nvar application_1 = require(\"./utils/constants/application\");\nObject.defineProperty(exports, \"API_TIMEOUT\", { enumerable: true, get: function () { return application_1.API_TIMEOUT; } });\nObject.defineProperty(exports, \"API_RETRY_ATTEMPTS\", { enumerable: true, get: function () { return application_1.API_RETRY_ATTEMPTS; } });\nObject.defineProperty(exports, \"API_RETRY_DELAY\", { enumerable: true, get: function () { return application_1.API_RETRY_DELAY; } });\nObject.defineProperty(exports, \"AUTH_STATUS\", { enumerable: true, get: function () { return application_1.AUTH_STATUS; } });\nObject.defineProperty(exports, \"CHAIN_TYPE\", { enumerable: true, get: function () { return application_1.CHAIN_TYPE; } });\nObject.defineProperty(exports, \"STORAGE_KEYS\", { enumerable: true, get: function () { return application_1.STORAGE_KEYS; } });\nObject.defineProperty(exports, \"EMAIL_CONFIG\", { enumerable: true, get: function () { return application_1.EMAIL_CONFIG; } });\nObject.defineProperty(exports, \"SUBSCRIPTION_TIERS\", { enumerable: true, get: function () { return application_1.SUBSCRIPTION_TIERS; } });\nObject.defineProperty(exports, \"TIME_FORMAT\", { enumerable: true, get: function () { return application_1.TIME_FORMAT; } });\nObject.defineProperty(exports, \"ERROR_MESSAGES\", { enumerable: true, get: function () { return application_1.ERROR_MESSAGES; } });\nObject.defineProperty(exports, \"SUCCESS_MESSAGES\", { enumerable: true, get: function () { return application_1.SUCCESS_MESSAGES; } });\nObject.defineProperty(exports, \"ROUTES\", { enumerable: true, get: function () { return application_1.ROUTES; } });\nObject.defineProperty(exports, \"CONTACT_INFO\", { enumerable: true, get: function () { return application_1.CONTACT_INFO; } });\nObject.defineProperty(exports, \"WALLET_NAMES\", { enumerable: true, get: function () { return application_1.WALLET_NAMES; } });\nObject.defineProperty(exports, \"NETWORK_IDS\", { enumerable: true, get: function () { return application_1.NETWORK_IDS; } });\nObject.defineProperty(exports, \"ANIMATION\", { enumerable: true, get: function () { return application_1.ANIMATION; } });\nObject.defineProperty(exports, \"Z_INDEX\", { enumerable: true, get: function () { return application_1.Z_INDEX; } });\nvar status_values_1 = require(\"./utils/constants/status-values\");\nObject.defineProperty(exports, \"STATUS_VALUES\", { enumerable: true, get: function () { return status_values_1.STATUS_VALUES; } });\n// ============================================================================\n// UTILS - Logging\n// ============================================================================\nvar logger_1 = require(\"./utils/logging/logger\");\nObject.defineProperty(exports, \"LogLevel\", { enumerable: true, get: function () { return logger_1.LogLevel; } });\nObject.defineProperty(exports, \"logger\", { enumerable: true, get: function () { return logger_1.logger; } });\nObject.defineProperty(exports, \"authLogger\", { enumerable: true, get: function () { return logger_1.authLogger; } });\nObject.defineProperty(exports, \"apiLogger\", { enumerable: true, get: function () { return logger_1.apiLogger; } });\nObject.defineProperty(exports, \"contractLogger\", { enumerable: true, get: function () { return logger_1.contractLogger; } });\nObject.defineProperty(exports, \"ensLogger\", { enumerable: true, get: function () { return logger_1.ensLogger; } });\nObject.defineProperty(exports, \"storageLogger\", { enumerable: true, get: function () { return logger_1.storageLogger; } });\n// ============================================================================\n// UTILS - URL\n// ============================================================================\nvar url_params_1 = require(\"./utils/url/url-params\");\nObject.defineProperty(exports, \"createURLSearchParams\", { enumerable: true, get: function () { return url_params_1.createURLSearchParams; } });\nObject.defineProperty(exports, \"createSearchParams\", { enumerable: true, get: function () { return url_params_1.createSearchParams; } });\nObject.defineProperty(exports, \"searchParamsToString\", { enumerable: true, get: function () { return url_params_1.searchParamsToString; } });\nObject.defineProperty(exports, \"parseSearchParams\", { enumerable: true, get: function () { return url_params_1.parseSearchParams; } });\n// ============================================================================\n// UTILS - Async Helpers\n// ============================================================================\nvar async_helpers_1 = require(\"./utils/async-helpers\");\nObject.defineProperty(exports, \"safeAsync\", { enumerable: true, get: function () { return async_helpers_1.safeAsync; } });\nObject.defineProperty(exports, \"withLoadingState\", { enumerable: true, get: function () { return async_helpers_1.withLoadingState; } });\nObject.defineProperty(exports, \"safeParallel\", { enumerable: true, get: function () { return async_helpers_1.safeParallel; } });\nObject.defineProperty(exports, \"withTimeout\", { enumerable: true, get: function () { return async_helpers_1.withTimeout; } });\nObject.defineProperty(exports, \"withCache\", { enumerable: true, get: function () { return async_helpers_1.withCache; } });\nObject.defineProperty(exports, \"clearExpiredCache\", { enumerable: true, get: function () { return async_helpers_1.clearExpiredCache; } });\nObject.defineProperty(exports, \"debounceAsync\", { enumerable: true, get: function () { return async_helpers_1.debounceAsync; } });\n//# sourceMappingURL=index.js.map","import React, { useState, useEffect, useCallback, useRef } from 'react';\nimport { View, Text, Pressable, Animated } from 'react-native';\nimport { InfoType } from '@sudobility/types';\nimport { cn } from '../../lib/utils';\n\nexport interface BannerProps {\n /** Whether the banner is visible */\n isVisible: boolean;\n /** Callback when banner is dismissed */\n onDismiss: () => void;\n /** Banner title */\n title: string;\n /** Banner description (optional) */\n description?: string;\n /** Visual variant */\n variant?: InfoType;\n /** Auto-dismiss duration in milliseconds (0 to disable, default: 5000) */\n duration?: number;\n /** Custom icon (overrides variant icon) */\n icon?: React.ReactNode;\n /** Additional NativeWind classes */\n className?: string;\n /** Accessible label for close button */\n closeAccessibilityLabel?: string;\n}\n\nconst variantConfig: Record<\n InfoType,\n {\n icon: string;\n container: string;\n iconColor: string;\n titleColor: string;\n descriptionColor: string;\n }\n> = {\n [InfoType.INFO]: {\n icon: '\\u2139',\n container:\n 'bg-blue-50 dark:bg-blue-950 border-blue-200 dark:border-blue-800',\n iconColor: 'text-blue-600 dark:text-blue-400',\n titleColor: 'text-blue-900 dark:text-blue-100',\n descriptionColor: 'text-blue-700 dark:text-blue-300',\n },\n [InfoType.SUCCESS]: {\n icon: '\\u2713',\n container:\n 'bg-green-50 dark:bg-green-950 border-green-200 dark:border-green-800',\n iconColor: 'text-green-600 dark:text-green-400',\n titleColor: 'text-green-900 dark:text-green-100',\n descriptionColor: 'text-green-700 dark:text-green-300',\n },\n [InfoType.WARNING]: {\n icon: '\\u26A0',\n container:\n 'bg-yellow-50 dark:bg-amber-950 border-yellow-200 dark:border-amber-800',\n iconColor: 'text-yellow-600 dark:text-amber-400',\n titleColor: 'text-yellow-900 dark:text-amber-100',\n descriptionColor: 'text-yellow-700 dark:text-amber-300',\n },\n [InfoType.ERROR]: {\n icon: '\\u2717',\n container: 'bg-red-50 dark:bg-red-950 border-red-200 dark:border-red-800',\n iconColor: 'text-red-600 dark:text-red-400',\n titleColor: 'text-red-900 dark:text-red-100',\n descriptionColor: 'text-red-700 dark:text-red-300',\n },\n};\n\n/**\n * Banner Component\n *\n * A temporary notification banner that slides down from the top of the screen.\n * React Native port of the web Banner from @sudobility/components.\n *\n * Features:\n * - Slides down from top with spring animation\n * - Auto-dismisses after configurable duration (default 5 seconds)\n * - Manual dismiss via close button\n * - Multiple variants: info, success, warning, error\n * - Dark/light theme support via NativeWind\n *\n * @example\n * ```tsx\n * const [showBanner, setShowBanner] = useState(false);\n *\n * <Banner\n * isVisible={showBanner}\n * onDismiss={() => setShowBanner(false)}\n * variant={InfoType.SUCCESS}\n * title=\"Changes saved\"\n * description=\"Your settings have been updated successfully.\"\n * />\n * ```\n */\nexport const Banner: React.FC<BannerProps> = ({\n isVisible,\n onDismiss,\n title,\n description,\n variant = InfoType.INFO,\n duration = 5000,\n icon,\n className,\n closeAccessibilityLabel = 'Dismiss banner',\n}) => {\n const [mounted, setMounted] = useState(false);\n const slideAnim = useRef(new Animated.Value(-100)).current;\n const opacityAnim = useRef(new Animated.Value(0)).current;\n const dismissTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const config = variantConfig[variant];\n\n const clearDismissTimeout = useCallback(() => {\n if (dismissTimeoutRef.current) {\n clearTimeout(dismissTimeoutRef.current);\n dismissTimeoutRef.current = null;\n }\n }, []);\n\n const handleDismiss = useCallback(() => {\n clearDismissTimeout();\n Animated.parallel([\n Animated.timing(slideAnim, {\n toValue: -100,\n duration: 300,\n useNativeDriver: true,\n }),\n Animated.timing(opacityAnim, {\n toValue: 0,\n duration: 300,\n useNativeDriver: true,\n }),\n ]).start(() => {\n setMounted(false);\n onDismiss();\n });\n }, [clearDismissTimeout, slideAnim, opacityAnim, onDismiss]);\n\n // Handle visibility changes\n useEffect(() => {\n if (isVisible) {\n setMounted(true);\n slideAnim.setValue(-100);\n opacityAnim.setValue(0);\n\n Animated.parallel([\n Animated.spring(slideAnim, {\n toValue: 0,\n useNativeDriver: true,\n friction: 8,\n }),\n Animated.timing(opacityAnim, {\n toValue: 1,\n duration: 300,\n useNativeDriver: true,\n }),\n ]).start(() => {\n // Start auto-dismiss timer after animation completes\n if (duration > 0) {\n dismissTimeoutRef.current = setTimeout(() => {\n handleDismiss();\n }, duration);\n }\n });\n } else if (mounted) {\n handleDismiss();\n }\n\n return () => clearDismissTimeout();\n }, [isVisible]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Cleanup on unmount\n useEffect(() => {\n return () => clearDismissTimeout();\n }, [clearDismissTimeout]);\n\n if (!mounted) {\n return null;\n }\n\n return (\n <Animated.View\n style={{\n transform: [{ translateY: slideAnim }],\n opacity: opacityAnim,\n }}\n className={cn('absolute top-0 left-0 right-0 z-50', className)}\n accessibilityRole='alert'\n accessibilityLiveRegion='polite'\n >\n <View\n className={cn(\n 'flex-row items-start gap-3 p-4 border-b',\n config.container\n )}\n >\n {/* Icon */}\n <View className='flex-shrink-0 mt-0.5'>\n {icon || (\n <Text className={cn('text-lg', config.iconColor)}>\n {config.icon}\n </Text>\n )}\n </View>\n\n {/* Content */}\n <View className='flex-1 min-w-0'>\n <Text className={cn('font-semibold', config.titleColor)}>\n {title}\n </Text>\n {description ? (\n <Text className={cn('text-sm mt-1', config.descriptionColor)}>\n {description}\n </Text>\n ) : null}\n </View>\n\n {/* Close button */}\n <Pressable\n onPress={handleDismiss}\n className='flex-shrink-0 p-1 rounded-md'\n accessibilityRole='button'\n accessibilityLabel={closeAccessibilityLabel}\n >\n <Text className={cn('text-lg', config.iconColor)}>{'\\u2717'}</Text>\n </Pressable>\n </View>\n </Animated.View>\n );\n};\n\n/**\n * Hook for managing banner state\n *\n * @example\n * ```tsx\n * const { isVisible, bannerProps, showBanner, hideBanner } = useBanner();\n *\n * showBanner({\n * title: 'Success!',\n * description: 'Your changes have been saved.',\n * variant: InfoType.SUCCESS,\n * });\n *\n * {bannerProps && (\n * <Banner\n * isVisible={isVisible}\n * onDismiss={hideBanner}\n * {...bannerProps}\n * />\n * )}\n * ```\n */\nexport interface UseBannerOptions {\n /** Default duration for auto-dismiss (default: 5000) */\n defaultDuration?: number;\n}\n\nexport interface UseBannerReturn {\n /** Whether the banner is currently visible */\n isVisible: boolean;\n /** Current banner props */\n bannerProps: {\n title: string;\n description?: string;\n variant: InfoType;\n duration: number;\n } | null;\n /** Show a banner */\n showBanner: (options: {\n title: string;\n description?: string;\n variant?: InfoType;\n duration?: number;\n }) => void;\n /** Hide the current banner */\n hideBanner: () => void;\n}\n\nexport const useBanner = (options: UseBannerOptions = {}): UseBannerReturn => {\n const { defaultDuration = 5000 } = options;\n const [isVisible, setIsVisible] = useState(false);\n const [bannerProps, setBannerProps] =\n useState<UseBannerReturn['bannerProps']>(null);\n\n const showBanner = useCallback(\n ({\n title,\n description,\n variant = InfoType.INFO,\n duration = defaultDuration,\n }: {\n title: string;\n description?: string;\n variant?: InfoType;\n duration?: number;\n }) => {\n setBannerProps({ title, description, variant, duration });\n setIsVisible(true);\n },\n [defaultDuration]\n );\n\n const hideBanner = useCallback(() => {\n setIsVisible(false);\n }, []);\n\n return {\n isVisible,\n bannerProps,\n showBanner,\n hideBanner,\n };\n};\n","import { type ReactNode } from 'react';\n\n/**\n * Base button props shared between web and React Native\n */\nexport interface ButtonBaseProps {\n variant?:\n | 'default'\n | 'primary'\n | 'secondary'\n | 'outline'\n | 'ghost'\n | 'destructive'\n | 'destructive-outline'\n | 'success'\n | 'link'\n | 'gradient'\n | 'gradient-secondary'\n | 'gradient-success'\n | 'wallet'\n | 'connect'\n | 'disconnect';\n size?: 'default' | 'sm' | 'lg' | 'icon';\n animation?:\n | 'none'\n | 'hover'\n | 'lift'\n | 'scale'\n | 'glow'\n | 'shimmer'\n | 'tap'\n | 'connect'\n | 'transaction'\n | 'disconnect';\n disabled?: boolean;\n loading?: boolean;\n children: ReactNode;\n}\n\n/**\n * Map size abbreviations to design system variant keys\n */\nexport const mapSizeToVariantKey = (size: string | undefined): string => {\n if (!size) return 'default';\n const sizeMap: Record<string, string> = {\n sm: 'small',\n lg: 'large',\n default: 'default',\n };\n return sizeMap[size] || size;\n};\n\n/**\n * Get button variant class from design system\n */\nexport const getButtonVariantClass = (\n variantName: string,\n sizeName: string | undefined,\n v: any\n): string => {\n if (variantName.startsWith('gradient')) {\n const gradientType = variantName\n .replace('gradient-', '')\n .replace('gradient', 'primary');\n return v.button.gradient[gradientType]?.() || v.button.primary.default();\n } else if (['wallet', 'connect', 'disconnect'].includes(variantName)) {\n return v.button.web3[variantName]?.() || v.button.primary.default();\n } else {\n const sizeType = mapSizeToVariantKey(sizeName);\n return v.button[variantName]?.[sizeType]?.() || v.button.primary.default();\n }\n};\n\n/**\n * Shared button state logic\n */\nexport const useButtonState = (\n loading: boolean | undefined,\n disabled: boolean | undefined\n) => ({\n isDisabled: loading || disabled || false,\n showSpinner: loading || false,\n});\n","import * as React from 'react';\nimport {\n Pressable,\n Text,\n ActivityIndicator,\n type PressableProps,\n type GestureResponderEvent,\n} from 'react-native';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\nimport { variants as v } from '@sudobility/design';\nimport {\n ButtonBaseProps,\n getButtonVariantClass,\n useButtonState,\n} from './Button.shared';\n\nconst buttonVariants = cva(\n 'min-h-[44px] items-center justify-center flex-row',\n {\n variants: {\n variant: {\n default: '',\n primary: '',\n secondary: '',\n outline: '',\n ghost: '',\n destructive: '',\n 'destructive-outline': '',\n success: '',\n link: '',\n gradient: '',\n 'gradient-secondary': '',\n 'gradient-success': '',\n wallet: '',\n connect: '',\n disconnect: '',\n },\n size: {\n default: '',\n sm: 'h-8 px-3',\n lg: 'h-12 px-6',\n icon: 'h-10 w-10 p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport interface ButtonProps\n extends\n ButtonBaseProps,\n Omit<PressableProps, 'children' | 'disabled'>,\n Omit<VariantProps<typeof buttonVariants>, 'variant' | 'size'> {\n /** Callback when button is pressed */\n onPress?: (event: GestureResponderEvent) => void;\n /** Accessibility label for screen readers */\n accessibilityLabel?: string;\n /** Additional text styles for the button text */\n textClassName?: string;\n}\n\n/**\n * Button component for React Native\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\" onPress={() => console.log('pressed')}>\n * Press me\n * </Button>\n * ```\n */\nexport const Button = React.forwardRef<\n React.ElementRef<typeof Pressable>,\n ButtonProps\n>(\n (\n {\n className,\n textClassName,\n variant = 'default',\n size = 'default',\n disabled,\n loading,\n onPress,\n accessibilityLabel,\n children,\n ...props\n },\n ref\n ) => {\n const { isDisabled, showSpinner } = useButtonState(loading, disabled);\n\n const variantName = variant || 'default';\n const sizeName =\n size && size !== 'default' && size !== 'icon' ? size : undefined;\n\n const designSystemClass = getButtonVariantClass(variantName, sizeName, v);\n\n return (\n <Pressable\n ref={ref}\n className={cn(\n buttonVariants({ variant, size }),\n designSystemClass,\n isDisabled && 'opacity-50',\n className\n )}\n disabled={isDisabled}\n onPress={onPress}\n accessibilityRole='button'\n accessibilityLabel={accessibilityLabel}\n accessibilityState={{ disabled: isDisabled }}\n {...props}\n >\n {showSpinner && (\n <ActivityIndicator\n size='small'\n color='currentColor'\n className='mr-2'\n />\n )}\n {typeof children === 'string' ? (\n <Text className={cn('text-center font-medium', textClassName)}>\n {children}\n </Text>\n ) : (\n children\n )}\n </Pressable>\n );\n }\n);\n\nButton.displayName = 'Button';\n\nexport { buttonVariants };\n","import React from 'react';\nimport { View, Text, Pressable, type ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { textVariants, getCardVariantColors } from '@sudobility/design';\n\nexport interface CardProps extends ViewProps {\n variant?:\n | 'default'\n | 'bordered'\n | 'elevated'\n | 'info'\n | 'success'\n | 'warning'\n | 'error'\n | 'callout';\n padding?: 'none' | 'sm' | 'md' | 'lg';\n /** For callout variant: apply gradient background */\n gradient?: boolean;\n /** For info/callout variants: show icon */\n icon?: React.ReactNode;\n /** For info variants: show close button */\n onClose?: () => void;\n}\n\nconst calloutStyle =\n 'bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800';\n\nconst paddingStyles = {\n none: '',\n sm: 'p-3',\n md: 'p-6',\n lg: 'p-8',\n};\n\nexport const Card: React.FC<CardProps> = ({\n variant = 'elevated',\n padding = 'md',\n icon,\n onClose,\n className,\n children,\n ...props\n}) => {\n const isInfoVariant = ['info', 'success', 'warning', 'error'].includes(\n variant\n );\n const showIconOrClose = isInfoVariant && (icon || onClose);\n\n const variantClasses =\n variant === 'callout'\n ? calloutStyle\n : getCardVariantColors(\n variant as Parameters<typeof getCardVariantColors>[0]\n );\n\n return (\n <View\n className={cn(\n 'rounded-lg',\n variantClasses,\n paddingStyles[padding],\n className\n )}\n {...props}\n >\n {showIconOrClose ? (\n <View className='flex-row items-start gap-3'>\n {icon && <View className='flex-shrink-0'>{icon}</View>}\n <View className='flex-1'>{children}</View>\n {onClose && (\n <Pressable\n onPress={onClose}\n className='flex-shrink-0 opacity-70'\n accessibilityLabel='Close'\n accessibilityRole='button'\n >\n <Text className='text-lg'>×</Text>\n </Pressable>\n )}\n </View>\n ) : (\n children\n )}\n </View>\n );\n};\n\ninterface CardHeaderProps extends ViewProps {\n title?: string;\n description?: string;\n}\n\nexport const CardHeader: React.FC<CardHeaderProps> = ({\n title,\n description,\n className,\n children,\n ...props\n}) => {\n return (\n <View className={cn('gap-1.5', className)} {...props}>\n {title && <Text className={textVariants.heading.h4()}>{title}</Text>}\n {description && (\n <Text className={textVariants.body.sm()}>{description}</Text>\n )}\n {children}\n </View>\n );\n};\n\nexport const CardContent: React.FC<ViewProps> = ({\n className,\n children,\n ...props\n}) => {\n return (\n <View className={cn('', className)} {...props}>\n {children}\n </View>\n );\n};\n\nexport const CardFooter: React.FC<ViewProps> = ({\n className,\n children,\n ...props\n}) => {\n return (\n <View className={cn('flex-row items-center pt-4', className)} {...props}>\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport {\n TextInput,\n type TextInputProps,\n type NativeSyntheticEvent,\n type TextInputFocusEventData,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { variants as v } from '@sudobility/design';\n\nexport interface InputProps extends Omit<TextInputProps, 'style'> {\n /** Additional class names for styling */\n className?: string;\n /** Error state */\n error?: boolean;\n /** Disabled state */\n disabled?: boolean;\n}\n\n/**\n * Input component for React Native\n *\n * @example\n * ```tsx\n * <Input\n * placeholder=\"Enter your email\"\n * value={email}\n * onChangeText={setEmail}\n * keyboardType=\"email-address\"\n * />\n * ```\n */\nexport const Input = React.forwardRef<TextInput, InputProps>(\n (\n { className, error, disabled, editable, onFocus, onBlur, ...props },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n\n const handleFocus = (e: NativeSyntheticEvent<TextInputFocusEventData>) => {\n setIsFocused(true);\n onFocus?.(e);\n };\n\n const handleBlur = (e: NativeSyntheticEvent<TextInputFocusEventData>) => {\n setIsFocused(false);\n onBlur?.(e);\n };\n\n const isEditable = editable !== false && !disabled;\n\n return (\n <TextInput\n ref={ref}\n className={cn(\n v.input.default(),\n isFocused && 'border-blue-500 dark:border-blue-400',\n error && 'border-red-500 dark:border-red-400',\n disabled && 'opacity-50 bg-gray-100 dark:bg-gray-800',\n className\n )}\n editable={isEditable}\n onFocus={handleFocus}\n onBlur={handleBlur}\n accessibilityState={{\n disabled: !isEditable,\n }}\n {...props}\n />\n );\n }\n);\n\nInput.displayName = 'Input';\n","import React from 'react';\nimport { View, ActivityIndicator, Text, type ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SpinnerProps extends ViewProps {\n size?: 'small' | 'default' | 'large' | 'extraLarge';\n variant?: 'default' | 'white' | 'success' | 'warning' | 'error';\n accessibilityLabel?: string;\n loadingText?: string;\n showText?: boolean;\n}\n\nconst sizeMap = {\n small: 'small' as const,\n default: 'small' as const,\n large: 'large' as const,\n extraLarge: 'large' as const,\n};\n\nconst colorMap = {\n default: '#2563eb', // blue-600\n white: '#ffffff',\n success: '#16a34a', // green-600\n warning: '#ea580c', // orange-600\n error: '#dc2626', // red-600\n};\n\n/**\n * Spinner component for React Native\n *\n * @example\n * ```tsx\n * <Spinner size=\"large\" variant=\"default\" />\n * ```\n */\nexport const Spinner: React.FC<SpinnerProps> = ({\n size = 'default',\n variant = 'default',\n className,\n accessibilityLabel = 'Loading',\n loadingText = 'Loading...',\n showText = false,\n ...props\n}) => {\n const activitySize = sizeMap[size];\n const color = colorMap[variant];\n\n return (\n <View\n className={cn('items-center justify-center', className)}\n accessibilityRole='progressbar'\n accessibilityLabel={accessibilityLabel}\n {...props}\n >\n <ActivityIndicator size={activitySize} color={color} />\n {showText && (\n <Text className='mt-2 text-gray-600 dark:text-gray-400 text-sm'>\n {loadingText}\n </Text>\n )}\n </View>\n );\n};\n","import React from 'react';\nimport { View, Text, type ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { variants as v } from '@sudobility/design';\n\nexport interface AlertProps extends ViewProps {\n variant?: 'info' | 'success' | 'warning' | 'attention' | 'error';\n title?: string;\n description?: string;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n}\n\n// Default icons as simple text - can be replaced with react-native-heroicons\nconst defaultIcons: Record<string, string> = {\n info: 'ℹ️',\n success: '✓',\n warning: '⚠️',\n attention: '🔔',\n error: '✕',\n};\n\nexport const AlertTitle: React.FC<{\n children: React.ReactNode;\n className?: string;\n}> = ({ children, className }) => (\n <Text className={cn('font-medium mb-1', className)}>{children}</Text>\n);\n\nexport const AlertDescription: React.FC<{\n children: React.ReactNode;\n className?: string;\n}> = ({ children, className }) => (\n <Text className={cn('text-sm', className)}>{children}</Text>\n);\n\n/**\n * Alert component for React Native\n *\n * @example\n * ```tsx\n * <Alert variant=\"success\" title=\"Success!\" description=\"Your changes have been saved.\" />\n * ```\n */\nexport const Alert: React.FC<AlertProps> = ({\n variant = 'info',\n title,\n description,\n icon,\n children,\n className,\n ...props\n}) => {\n const IconComponent = icon || (\n <Text className='text-lg'>{defaultIcons[variant]}</Text>\n );\n\n const alertClass =\n typeof v.alert[variant] === 'function' ? v.alert[variant]() : '';\n\n return (\n <View\n className={cn(alertClass, 'flex-row items-start gap-3', className)}\n accessibilityRole='alert'\n {...props}\n >\n {IconComponent && <View className='flex-shrink-0'>{IconComponent}</View>}\n <View className='flex-1'>\n {title && <Text className='font-medium mb-1'>{title}</Text>}\n {description && <Text className='text-sm'>{description}</Text>}\n {children}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { Button, type ButtonProps } from '../Button';\nimport { Spinner } from '../Spinner';\n\nexport interface ActionButtonProps extends Omit<ButtonProps, 'children'> {\n /** Button text */\n children: React.ReactNode;\n /** Loading state */\n isLoading?: boolean;\n /** Text to show when loading (defaults to \"Loading...\") */\n loadingText?: string;\n /** Whether to show spinner icon when loading */\n showSpinner?: boolean;\n}\n\n/**\n * ActionButton Component\n *\n * Enhanced Button component with built-in loading state management.\n * Automatically shows loading text/spinner and disables interaction when loading.\n * Commonly used for form submissions, save actions, and async operations.\n *\n * @example\n * ```tsx\n * <ActionButton\n * onPress={handleSave}\n * isLoading={isSaving}\n * loadingText=\"Saving...\"\n * variant=\"default\"\n * >\n * Save Changes\n * </ActionButton>\n * ```\n */\nexport const ActionButton: React.FC<ActionButtonProps> = ({\n children,\n isLoading = false,\n loadingText = 'Loading...',\n showSpinner = true,\n disabled,\n ...buttonProps\n}) => {\n return (\n <Button {...buttonProps} disabled={disabled || isLoading}>\n {isLoading ? (\n <View className='flex flex-row items-center gap-2'>\n {showSpinner && <Spinner size='small' />}\n <Text className='text-inherit'>{loadingText}</Text>\n </View>\n ) : (\n children\n )}\n </Button>\n );\n};\n","import * as React from 'react';\nimport { View, ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface BoxProps extends ViewProps {\n /** Box content */\n children?: React.ReactNode;\n /** Padding */\n p?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Padding X-axis */\n px?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Padding Y-axis */\n py?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Margin */\n m?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'auto';\n /** Margin X-axis */\n mx?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'auto';\n /** Margin Y-axis */\n my?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'auto';\n /** Background color */\n bg?:\n | 'transparent'\n | 'white'\n | 'gray'\n | 'primary'\n | 'success'\n | 'warning'\n | 'danger';\n /** Border */\n border?: boolean;\n /** Border radius */\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';\n /** Shadow */\n shadow?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n /** Width */\n w?: 'auto' | 'full';\n /** Height */\n h?: 'auto' | 'full';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Box Component\n *\n * Fundamental layout primitive with spacing, sizing, and styling props.\n * Acts as a building block for creating layouts and containers.\n *\n * @example\n * ```tsx\n * <Box p=\"md\" bg=\"white\" rounded=\"lg\" shadow=\"md\">\n * <Text>Card Content</Text>\n * </Box>\n * ```\n */\nexport const Box: React.FC<BoxProps> = ({\n children,\n p,\n px,\n py,\n m,\n mx,\n my,\n bg,\n border = false,\n rounded,\n shadow,\n w,\n h,\n className,\n ...viewProps\n}) => {\n // Spacing configurations\n const spacingClasses: Record<string, string> = {\n none: '0',\n xs: '1',\n sm: '2',\n md: '4',\n lg: '6',\n xl: '8',\n '2xl': '12',\n auto: 'auto',\n };\n\n // Background configurations\n const bgClasses = bg\n ? {\n transparent: 'bg-transparent',\n white: 'bg-white dark:bg-gray-900',\n gray: 'bg-gray-100 dark:bg-gray-800',\n primary: 'bg-blue-50 dark:bg-blue-900/20',\n success: 'bg-green-50 dark:bg-green-900/20',\n warning: 'bg-yellow-50 dark:bg-yellow-900/20',\n danger: 'bg-red-50 dark:bg-red-900/20',\n }[bg]\n : '';\n\n // Border radius configurations\n const roundedClasses = rounded\n ? {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n full: 'rounded-full',\n }[rounded]\n : '';\n\n // Shadow configurations\n const shadowClasses = shadow\n ? {\n none: 'shadow-none',\n sm: 'shadow-sm',\n md: 'shadow-md',\n lg: 'shadow-lg',\n xl: 'shadow-xl',\n }[shadow]\n : '';\n\n // Width configurations\n const wClasses = w\n ? {\n auto: '',\n full: 'w-full',\n }[w]\n : '';\n\n // Height configurations\n const hClasses = h\n ? {\n auto: '',\n full: 'h-full',\n }[h]\n : '';\n\n // Build padding classes\n const paddingClasses: string[] = [];\n if (p) paddingClasses.push('p-' + spacingClasses[p]);\n if (px) paddingClasses.push('px-' + spacingClasses[px]);\n if (py) paddingClasses.push('py-' + spacingClasses[py]);\n\n // Build margin classes\n const marginClasses: string[] = [];\n if (m) marginClasses.push('m-' + spacingClasses[m]);\n if (mx) marginClasses.push('mx-' + spacingClasses[mx]);\n if (my) marginClasses.push('my-' + spacingClasses[my]);\n\n return (\n <View\n className={cn(\n ...paddingClasses,\n ...marginClasses,\n bgClasses,\n border && 'border border-gray-200 dark:border-gray-700',\n roundedClasses,\n shadowClasses,\n wClasses,\n hClasses,\n className\n )}\n {...viewProps}\n >\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { Box, BoxProps } from '../Box';\n\nexport interface FlexProps extends Omit<BoxProps, 'className'> {\n /** Flex direction */\n direction?: 'row' | 'row-reverse' | 'col' | 'col-reverse';\n /** Align items */\n align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline';\n /** Justify content */\n justify?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\n /** Wrap items */\n wrap?: 'nowrap' | 'wrap' | 'wrap-reverse';\n /** Gap between items */\n gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Flex Component\n *\n * Flexbox layout component extending Box with flex-specific properties.\n * Provides convenient props for common flexbox patterns.\n *\n * @example\n * ```tsx\n * <Flex justify=\"between\" align=\"center\" p=\"md\">\n * <Text>Left</Text>\n * <Button>Right</Button>\n * </Flex>\n * ```\n *\n * @example\n * ```tsx\n * <Flex direction=\"col\" gap=\"md\" p=\"lg\">\n * <Card>Item 1</Card>\n * <Card>Item 2</Card>\n * </Flex>\n * ```\n */\nexport const Flex: React.FC<FlexProps> = ({\n direction = 'row',\n align,\n justify,\n wrap = 'nowrap',\n gap,\n className,\n ...boxProps\n}) => {\n // Direction configurations\n const directionClasses: Record<string, string> = {\n row: 'flex-row',\n 'row-reverse': 'flex-row-reverse',\n col: 'flex-col',\n 'col-reverse': 'flex-col-reverse',\n };\n\n // Align items configurations\n const alignClasses = align\n ? {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n }[align]\n : '';\n\n // Justify content configurations\n const justifyClasses = justify\n ? {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n }[justify]\n : '';\n\n // Wrap configurations\n const wrapClasses: Record<string, string> = {\n nowrap: 'flex-nowrap',\n wrap: 'flex-wrap',\n 'wrap-reverse': 'flex-wrap-reverse',\n };\n\n // Gap configurations\n const gapClasses = gap\n ? {\n none: 'gap-0',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n }[gap]\n : '';\n\n return (\n <Box\n {...boxProps}\n className={cn(\n 'flex',\n directionClasses[direction],\n alignClasses,\n justifyClasses,\n wrapClasses[wrap],\n gapClasses,\n className\n )}\n />\n );\n};\n","import * as React from 'react';\nimport { View, ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface StackProps extends ViewProps {\n /** Stack content */\n children: React.ReactNode;\n /** Stack direction */\n direction?: 'vertical' | 'horizontal';\n /** Spacing between items */\n spacing?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Align items */\n align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline';\n /** Justify content */\n justify?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\n /** Wrap items */\n wrap?: boolean;\n /** Full width/height */\n full?: boolean;\n /** Divider between items */\n divider?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Stack Component\n *\n * Flexbox-based layout component for arranging children vertically or horizontally\n * with consistent spacing. Supports alignment, wrapping, and dividers.\n *\n * @example\n * ```tsx\n * <Stack spacing=\"md\">\n * <View><Text>Item 1</Text></View>\n * <View><Text>Item 2</Text></View>\n * <View><Text>Item 3</Text></View>\n * </Stack>\n * ```\n *\n * @example\n * ```tsx\n * <Stack\n * direction=\"horizontal\"\n * spacing=\"lg\"\n * align=\"center\"\n * justify=\"between\"\n * >\n * <Button>Cancel</Button>\n * <Button>Save</Button>\n * </Stack>\n * ```\n */\nexport const Stack: React.FC<StackProps> = ({\n children,\n direction = 'vertical',\n spacing = 'md',\n align = 'stretch',\n justify = 'start',\n wrap = false,\n full = false,\n divider = false,\n className,\n ...viewProps\n}) => {\n const isVertical = direction === 'vertical';\n\n // Gap classes (NativeWind supports gap)\n const gapClasses: Record<string, Record<string, string>> = {\n vertical: {\n none: '',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n },\n horizontal: {\n none: '',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n },\n };\n\n // Align items configurations\n const alignClasses: Record<string, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n };\n\n // Justify content configurations\n const justifyClasses: Record<string, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n };\n\n return (\n <View\n className={cn(\n 'flex',\n isVertical ? 'flex-col' : 'flex-row',\n gapClasses[direction][spacing],\n alignClasses[align],\n justifyClasses[justify],\n wrap && 'flex-wrap',\n full && (isVertical ? 'h-full' : 'w-full'),\n className\n )}\n {...viewProps}\n >\n {divider\n ? React.Children.map(children, (child, index) => (\n <React.Fragment key={index}>\n {child}\n {index < React.Children.count(children) - 1 && (\n <View\n className={cn(\n 'bg-gray-200 dark:bg-gray-700',\n isVertical ? 'h-px w-full' : 'w-px h-full'\n )}\n />\n )}\n </React.Fragment>\n ))\n : children}\n </View>\n );\n};\n\n/**\n * VStack - Vertical Stack (alias for Stack with direction=\"vertical\")\n */\nexport const VStack: React.FC<Omit<StackProps, 'direction'>> = props => (\n <Stack direction='vertical' {...props} />\n);\n\n/**\n * HStack - Horizontal Stack (alias for Stack with direction=\"horizontal\")\n */\nexport const HStack: React.FC<Omit<StackProps, 'direction'>> = props => (\n <Stack direction='horizontal' {...props} />\n);\n","import * as React from 'react';\nimport { View, Text, ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { textVariants } from '@sudobility/design';\n\nexport interface DividerProps extends ViewProps {\n /** Optional text label */\n label?: string;\n /** Label position */\n labelPosition?: 'left' | 'center' | 'right';\n /** Orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Spacing around the divider */\n spacing?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n /** Line thickness */\n thickness?: 'thin' | 'medium' | 'thick';\n /** Color variant */\n variant?: 'light' | 'medium' | 'dark';\n /** Additional className for the container */\n className?: string;\n /** Additional className for the line */\n lineClassName?: string;\n}\n\n/**\n * Divider Component\n *\n * A visual separator for content sections with optional label support.\n * Can be used horizontally or vertically to divide content areas.\n *\n * @example\n * ```tsx\n * <Divider />\n * <Divider label=\"OR\" labelPosition=\"center\" />\n * <Divider spacing=\"lg\" variant=\"medium\" />\n * ```\n *\n * @example\n * ```tsx\n * // Vertical divider\n * <View className=\"flex flex-row gap-4\">\n * <View><Text>Content 1</Text></View>\n * <Divider orientation=\"vertical\" />\n * <View><Text>Content 2</Text></View>\n * </View>\n * ```\n */\nexport const Divider: React.FC<DividerProps> = ({\n label,\n labelPosition = 'center',\n orientation = 'horizontal',\n spacing = 'md',\n thickness = 'thin',\n variant = 'light',\n className,\n lineClassName,\n ...viewProps\n}) => {\n // Spacing configurations\n const spacingClasses = {\n horizontal: {\n none: 'my-0',\n sm: 'my-2',\n md: 'my-4',\n lg: 'my-6',\n xl: 'my-8',\n },\n vertical: {\n none: 'mx-0',\n sm: 'mx-2',\n md: 'mx-4',\n lg: 'mx-6',\n xl: 'mx-8',\n },\n };\n\n // Thickness configurations (using border for horizontal, width for vertical)\n const thicknessValues = {\n thin: 1,\n medium: 2,\n thick: 4,\n };\n\n // Color variant configurations\n const variantClasses = {\n light: 'bg-gray-200 dark:bg-gray-700',\n medium: 'bg-gray-300 dark:bg-gray-600',\n dark: 'bg-gray-400 dark:bg-gray-500',\n };\n\n // Vertical divider\n if (orientation === 'vertical') {\n return (\n <View\n className={cn(\n 'self-stretch',\n variantClasses[variant],\n spacingClasses.vertical[spacing],\n className\n )}\n style={{ width: thicknessValues[thickness] }}\n accessibilityRole='none'\n {...viewProps}\n />\n );\n }\n\n // Horizontal divider without label\n if (!label) {\n return (\n <View\n className={cn(\n 'w-full',\n variantClasses[variant],\n spacingClasses.horizontal[spacing],\n lineClassName,\n className\n )}\n style={{ height: thicknessValues[thickness] }}\n accessibilityRole='none'\n {...viewProps}\n />\n );\n }\n\n // Horizontal divider with label\n const labelPositionClasses = {\n left: 'justify-start',\n center: 'justify-center',\n right: 'justify-end',\n };\n\n return (\n <View\n className={cn(\n 'flex flex-row items-center',\n spacingClasses.horizontal[spacing],\n labelPositionClasses[labelPosition],\n className\n )}\n accessibilityRole='none'\n {...viewProps}\n >\n {labelPosition !== 'left' && (\n <View\n className={cn('flex-1', variantClasses[variant], lineClassName)}\n style={{ height: thicknessValues[thickness] }}\n />\n )}\n <Text\n className={cn(\n textVariants.body.sm(),\n 'px-3 text-gray-500 dark:text-gray-400'\n )}\n >\n {label}\n </Text>\n {labelPosition !== 'right' && (\n <View\n className={cn('flex-1', variantClasses[variant], lineClassName)}\n style={{ height: thicknessValues[thickness] }}\n />\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SeparatorProps {\n /** Separator orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Spacing around separator */\n spacing?: 'none' | 'sm' | 'md' | 'lg';\n /** Line thickness */\n thickness?: 'thin' | 'medium' | 'thick';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Separator Component\n *\n * Simple horizontal or vertical line separator.\n * Use for visual separation in menus, lists, and layouts.\n *\n * @example\n * ```tsx\n * <View>\n * <MenuItem>Option 1</MenuItem>\n * <Separator />\n * <MenuItem>Option 2</MenuItem>\n * </View>\n * ```\n *\n * @example\n * ```tsx\n * <View className=\"flex flex-row items-center gap-4\">\n * <Button>Action 1</Button>\n * <Separator orientation=\"vertical\" spacing=\"md\" />\n * <Button>Action 2</Button>\n * </View>\n * ```\n */\nexport const Separator: React.FC<SeparatorProps> = ({\n orientation = 'horizontal',\n spacing = 'md',\n thickness = 'thin',\n className,\n}) => {\n // Spacing configurations\n const spacingClasses = {\n horizontal: {\n none: '',\n sm: 'my-1',\n md: 'my-2',\n lg: 'my-4',\n },\n vertical: {\n none: '',\n sm: 'mx-1',\n md: 'mx-2',\n lg: 'mx-4',\n },\n };\n\n // Thickness configurations\n const thicknessClasses = {\n horizontal: {\n thin: 'h-px',\n medium: 'h-0.5',\n thick: 'h-1',\n },\n vertical: {\n thin: 'w-px',\n medium: 'w-0.5',\n thick: 'w-1',\n },\n };\n\n const isHorizontal = orientation === 'horizontal';\n\n return (\n <View\n accessibilityRole='none'\n className={cn(\n 'bg-gray-200 dark:bg-gray-700',\n isHorizontal ? 'w-full' : 'h-full',\n thicknessClasses[orientation][thickness],\n spacingClasses[orientation][spacing],\n className\n )}\n />\n );\n};\n","import * as React from 'react';\nimport { View, Dimensions } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nconst { width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface ContainerProps {\n /** Container content */\n children: React.ReactNode;\n /** Max width variant */\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';\n /** Center container horizontally */\n center?: boolean;\n /** Padding */\n padding?: 'none' | 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Container Component\n *\n * Responsive container with max-width constraints and horizontal centering.\n * Useful for creating consistent page layouts and content areas.\n *\n * @example\n * ```tsx\n * <Container>\n * <Text>Page Content</Text>\n * </Container>\n * ```\n *\n * @example\n * ```tsx\n * <Container size=\"lg\" padding=\"lg\">\n * <Text>Centered content with large max-width</Text>\n * </Container>\n * ```\n */\nexport const Container: React.FC<ContainerProps> = ({\n children,\n size = 'xl',\n center = true,\n padding = 'md',\n className,\n}) => {\n // Max-width configurations (for larger screens/tablets)\n const maxWidths = {\n sm: 384, // 24rem\n md: 448, // 28rem\n lg: 512, // 32rem\n xl: 576, // 36rem\n '2xl': 672, // 42rem\n full: SCREEN_WIDTH,\n };\n\n // Padding configurations\n const paddingClasses = {\n none: '',\n sm: 'px-4 py-2',\n md: 'px-4 py-4',\n lg: 'px-6 py-6',\n };\n\n const maxWidth = maxWidths[size];\n\n return (\n <View\n className={cn(\n 'w-full',\n center && 'self-center',\n paddingClasses[padding],\n className\n )}\n style={{\n maxWidth: maxWidth < SCREEN_WIDTH ? maxWidth : undefined,\n }}\n >\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CenterProps {\n /** Content to center */\n children: React.ReactNode;\n /** Axis to center on */\n axis?: 'horizontal' | 'vertical' | 'both';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Center Component\n *\n * Centers content horizontally, vertically, or both using flexbox.\n * Useful for centering loading states, empty states, and modal content.\n *\n * @example\n * ```tsx\n * <Center>\n * <Spinner />\n * </Center>\n * ```\n *\n * @example\n * ```tsx\n * <Center axis=\"horizontal\">\n * <Button>Centered Button</Button>\n * </Center>\n * ```\n */\nexport const Center: React.FC<CenterProps> = ({\n children,\n axis = 'both',\n className,\n}) => {\n const getFlexClasses = () => {\n switch (axis) {\n case 'horizontal':\n return 'justify-center';\n case 'vertical':\n return 'items-center';\n case 'both':\n default:\n return 'justify-center items-center';\n }\n };\n\n return (\n <View className={cn('flex', getFlexClasses(), className)}>{children}</View>\n );\n};\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SpacerProps {\n /** Size of the spacer */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | number;\n /** Direction of spacing */\n axis?: 'horizontal' | 'vertical';\n /** Flex grow to fill available space */\n flex?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Spacer Component\n *\n * Creates empty space between elements. Can be a fixed size or flexible.\n * Useful for creating consistent spacing in layouts.\n *\n * @example\n * ```tsx\n * <HStack>\n * <Button>Cancel</Button>\n * <Spacer flex />\n * <Button>Save</Button>\n * </HStack>\n * ```\n *\n * @example\n * ```tsx\n * <VStack>\n * <Text>Title</Text>\n * <Spacer size=\"lg\" />\n * <Text>Content</Text>\n * </VStack>\n * ```\n */\nexport const Spacer: React.FC<SpacerProps> = ({\n size = 'md',\n axis = 'vertical',\n flex = false,\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n vertical: {\n xs: 'h-1',\n sm: 'h-2',\n md: 'h-4',\n lg: 'h-6',\n xl: 'h-8',\n '2xl': 'h-12',\n },\n horizontal: {\n xs: 'w-1',\n sm: 'w-2',\n md: 'w-4',\n lg: 'w-6',\n xl: 'w-8',\n '2xl': 'w-12',\n },\n };\n\n // Custom size (number)\n const customSizeStyle =\n typeof size === 'number'\n ? axis === 'vertical'\n ? { height: size }\n : { width: size }\n : undefined;\n\n const sizeClass = typeof size === 'string' ? sizeClasses[axis][size] : '';\n\n return (\n <View\n className={cn(flex && 'flex-1', !flex && sizeClass, className)}\n style={customSizeStyle}\n accessibilityElementsHidden\n />\n );\n};\n","import * as React from 'react';\nimport { View, Dimensions } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nconst { width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface GridProps {\n /** Grid content */\n children: React.ReactNode;\n /** Number of columns */\n cols?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Gap between items */\n gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Align items */\n alignItems?: 'start' | 'center' | 'end' | 'stretch';\n /** Additional className */\n className?: string;\n}\n\nexport interface GridItemProps {\n /** Grid item content */\n children: React.ReactNode;\n /** Column span */\n colSpan?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Grid Component\n *\n * Flexbox-based grid layout component for React Native.\n * Uses flex-wrap to simulate CSS Grid behavior.\n *\n * @example\n * ```tsx\n * <Grid cols={3} gap=\"md\">\n * <GridItem><Card>Item 1</Card></GridItem>\n * <GridItem><Card>Item 2</Card></GridItem>\n * <GridItem><Card>Item 3</Card></GridItem>\n * </Grid>\n * ```\n *\n * @example\n * ```tsx\n * <Grid cols={2} gap=\"lg\">\n * <GridItem colSpan={2}><Card>Full width</Card></GridItem>\n * <GridItem><Card>Half</Card></GridItem>\n * <GridItem><Card>Half</Card></GridItem>\n * </Grid>\n * ```\n */\nexport const Grid: React.FC<GridProps> = ({\n children,\n cols = 1,\n gap = 'md',\n alignItems = 'stretch',\n className,\n}) => {\n // Gap configurations (in pixels for calculation)\n const gapValues = {\n none: 0,\n xs: 4,\n sm: 8,\n md: 16,\n lg: 24,\n xl: 32,\n '2xl': 48,\n };\n\n // Gap class mapping\n const gapClasses = {\n none: '',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n };\n\n // Align items configurations\n const alignItemsClasses = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n };\n\n const gapValue = gapValues[gap];\n\n // Calculate item width based on columns and gap\n // Note: In RN, we need to calculate this manually\n const getItemWidth = (span: number = 1) => {\n const totalGap = gapValue * (cols - 1);\n const availableWidth = SCREEN_WIDTH - 32; // Account for container padding\n const columnWidth = (availableWidth - totalGap) / cols;\n return columnWidth * span + gapValue * (span - 1);\n };\n\n // Clone children with calculated width\n const childrenWithWidth = React.Children.map(children, child => {\n if (React.isValidElement(child)) {\n const colSpan = (child.props as GridItemProps).colSpan || 1;\n return React.cloneElement(child as React.ReactElement, {\n style: {\n width: getItemWidth(colSpan),\n ...(child.props as { style?: object }).style,\n },\n });\n }\n return child;\n });\n\n return (\n <View\n className={cn(\n 'flex flex-row flex-wrap',\n gapClasses[gap],\n alignItemsClasses[alignItems],\n className\n )}\n >\n {childrenWithWidth}\n </View>\n );\n};\n\n/**\n * GridItem Component\n *\n * Individual grid item that can span multiple columns.\n */\nexport const GridItem: React.FC<GridItemProps & { style?: object }> = ({\n children,\n className,\n style,\n}) => {\n return (\n <View className={cn(className)} style={style}>\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport { Text, TextProps } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { textVariants } from '@sudobility/design';\n\nexport interface LabelProps extends TextProps {\n /** Label content */\n children: React.ReactNode;\n /** Whether the associated input is required */\n required?: boolean;\n /** Whether the label is disabled */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Label Component\n *\n * Text label for form inputs with proper styling.\n *\n * @example\n * ```tsx\n * <Label>Email Address</Label>\n * <Input placeholder=\"Enter your email\" />\n * ```\n *\n * @example\n * ```tsx\n * <Label required>Password</Label>\n * <Input secureTextEntry />\n * ```\n */\nexport const Label = React.forwardRef<Text, LabelProps>(\n ({ children, required, disabled, className, ...props }, ref) => {\n return (\n <Text\n ref={ref}\n className={cn(\n textVariants.label.default(),\n disabled && 'opacity-70',\n className\n )}\n accessibilityRole='text'\n {...props}\n >\n {children}\n {required && <Text className='text-red-500 ml-1'>*</Text>}\n </Text>\n );\n }\n);\n\nLabel.displayName = 'Label';\n","import * as React from 'react';\nimport { View, TextInput, Text, TextInputProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TextAreaProps extends Omit<TextInputProps, 'onChange'> {\n /** Current value */\n value: string;\n /** Callback when value changes */\n onChangeText: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Number of visible lines (used to calculate height) */\n numberOfLines?: number;\n /** Disabled state */\n disabled?: boolean;\n /** Read-only state */\n readOnly?: boolean;\n /** Show character count */\n showCount?: boolean;\n /** Maximum character count */\n maxLength?: number;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className for container */\n className?: string;\n /** Additional className for the input */\n inputClassName?: string;\n}\n\n/**\n * TextArea Component\n *\n * Multi-line text input with character counting and consistent styling.\n *\n * @example\n * ```tsx\n * <TextArea\n * value={message}\n * onChangeText={setMessage}\n * placeholder=\"Write your message...\"\n * numberOfLines={5}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <TextArea\n * value={bio}\n * onChangeText={setBio}\n * showCount\n * maxLength={500}\n * placeholder=\"Tell us about yourself...\"\n * />\n * ```\n */\nexport const TextArea: React.FC<TextAreaProps> = ({\n value,\n onChangeText,\n placeholder,\n numberOfLines = 4,\n disabled = false,\n readOnly = false,\n showCount = false,\n maxLength,\n size = 'md',\n className,\n inputClassName,\n ...textInputProps\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'p-2 text-sm',\n md: 'p-3 text-base',\n lg: 'p-4 text-lg',\n };\n\n const handleChangeText = (newValue: string) => {\n // Enforce maxLength if provided\n if (maxLength && newValue.length > maxLength) {\n return;\n }\n\n onChangeText(newValue);\n };\n\n const characterCount = value.length;\n const showCountInfo = showCount || maxLength !== undefined;\n\n return (\n <View className={cn('w-full', className)}>\n <TextInput\n value={value}\n onChangeText={handleChangeText}\n placeholder={placeholder}\n numberOfLines={numberOfLines}\n editable={!disabled && !readOnly}\n maxLength={maxLength}\n multiline\n textAlignVertical='top'\n className={cn(\n 'w-full rounded-lg border',\n 'bg-white dark:bg-gray-800',\n 'text-gray-900 dark:text-gray-100',\n 'placeholder:text-gray-400 dark:placeholder:text-gray-500',\n 'border-gray-300 dark:border-gray-600',\n sizeClasses[size],\n disabled && 'opacity-50',\n readOnly && 'bg-gray-50 dark:bg-gray-900',\n inputClassName\n )}\n placeholderTextColor='#9CA3AF'\n accessibilityRole='text'\n accessibilityState={{ disabled }}\n {...textInputProps}\n />\n\n {/* Character count */}\n {showCountInfo && (\n <View className='flex flex-row justify-end mt-1'>\n <Text\n className={cn(\n 'text-xs',\n maxLength && characterCount > maxLength * 0.9\n ? 'text-yellow-600 dark:text-yellow-400'\n : 'text-gray-500 dark:text-gray-400',\n maxLength &&\n characterCount >= maxLength &&\n 'text-red-600 dark:text-red-400'\n )}\n >\n {characterCount}\n {maxLength && ` / ${maxLength}`}\n </Text>\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Text, Pressable, PressableProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CheckboxProps extends Omit<PressableProps, 'onPress'> {\n /** Whether the checkbox is checked (controlled mode) */\n checked?: boolean;\n /** Default checked state (uncontrolled mode) */\n defaultChecked?: boolean;\n /** Change handler */\n onChange?: (checked: boolean) => void;\n /** Label text */\n label?: string;\n /** Description text below label */\n description?: string;\n /** Whether the checkbox is disabled */\n disabled?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'primary' | 'success' | 'warning' | 'error';\n /** Additional className for the container */\n className?: string;\n /** Whether the checkbox is required */\n required?: boolean;\n /** Indeterminate state */\n indeterminate?: boolean;\n /** Error state */\n error?: boolean;\n /** Error message to display */\n errorMessage?: string;\n}\n\n/**\n * Checkbox Component\n *\n * Custom styled checkbox with proper accessibility and visual feedback.\n * Supports both controlled and uncontrolled modes.\n *\n * @example\n * ```tsx\n * // Controlled\n * <Checkbox\n * checked={isEnabled}\n * onChange={setIsEnabled}\n * label=\"Enable notifications\"\n * />\n *\n * // Uncontrolled\n * <Checkbox\n * defaultChecked={true}\n * label=\"Remember me\"\n * />\n * ```\n */\nexport const Checkbox: React.FC<CheckboxProps> = ({\n checked: controlledChecked,\n defaultChecked = false,\n onChange,\n label,\n description,\n disabled = false,\n size = 'md',\n variant = 'primary',\n className,\n required = false,\n indeterminate = false,\n error = false,\n errorMessage,\n ...pressableProps\n}) => {\n // Support both controlled and uncontrolled modes\n const [uncontrolledChecked, setUncontrolledChecked] =\n useState(defaultChecked);\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : uncontrolledChecked;\n\n const sizeClasses = {\n sm: {\n box: 'w-4 h-4',\n check: 'w-2 h-2',\n text: 'text-sm',\n desc: 'text-xs',\n },\n md: {\n box: 'w-5 h-5',\n check: 'w-3 h-3',\n text: 'text-base',\n desc: 'text-sm',\n },\n lg: {\n box: 'w-6 h-6',\n check: 'w-4 h-4',\n text: 'text-lg',\n desc: 'text-base',\n },\n };\n\n const getVariantClasses = () => {\n if (error) {\n return checked\n ? 'bg-red-600 border-red-600'\n : 'border-red-600 dark:border-red-500';\n }\n\n const variantClasses = {\n primary: checked\n ? 'bg-blue-600 border-blue-600'\n : 'border-gray-300 dark:border-gray-600',\n success: checked\n ? 'bg-green-600 border-green-600'\n : 'border-gray-300 dark:border-gray-600',\n warning: checked\n ? 'bg-yellow-600 border-yellow-600'\n : 'border-gray-300 dark:border-gray-600',\n error: checked\n ? 'bg-red-600 border-red-600'\n : 'border-gray-300 dark:border-gray-600',\n };\n\n return variantClasses[variant];\n };\n\n const handlePress = () => {\n if (disabled) return;\n\n const newChecked = !checked;\n\n if (!isControlled) {\n setUncontrolledChecked(newChecked);\n }\n\n onChange?.(newChecked);\n };\n\n const config = sizeClasses[size];\n\n return (\n <View className={cn('flex flex-col', className)}>\n <Pressable\n onPress={handlePress}\n disabled={disabled}\n className={cn(\n 'flex flex-row items-start gap-2',\n disabled && 'opacity-50'\n )}\n accessibilityRole='checkbox'\n accessibilityState={{\n checked: indeterminate ? 'mixed' : checked,\n disabled,\n }}\n accessibilityLabel={label}\n {...pressableProps}\n >\n <View className='relative flex items-center justify-center'>\n <View\n className={cn(\n 'rounded border-2 flex items-center justify-center bg-white dark:bg-gray-900',\n config.box,\n getVariantClasses()\n )}\n >\n {indeterminate ? (\n <View\n className={cn('bg-white rounded-sm', config.check, 'h-0.5')}\n />\n ) : checked ? (\n <View className={cn('bg-white rounded-sm', config.check)} />\n ) : null}\n </View>\n </View>\n {(label || description) && (\n <View className='flex flex-col flex-1'>\n {label && (\n <Text\n className={cn('text-gray-900 dark:text-white', config.text)}\n >\n {label}\n {required && <Text className='text-red-500 ml-1'>*</Text>}\n </Text>\n )}\n {description && (\n <Text\n className={cn('text-gray-600 dark:text-gray-400', config.desc)}\n >\n {description}\n </Text>\n )}\n </View>\n )}\n </Pressable>\n {errorMessage && (\n <Text className='mt-1 text-sm text-red-600 dark:text-red-400'>\n {errorMessage}\n </Text>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Pressable, Animated, PressableProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SwitchProps extends Omit<PressableProps, 'onPress'> {\n /** Whether the switch is on (controlled mode) */\n checked?: boolean;\n /** Default checked state (uncontrolled mode) */\n defaultChecked?: boolean;\n /** Change handler */\n onCheckedChange?: (checked: boolean) => void;\n /** Whether the switch is disabled */\n disabled?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Switch Component\n *\n * Toggle switch for binary on/off states with smooth animation.\n * Supports both controlled and uncontrolled modes.\n *\n * @example\n * ```tsx\n * // Controlled\n * <Switch\n * checked={isEnabled}\n * onCheckedChange={setIsEnabled}\n * />\n *\n * // Uncontrolled\n * <Switch defaultChecked={true} />\n * ```\n */\nexport const Switch = React.forwardRef<View, SwitchProps>(\n (\n {\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n disabled = false,\n size = 'md',\n className,\n ...pressableProps\n },\n ref\n ) => {\n // Support both controlled and uncontrolled modes\n const [uncontrolledChecked, setUncontrolledChecked] =\n useState(defaultChecked);\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : uncontrolledChecked;\n\n // Animation value for thumb position\n const animatedValue = React.useRef(\n new Animated.Value(checked ? 1 : 0)\n ).current;\n\n React.useEffect(() => {\n Animated.timing(animatedValue, {\n toValue: checked ? 1 : 0,\n duration: 200,\n useNativeDriver: true,\n }).start();\n }, [checked, animatedValue]);\n\n // Size configurations\n const sizeConfig = {\n sm: {\n track: 'w-8 h-4',\n thumb: 'w-3 h-3',\n translateX: 16,\n },\n md: {\n track: 'w-11 h-6',\n thumb: 'w-5 h-5',\n translateX: 20,\n },\n lg: {\n track: 'w-14 h-8',\n thumb: 'w-7 h-7',\n translateX: 24,\n },\n };\n\n const config = sizeConfig[size];\n\n const handlePress = () => {\n if (disabled) return;\n\n const newChecked = !checked;\n\n if (!isControlled) {\n setUncontrolledChecked(newChecked);\n }\n\n onCheckedChange?.(newChecked);\n };\n\n const thumbTranslateX = animatedValue.interpolate({\n inputRange: [0, 1],\n outputRange: [0, config.translateX],\n });\n\n return (\n <Pressable\n ref={ref}\n onPress={handlePress}\n disabled={disabled}\n className={cn(\n 'rounded-full items-center justify-start flex-row',\n config.track,\n checked\n ? 'bg-blue-600 dark:bg-blue-500'\n : 'bg-gray-200 dark:bg-gray-700',\n disabled && 'opacity-50',\n className\n )}\n accessibilityRole='switch'\n accessibilityState={{ checked, disabled }}\n {...pressableProps}\n >\n <Animated.View\n className={cn('rounded-full bg-white shadow-lg', config.thumb)}\n style={{\n transform: [{ translateX: thumbTranslateX }],\n marginLeft: 2,\n }}\n />\n </Pressable>\n );\n }\n);\n\nSwitch.displayName = 'Switch';\n","import * as React from 'react';\nimport { View, Text, TextProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface HelperTextProps extends TextProps {\n /** Helper text content */\n children: React.ReactNode;\n /** Variant (affects color and icon) */\n variant?: 'default' | 'error' | 'success' | 'warning';\n /** Show icon indicator */\n showIcon?: boolean;\n /** Size */\n size?: 'sm' | 'base';\n /** Additional className */\n className?: string;\n}\n\n/**\n * HelperText Component\n *\n * Text component for form field descriptions, error messages, and hints.\n * Supports different variants with optional icon indicators.\n *\n * @example\n * ```tsx\n * <HelperText>\n * Enter your email address\n * </HelperText>\n * ```\n *\n * @example\n * ```tsx\n * <HelperText variant=\"error\" showIcon>\n * This field is required\n * </HelperText>\n * ```\n */\nexport const HelperText: React.FC<HelperTextProps> = ({\n children,\n variant = 'default',\n showIcon = false,\n size = 'sm',\n className,\n ...textProps\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'text-sm',\n base: 'text-base',\n };\n\n const iconSize = {\n sm: 'w-4 h-4',\n base: 'w-5 h-5',\n };\n\n // Variant configurations\n const variantConfig = {\n default: {\n text: 'text-gray-600 dark:text-gray-400',\n icon: 'ℹ',\n },\n error: {\n text: 'text-red-600 dark:text-red-400',\n icon: '⚠',\n },\n success: {\n text: 'text-green-600 dark:text-green-400',\n icon: '✓',\n },\n warning: {\n text: 'text-yellow-600 dark:text-yellow-400',\n icon: '⚠',\n },\n };\n\n const config = variantConfig[variant];\n\n return (\n <View className={cn('flex flex-row items-start gap-1.5', className)}>\n {showIcon && (\n <Text className={cn(iconSize[size], config.text, 'mt-0.5')}>\n {config.icon}\n </Text>\n )}\n <Text className={cn(sizeClasses[size], config.text)} {...textProps}>\n {children}\n </Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Modal,\n FlatList,\n SafeAreaView,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SelectOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n /** Currently selected value */\n value?: string;\n /** Callback when value changes */\n onValueChange?: (value: string) => void;\n /** Options to display */\n options: SelectOption[];\n /** Placeholder text when no value selected */\n placeholder?: string;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Additional className for the trigger */\n className?: string;\n /** Title for the modal */\n title?: string;\n}\n\n/**\n * Select Component\n *\n * Dropdown select component using a modal picker for React Native.\n * Provides a native-feeling selection experience.\n *\n * @example\n * ```tsx\n * <Select\n * value={selectedValue}\n * onValueChange={setSelectedValue}\n * options={[\n * { label: 'Option 1', value: '1' },\n * { label: 'Option 2', value: '2' },\n * { label: 'Option 3', value: '3' },\n * ]}\n * placeholder=\"Select an option...\"\n * />\n * ```\n */\nexport const Select: React.FC<SelectProps> = ({\n value,\n onValueChange,\n options,\n placeholder = 'Select...',\n disabled = false,\n className,\n title = 'Select Option',\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n\n const selectedOption = options.find(opt => opt.value === value);\n\n const handleSelect = useCallback(\n (optionValue: string) => {\n onValueChange?.(optionValue);\n setIsOpen(false);\n },\n [onValueChange]\n );\n\n const renderOption = ({ item }: { item: SelectOption; index: number }) => (\n <Pressable\n onPress={() => !item.disabled && handleSelect(item.value)}\n disabled={item.disabled}\n className={cn(\n 'px-4 py-3 border-b border-gray-200 dark:border-gray-700',\n item.value === value && 'bg-blue-50 dark:bg-blue-900/30',\n item.disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityState={{\n selected: item.value === value,\n disabled: item.disabled,\n }}\n >\n <View className='flex flex-row items-center justify-between'>\n <Text\n className={cn(\n 'text-base',\n item.value === value\n ? 'text-blue-600 dark:text-blue-400 font-medium'\n : 'text-gray-900 dark:text-gray-100'\n )}\n >\n {item.label}\n </Text>\n {item.value === value && (\n <Text className='text-blue-600 dark:text-blue-400'>✓</Text>\n )}\n </View>\n </Pressable>\n );\n\n return (\n <>\n {/* Trigger */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'flex flex-row items-center justify-between h-11 px-3 py-2 rounded-md border',\n 'border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n disabled && 'opacity-50',\n className\n )}\n accessibilityRole='combobox'\n accessibilityState={{ disabled, expanded: isOpen }}\n >\n <Text\n className={cn(\n 'text-base flex-1',\n selectedOption\n ? 'text-gray-900 dark:text-gray-100'\n : 'text-gray-400 dark:text-gray-500'\n )}\n numberOfLines={1}\n >\n {selectedOption?.label || placeholder}\n </Text>\n <Text className='text-gray-400 dark:text-gray-500 ml-2'>▼</Text>\n </Pressable>\n\n {/* Modal Picker */}\n <Modal\n visible={isOpen}\n animationType='slide'\n transparent\n onRequestClose={() => setIsOpen(false)}\n >\n <View className='flex-1 justify-end bg-black/50'>\n <SafeAreaView className='bg-white dark:bg-gray-800 rounded-t-xl'>\n {/* Header */}\n <View className='flex flex-row items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700'>\n <Pressable onPress={() => setIsOpen(false)}>\n <Text className='text-blue-600 dark:text-blue-400 text-base'>\n Cancel\n </Text>\n </Pressable>\n <Text className='text-base font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n <View style={{ width: 60 }} />\n </View>\n\n {/* Options */}\n <FlatList\n data={options}\n renderItem={renderOption}\n keyExtractor={(item: SelectOption) => item.value}\n style={{ maxHeight: 300 }}\n />\n </SafeAreaView>\n </View>\n </Modal>\n </>\n );\n};\n\n/**\n * SelectTrigger - For compound component pattern\n */\nexport const SelectTrigger = Select;\n\n/**\n * SelectValue - Display component for the selected value\n */\nexport const SelectValue: React.FC<{ placeholder?: string }> = ({\n placeholder = 'Select...',\n}) => <Text className='text-gray-400 dark:text-gray-500'>{placeholder}</Text>;\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n TextInput,\n Pressable,\n Text,\n ActivityIndicator,\n TextInputProps,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SearchInputProps extends Omit<TextInputProps, 'onChange'> {\n /** Current search query */\n value?: string;\n /** Callback when query changes */\n onChangeText?: (query: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Auto-focus on mount */\n autoFocus?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Show search icon */\n showIcon?: boolean;\n /** Show clear button when has value */\n showClear?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * SearchInput Component\n *\n * Search input field with icon, clear button, and loading state.\n *\n * @example\n * ```tsx\n * <SearchInput\n * placeholder=\"Search emails...\"\n * onChangeText={query => setSearchQuery(query)}\n * />\n * ```\n */\nexport const SearchInput: React.FC<SearchInputProps> = ({\n value: controlledValue,\n onChangeText,\n placeholder = 'Search...',\n autoFocus = false,\n disabled = false,\n size = 'md',\n showIcon = true,\n showClear = true,\n loading = false,\n className,\n ...textInputProps\n}) => {\n const [internalValue, setInternalValue] = useState('');\n\n // Use controlled value if provided, otherwise use internal state\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n const isControlled = controlledValue !== undefined;\n\n // Size configurations\n const sizeClasses = {\n sm: {\n input: 'py-1.5 text-sm',\n icon: 'text-base',\n paddingLeft: showIcon ? 'pl-8' : 'pl-3',\n paddingRight: 'pr-8',\n },\n md: {\n input: 'py-2 text-base',\n icon: 'text-lg',\n paddingLeft: showIcon ? 'pl-10' : 'pl-3',\n paddingRight: 'pr-10',\n },\n lg: {\n input: 'py-3 text-lg',\n icon: 'text-xl',\n paddingLeft: showIcon ? 'pl-12' : 'pl-4',\n paddingRight: 'pr-12',\n },\n };\n\n const sizeConfig = sizeClasses[size];\n\n const handleChange = useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChangeText?.(newValue);\n },\n [onChangeText, isControlled]\n );\n\n const handleClear = useCallback(() => {\n if (!isControlled) {\n setInternalValue('');\n }\n onChangeText?.('');\n }, [onChangeText, isControlled]);\n\n return (\n <View className={cn('relative w-full', className)}>\n {/* Search Icon */}\n {showIcon && (\n <View className='absolute inset-y-0 left-0 flex items-center justify-center pl-3 z-10'>\n <Text\n className={cn(sizeConfig.icon, 'text-gray-400 dark:text-gray-500')}\n >\n 🔍\n </Text>\n </View>\n )}\n\n {/* Input */}\n <TextInput\n value={value}\n onChangeText={handleChange}\n placeholder={placeholder}\n autoFocus={autoFocus}\n editable={!disabled && !loading}\n className={cn(\n 'w-full rounded-lg border',\n 'bg-white dark:bg-gray-800',\n 'text-gray-900 dark:text-gray-100',\n 'border-gray-300 dark:border-gray-600',\n sizeConfig.input,\n sizeConfig.paddingLeft,\n sizeConfig.paddingRight,\n disabled && 'opacity-50',\n loading && 'opacity-60'\n )}\n placeholderTextColor='#9CA3AF'\n accessibilityRole='search'\n accessibilityState={{ disabled }}\n {...textInputProps}\n />\n\n {/* Clear Button or Loading Spinner */}\n {showClear && value && !loading && (\n <Pressable\n onPress={handleClear}\n disabled={disabled}\n className='absolute inset-y-0 right-0 flex items-center justify-center pr-3'\n accessibilityRole='button'\n accessibilityLabel='Clear search'\n >\n <Text className={cn(sizeConfig.icon, 'text-gray-400')}>✕</Text>\n </Pressable>\n )}\n\n {/* Loading Spinner */}\n {loading && (\n <View className='absolute inset-y-0 right-0 flex items-center justify-center pr-3'>\n <ActivityIndicator size='small' color='#9CA3AF' />\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, TextInput, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface NumberInputProps {\n /** Current value */\n value: number;\n /** Callback when value changes */\n onChange: (value: number) => void;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Step increment */\n step?: number;\n /** Disabled state */\n disabled?: boolean;\n /** Show stepper buttons */\n showSteppers?: boolean;\n /** Stepper button position */\n stepperPosition?: 'right' | 'sides';\n /** Placeholder text */\n placeholder?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * NumberInput Component\n *\n * Number input field with optional stepper buttons for increment/decrement.\n * Supports min/max bounds, step values, and different layouts.\n *\n * @example\n * ```tsx\n * <NumberInput\n * value={quantity}\n * onChange={setQuantity}\n * min={1}\n * max={100}\n * showSteppers\n * />\n * ```\n *\n * @example\n * ```tsx\n * <NumberInput\n * value={price}\n * onChange={setPrice}\n * step={0.01}\n * min={0}\n * showSteppers\n * stepperPosition=\"sides\"\n * />\n * ```\n */\nexport const NumberInput: React.FC<NumberInputProps> = ({\n value,\n onChange,\n min,\n max,\n step = 1,\n disabled = false,\n showSteppers = false,\n stepperPosition = 'right',\n placeholder,\n size = 'md',\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: {\n input: 'py-1.5 px-3 text-sm',\n button: 'w-8 h-8',\n icon: 'text-sm',\n },\n md: {\n input: 'py-2 px-3 text-base',\n button: 'w-10 h-10',\n icon: 'text-base',\n },\n lg: {\n input: 'py-3 px-4 text-lg',\n button: 'w-12 h-12',\n icon: 'text-lg',\n },\n };\n\n const sizeConfig = sizeClasses[size];\n\n const clampValue = (val: number): number => {\n let clamped = val;\n if (min !== undefined && clamped < min) clamped = min;\n if (max !== undefined && clamped > max) clamped = max;\n return clamped;\n };\n\n const handleTextChange = (text: string) => {\n const newValue = parseFloat(text);\n if (!isNaN(newValue)) {\n const clampedValue = clampValue(newValue);\n onChange(clampedValue);\n } else if (text === '') {\n onChange(min ?? 0);\n }\n };\n\n const increment = () => {\n if (disabled) return;\n const newValue = clampValue(value + step);\n onChange(newValue);\n };\n\n const decrement = () => {\n if (disabled) return;\n const newValue = clampValue(value - step);\n onChange(newValue);\n };\n\n const canIncrement = max === undefined || value < max;\n const canDecrement = min === undefined || value > min;\n\n const StepperButton = ({\n onPress,\n icon,\n buttonDisabled,\n ariaLabel,\n }: {\n onPress: () => void;\n icon: string;\n buttonDisabled: boolean;\n ariaLabel: string;\n }) => (\n <Pressable\n onPress={onPress}\n disabled={disabled || buttonDisabled}\n accessibilityRole='button'\n accessibilityLabel={ariaLabel}\n className={cn(\n 'items-center justify-center',\n 'border border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n sizeConfig.button,\n (disabled || buttonDisabled) && 'opacity-50'\n )}\n >\n <Text className={cn('text-gray-700 dark:text-gray-300', sizeConfig.icon)}>\n {icon}\n </Text>\n </Pressable>\n );\n\n // Sides layout: - [input] +\n if (showSteppers && stepperPosition === 'sides') {\n return (\n <View className={cn('flex flex-row items-stretch', className)}>\n <StepperButton\n onPress={decrement}\n buttonDisabled={!canDecrement}\n icon='−'\n ariaLabel='Decrement'\n />\n <TextInput\n value={String(value)}\n onChangeText={handleTextChange}\n keyboardType='numeric'\n editable={!disabled}\n placeholder={placeholder}\n className={cn(\n 'border-x-0 text-center flex-1',\n 'border-y border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'text-gray-900 dark:text-gray-100',\n sizeConfig.input,\n disabled && 'opacity-50'\n )}\n accessibilityLabel='Number input'\n />\n <StepperButton\n onPress={increment}\n buttonDisabled={!canIncrement}\n icon='+'\n ariaLabel='Increment'\n />\n </View>\n );\n }\n\n // Right layout: [input] [+/-]\n if (showSteppers && stepperPosition === 'right') {\n return (\n <View className={cn('flex flex-row items-stretch gap-2', className)}>\n <TextInput\n value={String(value)}\n onChangeText={handleTextChange}\n keyboardType='numeric'\n editable={!disabled}\n placeholder={placeholder}\n className={cn(\n 'flex-1 rounded-lg border',\n 'border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'text-gray-900 dark:text-gray-100',\n sizeConfig.input,\n disabled && 'opacity-50'\n )}\n accessibilityLabel='Number input'\n />\n <View className='flex flex-col gap-0.5'>\n <Pressable\n onPress={increment}\n disabled={disabled || !canIncrement}\n accessibilityRole='button'\n accessibilityLabel='Increment'\n className={cn(\n 'flex-1 items-center justify-center',\n 'rounded border border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'px-2',\n (disabled || !canIncrement) && 'opacity-50'\n )}\n >\n <Text className='text-gray-700 dark:text-gray-300 text-xs'>+</Text>\n </Pressable>\n <Pressable\n onPress={decrement}\n disabled={disabled || !canDecrement}\n accessibilityRole='button'\n accessibilityLabel='Decrement'\n className={cn(\n 'flex-1 items-center justify-center',\n 'rounded border border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'px-2',\n (disabled || !canDecrement) && 'opacity-50'\n )}\n >\n <Text className='text-gray-700 dark:text-gray-300 text-xs'>−</Text>\n </Pressable>\n </View>\n </View>\n );\n }\n\n // No steppers: just the input\n return (\n <TextInput\n value={String(value)}\n onChangeText={handleTextChange}\n keyboardType='numeric'\n editable={!disabled}\n placeholder={placeholder}\n className={cn(\n 'rounded-lg border',\n 'border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'text-gray-900 dark:text-gray-100',\n sizeConfig.input,\n disabled && 'opacity-50',\n className\n )}\n accessibilityLabel='Number input'\n />\n );\n};\n","import * as React from 'react';\nimport { Text as RNText } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TextProps {\n /** Text content */\n children: React.ReactNode;\n /** Size variant */\n size?: 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';\n /** Weight variant */\n weight?: 'light' | 'normal' | 'medium' | 'semibold' | 'bold';\n /** Color variant */\n color?: 'default' | 'muted' | 'primary' | 'success' | 'warning' | 'danger';\n /** Text alignment */\n align?: 'left' | 'center' | 'right';\n /** Text transform */\n transform?: 'none' | 'uppercase' | 'lowercase' | 'capitalize';\n /** Number of lines (for truncation) */\n numberOfLines?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Text Component\n *\n * Versatile text component with consistent styling.\n * Supports various sizes, weights, colors, and formatting options.\n *\n * @example\n * ```tsx\n * <Text size=\"lg\" weight=\"semibold\">\n * Large semibold text\n * </Text>\n * ```\n *\n * @example\n * ```tsx\n * <Text color=\"muted\" size=\"sm\">\n * Muted small text\n * </Text>\n * ```\n */\nexport const Text: React.FC<TextProps> = ({\n children,\n size = 'base',\n weight = 'normal',\n color = 'default',\n align,\n transform = 'none',\n numberOfLines,\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n xs: 'text-xs',\n sm: 'text-sm',\n base: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n '2xl': 'text-2xl',\n '3xl': 'text-3xl',\n '4xl': 'text-4xl',\n };\n\n // Weight configurations\n const weightClasses = {\n light: 'font-light',\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n };\n\n // Color configurations\n const colorClasses = {\n default: 'text-gray-900 dark:text-gray-100',\n muted: 'text-gray-600 dark:text-gray-400',\n primary: 'text-blue-600 dark:text-blue-400',\n success: 'text-green-600 dark:text-green-400',\n warning: 'text-yellow-600 dark:text-yellow-400',\n danger: 'text-red-600 dark:text-red-400',\n };\n\n // Alignment configurations\n const alignClasses = align\n ? {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n }[align]\n : '';\n\n // Transform configurations\n const transformClasses = {\n none: '',\n uppercase: 'uppercase',\n lowercase: 'lowercase',\n capitalize: 'capitalize',\n };\n\n return (\n <RNText\n className={cn(\n sizeClasses[size],\n weightClasses[weight],\n colorClasses[color],\n alignClasses,\n transformClasses[transform],\n className\n )}\n numberOfLines={numberOfLines}\n >\n {children}\n </RNText>\n );\n};\n","import * as React from 'react';\nimport { Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface HeadingProps {\n /** Heading content */\n children: React.ReactNode;\n /** Heading level (for semantic/accessibility purposes) */\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Size (independent of level for visual flexibility) */\n size?: '4xl' | '3xl' | '2xl' | 'xl' | 'lg' | 'base';\n /** Weight variant */\n weight?: 'normal' | 'medium' | 'semibold' | 'bold' | 'extrabold';\n /** Color variant */\n color?: 'default' | 'muted' | 'primary';\n /** Text alignment */\n align?: 'left' | 'center' | 'right';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Heading Component\n *\n * Semantic heading component with flexible sizing and styling.\n * Level is used for accessibility, size controls visual appearance.\n *\n * @example\n * ```tsx\n * <Heading level={1} size=\"4xl\">\n * Page Title\n * </Heading>\n * ```\n *\n * @example\n * ```tsx\n * <Heading level={2} size=\"xl\" color=\"primary\">\n * Section Title\n * </Heading>\n * ```\n */\nexport const Heading: React.FC<HeadingProps> = ({\n children,\n level = 2,\n size,\n weight = 'bold',\n color = 'default',\n align,\n className,\n}) => {\n // Default sizes based on level if not explicitly provided\n const defaultSizes = {\n 1: '4xl',\n 2: '3xl',\n 3: '2xl',\n 4: 'xl',\n 5: 'lg',\n 6: 'base',\n } as const;\n\n const actualSize = size || defaultSizes[level];\n\n // Size configurations\n const sizeClasses = {\n '4xl': 'text-4xl',\n '3xl': 'text-3xl',\n '2xl': 'text-2xl',\n xl: 'text-xl',\n lg: 'text-lg',\n base: 'text-base',\n };\n\n // Weight configurations\n const weightClasses = {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n extrabold: 'font-extrabold',\n };\n\n // Color configurations\n const colorClasses = {\n default: 'text-gray-900 dark:text-gray-100',\n muted: 'text-gray-700 dark:text-gray-300',\n primary: 'text-blue-600 dark:text-blue-400',\n };\n\n // Alignment configurations\n const alignClasses = align\n ? {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n }[align]\n : '';\n\n return (\n <Text\n className={cn(\n sizeClasses[actualSize],\n weightClasses[weight],\n colorClasses[color],\n alignClasses,\n className\n )}\n accessibilityRole='header'\n >\n {children}\n </Text>\n );\n};\n","import * as React from 'react';\nimport { Text, View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CodeProps {\n /** Code content */\n children: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Code Component\n *\n * Displays inline code snippets with monospace font and consistent styling.\n *\n * @example\n * ```tsx\n * <Text>Use the <Code>useState</Code> hook</Text>\n * ```\n *\n * @example\n * ```tsx\n * <Code variant=\"primary\" size=\"lg\">\n * npm install\n * </Code>\n * ```\n */\nexport const Code: React.FC<CodeProps> = ({\n children,\n size = 'md',\n variant = 'default',\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'text-xs px-1 py-0.5',\n md: 'text-sm px-1.5 py-0.5',\n lg: 'text-base px-2 py-1',\n };\n\n // Variant configurations - background\n const variantBgClasses = {\n default: 'bg-gray-100 dark:bg-gray-800',\n primary: 'bg-blue-50 dark:bg-blue-900/30',\n success: 'bg-green-50 dark:bg-green-900/30',\n warning: 'bg-yellow-50 dark:bg-yellow-900/30',\n danger: 'bg-red-50 dark:bg-red-900/30',\n };\n\n // Variant configurations - text\n const variantTextClasses = {\n default: 'text-gray-900 dark:text-gray-100',\n primary: 'text-blue-700 dark:text-blue-300',\n success: 'text-green-700 dark:text-green-300',\n warning: 'text-yellow-700 dark:text-yellow-300',\n danger: 'text-red-700 dark:text-red-300',\n };\n\n return (\n <View\n className={cn(\n 'rounded',\n variantBgClasses[variant],\n sizeClasses[size],\n className\n )}\n >\n <Text\n className={cn('font-mono font-medium', variantTextClasses[variant])}\n style={{ fontFamily: 'monospace' }}\n >\n {children}\n </Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TruncatedTextProps {\n /** Text content to truncate */\n children: string;\n /** Maximum length before truncation */\n maxLength?: number;\n /** Position of truncation */\n position?: 'end' | 'middle' | 'start';\n /** Custom ellipsis character */\n ellipsis?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TruncatedText Component\n *\n * Intelligently truncates text with ellipsis at various positions.\n * Useful for displaying long text like addresses, IDs, or descriptions.\n *\n * @example\n * ```tsx\n * <TruncatedText maxLength={50}>\n * This is a very long text that will be truncated...\n * </TruncatedText>\n * ```\n *\n * @example\n * ```tsx\n * <TruncatedText\n * maxLength={20}\n * position=\"middle\"\n * >\n * 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb\n * </TruncatedText>\n * ```\n */\nexport const TruncatedText: React.FC<TruncatedTextProps> = ({\n children,\n maxLength = 50,\n position = 'end',\n ellipsis = '...',\n className,\n}) => {\n const text = children || '';\n\n // No truncation needed\n if (text.length <= maxLength) {\n return <Text className={className}>{text}</Text>;\n }\n\n // Calculate truncated text based on position\n const getTruncatedText = (): string => {\n const ellipsisLength = ellipsis.length;\n const availableLength = maxLength - ellipsisLength;\n\n switch (position) {\n case 'start':\n return ellipsis + text.slice(text.length - availableLength);\n\n case 'middle': {\n const halfLength = Math.floor(availableLength / 2);\n const start = text.slice(0, halfLength);\n const end = text.slice(text.length - (availableLength - halfLength));\n return start + ellipsis + end;\n }\n\n case 'end':\n default:\n return text.slice(0, availableLength) + ellipsis;\n }\n };\n\n const truncatedText = getTruncatedText();\n\n return <Text className={cn(className)}>{truncatedText}</Text>;\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface BadgeProps {\n /** Badge content */\n children?: React.ReactNode;\n /** Color variant */\n variant?:\n | 'default'\n | 'primary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'info'\n | 'purple';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Icon to display */\n icon?: React.ReactNode;\n /** Show dot indicator */\n dot?: boolean;\n /** Render as pill (rounded-full) */\n pill?: boolean;\n /** Render as outline style */\n outline?: boolean;\n /** Press handler */\n onPress?: () => void;\n /** Dismissible badge with close button */\n dismissible?: boolean;\n /** Dismiss handler */\n onDismiss?: () => void;\n /** Count to display */\n count?: number;\n /** Max count before showing \"+\" */\n maxCount?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Badge Component\n *\n * Small status or label component for displaying metadata, status, or categories.\n * Commonly used for tags, statuses, counts, and labels.\n *\n * @example\n * ```tsx\n * <Badge variant=\"success\">Active</Badge>\n * <Badge variant=\"primary\" size=\"sm\">New</Badge>\n * <Badge variant=\"warning\" dot>Pending</Badge>\n * ```\n */\nexport const Badge: React.FC<BadgeProps> = ({\n children,\n variant = 'default',\n size = 'sm',\n icon,\n dot = false,\n pill = false,\n outline = false,\n onPress,\n dismissible = false,\n onDismiss,\n count,\n maxCount,\n className,\n}) => {\n // Color variant configurations for filled style\n const variantClasses = {\n default: 'bg-gray-100 dark:bg-gray-700',\n primary: 'bg-blue-100 dark:bg-blue-900/30',\n success: 'bg-green-100 dark:bg-green-900/30',\n warning: 'bg-yellow-100 dark:bg-yellow-900/30',\n danger: 'bg-red-100 dark:bg-red-900/30',\n info: 'bg-blue-100 dark:bg-blue-900/30',\n purple: 'bg-purple-100 dark:bg-purple-900/30',\n };\n\n const variantTextClasses = {\n default: 'text-gray-800 dark:text-gray-300',\n primary: 'text-blue-800 dark:text-blue-400',\n success: 'text-green-800 dark:text-green-400',\n warning: 'text-yellow-800 dark:text-yellow-400',\n danger: 'text-red-800 dark:text-red-400',\n info: 'text-blue-800 dark:text-blue-400',\n purple: 'text-purple-800 dark:text-purple-400',\n };\n\n // Color variant configurations for outline style\n const outlineClasses = {\n default: 'border border-gray-300 dark:border-gray-600',\n primary: 'border border-blue-600 dark:border-blue-400',\n success: 'border border-green-600 dark:border-green-400',\n warning: 'border border-yellow-600 dark:border-yellow-400',\n danger: 'border border-red-600 dark:border-red-400',\n info: 'border border-blue-600 dark:border-blue-400',\n purple: 'border border-purple-600 dark:border-purple-400',\n };\n\n const outlineTextClasses = {\n default: 'text-gray-700 dark:text-gray-300',\n primary: 'text-blue-600 dark:text-blue-400',\n success: 'text-green-600 dark:text-green-400',\n warning: 'text-yellow-600 dark:text-yellow-400',\n danger: 'text-red-600 dark:text-red-400',\n info: 'text-blue-600 dark:text-blue-400',\n purple: 'text-purple-600 dark:text-purple-400',\n };\n\n // Size configurations\n const sizeClasses = {\n sm: 'px-2 py-0.5',\n md: 'px-2.5 py-1',\n lg: 'px-3 py-1.5',\n };\n\n const textSizeClasses = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n };\n\n // Dot color configurations\n const dotColorClasses = {\n default: 'bg-gray-600 dark:bg-gray-400',\n primary: 'bg-blue-600 dark:bg-blue-400',\n success: 'bg-green-600 dark:bg-green-400',\n warning: 'bg-yellow-600 dark:bg-yellow-400',\n danger: 'bg-red-600 dark:bg-red-400',\n info: 'bg-blue-600 dark:bg-blue-400',\n purple: 'bg-purple-600 dark:bg-purple-400',\n };\n\n // Format count display\n const displayCount =\n count !== undefined\n ? maxCount !== undefined && count > maxCount\n ? `${maxCount}+`\n : count.toString()\n : null;\n\n const containerClasses = cn(\n 'flex flex-row items-center',\n outline ? outlineClasses[variant] : variantClasses[variant],\n sizeClasses[size],\n pill ? 'rounded-full' : 'rounded',\n className\n );\n\n const textClasses = cn(\n textSizeClasses[size],\n 'font-medium',\n outline ? outlineTextClasses[variant] : variantTextClasses[variant]\n );\n\n const content = (\n <>\n {dot && (\n <View\n className={cn(\n 'w-2 h-2 rounded-full mr-1.5',\n dotColorClasses[variant]\n )}\n />\n )}\n {icon && <View className='mr-1'>{icon}</View>}\n {children && <Text className={textClasses}>{children}</Text>}\n {displayCount && (\n <Text className={cn(textClasses, 'ml-1')}>{displayCount}</Text>\n )}\n {dismissible && onDismiss && (\n <Pressable\n onPress={onDismiss}\n className='ml-1 p-0.5'\n accessibilityRole='button'\n accessibilityLabel='Dismiss'\n >\n <Text className={textClasses}>×</Text>\n </Pressable>\n )}\n </>\n );\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n className={containerClasses}\n accessibilityRole='button'\n >\n {content}\n </Pressable>\n );\n }\n\n return <View className={containerClasses}>{content}</View>;\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Text, Image, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface AvatarProps {\n /** Image source URL */\n src?: string;\n /** Alt text for image */\n alt?: string;\n /** Fallback text (initials) to display when no image */\n fallback?: string;\n /** Name to generate initials from */\n name?: string;\n /** Size variant */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** Show status indicator */\n status?: 'online' | 'offline' | 'away' | 'busy';\n /** Additional className */\n className?: string;\n /** Click handler */\n onPress?: () => void;\n}\n\n/**\n * Avatar Component\n *\n * Avatar component for displaying user images or initials.\n *\n * @example\n * ```tsx\n * // User image\n * <Avatar src=\"https://example.com/avatar.jpg\" alt=\"John Doe\" fallback=\"JD\" />\n *\n * // Generate initials from name\n * <Avatar name=\"John Doe\" />\n *\n * // With status indicator\n * <Avatar src=\"/avatar.jpg\" status=\"online\" />\n * ```\n */\nexport const Avatar: React.FC<AvatarProps> = ({\n src,\n alt = 'Avatar',\n fallback,\n name,\n size = 'md',\n status,\n className,\n onPress,\n}) => {\n const [imageError, setImageError] = useState(false);\n\n // Size configurations\n const sizeClasses = {\n xs: 'w-6 h-6',\n sm: 'w-8 h-8',\n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n xl: 'w-16 h-16',\n };\n\n const textSizeClasses = {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-lg',\n };\n\n const statusSizeClasses = {\n xs: 'w-1.5 h-1.5',\n sm: 'w-2 h-2',\n md: 'w-2.5 h-2.5',\n lg: 'w-3 h-3',\n xl: 'w-4 h-4',\n };\n\n // Status indicator configurations\n const statusClasses = {\n online: 'bg-green-500',\n offline: 'bg-gray-400',\n away: 'bg-yellow-500',\n busy: 'bg-red-500',\n };\n\n // Generate initials from name\n const generateInitials = (name: string): string => {\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 1) {\n return parts[0].charAt(0).toUpperCase();\n }\n return (\n parts[0].charAt(0).toUpperCase() +\n parts[parts.length - 1].charAt(0).toUpperCase()\n );\n };\n\n // Determine what to display\n const displayFallback = fallback || (name ? generateInitials(name) : '');\n const showImage = src && !imageError;\n\n const handleImageError = () => {\n setImageError(true);\n };\n\n const content = (\n <View className='relative'>\n <View\n className={cn(\n 'flex items-center justify-center overflow-hidden rounded-full',\n sizeClasses[size],\n !showImage && 'bg-gray-300 dark:bg-gray-600',\n className\n )}\n >\n {showImage ? (\n <Image\n source={{ uri: src }}\n className='w-full h-full'\n accessibilityLabel={alt}\n onError={handleImageError}\n />\n ) : (\n <Text\n className={cn(\n 'font-semibold text-gray-700 dark:text-gray-200',\n textSizeClasses[size]\n )}\n >\n {displayFallback}\n </Text>\n )}\n </View>\n {status && (\n <View\n className={cn(\n 'absolute bottom-0 right-0 rounded-full border-2 border-white dark:border-gray-800',\n statusClasses[status],\n statusSizeClasses[size]\n )}\n accessibilityLabel={status}\n />\n )}\n </View>\n );\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n accessibilityRole='button'\n accessibilityLabel={alt}\n >\n {content}\n </Pressable>\n );\n }\n\n return content;\n};\n\nexport interface AvatarGroupProps {\n /** Avatar components */\n children: React.ReactNode;\n /** Maximum number of avatars to show */\n max?: number;\n /** Size for all avatars */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** Additional className */\n className?: string;\n}\n\n/**\n * AvatarGroup - Display multiple avatars in a stack\n */\nexport const AvatarGroup: React.FC<AvatarGroupProps> = ({\n children,\n max = 5,\n size = 'md',\n className,\n}) => {\n const childArray = React.Children.toArray(children);\n const excess = childArray.length - max;\n const visibleChildren = childArray.slice(0, max);\n\n // Overlap amounts based on size\n const overlapClasses = {\n xs: '-ml-2',\n sm: '-ml-2',\n md: '-ml-3',\n lg: '-ml-4',\n xl: '-ml-5',\n };\n\n return (\n <View className={cn('flex flex-row items-center', className)}>\n {visibleChildren.map((child, index) => (\n <View\n key={index}\n className={cn(index > 0 && overlapClasses[size])}\n style={{ zIndex: visibleChildren.length - index }}\n >\n {React.isValidElement(child)\n ? React.cloneElement(child as React.ReactElement<AvatarProps>, {\n size,\n })\n : child}\n </View>\n ))}\n {excess > 0 && (\n <View\n className={cn(\n overlapClasses[size],\n 'flex items-center justify-center rounded-full bg-gray-200 dark:bg-gray-600',\n {\n xs: 'w-6 h-6',\n sm: 'w-8 h-8',\n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n xl: 'w-16 h-16',\n }[size]\n )}\n >\n <Text\n className={cn(\n 'font-medium text-gray-700 dark:text-gray-200',\n {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-lg',\n }[size]\n )}\n >\n +{excess}\n </Text>\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { View, Animated, ViewProps, DimensionValue } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SkeletonProps extends ViewProps {\n /** Shape/type of skeleton */\n variant?: 'text' | 'circle' | 'rectangle' | 'avatar' | 'button';\n /** Width of the skeleton */\n width?: DimensionValue;\n /** Height of the skeleton */\n height?: DimensionValue;\n /** Number of skeleton elements to render */\n count?: number;\n /** Number of lines (for text variant) */\n lines?: number;\n /** Enable/disable animation */\n animate?: boolean;\n /** Gap between lines */\n gap?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Skeleton Component\n *\n * A loading placeholder component that displays a pulsing skeleton.\n *\n * @example\n * ```tsx\n * // Loading text\n * <Skeleton variant=\"text\" width={200} />\n * <Skeleton variant=\"text\" count={3} />\n *\n * // Loading avatar\n * <Skeleton variant=\"circle\" width={40} height={40} />\n *\n * // Loading button\n * <Skeleton variant=\"button\" width={120} />\n * ```\n */\nexport const Skeleton: React.FC<SkeletonProps> = ({\n variant = 'text',\n width,\n height,\n count,\n lines = 1,\n animate = true,\n gap = 'md',\n className,\n ...viewProps\n}) => {\n const animatedValue = useRef(new Animated.Value(0.3)).current;\n\n useEffect(() => {\n if (animate) {\n Animated.loop(\n Animated.sequence([\n Animated.timing(animatedValue, {\n toValue: 1,\n duration: 750,\n useNativeDriver: true,\n }),\n Animated.timing(animatedValue, {\n toValue: 0.3,\n duration: 750,\n useNativeDriver: true,\n }),\n ])\n ).start();\n }\n }, [animate, animatedValue]);\n\n // Variant-specific styles\n const variantClasses = {\n text: 'h-4 rounded',\n circle: 'rounded-full',\n rectangle: 'rounded-lg',\n avatar: 'w-10 h-10 rounded-full',\n button: 'h-10 rounded-lg',\n };\n\n // Gap between lines\n const gapClasses = {\n sm: 'gap-1',\n md: 'gap-2',\n lg: 'gap-3',\n };\n\n // Determine number of elements to render\n const elementCount = count ?? lines;\n\n // Single skeleton element\n const renderSkeleton = (key?: number) => {\n const style: Record<string, DimensionValue | undefined> = {};\n\n if (width !== undefined) {\n style.width = width;\n }\n\n if (height !== undefined) {\n style.height = height;\n }\n\n return (\n <Animated.View\n key={key}\n className={cn(\n 'bg-gray-200 dark:bg-gray-700',\n variantClasses[variant],\n className\n )}\n style={[style, animate ? { opacity: animatedValue } : undefined]}\n {...viewProps}\n />\n );\n };\n\n // Multiple skeletons\n if (elementCount > 1) {\n return (\n <View className={cn('flex flex-col', gapClasses[gap])}>\n {Array.from({ length: elementCount }).map((_, i) => renderSkeleton(i))}\n </View>\n );\n }\n\n return renderSkeleton();\n};\n\n/**\n * SkeletonText - Pre-configured text skeleton\n */\nexport const SkeletonText: React.FC<\n Omit<SkeletonProps, 'variant'> & { lines?: number }\n> = ({ lines = 3, ...props }) => (\n <Skeleton variant='text' lines={lines} {...props} />\n);\n\n/**\n * SkeletonAvatar - Pre-configured avatar skeleton\n */\nexport const SkeletonAvatar: React.FC<\n Omit<SkeletonProps, 'variant'>\n> = props => <Skeleton variant='avatar' {...props} />;\n\n/**\n * SkeletonButton - Pre-configured button skeleton\n */\nexport const SkeletonButton: React.FC<\n Omit<SkeletonProps, 'variant'>\n> = props => <Skeleton variant='button' width={100} {...props} />;\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ListProps {\n /** List items */\n children: React.ReactNode;\n /** List type */\n type?: 'unordered' | 'ordered';\n /** Spacing between items */\n spacing?: 'none' | 'sm' | 'md' | 'lg';\n /** Marker/bullet style */\n marker?: 'disc' | 'circle' | 'square' | 'decimal' | 'alpha' | 'none';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\nexport interface ListItemProps {\n /** List item content */\n children: React.ReactNode;\n /** Item index (for ordered lists) */\n index?: number;\n /** Marker type (inherited from List) */\n marker?: 'disc' | 'circle' | 'square' | 'decimal' | 'alpha' | 'none';\n /** List type (inherited from List) */\n listType?: 'unordered' | 'ordered';\n /** Size (inherited from List) */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n// Context for passing list props to items\nconst ListContext = React.createContext<{\n type: 'unordered' | 'ordered';\n marker: 'disc' | 'circle' | 'square' | 'decimal' | 'alpha' | 'none';\n size: 'sm' | 'md' | 'lg';\n}>({\n type: 'unordered',\n marker: 'disc',\n size: 'md',\n});\n\n/**\n * List Component\n *\n * List component with consistent styling and spacing options.\n * Supports both ordered and unordered lists with various marker styles.\n *\n * @example\n * ```tsx\n * <List>\n * <ListItem>First item</ListItem>\n * <ListItem>Second item</ListItem>\n * <ListItem>Third item</ListItem>\n * </List>\n * ```\n *\n * @example\n * ```tsx\n * <List type=\"ordered\" marker=\"decimal\" spacing=\"md\">\n * <ListItem>Step one</ListItem>\n * <ListItem>Step two</ListItem>\n * </List>\n * ```\n */\nexport const List: React.FC<ListProps> = ({\n children,\n type = 'unordered',\n spacing = 'sm',\n marker,\n size = 'md',\n className,\n}) => {\n // Default marker based on type\n const defaultMarker = type === 'ordered' ? 'decimal' : 'disc';\n const actualMarker = marker || defaultMarker;\n\n // Spacing configurations\n const spacingClasses = {\n none: 'gap-0',\n sm: 'gap-1',\n md: 'gap-2',\n lg: 'gap-4',\n };\n\n // Clone children with index for ordered lists\n const childrenWithIndex = React.Children.map(children, (child, index) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child as React.ReactElement<ListItemProps>, {\n index: index + 1,\n });\n }\n return child;\n });\n\n return (\n <ListContext.Provider value={{ type, marker: actualMarker, size }}>\n <View\n className={cn('ml-4', spacingClasses[spacing], className)}\n accessibilityRole='list'\n >\n {childrenWithIndex}\n </View>\n </ListContext.Provider>\n );\n};\n\n/**\n * ListItem Component\n *\n * Individual list item to be used within List component.\n */\nexport const ListItem: React.FC<ListItemProps> = ({\n children,\n index = 1,\n className,\n}) => {\n const { type, marker, size } = React.useContext(ListContext);\n\n // Size configurations\n const sizeClasses = {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n };\n\n // Get marker symbol\n const getMarker = (): string => {\n if (marker === 'none') return '';\n\n if (type === 'ordered') {\n switch (marker) {\n case 'decimal':\n return `${index}.`;\n case 'alpha':\n return `${String.fromCharCode(96 + index)}.`;\n default:\n return `${index}.`;\n }\n } else {\n switch (marker) {\n case 'disc':\n return '•';\n case 'circle':\n return '○';\n case 'square':\n return '▪';\n default:\n return '•';\n }\n }\n };\n\n const markerSymbol = getMarker();\n\n return (\n <View className={cn('flex flex-row', className)}>\n {markerSymbol !== '' && (\n <Text\n className={cn(\n 'mr-2 text-gray-600 dark:text-gray-400',\n sizeClasses[size],\n type === 'ordered' ? 'w-6' : 'w-3'\n )}\n >\n {markerSymbol}\n </Text>\n )}\n <Text\n className={cn(\n 'flex-1 text-gray-900 dark:text-gray-100 leading-relaxed',\n sizeClasses[size]\n )}\n >\n {children}\n </Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface IconTextProps {\n /** Icon element to display */\n icon: React.ReactNode;\n /** Text content */\n children: React.ReactNode;\n /** Icon position */\n iconPosition?: 'left' | 'right' | 'top';\n /** Gap between icon and text */\n gap?: 'xs' | 'sm' | 'md' | 'lg';\n /** Text alignment (for top icon position) */\n align?: 'left' | 'center' | 'right';\n /** Color variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'muted';\n /** Additional className for the container */\n className?: string;\n /** Additional className for the text */\n textClassName?: string;\n}\n\n/**\n * IconText Component\n *\n * Displays an icon alongside text content with flexible positioning and styling.\n * Commonly used for buttons, labels, list items, and feature highlights.\n *\n * @example\n * ```tsx\n * <IconText icon={<CheckIcon />}>\n * Feature enabled\n * </IconText>\n * ```\n *\n * @example\n * ```tsx\n * <IconText\n * icon={<StarIcon />}\n * iconPosition=\"top\"\n * align=\"center\"\n * variant=\"primary\"\n * >\n * Premium Feature\n * </IconText>\n * ```\n */\nexport const IconText: React.FC<IconTextProps> = ({\n icon,\n children,\n iconPosition = 'left',\n gap = 'md',\n align = 'left',\n variant = 'default',\n className,\n textClassName,\n}) => {\n // Gap configurations\n const gapClasses = {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n };\n\n // Alignment classes (for top icon position)\n const alignClasses = {\n left: 'items-start',\n center: 'items-center',\n right: 'items-end',\n };\n\n // Text alignment classes\n const textAlignClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n };\n\n // Color variant configurations\n const variantClasses = {\n default: 'text-gray-700 dark:text-gray-300',\n primary: 'text-blue-600 dark:text-blue-400',\n success: 'text-green-600 dark:text-green-400',\n warning: 'text-yellow-600 dark:text-yellow-400',\n danger: 'text-red-600 dark:text-red-400',\n muted: 'text-gray-500 dark:text-gray-400',\n };\n\n // Layout based on icon position\n const layoutClasses = {\n left: 'flex-row items-center',\n right: 'flex-row-reverse items-center',\n top: 'flex-col',\n };\n\n return (\n <View\n className={cn(\n 'flex',\n layoutClasses[iconPosition],\n gapClasses[gap],\n iconPosition === 'top' && alignClasses[align],\n className\n )}\n >\n {icon}\n <Text\n className={cn(\n variantClasses[variant],\n iconPosition === 'top' && textAlignClasses[align],\n textClassName\n )}\n >\n {children}\n </Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface FormattedNumberProps {\n /** Number value to format */\n value: number;\n /** Number style */\n style?: 'decimal' | 'currency' | 'percent';\n /** Currency code (for currency style) */\n currency?: string;\n /** Minimum fraction digits */\n minimumFractionDigits?: number;\n /** Maximum fraction digits */\n maximumFractionDigits?: number;\n /** Locale */\n locale?: string;\n /** Notation (compact for abbreviations like 1.2K) */\n notation?: 'standard' | 'compact';\n /** Additional className */\n className?: string;\n}\n\n/**\n * FormattedNumber Component\n *\n * Formats numbers using Intl.NumberFormat with various styles and locales.\n * Supports currencies, percentages, and compact notation.\n *\n * @example\n * ```tsx\n * <FormattedNumber value={1234.56} />\n * <FormattedNumber value={1234.56} notation=\"compact\" />\n * <FormattedNumber\n * value={1234.56}\n * style=\"currency\"\n * currency=\"USD\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * <FormattedNumber\n * value={0.1234}\n * style=\"percent\"\n * minimumFractionDigits={2}\n * />\n * ```\n */\nexport const FormattedNumber: React.FC<FormattedNumberProps> = ({\n value,\n style = 'decimal',\n currency = 'USD',\n minimumFractionDigits,\n maximumFractionDigits,\n locale = 'en-US',\n notation = 'standard',\n className,\n}) => {\n const formatNumber = (): string => {\n try {\n const options: Intl.NumberFormatOptions = {\n style,\n notation,\n minimumFractionDigits,\n maximumFractionDigits,\n };\n\n if (style === 'currency') {\n options.currency = currency;\n }\n\n return new Intl.NumberFormat(locale, options).format(value);\n } catch (error) {\n // Fallback to basic formatting if Intl fails\n console.error('Number formatting error:', error);\n return value.toLocaleString(locale);\n }\n };\n\n return <Text className={cn(className)}>{formatNumber()}</Text>;\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface InfoBoxProps {\n /** Content to display in the info box */\n children: React.ReactNode;\n /** Title/heading for the info box */\n title?: string;\n /** Color variant */\n variant?: 'info' | 'success' | 'warning' | 'danger' | 'neutral';\n /** Size/padding variant */\n size?: 'sm' | 'md' | 'lg';\n /** Icon element to display */\n icon?: React.ReactNode;\n /** Show border */\n bordered?: boolean;\n /** Additional className for the container */\n className?: string;\n}\n\n/**\n * InfoBox Component\n *\n * A versatile callout/info box component for highlighting important information,\n * tips, warnings, or notes. Commonly used in documentation, settings pages,\n * and forms.\n *\n * @example\n * ```tsx\n * <InfoBox variant=\"info\" title=\"Quick Start\">\n * <Text>Connect your wallet to get started</Text>\n * </InfoBox>\n * ```\n *\n * @example\n * ```tsx\n * <InfoBox variant=\"warning\" icon={<WarningIcon />}>\n * <Text>Each wallet creates a unique email address.</Text>\n * </InfoBox>\n * ```\n */\nexport const InfoBox: React.FC<InfoBoxProps> = ({\n children,\n title,\n variant = 'info',\n size = 'md',\n icon,\n bordered = true,\n className,\n}) => {\n // Color variant configurations\n const variantClasses = {\n info: {\n bg: 'bg-blue-50 dark:bg-blue-900/20',\n border: 'border-blue-200 dark:border-blue-800',\n title: 'text-blue-900 dark:text-blue-300',\n text: 'text-blue-800 dark:text-blue-400',\n },\n success: {\n bg: 'bg-green-50 dark:bg-green-900/20',\n border: 'border-green-200 dark:border-green-800',\n title: 'text-green-900 dark:text-green-300',\n text: 'text-green-800 dark:text-green-400',\n },\n warning: {\n bg: 'bg-yellow-50 dark:bg-yellow-900/20',\n border: 'border-yellow-200 dark:border-yellow-800',\n title: 'text-yellow-900 dark:text-yellow-300',\n text: 'text-yellow-800 dark:text-yellow-400',\n },\n danger: {\n bg: 'bg-red-50 dark:bg-red-900/20',\n border: 'border-red-200 dark:border-red-800',\n title: 'text-red-900 dark:text-red-300',\n text: 'text-red-800 dark:text-red-400',\n },\n neutral: {\n bg: 'bg-gray-50 dark:bg-gray-800',\n border: 'border-gray-200 dark:border-gray-700',\n title: 'text-gray-900 dark:text-gray-100',\n text: 'text-gray-700 dark:text-gray-300',\n },\n };\n\n // Size/padding configurations\n const sizeClasses = {\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-6',\n };\n\n const variantConfig = variantClasses[variant];\n\n return (\n <View\n className={cn(\n 'rounded-lg',\n variantConfig.bg,\n bordered && `border ${variantConfig.border}`,\n sizeClasses[size],\n className\n )}\n >\n {(title || icon) && (\n <View className='flex flex-row items-start gap-3 mb-2'>\n {icon}\n {title && (\n <Text className={cn('font-semibold', variantConfig.title)}>\n {title}\n </Text>\n )}\n </View>\n )}\n <View className={cn(!title && !icon && variantConfig.text)}>\n {children}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Animated } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ProgressProps {\n /** Progress value (0-100) */\n value?: number;\n /** Maximum value */\n max?: number;\n /** Color variant */\n variant?: 'default' | 'success' | 'warning' | 'danger';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Show label */\n showLabel?: boolean;\n /** Custom label */\n label?: string;\n /** Indeterminate state (loading) */\n indeterminate?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Progress Component\n *\n * Linear progress indicator with support for determinate and indeterminate states.\n *\n * @example\n * ```tsx\n * <Progress value={75} showLabel />\n * ```\n *\n * @example\n * ```tsx\n * <Progress indeterminate />\n * ```\n */\nexport const Progress: React.FC<ProgressProps> = ({\n value = 0,\n max = 100,\n variant = 'default',\n size = 'md',\n showLabel = false,\n label,\n indeterminate = false,\n className,\n}) => {\n // Animation for indeterminate state\n const animatedValue = React.useRef(new Animated.Value(0)).current;\n\n React.useEffect(() => {\n if (indeterminate) {\n Animated.loop(\n Animated.sequence([\n Animated.timing(animatedValue, {\n toValue: 1,\n duration: 1000,\n useNativeDriver: false,\n }),\n Animated.timing(animatedValue, {\n toValue: 0,\n duration: 1000,\n useNativeDriver: false,\n }),\n ])\n ).start();\n }\n }, [indeterminate, animatedValue]);\n\n // Clamp value between 0 and 100\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n\n // Color configurations\n const colorClasses = {\n default: 'bg-blue-600 dark:bg-blue-500',\n success: 'bg-green-600 dark:bg-green-500',\n warning: 'bg-yellow-600 dark:bg-yellow-500',\n danger: 'bg-red-600 dark:bg-red-500',\n };\n\n // Size configurations\n const sizeClasses = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-4',\n };\n\n const interpolatedWidth = animatedValue.interpolate({\n inputRange: [0, 1],\n outputRange: ['0%', '100%'],\n });\n\n return (\n <View className={cn('w-full', className)}>\n <View\n className={cn(\n 'w-full bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden',\n sizeClasses[size]\n )}\n accessibilityRole='progressbar'\n accessibilityValue={{\n now: indeterminate ? undefined : percentage,\n min: 0,\n max: 100,\n }}\n >\n {indeterminate ? (\n <Animated.View\n className={cn('h-full rounded-full', colorClasses[variant])}\n style={{ width: interpolatedWidth, opacity: 0.7 }}\n />\n ) : (\n <View\n className={cn('h-full rounded-full', colorClasses[variant])}\n style={{ width: `${percentage}%` }}\n />\n )}\n </View>\n {(showLabel || label) && (\n <View className='mt-1'>\n <Text className='text-xs text-gray-600 dark:text-gray-400 text-right'>\n {label || `${Math.round(percentage)}%`}\n </Text>\n </View>\n )}\n </View>\n );\n};\n\nexport interface ProgressBarProps {\n /** Progress value (0-100) */\n value: number;\n /** Maximum value (default: 100) */\n max?: number;\n /** Color variant */\n variant?: 'primary' | 'success' | 'warning' | 'danger' | 'purple' | 'gray';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Show percentage label */\n showLabel?: boolean;\n /** Label position */\n labelPosition?: 'inside' | 'outside' | 'none';\n /** Custom label text */\n label?: string;\n /** Additional className */\n className?: string;\n /** Animated transition */\n animated?: boolean;\n}\n\n/**\n * ProgressBar Component\n *\n * A visual progress indicator showing completion percentage.\n *\n * @example\n * ```tsx\n * <ProgressBar value={65} variant=\"primary\" showLabel />\n * ```\n */\nexport const ProgressBar: React.FC<ProgressBarProps> = ({\n value,\n max = 100,\n variant = 'primary',\n size = 'md',\n showLabel = false,\n labelPosition = 'outside',\n label,\n className,\n animated: _animated = true,\n}) => {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n const displayLabel = label || `${Math.round(percentage)}%`;\n\n // Color variant configurations\n const variantClasses = {\n primary: 'bg-blue-600 dark:bg-blue-500',\n success: 'bg-green-600 dark:bg-green-500',\n warning: 'bg-yellow-600 dark:bg-yellow-500',\n danger: 'bg-red-600 dark:bg-red-500',\n purple: 'bg-purple-600 dark:bg-purple-500',\n gray: 'bg-gray-600 dark:bg-gray-500',\n };\n\n // Size configurations\n const sizeClasses = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n };\n\n return (\n <View className={cn('w-full', className)}>\n <View className='flex flex-row items-center gap-3'>\n <View\n className={cn(\n 'flex-1 bg-gray-200 dark:bg-gray-600 rounded-full overflow-hidden',\n sizeClasses[size]\n )}\n >\n <View\n className={cn(\n 'rounded-full',\n sizeClasses[size],\n variantClasses[variant]\n )}\n style={{ width: `${percentage}%` }}\n accessibilityRole='progressbar'\n accessibilityValue={{ now: value, min: 0, max }}\n />\n </View>\n {showLabel && labelPosition === 'outside' && (\n <Text className='text-sm font-medium text-gray-600 dark:text-gray-400'>\n {displayLabel}\n </Text>\n )}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n Text,\n Modal as RNModal,\n Pressable,\n ScrollView,\n KeyboardAvoidingView,\n Platform,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ModalProps {\n /** Whether the modal is visible */\n isOpen: boolean;\n /** Callback when modal should close */\n onClose: () => void;\n /** Modal title */\n title?: string;\n /** Size variant */\n size?: 'small' | 'medium' | 'large' | 'fullWidth';\n /** Show close button */\n showCloseButton?: boolean;\n /** Close when pressing backdrop */\n closeOnOverlayClick?: boolean;\n /** Modal content */\n children: React.ReactNode;\n /** Additional className for the content */\n className?: string;\n}\n\n/**\n * Modal Component\n *\n * Modal dialog for displaying content in an overlay.\n *\n * @example\n * ```tsx\n * <Modal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"Confirm Action\"\n * >\n * <ModalContent>\n * <Text>Are you sure you want to proceed?</Text>\n * </ModalContent>\n * <ModalFooter>\n * <Button onPress={() => setIsOpen(false)}>Cancel</Button>\n * <Button variant=\"primary\" onPress={handleConfirm}>Confirm</Button>\n * </ModalFooter>\n * </Modal>\n * ```\n */\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n size = 'medium',\n showCloseButton = true,\n closeOnOverlayClick = true,\n children,\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n small: 'w-72',\n medium: 'w-80',\n large: 'w-96',\n fullWidth: 'w-full mx-4',\n };\n\n const handleOverlayPress = () => {\n if (closeOnOverlayClick) {\n onClose();\n }\n };\n\n return (\n <RNModal\n visible={isOpen}\n animationType='fade'\n transparent\n onRequestClose={onClose}\n statusBarTranslucent\n >\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n className='flex-1'\n >\n <Pressable\n onPress={handleOverlayPress}\n className='flex-1 justify-center items-center bg-black/50'\n >\n <Pressable\n onPress={e => e.stopPropagation()}\n className={cn(\n 'bg-white dark:bg-gray-800 rounded-xl shadow-xl max-h-[80%]',\n sizeClasses[size],\n className\n )}\n >\n {/* Header */}\n {(title || showCloseButton) && (\n <View className='flex flex-row items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700'>\n {title && (\n <Text className='text-lg font-semibold text-gray-900 dark:text-white flex-1'>\n {title}\n </Text>\n )}\n {showCloseButton && (\n <Pressable\n onPress={onClose}\n className='p-1 -mr-1 rounded-full'\n accessibilityRole='button'\n accessibilityLabel='Close modal'\n >\n <Text className='text-xl text-gray-500 dark:text-gray-400'>\n ✕\n </Text>\n </Pressable>\n )}\n </View>\n )}\n\n {/* Content */}\n <ScrollView bounces={false}>{children}</ScrollView>\n </Pressable>\n </Pressable>\n </KeyboardAvoidingView>\n </RNModal>\n );\n};\n\nexport interface ModalHeaderProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * ModalHeader - Header section of the modal\n */\nexport const ModalHeader: React.FC<ModalHeaderProps> = ({\n children,\n className,\n}) => (\n <View\n className={cn(\n 'px-4 py-3 border-b border-gray-200 dark:border-gray-700',\n className\n )}\n >\n {children}\n </View>\n);\n\nexport interface ModalContentProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * ModalContent - Body section of the modal\n */\nexport const ModalContent: React.FC<ModalContentProps> = ({\n children,\n className,\n}) => <View className={cn('px-4 py-4', className)}>{children}</View>;\n\nexport interface ModalFooterProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * ModalFooter - Footer section of the modal\n */\nexport const ModalFooter: React.FC<ModalFooterProps> = ({\n children,\n className,\n}) => (\n <View\n className={cn(\n 'flex flex-row items-center justify-end gap-2 px-4 py-3 border-t border-gray-200 dark:border-gray-700',\n className\n )}\n >\n {children}\n </View>\n);\n","import React, {\n createContext,\n useContext,\n useState,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\nimport { View, Text, Pressable, Animated, SafeAreaView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ToastMessage {\n id: string;\n title?: string;\n description?: string;\n variant?: 'default' | 'success' | 'error' | 'warning' | 'info';\n duration?: number;\n action?: {\n label: string;\n onPress: () => void;\n };\n}\n\nexport interface ToastProps {\n /** Toast message */\n toast: ToastMessage;\n /** Remove toast handler */\n onRemove: (id: string) => void;\n}\n\nexport interface ToastContextValue {\n toasts: ToastMessage[];\n addToast: (toast: Omit<ToastMessage, 'id'>) => void;\n removeToast: (id: string) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | undefined>(undefined);\n\nexport const useToast = () => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within ToastProvider');\n }\n return context;\n};\n\n/**\n * Toast Component\n *\n * Individual toast notification with variants and actions.\n */\nexport const Toast: React.FC<ToastProps> = ({ toast, onRemove }) => {\n const { id, title, description, variant = 'default', action } = toast;\n const slideAnim = useRef(new Animated.Value(-100)).current;\n\n useEffect(() => {\n Animated.spring(slideAnim, {\n toValue: 0,\n useNativeDriver: true,\n friction: 8,\n }).start();\n }, [slideAnim]);\n\n // Variant styles - background\n const variantBgClasses = {\n default: 'bg-white dark:bg-gray-800 border-gray-200 dark:border-gray-700',\n success:\n 'bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800',\n error: 'bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800',\n warning:\n 'bg-yellow-50 dark:bg-yellow-900/20 border-yellow-200 dark:border-yellow-800',\n info: 'bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800',\n };\n\n // Variant styles - icon color\n const iconColorClasses = {\n default: 'text-gray-600 dark:text-gray-400',\n success: 'text-green-600 dark:text-green-400',\n error: 'text-red-600 dark:text-red-400',\n warning: 'text-yellow-600 dark:text-yellow-400',\n info: 'text-blue-600 dark:text-blue-400',\n };\n\n // Icon symbols\n const icons = {\n default: 'ℹ',\n success: '✓',\n error: '✕',\n warning: '⚠',\n info: 'ℹ',\n };\n\n return (\n <Animated.View\n style={{ transform: [{ translateY: slideAnim }] }}\n className={cn(\n 'flex flex-row items-start gap-3 p-4 rounded-lg border shadow-lg',\n 'w-full max-w-md',\n variantBgClasses[variant]\n )}\n >\n <View className={cn('flex-shrink-0', iconColorClasses[variant])}>\n <Text className='text-lg'>{icons[variant]}</Text>\n </View>\n\n <View className='flex-1 min-w-0'>\n {title && (\n <Text className='font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n )}\n {description && (\n <Text className='text-sm text-gray-600 dark:text-gray-300 mt-1'>\n {description}\n </Text>\n )}\n {action && (\n <Pressable onPress={action.onPress} className='mt-2'>\n <Text className='text-sm font-medium text-blue-600 dark:text-blue-400'>\n {action.label}\n </Text>\n </Pressable>\n )}\n </View>\n\n <Pressable\n onPress={() => onRemove(id)}\n className='flex-shrink-0 p-1'\n accessibilityRole='button'\n accessibilityLabel='Close notification'\n >\n <Text className='text-gray-400 text-lg'>✕</Text>\n </Pressable>\n </Animated.View>\n );\n};\n\n/**\n * Individual toast wrapper with auto-remove timer\n */\nconst ToastItem: React.FC<{\n toast: ToastMessage;\n onRemove: (id: string) => void;\n}> = ({ toast, onRemove }) => {\n useEffect(() => {\n const duration = toast.duration ?? 5000;\n\n if (duration > 0) {\n const timer = setTimeout(() => {\n onRemove(toast.id);\n }, duration);\n\n return () => clearTimeout(timer);\n }\n }, [toast.id, toast.duration, onRemove]);\n\n return <Toast toast={toast} onRemove={onRemove} />;\n};\n\n/**\n * ToastProvider Component\n *\n * Provider for toast notifications system.\n * Wrap your app with this provider to enable toasts.\n *\n * @example\n * ```tsx\n * <ToastProvider>\n * <App />\n * </ToastProvider>\n * ```\n *\n * @example\n * ```tsx\n * // Using the toast hook\n * const { addToast } = useToast();\n *\n * const showSuccess = () => {\n * addToast({\n * title: 'Success!',\n * description: 'Your action was completed.',\n * variant: 'success',\n * });\n * };\n * ```\n */\nexport const ToastProvider: React.FC<{ children: React.ReactNode }> = ({\n children,\n}) => {\n const [toasts, setToasts] = useState<ToastMessage[]>([]);\n\n const removeToast = useCallback((id: string) => {\n setToasts(prev => prev.filter(t => t.id !== id));\n }, []);\n\n const addToast = useCallback((toast: Omit<ToastMessage, 'id'>) => {\n const id = Math.random().toString(36).substr(2, 9);\n setToasts(prev => [...prev, { ...toast, id }]);\n }, []);\n\n return (\n <ToastContext.Provider value={{ toasts, addToast, removeToast }}>\n {children}\n {toasts.length > 0 && (\n <SafeAreaView\n className='absolute top-0 left-0 right-0 z-50 px-4 pt-4'\n pointerEvents='box-none'\n >\n <View className='items-center gap-2'>\n {toasts.map(toast => (\n <ToastItem key={toast.id} toast={toast} onRemove={removeToast} />\n ))}\n </View>\n </SafeAreaView>\n )}\n </ToastContext.Provider>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Modal } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { Spinner } from '../Spinner';\n\nexport interface LoadingOverlayProps {\n /** Whether the overlay is visible */\n isLoading: boolean;\n /** Loading message */\n message?: string;\n /** Overlay mode */\n mode?: 'fullscreen' | 'container';\n /** Spinner size */\n spinnerSize?: 'small' | 'default' | 'large' | 'extraLarge';\n /** Additional className */\n className?: string;\n}\n\n/**\n * LoadingOverlay Component\n *\n * Full-screen or container loading overlay with spinner and optional message.\n * Useful for async operations, page loads, and data fetching.\n *\n * @example\n * ```tsx\n * <LoadingOverlay\n * isLoading={isSubmitting}\n * message=\"Saving changes...\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * <View className=\"relative flex-1\">\n * <LoadingOverlay\n * isLoading={isLoading}\n * mode=\"container\"\n * />\n * <YourContent />\n * </View>\n * ```\n */\nexport const LoadingOverlay: React.FC<LoadingOverlayProps> = ({\n isLoading,\n message,\n mode = 'fullscreen',\n spinnerSize = 'large',\n className,\n}) => {\n if (!isLoading) return null;\n\n const content = (\n <View\n className={cn(\n mode === 'fullscreen' ? 'flex-1' : 'absolute inset-0',\n 'items-center justify-center',\n 'bg-white/80 dark:bg-gray-900/80',\n className\n )}\n accessibilityRole='alert'\n accessibilityLabel={message || 'Loading'}\n >\n <Spinner size={spinnerSize} />\n {message && (\n <Text className='text-base text-gray-700 dark:text-gray-300 mt-4'>\n {message}\n </Text>\n )}\n </View>\n );\n\n // Fullscreen mode uses Modal\n if (mode === 'fullscreen') {\n return (\n <Modal\n visible={isLoading}\n transparent\n animationType='fade'\n statusBarTranslucent\n >\n {content}\n </Modal>\n );\n }\n\n // Container mode renders inline\n return content;\n};\n","import * as React from 'react';\nimport { useRef, useEffect } from 'react';\nimport { View, Animated } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface LoadingDotsProps {\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'primary' | 'secondary' | 'white';\n /** Additional className */\n className?: string;\n}\n\n/**\n * LoadingDots Component\n *\n * Animated loading indicator with bouncing dots.\n * Simple and lightweight alternative to spinners.\n *\n * @example\n * ```tsx\n * <LoadingDots size=\"md\" variant=\"primary\" />\n * ```\n */\nexport const LoadingDots: React.FC<LoadingDotsProps> = ({\n size = 'md',\n variant = 'primary',\n className,\n}) => {\n const dot1Anim = useRef(new Animated.Value(0)).current;\n const dot2Anim = useRef(new Animated.Value(0)).current;\n const dot3Anim = useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n const createAnimation = (animValue: Animated.Value, delay: number) => {\n return Animated.loop(\n Animated.sequence([\n Animated.delay(delay),\n Animated.timing(animValue, {\n toValue: 1,\n duration: 300,\n useNativeDriver: true,\n }),\n Animated.timing(animValue, {\n toValue: 0,\n duration: 300,\n useNativeDriver: true,\n }),\n Animated.delay(600 - delay),\n ])\n );\n };\n\n const anim1 = createAnimation(dot1Anim, 0);\n const anim2 = createAnimation(dot2Anim, 150);\n const anim3 = createAnimation(dot3Anim, 300);\n\n anim1.start();\n anim2.start();\n anim3.start();\n\n return () => {\n anim1.stop();\n anim2.stop();\n anim3.stop();\n };\n }, [dot1Anim, dot2Anim, dot3Anim]);\n\n const sizeClasses = {\n sm: 'w-1.5 h-1.5',\n md: 'w-2 h-2',\n lg: 'w-3 h-3',\n };\n\n const variantClasses = {\n primary: 'bg-blue-600 dark:bg-blue-500',\n secondary: 'bg-gray-600 dark:bg-gray-400',\n white: 'bg-white',\n };\n\n const gapClasses = {\n sm: 'gap-1',\n md: 'gap-1.5',\n lg: 'gap-2',\n };\n\n const dotClass = cn(\n 'rounded-full',\n sizeClasses[size],\n variantClasses[variant]\n );\n\n const getAnimatedStyle = (animValue: Animated.Value) => ({\n opacity: animValue.interpolate({\n inputRange: [0, 1],\n outputRange: [0.3, 1],\n }),\n transform: [\n {\n scale: animValue.interpolate({\n inputRange: [0, 1],\n outputRange: [0.8, 1.2],\n }),\n },\n ],\n });\n\n return (\n <View\n className={cn('flex flex-row items-center', gapClasses[size], className)}\n >\n <Animated.View className={dotClass} style={getAnimatedStyle(dot1Anim)} />\n <Animated.View className={dotClass} style={getAnimatedStyle(dot2Anim)} />\n <Animated.View className={dotClass} style={getAnimatedStyle(dot3Anim)} />\n </View>\n );\n};\n","import * as React from 'react';\nimport { Pressable, View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface BackdropProps {\n /** Whether the backdrop is visible */\n isOpen: boolean;\n /** Press handler for backdrop */\n onPress?: () => void;\n /** Backdrop opacity variant */\n opacity?: 'light' | 'medium' | 'dark';\n /** Children to render on top of backdrop */\n children?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Backdrop Component\n *\n * Reusable backdrop/overlay for modals, drawers, and dialogs.\n * Provides consistent darkening effect.\n *\n * @example\n * ```tsx\n * <Backdrop isOpen={isModalOpen} onPress={closeModal}>\n * <View onStartShouldSetResponder={() => true}>\n * <ModalContent />\n * </View>\n * </Backdrop>\n * ```\n *\n * @example\n * ```tsx\n * <Backdrop\n * isOpen={isDrawerOpen}\n * onPress={closeDrawer}\n * opacity=\"medium\"\n * >\n * <Drawer />\n * </Backdrop>\n * ```\n */\nexport const Backdrop: React.FC<BackdropProps> = ({\n isOpen,\n onPress,\n opacity = 'medium',\n children,\n className,\n}) => {\n if (!isOpen) return null;\n\n // Opacity configurations\n const opacityClasses = {\n light: 'bg-black/20',\n medium: 'bg-black/50',\n dark: 'bg-black/75',\n };\n\n if (children) {\n return (\n <Pressable\n onPress={onPress}\n className={cn('absolute inset-0', opacityClasses[opacity], className)}\n accessibilityRole='none'\n >\n <View\n className='flex-1'\n onStartShouldSetResponder={() => true}\n onResponderRelease={e => e.stopPropagation()}\n >\n {children}\n </View>\n </Pressable>\n );\n }\n\n return (\n <Pressable\n onPress={onPress}\n className={cn('absolute inset-0', opacityClasses[opacity], className)}\n accessibilityRole='none'\n />\n );\n};\n","import * as React from 'react';\nimport { useRef, useEffect } from 'react';\nimport {\n View,\n Text,\n Modal,\n Pressable,\n ScrollView,\n Animated,\n Dimensions,\n PanResponder,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nconst { height: SCREEN_HEIGHT, width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface SheetProps {\n /** Whether sheet is open */\n isOpen: boolean;\n /** Close handler */\n onClose: () => void;\n /** Sheet content */\n children: React.ReactNode;\n /** Sheet title */\n title?: string;\n /** Sheet description */\n description?: string;\n /** Sheet footer */\n footer?: React.ReactNode;\n /** Sheet side */\n side?: 'bottom' | 'top' | 'left' | 'right';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg' | 'full';\n /** Show drag handle */\n showHandle?: boolean;\n /** Show close button */\n showCloseButton?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Sheet Component\n *\n * Mobile-first bottom sheet that slides up from screen edge.\n * Also supports top, left, and right positions.\n * Includes gesture support for drag to dismiss (bottom sheets).\n *\n * @example\n * ```tsx\n * <Sheet\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"Filter Options\"\n * showHandle\n * >\n * <View>Filter content...</View>\n * </Sheet>\n * ```\n */\nexport const Sheet: React.FC<SheetProps> = ({\n isOpen,\n onClose,\n children,\n title,\n description,\n footer,\n side = 'bottom',\n size = 'md',\n showHandle = true,\n showCloseButton = true,\n className,\n}) => {\n const slideAnim = useRef(new Animated.Value(0)).current;\n const panY = useRef(new Animated.Value(0)).current;\n\n // Size configurations (percentage of screen)\n const sizeValues = {\n bottom: {\n sm: SCREEN_HEIGHT * 0.33,\n md: SCREEN_HEIGHT * 0.5,\n lg: SCREEN_HEIGHT * 0.66,\n full: SCREEN_HEIGHT,\n },\n top: {\n sm: SCREEN_HEIGHT * 0.33,\n md: SCREEN_HEIGHT * 0.5,\n lg: SCREEN_HEIGHT * 0.66,\n full: SCREEN_HEIGHT,\n },\n left: {\n sm: SCREEN_WIDTH * 0.6,\n md: SCREEN_WIDTH * 0.75,\n lg: SCREEN_WIDTH * 0.9,\n full: SCREEN_WIDTH,\n },\n right: {\n sm: SCREEN_WIDTH * 0.6,\n md: SCREEN_WIDTH * 0.75,\n lg: SCREEN_WIDTH * 0.9,\n full: SCREEN_WIDTH,\n },\n };\n\n const sheetSize = sizeValues[side][size];\n const isVertical = side === 'bottom' || side === 'top';\n\n useEffect(() => {\n if (isOpen) {\n panY.setValue(0);\n Animated.spring(slideAnim, {\n toValue: 1,\n useNativeDriver: true,\n friction: 8,\n }).start();\n } else {\n Animated.timing(slideAnim, {\n toValue: 0,\n duration: 200,\n useNativeDriver: true,\n }).start();\n }\n }, [isOpen, slideAnim, panY]);\n\n // Pan responder for drag-to-dismiss (bottom sheets)\n const panResponder = useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => side === 'bottom',\n onMoveShouldSetPanResponder: (_, gestureState) =>\n side === 'bottom' && gestureState.dy > 10,\n onPanResponderMove: (_, gestureState) => {\n if (gestureState.dy > 0) {\n panY.setValue(gestureState.dy);\n }\n },\n onPanResponderRelease: (_, gestureState) => {\n if (gestureState.dy > 100 || gestureState.vy > 0.5) {\n onClose();\n } else {\n Animated.spring(panY, {\n toValue: 0,\n useNativeDriver: true,\n }).start();\n }\n },\n })\n ).current;\n\n // Calculate transform based on side\n const getTransform = () => {\n const baseTransform = slideAnim.interpolate({\n inputRange: [0, 1],\n outputRange: [sheetSize, 0],\n });\n\n switch (side) {\n case 'bottom':\n return {\n transform: [\n {\n translateY: Animated.add(\n slideAnim.interpolate({\n inputRange: [0, 1],\n outputRange: [sheetSize, 0],\n }),\n panY\n ),\n },\n ],\n };\n case 'top':\n return {\n transform: [\n {\n translateY: slideAnim.interpolate({\n inputRange: [0, 1],\n outputRange: [-sheetSize, 0],\n }),\n },\n ],\n };\n case 'left':\n return {\n transform: [\n {\n translateX: slideAnim.interpolate({\n inputRange: [0, 1],\n outputRange: [-sheetSize, 0],\n }),\n },\n ],\n };\n case 'right':\n return {\n transform: [\n {\n translateX: baseTransform,\n },\n ],\n };\n default:\n return {};\n }\n };\n\n // Position styles\n const positionStyles = {\n bottom: { bottom: 0, left: 0, right: 0 },\n top: { top: 0, left: 0, right: 0 },\n left: { left: 0, top: 0, bottom: 0 },\n right: { right: 0, top: 0, bottom: 0 },\n };\n\n // Border radius styles\n const radiusClasses = {\n bottom: 'rounded-t-2xl',\n top: 'rounded-b-2xl',\n left: 'rounded-r-2xl',\n right: 'rounded-l-2xl',\n };\n\n return (\n <Modal\n visible={isOpen}\n animationType='none'\n transparent\n onRequestClose={onClose}\n statusBarTranslucent\n >\n {/* Backdrop */}\n <Pressable onPress={onClose} className='absolute inset-0 bg-black/50' />\n\n {/* Sheet */}\n <Animated.View\n style={[\n {\n position: 'absolute',\n ...positionStyles[side],\n ...(isVertical ? { height: sheetSize } : { width: sheetSize }),\n },\n getTransform(),\n ]}\n {...(side === 'bottom' ? panResponder.panHandlers : {})}\n >\n <View\n className={cn(\n 'flex-1 bg-white dark:bg-gray-900 shadow-xl',\n radiusClasses[side],\n className\n )}\n >\n {/* Drag Handle */}\n {showHandle && (side === 'bottom' || side === 'top') && (\n <View\n className={cn(\n 'items-center justify-center',\n side === 'bottom' ? 'pt-3 pb-2' : 'pb-3 pt-2'\n )}\n >\n <View className='w-12 h-1.5 bg-gray-300 dark:bg-gray-700 rounded-full' />\n </View>\n )}\n\n {/* Header */}\n {(title || description || showCloseButton) && (\n <View className='px-4 py-4 border-b border-gray-200 dark:border-gray-700'>\n <View className='flex flex-row items-start justify-between'>\n <View className='flex-1'>\n {title && (\n <Text className='text-lg font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n )}\n {description && (\n <Text className='mt-1 text-sm text-gray-600 dark:text-gray-400'>\n {description}\n </Text>\n )}\n </View>\n {showCloseButton && (\n <Pressable\n onPress={onClose}\n className='ml-4 p-1'\n accessibilityRole='button'\n accessibilityLabel='Close sheet'\n >\n <Text className='text-xl text-gray-400'>✕</Text>\n </Pressable>\n )}\n </View>\n </View>\n )}\n\n {/* Content */}\n <ScrollView className='flex-1 px-4 py-4' bounces={false}>\n {children}\n </ScrollView>\n\n {/* Footer */}\n {footer && (\n <View className='px-4 py-4 border-t border-gray-200 dark:border-gray-700'>\n {footer}\n </View>\n )}\n </View>\n </Animated.View>\n </Modal>\n );\n};\n","import * as React from 'react';\nimport { useState, useRef, useEffect } from 'react';\nimport { View, Text, Pressable, Modal, Animated } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TooltipProps {\n /** Content to display in the tooltip */\n content: string;\n /** Children that trigger the tooltip */\n children: React.ReactNode;\n /** Tooltip placement */\n placement?: 'top' | 'bottom' | 'left' | 'right';\n /** Delay before showing tooltip (ms) */\n delayShow?: number;\n /** Additional className for tooltip */\n className?: string;\n /** Disable the tooltip */\n disabled?: boolean;\n /** Variant style */\n variant?: 'default' | 'info' | 'success' | 'warning' | 'error';\n}\n\n/**\n * Tooltip Component\n *\n * Simple tooltip that appears on long press in React Native.\n * Shows informational content in a floating view.\n *\n * @example\n * ```tsx\n * <Tooltip content=\"Click to copy\">\n * <Button>Copy</Button>\n * </Tooltip>\n * ```\n *\n * @example\n * ```tsx\n * <Tooltip content=\"User profile\" placement=\"bottom\" variant=\"info\">\n * <Avatar />\n * </Tooltip>\n * ```\n */\nexport const Tooltip: React.FC<TooltipProps> = ({\n content,\n children,\n placement = 'top',\n delayShow = 0,\n className,\n disabled = false,\n variant = 'default',\n}) => {\n const [isVisible, setIsVisible] = useState(false);\n const [position, setPosition] = useState({ x: 0, y: 0, width: 0, height: 0 });\n const triggerRef = useRef<View>(null);\n const fadeAnim = useRef(new Animated.Value(0)).current;\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>();\n\n useEffect(() => {\n if (isVisible) {\n Animated.timing(fadeAnim, {\n toValue: 1,\n duration: 150,\n useNativeDriver: true,\n }).start();\n } else {\n fadeAnim.setValue(0);\n }\n }, [isVisible, fadeAnim]);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n const showTooltip = () => {\n if (disabled) return;\n\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n setPosition({ x, y, width, height });\n\n if (delayShow > 0) {\n timeoutRef.current = setTimeout(() => {\n setIsVisible(true);\n }, delayShow);\n } else {\n setIsVisible(true);\n }\n });\n };\n\n const hideTooltip = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setIsVisible(false);\n };\n\n // Variant styles\n const variantClasses = {\n default: 'bg-gray-900 dark:bg-gray-700',\n info: 'bg-blue-600 dark:bg-blue-500',\n success: 'bg-green-600 dark:bg-green-500',\n warning: 'bg-yellow-600 dark:bg-yellow-500',\n error: 'bg-red-600 dark:bg-red-500',\n };\n\n // Calculate tooltip position\n const getTooltipPosition = () => {\n const TOOLTIP_OFFSET = 8;\n const TOOLTIP_HEIGHT = 32; // Approximate\n const TOOLTIP_WIDTH = content.length * 8; // Rough estimate\n\n switch (placement) {\n case 'top':\n return {\n top: position.y - TOOLTIP_HEIGHT - TOOLTIP_OFFSET,\n left: position.x + position.width / 2 - TOOLTIP_WIDTH / 2,\n };\n case 'bottom':\n return {\n top: position.y + position.height + TOOLTIP_OFFSET,\n left: position.x + position.width / 2 - TOOLTIP_WIDTH / 2,\n };\n case 'left':\n return {\n top: position.y + position.height / 2 - TOOLTIP_HEIGHT / 2,\n left: position.x - TOOLTIP_WIDTH - TOOLTIP_OFFSET,\n };\n case 'right':\n return {\n top: position.y + position.height / 2 - TOOLTIP_HEIGHT / 2,\n left: position.x + position.width + TOOLTIP_OFFSET,\n };\n default:\n return { top: 0, left: 0 };\n }\n };\n\n return (\n <>\n <Pressable\n ref={triggerRef}\n onLongPress={showTooltip}\n onPressOut={hideTooltip}\n delayLongPress={300}\n >\n {children}\n </Pressable>\n\n <Modal\n visible={isVisible}\n transparent\n animationType='none'\n onRequestClose={hideTooltip}\n >\n <Pressable className='flex-1' onPress={hideTooltip}>\n <Animated.View\n style={[\n {\n position: 'absolute',\n ...getTooltipPosition(),\n opacity: fadeAnim,\n },\n ]}\n >\n <View\n className={cn(\n 'px-3 py-2 rounded-lg shadow-lg',\n variantClasses[variant],\n className\n )}\n >\n <Text className='text-xs font-medium text-white'>{content}</Text>\n </View>\n </Animated.View>\n </Pressable>\n </Modal>\n </>\n );\n};\n","import * as React from 'react';\nimport { useRef, useEffect } from 'react';\nimport {\n View,\n Text,\n Modal,\n Pressable,\n ScrollView,\n Animated,\n Dimensions,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nconst { width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface DialogProps {\n /** Whether dialog is open */\n isOpen: boolean;\n /** Close handler */\n onClose?: () => void;\n /** Dialog content */\n children: React.ReactNode;\n /** Dialog size */\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n /** Show close button */\n showCloseButton?: boolean;\n /** Close on outside click */\n closeOnOutsideClick?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Dialog Component\n *\n * Simple, flexible dialog/modal container for React Native.\n * More flexible than AlertDialog, suitable for any content.\n *\n * @example\n * ```tsx\n * <Dialog isOpen={isOpen} onClose={() => setIsOpen(false)}>\n * <View className=\"p-6\">\n * <Text>Dialog Title</Text>\n * <Text>Dialog content...</Text>\n * </View>\n * </Dialog>\n * ```\n */\nexport const Dialog: React.FC<DialogProps> = ({\n isOpen,\n onClose,\n children,\n size = 'md',\n showCloseButton = true,\n closeOnOutsideClick = true,\n className,\n}) => {\n const scaleAnim = useRef(new Animated.Value(0.9)).current;\n const opacityAnim = useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n if (isOpen) {\n Animated.parallel([\n Animated.spring(scaleAnim, {\n toValue: 1,\n useNativeDriver: true,\n friction: 8,\n }),\n Animated.timing(opacityAnim, {\n toValue: 1,\n duration: 150,\n useNativeDriver: true,\n }),\n ]).start();\n } else {\n scaleAnim.setValue(0.9);\n opacityAnim.setValue(0);\n }\n }, [isOpen, scaleAnim, opacityAnim]);\n\n // Size configurations (percentage of screen width)\n const sizeWidths = {\n sm: SCREEN_WIDTH * 0.7,\n md: SCREEN_WIDTH * 0.8,\n lg: SCREEN_WIDTH * 0.9,\n xl: SCREEN_WIDTH * 0.95,\n full: SCREEN_WIDTH - 32,\n };\n\n const handleOverlayPress = () => {\n if (closeOnOutsideClick && onClose) {\n onClose();\n }\n };\n\n return (\n <Modal\n visible={isOpen}\n animationType='none'\n transparent\n onRequestClose={onClose}\n statusBarTranslucent\n >\n {/* Backdrop */}\n <Pressable\n onPress={handleOverlayPress}\n className='flex-1 justify-center items-center bg-black/60'\n >\n {/* Dialog Container */}\n <Animated.View\n style={{\n opacity: opacityAnim,\n transform: [{ scale: scaleAnim }],\n width: sizeWidths[size],\n maxHeight: '80%',\n }}\n >\n <Pressable onPress={e => e.stopPropagation()}>\n <View\n className={cn(\n 'bg-white dark:bg-gray-900 rounded-xl shadow-xl overflow-hidden',\n className\n )}\n >\n {/* Close button */}\n {showCloseButton && onClose && (\n <Pressable\n onPress={onClose}\n className='absolute top-4 right-4 z-10 p-1'\n accessibilityRole='button'\n accessibilityLabel='Close dialog'\n >\n <Text className='text-xl text-gray-400'>✕</Text>\n </Pressable>\n )}\n\n {/* Content */}\n <ScrollView bounces={false}>{children}</ScrollView>\n </View>\n </Pressable>\n </Animated.View>\n </Pressable>\n </Modal>\n );\n};\n","import * as React from 'react';\nimport { useState, useRef, useEffect, useCallback } from 'react';\nimport { View, Modal, Pressable, Animated } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PopoverProps {\n /** Trigger element */\n trigger: React.ReactNode;\n /** Popover content */\n children: React.ReactNode;\n /** Placement relative to trigger */\n placement?: 'top' | 'bottom' | 'left' | 'right';\n /** Open state (controlled) */\n isOpen?: boolean;\n /** Open state change handler (controlled) */\n onOpenChange?: (open: boolean) => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Popover Component\n *\n * Floating content container anchored to a trigger element.\n * Useful for contextual information, menus, and form helpers.\n *\n * @example\n * ```tsx\n * <Popover trigger={<Button>Open</Button>}>\n * <View className=\"p-4\">\n * <Text>Popover content</Text>\n * </View>\n * </Popover>\n * ```\n */\nexport const Popover: React.FC<PopoverProps> = ({\n trigger,\n children,\n placement = 'bottom',\n isOpen: controlledIsOpen,\n onOpenChange,\n className,\n}) => {\n const [internalIsOpen, setInternalIsOpen] = useState(false);\n const [position, setPosition] = useState({ x: 0, y: 0, width: 0, height: 0 });\n const triggerRef = useRef<View>(null);\n const fadeAnim = useRef(new Animated.Value(0)).current;\n\n const isOpen =\n controlledIsOpen !== undefined ? controlledIsOpen : internalIsOpen;\n\n const setIsOpen = useCallback(\n (open: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(open);\n }\n onOpenChange?.(open);\n },\n [controlledIsOpen, onOpenChange]\n );\n\n useEffect(() => {\n if (isOpen) {\n Animated.timing(fadeAnim, {\n toValue: 1,\n duration: 150,\n useNativeDriver: true,\n }).start();\n } else {\n fadeAnim.setValue(0);\n }\n }, [isOpen, fadeAnim]);\n\n const handleTriggerPress = () => {\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n setPosition({ x, y, width, height });\n setIsOpen(!isOpen);\n });\n };\n\n // Calculate popover position\n const getPopoverPosition = () => {\n const OFFSET = 8;\n\n switch (placement) {\n case 'top':\n return {\n bottom: position.y > 0 ? undefined : 0,\n top: position.y - OFFSET,\n left: position.x,\n width: position.width,\n transform: [{ translateY: -100 }] as const,\n };\n case 'bottom':\n return {\n top: position.y + position.height + OFFSET,\n left: position.x,\n width: position.width,\n };\n case 'left':\n return {\n top: position.y,\n right: position.x > 0 ? undefined : 0,\n transform: [{ translateX: -8 }] as const,\n };\n case 'right':\n return {\n top: position.y,\n left: position.x + position.width + OFFSET,\n };\n default:\n return {};\n }\n };\n\n return (\n <>\n <Pressable ref={triggerRef} onPress={handleTriggerPress}>\n {trigger}\n </Pressable>\n\n <Modal\n visible={isOpen}\n transparent\n animationType='none'\n onRequestClose={() => setIsOpen(false)}\n >\n <Pressable className='flex-1' onPress={() => setIsOpen(false)}>\n <Animated.View\n style={[\n {\n position: 'absolute',\n ...getPopoverPosition(),\n opacity: fadeAnim,\n },\n ]}\n >\n <Pressable onPress={e => e.stopPropagation()}>\n <View\n className={cn(\n 'bg-white dark:bg-gray-800',\n 'border border-gray-200 dark:border-gray-700',\n 'rounded-lg shadow-lg',\n className\n )}\n >\n {children}\n </View>\n </Pressable>\n </Animated.View>\n </Pressable>\n </Modal>\n </>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback, createContext, useContext } from 'react';\nimport { View, Text, Pressable, ScrollView, ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\n// Context for tabs state\ninterface TabsContextValue {\n value: string;\n onValueChange: (value: string) => void;\n}\n\nconst TabsContext = createContext<TabsContextValue | undefined>(undefined);\n\nconst useTabsContext = () => {\n const context = useContext(TabsContext);\n if (!context) {\n throw new Error('Tabs components must be used within a Tabs provider');\n }\n return context;\n};\n\nexport interface TabsProps extends ViewProps {\n /** Currently selected tab value */\n value?: string;\n /** Default selected tab (uncontrolled) */\n defaultValue?: string;\n /** Callback when tab changes */\n onValueChange?: (value: string) => void;\n /** Children (TabsList and TabsContent) */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Tabs Component\n *\n * Tab navigation component for switching between content panels.\n *\n * @example\n * ```tsx\n * <Tabs defaultValue=\"tab1\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">\n * <Text>Content for Tab 1</Text>\n * </TabsContent>\n * <TabsContent value=\"tab2\">\n * <Text>Content for Tab 2</Text>\n * </TabsContent>\n * </Tabs>\n * ```\n */\nexport const Tabs: React.FC<TabsProps> = ({\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n children,\n className,\n ...viewProps\n}) => {\n const [internalValue, setInternalValue] = useState(defaultValue);\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n\n const handleValueChange = useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, onValueChange]\n );\n\n return (\n <TabsContext.Provider value={{ value, onValueChange: handleValueChange }}>\n <View className={cn('w-full', className)} {...viewProps}>\n {children}\n </View>\n </TabsContext.Provider>\n );\n};\n\nexport interface TabsListProps extends ViewProps {\n /** Tab triggers */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TabsList - Container for tab triggers\n */\nexport const TabsList: React.FC<TabsListProps> = ({\n children,\n className,\n ...viewProps\n}) => (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n className={cn(\n 'flex-row bg-gray-100 dark:bg-gray-800 rounded-lg p-1',\n className\n )}\n contentContainerStyle={{ flexGrow: 1 }}\n {...viewProps}\n >\n {children}\n </ScrollView>\n);\n\nexport interface TabsTriggerProps {\n /** Tab value */\n value: string;\n /** Tab label */\n children: React.ReactNode;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TabsTrigger - Individual tab button\n */\nexport const TabsTrigger: React.FC<TabsTriggerProps> = ({\n value,\n children,\n disabled = false,\n className,\n}) => {\n const { value: selectedValue, onValueChange } = useTabsContext();\n const isSelected = selectedValue === value;\n\n return (\n <Pressable\n onPress={() => !disabled && onValueChange(value)}\n disabled={disabled}\n className={cn(\n 'flex-1 px-4 py-2 rounded-md items-center justify-center',\n isSelected ? 'bg-white dark:bg-gray-700 shadow-sm' : 'bg-transparent',\n disabled && 'opacity-50',\n className\n )}\n accessibilityRole='tab'\n accessibilityState={{ selected: isSelected, disabled }}\n >\n <Text\n className={cn(\n 'text-sm font-medium text-center',\n isSelected\n ? 'text-gray-900 dark:text-white'\n : 'text-gray-600 dark:text-gray-400'\n )}\n >\n {children}\n </Text>\n </Pressable>\n );\n};\n\nexport interface TabsContentProps extends ViewProps {\n /** Tab value this content belongs to */\n value: string;\n /** Content to display */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TabsContent - Content panel for a tab\n */\nexport const TabsContent: React.FC<TabsContentProps> = ({\n value,\n children,\n className,\n ...viewProps\n}) => {\n const { value: selectedValue } = useTabsContext();\n\n if (selectedValue !== value) {\n return null;\n }\n\n return (\n <View className={cn('mt-2', className)} {...viewProps}>\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport { Text, Pressable, Linking } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface LinkProps {\n /** Link URL */\n href: string;\n /** Link content */\n children: React.ReactNode;\n /** Variant style */\n variant?: 'default' | 'primary' | 'secondary' | 'muted' | 'underline';\n /** Show external icon indicator */\n showExternalIcon?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n /** Press handler (if provided, href is not automatically opened) */\n onPress?: () => void;\n}\n\n/**\n * Link Component\n *\n * Versatile link component for React Native with external link handling.\n * Opens URLs using Linking API.\n *\n * @example\n * ```tsx\n * <Link href=\"https://example.com\">External Site</Link>\n * ```\n *\n * @example\n * ```tsx\n * <Link\n * href=\"https://docs.example.com\"\n * variant=\"primary\"\n * showExternalIcon\n * >\n * Documentation\n * </Link>\n * ```\n */\nexport const Link: React.FC<LinkProps> = ({\n href,\n children,\n variant = 'default',\n showExternalIcon = false,\n disabled = false,\n className,\n onPress,\n}) => {\n // Auto-detect external links\n const isExternal = href.startsWith('http://') || href.startsWith('https://');\n\n // Variant configurations\n const variantClasses = {\n default: 'text-blue-600 dark:text-blue-400',\n primary: 'text-blue-600 dark:text-blue-400 font-medium',\n secondary: 'text-gray-600 dark:text-gray-400',\n muted: 'text-gray-500 dark:text-gray-500',\n underline: 'text-blue-600 dark:text-blue-400 underline',\n };\n\n const handlePress = async () => {\n if (disabled) return;\n\n if (onPress) {\n onPress();\n return;\n }\n\n try {\n const supported = await Linking.canOpenURL(href);\n if (supported) {\n await Linking.openURL(href);\n }\n } catch (error) {\n console.error('Failed to open URL:', error);\n }\n };\n\n if (disabled) {\n return (\n <Text className={cn('opacity-50', variantClasses[variant], className)}>\n {children}\n {showExternalIcon && isExternal && <Text className='text-xs'> ↗</Text>}\n </Text>\n );\n }\n\n return (\n <Pressable\n onPress={handlePress}\n accessibilityRole='link'\n accessibilityLabel={typeof children === 'string' ? children : href}\n >\n <Text className={cn(variantClasses[variant], className)}>\n {children}\n {showExternalIcon && isExternal && <Text className='text-xs'> ↗</Text>}\n </Text>\n </Pressable>\n );\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Text, Pressable, ScrollView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface BreadcrumbItem {\n /** Item label */\n label: string;\n /** Press handler (for navigation) */\n onPress?: () => void;\n /** Icon to display before label */\n icon?: React.ReactNode;\n /** Whether item is current page */\n isCurrent?: boolean;\n}\n\nexport interface BreadcrumbProps {\n /** Breadcrumb items */\n items: BreadcrumbItem[];\n /** Separator between items */\n separator?: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Maximum items to display before collapsing */\n maxItems?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Breadcrumb Component\n *\n * Navigation breadcrumb trail showing current page hierarchy.\n * Supports press handlers, custom separators, and collapsing.\n *\n * @example\n * ```tsx\n * <Breadcrumb\n * items={[\n * { label: 'Home', onPress: () => navigate('/') },\n * { label: 'Products', onPress: () => navigate('/products') },\n * { label: 'Item', isCurrent: true }\n * ]}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <Breadcrumb\n * items={breadcrumbs}\n * separator={<ChevronRightIcon />}\n * maxItems={4}\n * />\n * ```\n */\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n items,\n separator = '/',\n size = 'md',\n maxItems,\n className,\n}) => {\n const [isExpanded, setIsExpanded] = useState(false);\n\n // Size configurations\n const sizeClasses = {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n };\n\n // Determine which items to display\n const getDisplayItems = (): (BreadcrumbItem | { type: 'ellipsis' })[] => {\n if (!maxItems || items.length <= maxItems || isExpanded) {\n return items;\n }\n\n // Show first item, ellipsis, and last (maxItems - 2) items\n const firstItems = items.slice(0, 1);\n const lastItems = items.slice(-(maxItems - 2));\n return [...firstItems, { type: 'ellipsis' as const }, ...lastItems];\n };\n\n const displayItems = getDisplayItems();\n\n const renderBreadcrumbItem = (\n item: BreadcrumbItem,\n _index: number,\n isLast: boolean\n ) => {\n const isCurrent = item.isCurrent || isLast;\n\n // Last item should NEVER be pressable\n if (isLast) {\n return (\n <View className='flex-row items-center gap-1.5'>\n {item.icon && <View className='flex-shrink-0'>{item.icon}</View>}\n <Text\n className={cn(\n sizeClasses[size],\n 'text-gray-900 dark:text-white font-medium'\n )}\n accessibilityRole='text'\n >\n {item.label}\n </Text>\n </View>\n );\n }\n\n // Render pressable item\n if (item.onPress) {\n return (\n <Pressable\n onPress={item.onPress}\n className='flex-row items-center gap-1.5 active:opacity-70'\n accessibilityRole='link'\n >\n {item.icon && <View className='flex-shrink-0'>{item.icon}</View>}\n <Text\n className={cn(\n sizeClasses[size],\n 'text-gray-600 dark:text-gray-400'\n )}\n >\n {item.label}\n </Text>\n </Pressable>\n );\n }\n\n return (\n <View className='flex-row items-center gap-1.5'>\n {item.icon && <View className='flex-shrink-0'>{item.icon}</View>}\n <Text\n className={cn(\n sizeClasses[size],\n isCurrent\n ? 'text-gray-900 dark:text-white font-medium'\n : 'text-gray-600 dark:text-gray-400'\n )}\n >\n {item.label}\n </Text>\n </View>\n );\n };\n\n const renderSeparator = () => {\n if (typeof separator === 'string') {\n return (\n <Text className='text-gray-400 dark:text-gray-600 mx-2'>\n {separator}\n </Text>\n );\n }\n return <View className='mx-2'>{separator}</View>;\n };\n\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n className={cn('flex-row', className)}\n contentContainerStyle={{ alignItems: 'center' }}\n accessibilityRole='none'\n accessibilityLabel='Breadcrumb'\n >\n {displayItems.map((item, index) => {\n // Handle ellipsis\n if ('type' in item && item.type === 'ellipsis') {\n return (\n <View key='ellipsis' className='flex-row items-center'>\n <Pressable\n onPress={() => setIsExpanded(true)}\n className='px-1 active:opacity-70'\n accessibilityRole='button'\n accessibilityLabel='Show all breadcrumb items'\n >\n <Text className='text-gray-600 dark:text-gray-400'>...</Text>\n </Pressable>\n {renderSeparator()}\n </View>\n );\n }\n\n const isLast = index === displayItems.length - 1;\n const breadcrumbItem = item as BreadcrumbItem;\n\n return (\n <View key={index} className='flex-row items-center'>\n {renderBreadcrumbItem(breadcrumbItem, index, isLast)}\n {!isLast && renderSeparator()}\n </View>\n );\n })}\n </ScrollView>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PaginationProps {\n /** Current page number (1-indexed) */\n currentPage: number;\n /** Total number of pages */\n totalPages: number;\n /** Page change handler */\n onPageChange: (page: number) => void;\n /** Number of page buttons to show on each side */\n siblingCount?: number;\n /** Show first/last buttons */\n showFirstLast?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Previous icon */\n prevIcon?: React.ReactNode;\n /** Next icon */\n nextIcon?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Pagination Component\n *\n * Flexible pagination controls with page numbers and navigation buttons.\n * Automatically handles ellipsis for large page counts.\n *\n * @example\n * ```tsx\n * <Pagination\n * currentPage={3}\n * totalPages={10}\n * onPageChange={setPage}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <Pagination\n * currentPage={currentPage}\n * totalPages={totalPages}\n * onPageChange={handlePageChange}\n * siblingCount={2}\n * showFirstLast\n * size=\"lg\"\n * />\n * ```\n */\nexport const Pagination: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n showFirstLast = false,\n size = 'md',\n prevIcon,\n nextIcon,\n className,\n}) => {\n // Size configurations\n const sizeConfig = {\n sm: {\n button: 'h-8 w-8',\n text: 'text-xs',\n icon: 'text-xs',\n },\n md: {\n button: 'h-10 w-10',\n text: 'text-sm',\n icon: 'text-sm',\n },\n lg: {\n button: 'h-12 w-12',\n text: 'text-base',\n icon: 'text-base',\n },\n };\n\n const config = sizeConfig[size];\n\n // Generate page numbers to display\n const generatePageNumbers = (): (number | 'ellipsis')[] => {\n const pages: (number | 'ellipsis')[] = [];\n\n // Always show first page\n pages.push(1);\n\n // Calculate range around current page\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 2);\n const rightSiblingIndex = Math.min(\n currentPage + siblingCount,\n totalPages - 1\n );\n\n // Add left ellipsis if needed\n if (leftSiblingIndex > 2) {\n pages.push('ellipsis');\n }\n\n // Add pages around current page\n for (let i = leftSiblingIndex; i <= rightSiblingIndex; i++) {\n pages.push(i);\n }\n\n // Add right ellipsis if needed\n if (rightSiblingIndex < totalPages - 1) {\n pages.push('ellipsis');\n }\n\n // Always show last page (if more than 1 page)\n if (totalPages > 1) {\n pages.push(totalPages);\n }\n\n return pages;\n };\n\n const pages = generatePageNumbers();\n\n const handlePrevious = () => {\n if (currentPage > 1) {\n onPageChange(currentPage - 1);\n }\n };\n\n const handleNext = () => {\n if (currentPage < totalPages) {\n onPageChange(currentPage + 1);\n }\n };\n\n const handleFirst = () => {\n onPageChange(1);\n };\n\n const handleLast = () => {\n onPageChange(totalPages);\n };\n\n const buttonBaseClasses = cn(\n 'items-center justify-center rounded-md border border-gray-300 dark:border-gray-600'\n );\n\n const pageButtonClasses = (isActive: boolean) =>\n cn(\n buttonBaseClasses,\n config.button,\n isActive\n ? 'bg-blue-600 dark:bg-blue-500 border-blue-600 dark:border-blue-500'\n : 'bg-white dark:bg-gray-800'\n );\n\n const navButtonClasses = (disabled: boolean) =>\n cn(\n buttonBaseClasses,\n config.button,\n 'bg-white dark:bg-gray-800',\n disabled && 'opacity-50'\n );\n\n return (\n <View\n className={cn('flex-row items-center gap-1', className)}\n accessibilityRole='none'\n accessibilityLabel='Pagination'\n >\n {/* First button */}\n {showFirstLast && (\n <Pressable\n onPress={handleFirst}\n disabled={currentPage === 1}\n className={navButtonClasses(currentPage === 1)}\n accessibilityRole='button'\n accessibilityLabel='Go to first page'\n accessibilityState={{ disabled: currentPage === 1 }}\n >\n <Text className={cn(config.text, 'text-gray-700 dark:text-gray-300')}>\n First\n </Text>\n </Pressable>\n )}\n\n {/* Previous button */}\n <Pressable\n onPress={handlePrevious}\n disabled={currentPage === 1}\n className={navButtonClasses(currentPage === 1)}\n accessibilityRole='button'\n accessibilityLabel='Go to previous page'\n accessibilityState={{ disabled: currentPage === 1 }}\n >\n {prevIcon || (\n <Text className={cn(config.icon, 'text-gray-700 dark:text-gray-300')}>\n ‹\n </Text>\n )}\n </Pressable>\n\n {/* Page numbers */}\n {pages.map((page, index) => {\n if (page === 'ellipsis') {\n return (\n <View\n key={`ellipsis-${index}`}\n className={cn('items-center justify-center', config.button)}\n >\n <Text className='text-gray-400 dark:text-gray-500'>...</Text>\n </View>\n );\n }\n\n const isActive = page === currentPage;\n return (\n <Pressable\n key={page}\n onPress={() => onPageChange(page)}\n className={pageButtonClasses(isActive)}\n accessibilityRole='button'\n accessibilityLabel={`Go to page ${page}`}\n accessibilityState={{ selected: isActive }}\n >\n <Text\n className={cn(\n config.text,\n isActive ? 'text-white' : 'text-gray-700 dark:text-gray-300'\n )}\n >\n {page}\n </Text>\n </Pressable>\n );\n })}\n\n {/* Next button */}\n <Pressable\n onPress={handleNext}\n disabled={currentPage === totalPages}\n className={navButtonClasses(currentPage === totalPages)}\n accessibilityRole='button'\n accessibilityLabel='Go to next page'\n accessibilityState={{ disabled: currentPage === totalPages }}\n >\n {nextIcon || (\n <Text className={cn(config.icon, 'text-gray-700 dark:text-gray-300')}>\n ›\n </Text>\n )}\n </Pressable>\n\n {/* Last button */}\n {showFirstLast && (\n <Pressable\n onPress={handleLast}\n disabled={currentPage === totalPages}\n className={navButtonClasses(currentPage === totalPages)}\n accessibilityRole='button'\n accessibilityLabel='Go to last page'\n accessibilityState={{ disabled: currentPage === totalPages }}\n >\n <Text className={cn(config.text, 'text-gray-700 dark:text-gray-300')}>\n Last\n </Text>\n </Pressable>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\n/**\n * Setting item interface\n */\nexport interface SettingItem {\n /** Unique identifier */\n id: string;\n /** Setting title */\n title: string;\n /** Icon component or element */\n icon?: React.ReactNode;\n /** Optional description */\n description?: string;\n}\n\nexport interface SettingsListProps {\n /** Array of setting items to display */\n settings: SettingItem[];\n /** Currently selected setting ID */\n selectedSetting?: string;\n /** Callback when a setting is selected */\n onSettingSelect: (settingId: string) => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * SettingsList Component\n *\n * Displays a list of setting items for navigation, similar to how\n * mailboxes are displayed in a mail client sidebar.\n *\n * Features:\n * - Each item shows an icon and title\n * - Highlights the currently selected setting\n * - Active states for better UX\n * - Dark mode support\n * - Accessible navigation\n *\n * @example\n * ```tsx\n * <SettingsList\n * settings={[\n * { id: 'general', title: 'General', icon: <CogIcon /> },\n * { id: 'forwarding', title: 'Forwarding', icon: <ArrowRightIcon /> },\n * ]}\n * selectedSetting=\"general\"\n * onSettingSelect={handleSelect}\n * />\n * ```\n */\nexport const SettingsList: React.FC<SettingsListProps> = ({\n settings,\n selectedSetting,\n onSettingSelect,\n className,\n}) => {\n return (\n <View\n className={cn('gap-1', className)}\n accessibilityRole='list'\n accessibilityLabel='Settings navigation'\n >\n {settings.map(setting => {\n const isSelected = selectedSetting === setting.id;\n\n return (\n <Pressable\n key={setting.id}\n onPress={() => onSettingSelect(setting.id)}\n className={cn(\n 'flex-row items-center px-3 py-2.5 rounded-lg min-h-[44px]',\n isSelected\n ? 'bg-orange-100 dark:bg-orange-900/30'\n : 'active:bg-gray-100 dark:active:bg-gray-700'\n )}\n accessibilityRole='button'\n accessibilityState={{ selected: isSelected }}\n accessibilityLabel={setting.title}\n accessibilityHint={setting.description}\n >\n {setting.icon && (\n <View className='w-5 h-5 mr-3 flex-shrink-0'>{setting.icon}</View>\n )}\n <View className='flex-1 min-w-0'>\n <Text\n className={cn(\n 'text-sm',\n isSelected\n ? 'text-orange-700 dark:text-orange-300'\n : 'text-gray-700 dark:text-gray-300'\n )}\n numberOfLines={1}\n >\n {setting.title}\n </Text>\n </View>\n </Pressable>\n );\n })}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface NavigationItem {\n /** Unique identifier for the item */\n id: string;\n /** Display label */\n label: string;\n /** Optional description/subtitle */\n description?: string;\n /** Icon component or element */\n icon: React.ReactNode;\n /** Path or identifier for selection */\n path: string;\n /** Optional badge count */\n badge?: number;\n /** Whether the item is disabled */\n disabled?: boolean;\n}\n\nexport interface NavigationListProps {\n /** Array of navigation items */\n items: NavigationItem[];\n /** Currently selected item path */\n selectedPath?: string;\n /** Callback when an item is selected */\n onSelect: (path: string) => void;\n /** Variant of the navigation list */\n variant?: 'default' | 'compact' | 'sidebar';\n /** Additional className for the container */\n className?: string;\n}\n\n/**\n * NavigationList Component\n *\n * Displays a list of navigation items with icons, labels, and descriptions.\n * Commonly used in settings pages and documentation for master-detail layouts.\n *\n * @example\n * ```tsx\n * const items = [\n * {\n * id: 'general',\n * label: 'General',\n * description: 'Basic account settings',\n * icon: <Cog6ToothIcon />,\n * path: '/settings/general'\n * },\n * // ...\n * ];\n *\n * <NavigationList\n * items={items}\n * selectedPath={currentPath}\n * onSelect={handleSelect}\n * />\n * ```\n */\nexport const NavigationList: React.FC<NavigationListProps> = ({\n items,\n selectedPath,\n onSelect,\n variant = 'default',\n className,\n}) => {\n const containerClass = variant === 'compact' ? 'gap-1' : 'gap-0';\n\n return (\n <View className={cn(containerClass, className)} accessibilityRole='list'>\n {items.map((item, index) => {\n const isSelected = selectedPath === item.path;\n const isDisabled = item.disabled;\n const isLast = index === items.length - 1;\n\n return (\n <Pressable\n key={item.id}\n onPress={() => !isDisabled && onSelect(item.path)}\n disabled={isDisabled}\n className={cn(\n 'flex-row items-start',\n variant === 'compact'\n ? 'p-3 rounded-lg'\n : cn(\n 'p-4',\n !isLast && 'border-b border-gray-200 dark:border-gray-700'\n ),\n isDisabled && 'opacity-50',\n !isDisabled &&\n (isSelected\n ? 'bg-blue-50 dark:bg-blue-900/20'\n : 'active:bg-gray-50 dark:active:bg-gray-700')\n )}\n accessibilityRole='button'\n accessibilityState={{\n selected: isSelected,\n disabled: isDisabled,\n }}\n accessibilityLabel={item.label}\n accessibilityHint={item.description}\n >\n <View className='w-5 h-5 mt-0.5 mr-3 flex-shrink-0'>\n {item.icon}\n </View>\n <View className='flex-1 min-w-0'>\n <View className='flex-row items-center'>\n <Text\n className={cn(\n 'font-medium',\n isSelected\n ? 'text-blue-600 dark:text-blue-400'\n : 'text-gray-700 dark:text-gray-300'\n )}\n >\n {item.label}\n </Text>\n {item.badge !== undefined && item.badge > 0 && (\n <View className='ml-2 px-2 py-0.5 bg-blue-100 dark:bg-blue-900 rounded-full'>\n <Text className='text-xs font-medium text-blue-800 dark:text-blue-200'>\n {item.badge}\n </Text>\n </View>\n )}\n </View>\n {item.description && (\n <Text className='text-xs text-gray-500 dark:text-gray-400 mt-0.5'>\n {item.description}\n </Text>\n )}\n </View>\n </Pressable>\n );\n })}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useRef, useCallback } from 'react';\nimport {\n View,\n Pressable,\n Text,\n Modal,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface DropdownItem {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Icon component */\n icon?: React.ReactNode;\n /** Press handler */\n onPress: () => void;\n /** Whether item is disabled */\n disabled?: boolean;\n /** Whether to render as separator */\n separator?: boolean;\n}\n\nexport interface DropdownProps {\n /** Trigger element */\n trigger: React.ReactNode;\n /** Menu items */\n items: DropdownItem[];\n /** Alignment relative to trigger */\n align?: 'left' | 'right';\n /** Additional className for container */\n className?: string;\n /** Variant style */\n variant?: 'default' | 'bordered';\n}\n\n/**\n * Dropdown Component\n *\n * A dropdown menu that displays a list of actions when triggered.\n * Uses Modal for overlay behavior on React Native.\n *\n * @example\n * ```tsx\n * <Dropdown\n * trigger={<Button>Menu</Button>}\n * items={[\n * { id: '1', label: 'Edit', onPress: handleEdit },\n * { id: '2', label: 'Delete', onPress: handleDelete, variant: 'danger' },\n * ]}\n * />\n * ```\n */\nexport const Dropdown: React.FC<DropdownProps> = ({\n trigger,\n items,\n align = 'right',\n className,\n variant = 'default',\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [triggerLayout, setTriggerLayout] = useState({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n });\n const triggerRef = useRef<View>(null);\n\n const handleOpen = useCallback(() => {\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n setTriggerLayout({ x, y, width, height });\n setIsOpen(true);\n });\n }, []);\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const handleItemPress = useCallback((item: DropdownItem) => {\n if (!item.disabled) {\n item.onPress();\n setIsOpen(false);\n }\n }, []);\n\n // Calculate menu position\n const menuStyle = {\n position: 'absolute' as const,\n top: triggerLayout.y + triggerLayout.height + 4,\n ...(align === 'left'\n ? { left: triggerLayout.x }\n : {\n right: triggerLayout.x > 0 ? undefined : 16,\n left:\n align === 'right'\n ? triggerLayout.x + triggerLayout.width - 200\n : triggerLayout.x,\n }),\n minWidth: 160,\n maxWidth: 280,\n };\n\n return (\n <View className={cn('relative', className)} ref={triggerRef}>\n <Pressable\n onPress={handleOpen}\n className={cn(\n variant === 'bordered' &&\n 'border border-gray-300 dark:border-gray-600 rounded-md px-3 py-2'\n )}\n accessibilityRole='button'\n accessibilityLabel='Open menu'\n accessibilityState={{ expanded: isOpen }}\n >\n {trigger}\n </Pressable>\n\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={handleClose}\n >\n <TouchableWithoutFeedback onPress={handleClose}>\n <View className='flex-1'>\n <View\n style={menuStyle}\n className='bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 py-1 overflow-hidden'\n >\n {items.map(item =>\n item.separator ? (\n <View\n key={item.id}\n className='my-1 h-px bg-gray-200 dark:bg-gray-700'\n accessibilityRole='none'\n />\n ) : (\n <Pressable\n key={item.id}\n onPress={() => handleItemPress(item)}\n disabled={item.disabled}\n className={cn(\n 'flex-row items-center gap-2 px-4 py-2.5',\n item.disabled\n ? 'opacity-50'\n : 'active:bg-gray-100 dark:active:bg-gray-700'\n )}\n accessibilityRole='menuitem'\n accessibilityState={{ disabled: item.disabled }}\n >\n {item.icon && <View className='w-5 h-5'>{item.icon}</View>}\n <Text\n className={cn(\n 'text-sm',\n item.disabled\n ? 'text-gray-400 dark:text-gray-500'\n : 'text-gray-700 dark:text-gray-200'\n )}\n >\n {item.label}\n </Text>\n </Pressable>\n )\n )}\n </View>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, useWindowDimensions } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface AspectRatioProps {\n /** Content to maintain aspect ratio */\n children: React.ReactNode;\n /** Aspect ratio (width/height or preset) */\n ratio?: number | '16/9' | '4/3' | '1/1' | '21/9' | '3/2';\n /** Additional className */\n className?: string;\n /** Fixed width (optional, defaults to full width) */\n width?: number | 'full';\n}\n\n/**\n * AspectRatio Component\n *\n * Maintains a specific aspect ratio for its content.\n * Useful for responsive images, videos, and embeds.\n *\n * @example\n * ```tsx\n * <AspectRatio ratio=\"16/9\">\n * <Image source={{ uri: '/image.jpg' }} style={{ flex: 1 }} />\n * </AspectRatio>\n * ```\n *\n * @example\n * ```tsx\n * <AspectRatio ratio={1.5} width={200}>\n * <View style={{ backgroundColor: 'blue', flex: 1 }} />\n * </AspectRatio>\n * ```\n */\nexport const AspectRatio: React.FC<AspectRatioProps> = ({\n children,\n ratio = '16/9',\n className,\n width = 'full',\n}) => {\n const { width: screenWidth } = useWindowDimensions();\n\n // Convert preset ratios to numbers\n const ratioMap: Record<string, number> = {\n '16/9': 16 / 9,\n '4/3': 4 / 3,\n '1/1': 1,\n '21/9': 21 / 9,\n '3/2': 3 / 2,\n };\n\n const numericRatio = typeof ratio === 'string' ? ratioMap[ratio] : ratio;\n\n // Calculate container width\n const containerWidth = width === 'full' ? screenWidth : width;\n\n return (\n <View\n className={cn('relative overflow-hidden', className)}\n style={{\n width: width === 'full' ? '100%' : containerWidth,\n aspectRatio: numericRatio,\n }}\n >\n <View className='absolute inset-0'>{children}</View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, ScrollView } from 'react-native';\nimport type { LayoutChangeEvent } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface AspectFitViewProps {\n /** Aspect ratio as width / height (e.g. 16/9) */\n aspectRatio: number;\n /** Content to render inside the aspect ratio container */\n children: React.ReactNode;\n /** Additional className for the outer container */\n className?: string;\n /** Additional className for the inner aspect ratio box */\n innerClassName?: string;\n}\n\n/**\n * AspectFitView - A container that maintains a fixed aspect ratio using AspectFit behavior.\n *\n * The inner box scales to be as large as possible while fitting entirely within\n * the parent, constrained by both width and height. Content that overflows\n * the box is scrollable. The box is horizontally centered.\n *\n * @example\n * ```tsx\n * <AspectFitView aspectRatio={16 / 9}>\n * <MyContent />\n * </AspectFitView>\n * ```\n */\nexport const AspectFitView: React.FC<AspectFitViewProps> = ({\n aspectRatio,\n children,\n className,\n innerClassName,\n}) => {\n const [size, setSize] = React.useState<{\n width: number;\n height: number;\n } | null>(null);\n\n const onLayout = React.useCallback((event: LayoutChangeEvent) => {\n const { width, height } = event.nativeEvent.layout;\n setSize({ width, height });\n }, []);\n\n // Calculate AspectFit dimensions\n let innerWidth = 0;\n let innerHeight = 0;\n if (size) {\n const parentRatio = size.width / size.height;\n if (aspectRatio > parentRatio) {\n // Width-constrained\n innerWidth = size.width;\n innerHeight = size.width / aspectRatio;\n } else {\n // Height-constrained\n innerHeight = size.height;\n innerWidth = size.height * aspectRatio;\n }\n }\n\n return (\n <View className={cn('flex-1', className)} onLayout={onLayout}>\n {size && (\n <View className={cn('items-center', innerClassName)}>\n <ScrollView style={{ width: innerWidth, height: innerHeight }}>\n {children}\n </ScrollView>\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface QuickAction {\n /** Unique identifier */\n id: string;\n /** Button label */\n label: string;\n /** Icon component or element */\n icon?: React.ReactNode;\n /** Press handler */\n onPress: () => void;\n /** Button variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger';\n /** Whether button is disabled */\n disabled?: boolean;\n}\n\nexport interface QuickActionsProps {\n /** Actions to display */\n actions: QuickAction[];\n /** Layout orientation */\n orientation?: 'horizontal' | 'vertical' | 'grid';\n /** Grid columns (when orientation is grid) */\n columns?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * QuickActions Component\n *\n * Quick action buttons for dashboard.\n * Supports multiple layouts and variants.\n *\n * @example\n * ```tsx\n * <QuickActions\n * actions={[\n * { id: '1', label: 'New Project', icon: <PlusIcon />, onPress: () => {}, variant: 'primary' },\n * { id: '2', label: 'Upload File', icon: <UploadIcon />, onPress: () => {} },\n * { id: '3', label: 'Export Data', icon: <DownloadIcon />, onPress: () => {} }\n * ]}\n * orientation=\"grid\"\n * columns={3}\n * />\n * ```\n */\nexport const QuickActions: React.FC<QuickActionsProps> = ({\n actions,\n orientation = 'horizontal',\n columns = 3,\n className,\n}) => {\n const variantStyles = {\n default: {\n bg: 'bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',\n bgActive: 'active:bg-gray-50 dark:active:bg-gray-800',\n text: 'text-gray-900 dark:text-white',\n },\n primary: {\n bg: 'bg-blue-500 border-blue-500',\n bgActive: 'active:bg-blue-600',\n text: 'text-white',\n },\n success: {\n bg: 'bg-green-500 border-green-500',\n bgActive: 'active:bg-green-600',\n text: 'text-white',\n },\n warning: {\n bg: 'bg-yellow-500 border-yellow-500',\n bgActive: 'active:bg-yellow-600',\n text: 'text-white',\n },\n danger: {\n bg: 'bg-red-500 border-red-500',\n bgActive: 'active:bg-red-600',\n text: 'text-white',\n },\n };\n\n const layoutClasses = {\n horizontal: 'flex-row flex-wrap gap-2',\n vertical: 'flex-col gap-2',\n grid: 'flex-row flex-wrap gap-2',\n };\n\n // Calculate item flex for grid layout\n const getGridFlex = () => {\n if (orientation !== 'grid') return undefined;\n return 1 / columns;\n };\n\n return (\n <View className={cn(layoutClasses[orientation], className)}>\n {actions.map(action => {\n const variant = action.variant || 'default';\n const styles = variantStyles[variant];\n\n return (\n <Pressable\n key={action.id}\n onPress={action.onPress}\n disabled={action.disabled}\n className={cn(\n 'flex-row items-center justify-center gap-2 px-4 py-3 rounded-lg border',\n styles.bg,\n !action.disabled && styles.bgActive,\n action.disabled && 'opacity-50',\n orientation === 'vertical' && 'w-full'\n )}\n style={\n orientation === 'grid'\n ? { flex: getGridFlex(), minWidth: 100 }\n : undefined\n }\n accessibilityRole='button'\n accessibilityLabel={action.label}\n accessibilityState={{ disabled: action.disabled }}\n >\n {action.icon && <View className='w-5 h-5'>{action.icon}</View>}\n <Text className={cn('font-medium', styles.text)}>\n {action.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface EmptyStateProps {\n /** Icon or illustration to display */\n icon?: React.ReactNode;\n /** Main title */\n title: string;\n /** Description text */\n description?: string;\n /** Action button(s) */\n action?: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * EmptyState Component\n *\n * Displays a placeholder for empty lists, search results, or content areas.\n * Includes icon, title, description, and optional action button.\n *\n * @example\n * ```tsx\n * <EmptyState\n * icon={<InboxIcon className=\"w-12 h-12\" />}\n * title=\"No messages\"\n * description=\"You don't have any messages yet.\"\n * action={<Button onPress={handleCompose}>Compose</Button>}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <EmptyState\n * icon={<SearchIcon />}\n * title=\"No results found\"\n * description=\"Try adjusting your search or filter to find what you're looking for.\"\n * size=\"sm\"\n * />\n * ```\n */\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n icon,\n title,\n description,\n action,\n size = 'md',\n className,\n}) => {\n // Size configurations\n const sizeConfig = {\n sm: {\n container: 'py-6 px-4',\n iconContainer: 'w-10 h-10 mb-3',\n title: 'text-base',\n description: 'text-sm',\n },\n md: {\n container: 'py-10 px-6',\n iconContainer: 'w-14 h-14 mb-4',\n title: 'text-lg',\n description: 'text-base',\n },\n lg: {\n container: 'py-16 px-8',\n iconContainer: 'w-20 h-20 mb-6',\n title: 'text-xl',\n description: 'text-base',\n },\n };\n\n const config = sizeConfig[size];\n\n return (\n <View\n className={cn('items-center justify-center', config.container, className)}\n accessibilityRole='none'\n >\n {icon && (\n <View\n className={cn(\n 'items-center justify-center',\n config.iconContainer,\n 'text-gray-400 dark:text-gray-500'\n )}\n >\n {icon}\n </View>\n )}\n\n <Text\n className={cn(\n 'font-semibold text-gray-900 dark:text-white text-center',\n config.title\n )}\n >\n {title}\n </Text>\n\n {description && (\n <Text\n className={cn(\n 'text-gray-500 dark:text-gray-400 text-center mt-2 max-w-xs',\n config.description\n )}\n >\n {description}\n </Text>\n )}\n\n {action && <View className='mt-6'>{action}</View>}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CalendarProps {\n /** Selected date */\n value?: Date;\n /** Change handler */\n onChange: (date: Date) => void;\n /** Minimum selectable date */\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Disabled dates */\n disabledDates?: Date[];\n /** Show outside days */\n showOutsideDays?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Calendar Component\n *\n * Interactive calendar for date selection.\n * Supports min/max dates and disabled dates.\n *\n * @example\n * ```tsx\n * <Calendar\n * value={selectedDate}\n * onChange={setSelectedDate}\n * minDate={new Date()}\n * />\n * ```\n */\nexport const Calendar: React.FC<CalendarProps> = ({\n value,\n onChange,\n minDate,\n maxDate,\n disabledDates = [],\n showOutsideDays = true,\n className,\n}) => {\n const [currentMonth, setCurrentMonth] = useState(value || new Date());\n\n // Get days in month\n const getDaysInMonth = (date: Date) => {\n const year = date.getFullYear();\n const month = date.getMonth();\n return new Date(year, month + 1, 0).getDate();\n };\n\n // Get first day of month (0 = Sunday, 6 = Saturday)\n const getFirstDayOfMonth = (date: Date) => {\n const year = date.getFullYear();\n const month = date.getMonth();\n return new Date(year, month, 1).getDay();\n };\n\n // Check if date is same day\n const isSameDay = (date1: Date, date2: Date) => {\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n );\n };\n\n // Check if date is disabled\n const isDateDisabled = (date: Date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return disabledDates.some(disabledDate => isSameDay(date, disabledDate));\n };\n\n // Navigate months\n const goToPreviousMonth = () => {\n setCurrentMonth(\n new Date(currentMonth.getFullYear(), currentMonth.getMonth() - 1)\n );\n };\n\n const goToNextMonth = () => {\n setCurrentMonth(\n new Date(currentMonth.getFullYear(), currentMonth.getMonth() + 1)\n );\n };\n\n // Generate calendar days\n const generateCalendarDays = () => {\n const year = currentMonth.getFullYear();\n const month = currentMonth.getMonth();\n const daysInMonth = getDaysInMonth(currentMonth);\n const firstDay = getFirstDayOfMonth(currentMonth);\n const days: (Date | null)[] = [];\n\n // Add previous month days\n if (showOutsideDays) {\n const prevMonthDays = getDaysInMonth(new Date(year, month - 1));\n for (let i = firstDay - 1; i >= 0; i--) {\n days.push(new Date(year, month - 1, prevMonthDays - i));\n }\n } else {\n for (let i = 0; i < firstDay; i++) {\n days.push(null);\n }\n }\n\n // Add current month days\n for (let day = 1; day <= daysInMonth; day++) {\n days.push(new Date(year, month, day));\n }\n\n // Add next month days to fill grid\n if (showOutsideDays) {\n const remainingDays = 42 - days.length; // 6 rows * 7 days\n for (let day = 1; day <= remainingDays; day++) {\n days.push(new Date(year, month + 1, day));\n }\n }\n\n return days;\n };\n\n const calendarDays = generateCalendarDays();\n const weekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n const handleDayPress = (date: Date | null) => {\n if (!date || isDateDisabled(date)) return;\n onChange(date);\n };\n\n const monthYear = currentMonth.toLocaleDateString('en-US', {\n month: 'long',\n year: 'numeric',\n });\n\n // Split days into weeks for grid layout\n const weeks: (Date | null)[][] = [];\n for (let i = 0; i < calendarDays.length; i += 7) {\n weeks.push(calendarDays.slice(i, i + 7));\n }\n\n return (\n <View className={cn('bg-white dark:bg-gray-900 rounded-lg p-4', className)}>\n {/* Header */}\n <View className='flex-row items-center justify-between mb-4'>\n <Pressable\n onPress={goToPreviousMonth}\n className='p-2 active:bg-gray-100 dark:active:bg-gray-800 rounded-md'\n accessibilityRole='button'\n accessibilityLabel='Previous month'\n >\n <Text className='text-lg text-gray-700 dark:text-gray-300'>‹</Text>\n </Pressable>\n\n <Text className='text-base font-semibold text-gray-900 dark:text-white'>\n {monthYear}\n </Text>\n\n <Pressable\n onPress={goToNextMonth}\n className='p-2 active:bg-gray-100 dark:active:bg-gray-800 rounded-md'\n accessibilityRole='button'\n accessibilityLabel='Next month'\n >\n <Text className='text-lg text-gray-700 dark:text-gray-300'>›</Text>\n </Pressable>\n </View>\n\n {/* Week days header */}\n <View className='flex-row mb-2'>\n {weekDays.map(day => (\n <View key={day} className='flex-1 items-center py-2'>\n <Text className='text-xs font-medium text-gray-600 dark:text-gray-400'>\n {day}\n </Text>\n </View>\n ))}\n </View>\n\n {/* Calendar grid */}\n {weeks.map((week, weekIndex) => (\n <View key={weekIndex} className='flex-row'>\n {week.map((date, dayIndex) => {\n if (!date) {\n return (\n <View\n key={`empty-${dayIndex}`}\n className='flex-1 aspect-square'\n />\n );\n }\n\n const isCurrentMonth = date.getMonth() === currentMonth.getMonth();\n const isSelected = value && isSameDay(date, value);\n const isToday = isSameDay(date, new Date());\n const isDisabled = isDateDisabled(date);\n\n return (\n <Pressable\n key={`${date.getTime()}-${dayIndex}`}\n onPress={() => handleDayPress(date)}\n disabled={isDisabled}\n className={cn(\n 'flex-1 aspect-square items-center justify-center rounded-md m-0.5',\n !isDisabled && 'active:bg-gray-100 dark:active:bg-gray-800',\n isDisabled && 'opacity-40',\n isSelected && 'bg-blue-600 dark:bg-blue-500',\n isToday &&\n !isSelected &&\n 'border-2 border-blue-600 dark:border-blue-400'\n )}\n accessibilityRole='button'\n accessibilityLabel={date.toLocaleDateString()}\n accessibilityState={{\n selected: isSelected,\n disabled: isDisabled,\n }}\n >\n <Text\n className={cn(\n 'text-sm',\n isCurrentMonth\n ? 'text-gray-900 dark:text-white'\n : 'text-gray-400 dark:text-gray-600',\n isSelected && 'text-white font-semibold'\n )}\n >\n {date.getDate()}\n </Text>\n </Pressable>\n );\n })}\n </View>\n ))}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable, FlatList } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface DataListColumn<T> {\n /** Column key */\n key: string;\n /** Column label */\n label: string;\n /** Render cell content */\n render?: (row: T, index: number) => React.ReactNode;\n /** Flex value for width */\n flex?: number;\n /** Align content */\n align?: 'left' | 'center' | 'right';\n}\n\nexport interface DataListProps<T> {\n /** Table columns */\n columns: DataListColumn<T>[];\n /** Table data */\n data: T[];\n /** Row key extractor */\n keyExtractor: (row: T, index: number) => string;\n /** Row press handler */\n onRowPress?: (row: T, index: number) => void;\n /** Compact mode */\n compact?: boolean;\n /** Show column headers */\n showHeader?: boolean;\n /** Empty state message */\n emptyMessage?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * DataList Component\n *\n * Mobile-friendly data list component (alternative to table).\n * Uses FlatList for virtualization and performance.\n *\n * @example\n * ```tsx\n * <DataList\n * columns={[\n * { key: 'name', label: 'Name', flex: 2 },\n * { key: 'email', label: 'Email', flex: 3 },\n * { key: 'role', label: 'Role', flex: 1, align: 'right' }\n * ]}\n * data={users}\n * keyExtractor={(user) => user.id}\n * onRowPress={handleRowPress}\n * />\n * ```\n */\nexport function DataList<T extends Record<string, unknown>>({\n columns,\n data,\n keyExtractor,\n onRowPress,\n compact = false,\n showHeader = true,\n emptyMessage = 'No data available',\n className,\n}: DataListProps<T>) {\n const alignClasses = {\n left: 'items-start',\n center: 'items-center',\n right: 'items-end',\n };\n\n const renderHeader = () => {\n if (!showHeader) return null;\n\n return (\n <View className='flex-row bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700'>\n {columns.map(column => (\n <View\n key={column.key}\n className={cn(\n compact ? 'px-3 py-2' : 'px-4 py-3',\n alignClasses[column.align || 'left']\n )}\n style={{ flex: column.flex || 1 }}\n >\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 uppercase tracking-wider'>\n {column.label}\n </Text>\n </View>\n ))}\n </View>\n );\n };\n\n const renderRow = ({ item, index }: { item: T; index: number }) => {\n const isOdd = index % 2 === 1;\n\n return (\n <Pressable\n onPress={() => onRowPress?.(item, index)}\n className={cn(\n 'flex-row border-b border-gray-200 dark:border-gray-700',\n isOdd && 'bg-gray-50 dark:bg-gray-800/50',\n onRowPress && 'active:bg-gray-100 dark:active:bg-gray-800'\n )}\n disabled={!onRowPress}\n accessibilityRole={onRowPress ? 'button' : 'none'}\n >\n {columns.map(column => (\n <View\n key={column.key}\n className={cn(\n compact ? 'px-3 py-2' : 'px-4 py-3',\n alignClasses[column.align || 'left'],\n 'justify-center'\n )}\n style={{ flex: column.flex || 1 }}\n >\n {column.render ? (\n column.render(item, index)\n ) : (\n <Text\n className='text-sm text-gray-900 dark:text-white'\n numberOfLines={1}\n >\n {String(item[column.key] ?? '')}\n </Text>\n )}\n </View>\n ))}\n </Pressable>\n );\n };\n\n const renderEmpty = () => (\n <View className='py-8 items-center'>\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n {emptyMessage}\n </Text>\n </View>\n );\n\n return (\n <View className={cn('bg-white dark:bg-gray-900', className)}>\n {renderHeader()}\n <FlatList\n data={data}\n keyExtractor={keyExtractor}\n renderItem={renderRow}\n ListEmptyComponent={renderEmpty}\n showsVerticalScrollIndicator={false}\n />\n </View>\n );\n}\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Modal,\n TextInput,\n ScrollView,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface MultiSelectOption {\n /** Option value */\n value: string;\n /** Option label */\n label: string;\n /** Disabled state */\n disabled?: boolean;\n}\n\nexport interface MultiSelectProps {\n /** Available options */\n options: MultiSelectOption[];\n /** Selected values */\n value: string[];\n /** Change handler */\n onChange: (values: string[]) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** Enable search */\n searchable?: boolean;\n /** Max selected items to show */\n maxDisplay?: number;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * MultiSelect Component\n *\n * Multi-select dropdown with search and tags.\n * Shows selected items as removable tags.\n *\n * @example\n * ```tsx\n * <MultiSelect\n * options={categories}\n * value={selectedCategories}\n * onChange={setSelectedCategories}\n * placeholder=\"Select categories\"\n * searchable\n * />\n * ```\n */\nexport const MultiSelect: React.FC<MultiSelectProps> = ({\n options,\n value,\n onChange,\n placeholder = 'Select items...',\n searchPlaceholder = 'Search...',\n searchable = true,\n maxDisplay = 3,\n disabled = false,\n className,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n\n // Filter options based on search\n const filteredOptions = searchable\n ? options.filter(opt =>\n opt.label.toLowerCase().includes(searchQuery.toLowerCase())\n )\n : options;\n\n // Get selected option labels\n const selectedOptions = options.filter(opt => value.includes(opt.value));\n\n // Handle option toggle\n const toggleOption = useCallback(\n (optionValue: string) => {\n if (value.includes(optionValue)) {\n onChange(value.filter(v => v !== optionValue));\n } else {\n onChange([...value, optionValue]);\n }\n },\n [value, onChange]\n );\n\n // Remove selected item\n const removeItem = useCallback(\n (optionValue: string) => {\n onChange(value.filter(v => v !== optionValue));\n },\n [value, onChange]\n );\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n setSearchQuery('');\n }, []);\n\n const displayedCount = selectedOptions.length;\n const hiddenCount =\n displayedCount > maxDisplay ? displayedCount - maxDisplay : 0;\n\n return (\n <View className={cn('w-full', className)}>\n {/* Trigger */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'min-h-[44px] px-3 py-2',\n 'bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={placeholder}\n accessibilityState={{ disabled, expanded: isOpen }}\n >\n <View className='flex-row flex-wrap gap-1.5'>\n {selectedOptions.length === 0 ? (\n <Text className='text-sm text-gray-500 dark:text-gray-400 py-0.5'>\n {placeholder}\n </Text>\n ) : (\n <>\n {selectedOptions.slice(0, maxDisplay).map(opt => (\n <View\n key={opt.value}\n className='flex-row items-center gap-1 px-2 py-0.5 bg-blue-100 dark:bg-blue-900/30 rounded'\n >\n <Text className='text-xs font-medium text-blue-700 dark:text-blue-300'>\n {opt.label}\n </Text>\n <Pressable\n onPress={() => removeItem(opt.value)}\n hitSlop={8}\n accessibilityRole='button'\n accessibilityLabel={`Remove ${opt.label}`}\n >\n <Text className='text-blue-700 dark:text-blue-300'>×</Text>\n </Pressable>\n </View>\n ))}\n {hiddenCount > 0 && (\n <View className='px-2 py-0.5 bg-gray-200 dark:bg-gray-700 rounded'>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300'>\n +{hiddenCount} more\n </Text>\n </View>\n )}\n </>\n )}\n </View>\n </Pressable>\n\n {/* Dropdown Modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={handleClose}\n >\n <TouchableWithoutFeedback onPress={handleClose}>\n <View className='flex-1 justify-end bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-t-xl max-h-[70%]'>\n {/* Search */}\n {searchable && (\n <View className='p-3 border-b border-gray-200 dark:border-gray-700'>\n <TextInput\n value={searchQuery}\n onChangeText={setSearchQuery}\n placeholder={searchPlaceholder}\n placeholderTextColor='#9ca3af'\n className='px-3 py-2 text-sm bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white rounded-md'\n />\n </View>\n )}\n\n {/* Options */}\n <ScrollView className='max-h-80'>\n {filteredOptions.length === 0 ? (\n <View className='px-3 py-4 items-center'>\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n No options found\n </Text>\n </View>\n ) : (\n filteredOptions.map(option => {\n const isSelected = value.includes(option.value);\n\n return (\n <Pressable\n key={option.value}\n onPress={() =>\n !option.disabled && toggleOption(option.value)\n }\n disabled={option.disabled}\n className={cn(\n 'flex-row items-center gap-3 px-4 py-3',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n option.disabled && 'opacity-50'\n )}\n accessibilityRole='checkbox'\n accessibilityState={{\n checked: isSelected,\n disabled: option.disabled,\n }}\n >\n {/* Checkbox */}\n <View\n className={cn(\n 'w-5 h-5 border-2 rounded items-center justify-center',\n isSelected\n ? 'bg-blue-600 border-blue-600 dark:bg-blue-500 dark:border-blue-500'\n : 'border-gray-300 dark:border-gray-600'\n )}\n >\n {isSelected && (\n <Text className='text-xs text-white font-bold'>\n ✓\n </Text>\n )}\n </View>\n\n {/* Label */}\n <Text className='flex-1 text-sm text-gray-900 dark:text-white'>\n {option.label}\n </Text>\n </Pressable>\n );\n })\n )}\n </ScrollView>\n\n {/* Footer */}\n <View className='p-3 border-t border-gray-200 dark:border-gray-700 flex-row justify-between items-center'>\n <Text className='text-xs text-gray-600 dark:text-gray-400'>\n {value.length} selected\n </Text>\n <View className='flex-row gap-3'>\n {value.length > 0 && (\n <Pressable\n onPress={() => onChange([])}\n accessibilityRole='button'\n accessibilityLabel='Clear all'\n >\n <Text className='text-sm text-blue-600 dark:text-blue-400'>\n Clear all\n </Text>\n </Pressable>\n )}\n <Pressable\n onPress={handleClose}\n accessibilityRole='button'\n accessibilityLabel='Done'\n >\n <Text className='text-sm font-medium text-blue-600 dark:text-blue-400'>\n Done\n </Text>\n </Pressable>\n </View>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ProgressCircleProps {\n /** Progress value (0-100) */\n value: number;\n /** Circle size in pixels */\n size?: number;\n /** Stroke width */\n strokeWidth?: number;\n /** Show percentage text */\n showValue?: boolean;\n /** Custom label */\n label?: string;\n /** Color variant */\n variant?: 'primary' | 'success' | 'warning' | 'danger';\n /** Custom color (hex) */\n color?: string;\n /** Background track color (hex) */\n trackColor?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * ProgressCircle Component\n *\n * Circular progress indicator with customizable size and colors.\n * Displays percentage or custom label in the center.\n * Uses View-based approach for React Native compatibility.\n *\n * @example\n * ```tsx\n * <ProgressCircle\n * value={75}\n * size={120}\n * showValue\n * variant=\"success\"\n * />\n * ```\n */\nexport const ProgressCircle: React.FC<ProgressCircleProps> = ({\n value,\n size = 100,\n strokeWidth = 8,\n showValue = true,\n label,\n variant = 'primary',\n color,\n trackColor = '#e5e7eb',\n className,\n}) => {\n // Clamp value between 0 and 100\n const progress = Math.min(100, Math.max(0, value));\n\n // Color variants\n const variantColors = {\n primary: '#2563eb',\n success: '#16a34a',\n warning: '#ca8a04',\n danger: '#dc2626',\n };\n\n const progressColor = color || variantColors[variant];\n const innerSize = size - strokeWidth * 2;\n\n return (\n <View\n className={cn('items-center justify-center', className)}\n style={{ width: size, height: size }}\n >\n {/* Background circle */}\n <View\n style={{\n width: size,\n height: size,\n borderRadius: size / 2,\n borderWidth: strokeWidth,\n borderColor: trackColor,\n position: 'absolute',\n }}\n />\n\n {/* Progress indicator - simplified arc */}\n <View\n style={{\n width: size,\n height: size,\n borderRadius: size / 2,\n borderWidth: strokeWidth,\n borderColor: 'transparent',\n borderTopColor: progressColor,\n borderRightColor: progress > 25 ? progressColor : 'transparent',\n borderBottomColor: progress > 50 ? progressColor : 'transparent',\n borderLeftColor: progress > 75 ? progressColor : 'transparent',\n position: 'absolute',\n transform: [{ rotate: '-90deg' }],\n }}\n />\n\n {/* Center content */}\n <View\n style={{\n width: innerSize,\n height: innerSize,\n borderRadius: innerSize / 2,\n backgroundColor: 'transparent',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {(showValue || label) && (\n <View className='items-center justify-center'>\n {showValue && !label && (\n <Text\n className='font-bold text-gray-900 dark:text-white'\n style={{ fontSize: size * 0.2 }}\n >\n {Math.round(progress)}%\n </Text>\n )}\n {label && (\n <Text\n className='font-medium text-gray-900 dark:text-white text-center px-2'\n style={{ fontSize: size * 0.15 }}\n >\n {label}\n </Text>\n )}\n </View>\n )}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface NavItem {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Icon component or element */\n icon?: React.ReactNode;\n /** Press handler */\n onPress?: () => void;\n /** Active/selected state */\n active?: boolean;\n /** Badge content */\n badge?: string | number;\n}\n\nexport interface SideNavProps {\n /** Navigation items */\n items: NavItem[];\n /** Additional className */\n className?: string;\n}\n\n/**\n * SideNav Component\n *\n * Side navigation for drawer menus or sidebar layouts.\n * Displays items with icons, labels, and badges.\n *\n * @example\n * ```tsx\n * <SideNav\n * items={[\n * { id: 'home', label: 'Home', icon: <HomeIcon />, active: true },\n * { id: 'settings', label: 'Settings', icon: <CogIcon />, badge: 3 },\n * ]}\n * />\n * ```\n */\nexport const SideNav: React.FC<SideNavProps> = ({ items, className }) => {\n return (\n <View className={cn('gap-1', className)} accessibilityRole='list'>\n {items.map(item => (\n <Pressable\n key={item.id}\n onPress={item.onPress}\n className={cn(\n 'flex-row items-center gap-3 px-4 py-3 rounded-lg',\n item.active\n ? 'bg-blue-50 dark:bg-blue-900/20'\n : 'active:bg-gray-100 dark:active:bg-gray-800'\n )}\n accessibilityRole='button'\n accessibilityState={{ selected: item.active }}\n accessibilityLabel={item.label}\n >\n {item.icon && <View className='w-5 h-5'>{item.icon}</View>}\n <Text\n className={cn(\n 'flex-1 font-medium',\n item.active\n ? 'text-blue-600 dark:text-blue-400'\n : 'text-gray-700 dark:text-gray-300'\n )}\n >\n {item.label}\n </Text>\n {item.badge !== undefined && (\n <View className='px-2 py-0.5 bg-gray-200 dark:bg-gray-700 rounded'>\n <Text className='text-xs text-gray-700 dark:text-gray-300'>\n {item.badge}\n </Text>\n </View>\n )}\n </Pressable>\n ))}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable, ActivityIndicator } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SectionHeaderProps {\n /** The header text/title */\n title: string;\n /** Optional callback for the \"+\" button */\n onAdd?: () => void;\n /** Optional tooltip/title for the add button */\n addButtonLabel?: string;\n /** Optional loading indicator */\n loading?: boolean;\n /** Right side actions/buttons */\n actions?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * SectionHeader Component\n *\n * A reusable header component for sections with consistent styling.\n * Displays a title and an optional \"+\" action button.\n *\n * @example\n * ```tsx\n * <SectionHeader title=\"Emails\" />\n * <SectionHeader\n * title=\"Email Accounts\"\n * onAdd={handleAdd}\n * addButtonLabel=\"Add account\"\n * />\n * ```\n */\nexport const SectionHeader: React.FC<SectionHeaderProps> = ({\n title,\n onAdd,\n addButtonLabel = 'Add',\n loading,\n actions,\n className,\n}) => {\n return (\n <View\n className={cn(\n 'p-4 border-b border-gray-200 dark:border-gray-700',\n className\n )}\n >\n <View className='flex-row items-center justify-between'>\n <Text className='text-lg font-semibold text-gray-900 dark:text-gray-100'>\n {title}\n </Text>\n <View className='flex-row items-center gap-2'>\n {loading && <ActivityIndicator size='small' color='#2563eb' />}\n {actions}\n {onAdd && (\n <Pressable\n onPress={onAdd}\n className='p-2 rounded active:bg-gray-200 dark:active:bg-gray-700'\n accessibilityRole='button'\n accessibilityLabel={addButtonLabel}\n >\n <Text className='text-xl text-gray-600 dark:text-gray-400'>\n +\n </Text>\n </Pressable>\n )}\n </View>\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, ScrollView, SafeAreaView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PageContainerProps {\n /** Page content */\n children: React.ReactNode;\n /** Background variant */\n background?: 'default' | 'surface' | 'transparent';\n /** Enable scrolling */\n scrollable?: boolean;\n /** Use SafeAreaView */\n safeArea?: boolean;\n /** Padding variant */\n padding?: 'none' | 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * PageContainer Component\n *\n * Full-screen page container with background and safe area handling.\n * Provides consistent page layouts across the app.\n *\n * @example\n * ```tsx\n * <PageContainer>\n * <Header />\n * <Content />\n * </PageContainer>\n * ```\n *\n * @example\n * ```tsx\n * <PageContainer\n * background=\"surface\"\n * scrollable\n * safeArea\n * padding=\"md\"\n * >\n * <FormContent />\n * </PageContainer>\n * ```\n */\nexport const PageContainer: React.FC<PageContainerProps> = ({\n children,\n background = 'default',\n scrollable = false,\n safeArea = true,\n padding = 'none',\n className,\n}) => {\n const backgroundClasses = {\n default: 'bg-gray-50 dark:bg-gray-900',\n surface: 'bg-white dark:bg-gray-800',\n transparent: 'bg-transparent',\n };\n\n const paddingClasses = {\n none: '',\n sm: 'p-2',\n md: 'p-4',\n lg: 'p-6',\n };\n\n const containerClasses = cn(\n 'flex-1',\n backgroundClasses[background],\n paddingClasses[padding],\n className\n );\n\n const content = scrollable ? (\n <ScrollView\n className={containerClasses}\n contentContainerStyle={{ flexGrow: 1 }}\n showsVerticalScrollIndicator={false}\n >\n {children}\n </ScrollView>\n ) : (\n <View className={containerClasses}>{children}</View>\n );\n\n if (safeArea) {\n return (\n <SafeAreaView className={cn('flex-1', backgroundClasses[background])}>\n {content}\n </SafeAreaView>\n );\n }\n\n return content;\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Text, Pressable, StyleSheet } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface FloatingPanelProps {\n /** Panel content */\n children: React.ReactNode;\n /** Panel title */\n title?: string;\n /** Initial position */\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';\n /** Collapsible */\n collapsible?: boolean;\n /** Initially collapsed */\n defaultCollapsed?: boolean;\n /** Close button */\n closeable?: boolean;\n /** Close handler */\n onClose?: () => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * FloatingPanel Component\n *\n * Floating panel positioned at screen corners.\n * Useful for chat widgets, help panels, or notifications.\n *\n * @example\n * ```tsx\n * <FloatingPanel\n * title=\"Help & Support\"\n * position=\"bottom-right\"\n * collapsible\n * >\n * <ChatWidget />\n * </FloatingPanel>\n * ```\n */\nexport const FloatingPanel: React.FC<FloatingPanelProps> = ({\n children,\n title,\n position = 'bottom-right',\n collapsible = true,\n defaultCollapsed = false,\n closeable = false,\n onClose,\n className,\n}) => {\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n\n const positionStyles = {\n 'bottom-right': { bottom: 16, right: 16 },\n 'bottom-left': { bottom: 16, left: 16 },\n 'top-right': { top: 16, right: 16 },\n 'top-left': { top: 16, left: 16 },\n };\n\n return (\n <View\n style={[styles.container, positionStyles[position]]}\n className={cn(\n 'w-80 bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 rounded-lg shadow-2xl',\n className\n )}\n >\n {/* Header */}\n {(title || collapsible || closeable) && (\n <View className='flex-row items-center justify-between p-4 border-b border-gray-200 dark:border-gray-700'>\n {title && (\n <Text className='font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n )}\n\n <View className='flex-row items-center gap-2'>\n {collapsible && (\n <Pressable\n onPress={() => setIsCollapsed(!isCollapsed)}\n className='p-1 active:bg-gray-100 dark:active:bg-gray-800 rounded'\n accessibilityRole='button'\n accessibilityLabel={isCollapsed ? 'Expand' : 'Collapse'}\n >\n <Text\n className={cn(\n 'text-gray-600 dark:text-gray-400',\n isCollapsed && 'rotate-180'\n )}\n >\n ▼\n </Text>\n </Pressable>\n )}\n\n {closeable && (\n <Pressable\n onPress={onClose}\n className='p-1 active:bg-gray-100 dark:active:bg-gray-800 rounded'\n accessibilityRole='button'\n accessibilityLabel='Close'\n >\n <Text className='text-gray-600 dark:text-gray-400'>✕</Text>\n </Pressable>\n )}\n </View>\n </View>\n )}\n\n {/* Content */}\n {!isCollapsed && <View className='p-4'>{children}</View>}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n zIndex: 50,\n },\n});\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n TextInput,\n Pressable,\n Modal,\n ScrollView,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface Country {\n /** Country code (ISO 3166-1 alpha-2) */\n code: string;\n /** Country name */\n name: string;\n /** Dial code */\n dialCode: string;\n /** Flag emoji */\n flag: string;\n}\n\nexport interface PhoneInputProps {\n /** Phone value */\n value: string;\n /** Change handler */\n onChange: (value: string) => void;\n /** Selected country code */\n country?: string;\n /** Country change handler */\n onCountryChange?: (country: string) => void;\n /** Available countries (defaults to common countries) */\n countries?: Country[];\n /** Placeholder text */\n placeholder?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n// Common countries\nconst DEFAULT_COUNTRIES: Country[] = [\n { code: 'US', name: 'United States', dialCode: '+1', flag: '🇺🇸' },\n { code: 'GB', name: 'United Kingdom', dialCode: '+44', flag: '🇬🇧' },\n { code: 'CA', name: 'Canada', dialCode: '+1', flag: '🇨🇦' },\n { code: 'AU', name: 'Australia', dialCode: '+61', flag: '🇦🇺' },\n { code: 'DE', name: 'Germany', dialCode: '+49', flag: '🇩🇪' },\n { code: 'FR', name: 'France', dialCode: '+33', flag: '🇫🇷' },\n { code: 'IT', name: 'Italy', dialCode: '+39', flag: '🇮🇹' },\n { code: 'ES', name: 'Spain', dialCode: '+34', flag: '🇪🇸' },\n { code: 'MX', name: 'Mexico', dialCode: '+52', flag: '🇲🇽' },\n { code: 'BR', name: 'Brazil', dialCode: '+55', flag: '🇧🇷' },\n { code: 'IN', name: 'India', dialCode: '+91', flag: '🇮🇳' },\n { code: 'CN', name: 'China', dialCode: '+86', flag: '🇨🇳' },\n { code: 'JP', name: 'Japan', dialCode: '+81', flag: '🇯🇵' },\n { code: 'KR', name: 'South Korea', dialCode: '+82', flag: '🇰🇷' },\n { code: 'SG', name: 'Singapore', dialCode: '+65', flag: '🇸🇬' },\n];\n\n/**\n * PhoneInput Component\n *\n * Phone number input with country code selector.\n * Formats phone numbers and shows country flags.\n *\n * @example\n * ```tsx\n * <PhoneInput\n * value={phoneNumber}\n * onChange={setPhoneNumber}\n * country={selectedCountry}\n * onCountryChange={setSelectedCountry}\n * />\n * ```\n */\nexport const PhoneInput: React.FC<PhoneInputProps> = ({\n value,\n onChange,\n country: controlledCountry,\n onCountryChange,\n countries = DEFAULT_COUNTRIES,\n placeholder = 'Phone number',\n disabled = false,\n className,\n}) => {\n const [internalCountry, setInternalCountry] = useState(\n countries[0]?.code || 'US'\n );\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n\n const selectedCountryCode =\n controlledCountry !== undefined ? controlledCountry : internalCountry;\n\n const selectedCountry = countries.find(c => c.code === selectedCountryCode);\n\n // Handle country selection\n const handleCountrySelect = useCallback(\n (countryCode: string) => {\n if (controlledCountry !== undefined && onCountryChange) {\n onCountryChange(countryCode);\n } else {\n setInternalCountry(countryCode);\n }\n setIsOpen(false);\n setSearchQuery('');\n },\n [controlledCountry, onCountryChange]\n );\n\n // Format phone number (basic formatting)\n const formatPhoneNumber = (input: string): string => {\n // Remove all non-numeric characters\n const cleaned = input.replace(/\\D/g, '');\n\n // Basic US/CA formatting\n if (selectedCountry?.dialCode === '+1') {\n if (cleaned.length <= 3) return cleaned;\n if (cleaned.length <= 6)\n return `(${cleaned.slice(0, 3)}) ${cleaned.slice(3)}`;\n return `(${cleaned.slice(0, 3)}) ${cleaned.slice(3, 6)}-${cleaned.slice(6, 10)}`;\n }\n\n return cleaned;\n };\n\n // Handle input change\n const handleInputChange = (text: string) => {\n const formatted = formatPhoneNumber(text);\n onChange(formatted);\n };\n\n // Filter countries based on search\n const filteredCountries = countries.filter(\n country =>\n country.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n country.dialCode.includes(searchQuery) ||\n country.code.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n return (\n <View className={cn('w-full', className)}>\n <View className='flex-row gap-2'>\n {/* Country selector */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center gap-2 px-3 py-2 min-w-[120px]',\n 'bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Select country'\n >\n <Text className='text-xl'>{selectedCountry?.flag}</Text>\n <Text className='text-sm font-medium text-gray-900 dark:text-white'>\n {selectedCountry?.dialCode}\n </Text>\n <Text className='text-gray-600 dark:text-gray-400'>▼</Text>\n </Pressable>\n\n {/* Phone number input */}\n <TextInput\n value={value}\n onChangeText={handleInputChange}\n placeholder={placeholder}\n placeholderTextColor='#9ca3af'\n keyboardType='phone-pad'\n editable={!disabled}\n className={cn(\n 'flex-1 px-3 py-2 text-sm',\n 'bg-white dark:bg-gray-900 text-gray-900 dark:text-white',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n />\n </View>\n\n {/* Full number display */}\n {value && selectedCountry && (\n <Text className='mt-1.5 text-xs text-gray-600 dark:text-gray-400'>\n Full number: {selectedCountry.dialCode} {value}\n </Text>\n )}\n\n {/* Country picker modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='slide'\n onRequestClose={() => setIsOpen(false)}\n >\n <TouchableWithoutFeedback onPress={() => setIsOpen(false)}>\n <View className='flex-1 justify-end bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-t-xl max-h-[70%]'>\n {/* Search */}\n <View className='p-3 border-b border-gray-200 dark:border-gray-700'>\n <TextInput\n value={searchQuery}\n onChangeText={setSearchQuery}\n placeholder='Search countries...'\n placeholderTextColor='#9ca3af'\n className='px-3 py-2 text-sm bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white rounded-md'\n />\n </View>\n\n {/* Countries list */}\n <ScrollView className='max-h-80'>\n {filteredCountries.length === 0 ? (\n <View className='px-3 py-4 items-center'>\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n No countries found\n </Text>\n </View>\n ) : (\n filteredCountries.map(country => (\n <Pressable\n key={country.code}\n onPress={() => handleCountrySelect(country.code)}\n className={cn(\n 'flex-row items-center gap-3 px-4 py-3',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n country.code === selectedCountryCode &&\n 'bg-blue-50 dark:bg-blue-900/30'\n )}\n accessibilityRole='button'\n >\n <Text className='text-xl'>{country.flag}</Text>\n <Text className='flex-1 text-sm text-gray-900 dark:text-white'>\n {country.name}\n </Text>\n <Text className='text-sm text-gray-600 dark:text-gray-400'>\n {country.dialCode}\n </Text>\n </Pressable>\n ))\n )}\n </ScrollView>\n\n {/* Done button */}\n <View className='p-3 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={() => setIsOpen(false)}\n className='items-center py-3'\n accessibilityRole='button'\n >\n <Text className='text-sm font-medium text-blue-600 dark:text-blue-400'>\n Done\n </Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useEffect } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Modal,\n ScrollView,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TimePickerProps {\n /** Time value in HH:mm format (24-hour) */\n value: string;\n /** Change handler */\n onChange: (value: string) => void;\n /** Use 12-hour format */\n use12Hour?: boolean;\n /** Minute step interval */\n minuteStep?: number;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TimePicker Component\n *\n * Time selection with scrollable columns.\n * Supports 12-hour and 24-hour formats.\n *\n * @example\n * ```tsx\n * <TimePicker\n * value={time}\n * onChange={setTime}\n * use12Hour\n * minuteStep={15}\n * />\n * ```\n */\nexport const TimePicker: React.FC<TimePickerProps> = ({\n value,\n onChange,\n use12Hour = false,\n minuteStep = 1,\n disabled = false,\n className,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [internalHour, setInternalHour] = useState('12');\n const [internalMinute, setInternalMinute] = useState('00');\n const [period, setPeriod] = useState<'AM' | 'PM'>('AM');\n\n // Parse value to hours and minutes\n useEffect(() => {\n if (value) {\n const [hours, minutes] = value.split(':');\n const hour = parseInt(hours, 10);\n\n if (use12Hour) {\n const isPM = hour >= 12;\n const hour12 = hour === 0 ? 12 : hour > 12 ? hour - 12 : hour;\n setInternalHour(hour12.toString().padStart(2, '0'));\n setPeriod(isPM ? 'PM' : 'AM');\n } else {\n setInternalHour(hours);\n }\n\n setInternalMinute(minutes);\n }\n }, [value, use12Hour]);\n\n // Format display value\n const formatDisplay = (): string => {\n if (!value) return 'Select time';\n\n const [hours, minutes] = value.split(':');\n const hour = parseInt(hours, 10);\n\n if (use12Hour) {\n const hour12 = hour === 0 ? 12 : hour > 12 ? hour - 12 : hour;\n const displayPeriod = hour >= 12 ? 'PM' : 'AM';\n return `${hour12}:${minutes} ${displayPeriod}`;\n }\n\n return `${hours}:${minutes}`;\n };\n\n // Handle time selection\n const handleTimeChange = (\n newHour: string,\n newMinute: string,\n newPeriod?: 'AM' | 'PM'\n ) => {\n let hour = parseInt(newHour, 10);\n const minute = parseInt(newMinute, 10);\n\n if (use12Hour && newPeriod) {\n if (newPeriod === 'PM' && hour !== 12) {\n hour += 12;\n } else if (newPeriod === 'AM' && hour === 12) {\n hour = 0;\n }\n }\n\n const formattedTime = `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`;\n onChange(formattedTime);\n };\n\n // Generate hour options\n const hourOptions = use12Hour\n ? Array.from({ length: 12 }, (_, i) => (i + 1).toString().padStart(2, '0'))\n : Array.from({ length: 24 }, (_, i) => i.toString().padStart(2, '0'));\n\n // Generate minute options\n const minuteOptions = Array.from(\n { length: Math.ceil(60 / minuteStep) },\n (_, i) => (i * minuteStep).toString().padStart(2, '0')\n );\n\n return (\n <View className={cn('w-full', className)}>\n {/* Input trigger */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center justify-between px-3 py-2',\n 'bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Select time'\n >\n <Text\n className={cn(\n 'text-sm',\n value\n ? 'text-gray-900 dark:text-white'\n : 'text-gray-500 dark:text-gray-400'\n )}\n >\n {formatDisplay()}\n </Text>\n <Text className='text-gray-600 dark:text-gray-400'>🕐</Text>\n </Pressable>\n\n {/* Time picker modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='slide'\n onRequestClose={() => setIsOpen(false)}\n >\n <TouchableWithoutFeedback onPress={() => setIsOpen(false)}>\n <View className='flex-1 justify-end bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-t-xl'>\n <View className='flex-row p-4 gap-2'>\n {/* Hours */}\n <View className='flex-1'>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 text-center mb-2'>\n Hour\n </Text>\n <ScrollView className='h-48 border border-gray-200 dark:border-gray-700 rounded'>\n {hourOptions.map(hour => (\n <Pressable\n key={hour}\n onPress={() => {\n setInternalHour(hour);\n handleTimeChange(\n hour,\n internalMinute,\n use12Hour ? period : undefined\n );\n }}\n className={cn(\n 'px-3 py-2',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n hour === internalHour &&\n 'bg-blue-100 dark:bg-blue-900/30'\n )}\n >\n <Text\n className={cn(\n 'text-sm text-center',\n hour === internalHour\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n {hour}\n </Text>\n </Pressable>\n ))}\n </ScrollView>\n </View>\n\n {/* Minutes */}\n <View className='flex-1'>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 text-center mb-2'>\n Min\n </Text>\n <ScrollView className='h-48 border border-gray-200 dark:border-gray-700 rounded'>\n {minuteOptions.map(minute => (\n <Pressable\n key={minute}\n onPress={() => {\n setInternalMinute(minute);\n handleTimeChange(\n internalHour,\n minute,\n use12Hour ? period : undefined\n );\n }}\n className={cn(\n 'px-3 py-2',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n minute === internalMinute &&\n 'bg-blue-100 dark:bg-blue-900/30'\n )}\n >\n <Text\n className={cn(\n 'text-sm text-center',\n minute === internalMinute\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n {minute}\n </Text>\n </Pressable>\n ))}\n </ScrollView>\n </View>\n\n {/* AM/PM */}\n {use12Hour && (\n <View className='w-16'>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 text-center mb-2'>\n {' '}\n </Text>\n <View className='h-48 justify-center gap-2'>\n <Pressable\n onPress={() => {\n setPeriod('AM');\n handleTimeChange(\n internalHour,\n internalMinute,\n 'AM'\n );\n }}\n className={cn(\n 'px-3 py-2 rounded',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n period === 'AM' && 'bg-blue-100 dark:bg-blue-900/30'\n )}\n >\n <Text\n className={cn(\n 'text-sm text-center',\n period === 'AM'\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n AM\n </Text>\n </Pressable>\n <Pressable\n onPress={() => {\n setPeriod('PM');\n handleTimeChange(\n internalHour,\n internalMinute,\n 'PM'\n );\n }}\n className={cn(\n 'px-3 py-2 rounded',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n period === 'PM' && 'bg-blue-100 dark:bg-blue-900/30'\n )}\n >\n <Text\n className={cn(\n 'text-sm text-center',\n period === 'PM'\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n PM\n </Text>\n </Pressable>\n </View>\n </View>\n )}\n </View>\n\n {/* Done button */}\n <View className='p-3 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={() => setIsOpen(false)}\n className='items-center py-3'\n >\n <Text className='text-sm font-medium text-blue-600 dark:text-blue-400'>\n Done\n </Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n TextInput,\n Pressable,\n Modal,\n ScrollView,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ComboboxOption {\n /** Option value */\n value: string;\n /** Option label */\n label: string;\n /** Disabled state */\n disabled?: boolean;\n}\n\nexport interface ComboboxProps {\n /** Available options */\n options: ComboboxOption[];\n /** Selected value */\n value?: string;\n /** Change handler */\n onChange: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** Empty state message */\n emptyMessage?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Combobox Component\n *\n * Searchable select dropdown.\n * Combines input and select functionality.\n *\n * @example\n * ```tsx\n * <Combobox\n * options={[\n * { value: 'apple', label: 'Apple' },\n * { value: 'banana', label: 'Banana' },\n * { value: 'orange', label: 'Orange' }\n * ]}\n * value={selectedFruit}\n * onChange={setSelectedFruit}\n * placeholder=\"Select a fruit...\"\n * />\n * ```\n */\nexport const Combobox: React.FC<ComboboxProps> = ({\n options,\n value,\n onChange,\n placeholder = 'Select option...',\n searchPlaceholder = 'Search...',\n emptyMessage = 'No results found.',\n disabled = false,\n className,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n\n // Filter options based on search query\n const filteredOptions = options.filter(option =>\n option.label.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n // Get selected option label\n const selectedOption = options.find(opt => opt.value === value);\n\n const handleSelect = useCallback(\n (optionValue: string, optionDisabled?: boolean) => {\n if (optionDisabled) return;\n onChange(optionValue);\n setIsOpen(false);\n setSearchQuery('');\n },\n [onChange]\n );\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n setSearchQuery('');\n }, []);\n\n return (\n <View className={cn('w-full', className)}>\n {/* Trigger Button */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center justify-between px-3 py-2',\n 'bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={placeholder}\n accessibilityState={{ disabled, expanded: isOpen }}\n >\n <Text\n className={cn(\n 'flex-1 text-sm',\n selectedOption\n ? 'text-gray-900 dark:text-white'\n : 'text-gray-500 dark:text-gray-400'\n )}\n numberOfLines={1}\n >\n {selectedOption ? selectedOption.label : placeholder}\n </Text>\n <Text className='text-gray-600 dark:text-gray-400 ml-2'>▼</Text>\n </Pressable>\n\n {/* Dropdown Modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={handleClose}\n >\n <TouchableWithoutFeedback onPress={handleClose}>\n <View className='flex-1 justify-center px-4 bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-lg max-h-[70%] shadow-xl'>\n {/* Search Input */}\n <View className='p-3 border-b border-gray-200 dark:border-gray-700'>\n <TextInput\n value={searchQuery}\n onChangeText={setSearchQuery}\n placeholder={searchPlaceholder}\n placeholderTextColor='#9ca3af'\n autoFocus\n className='px-3 py-2 text-sm bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white rounded-md'\n />\n </View>\n\n {/* Options List */}\n <ScrollView className='max-h-80'>\n {filteredOptions.length === 0 ? (\n <View className='px-3 py-4 items-center'>\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n {emptyMessage}\n </Text>\n </View>\n ) : (\n filteredOptions.map(option => (\n <Pressable\n key={option.value}\n onPress={() =>\n handleSelect(option.value, option.disabled)\n }\n disabled={option.disabled}\n className={cn(\n 'px-4 py-3',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n option.disabled && 'opacity-50',\n option.value === value &&\n 'bg-blue-50 dark:bg-blue-900/30'\n )}\n accessibilityRole='button'\n accessibilityState={{\n selected: option.value === value,\n disabled: option.disabled,\n }}\n >\n <Text\n className={cn(\n 'text-sm',\n option.value === value\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n {option.label}\n </Text>\n </Pressable>\n ))\n )}\n </ScrollView>\n\n {/* Close button */}\n <View className='p-3 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={handleClose}\n className='items-center py-2'\n accessibilityRole='button'\n accessibilityLabel='Close'\n >\n <Text className='text-sm font-medium text-gray-600 dark:text-gray-400'>\n Cancel\n </Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TreeNode {\n /** Node ID */\n id: string;\n /** Node label */\n label: string;\n /** Node icon */\n icon?: React.ReactNode;\n /** Child nodes */\n children?: TreeNode[];\n /** Disabled state */\n disabled?: boolean;\n}\n\nexport interface TreeViewProps {\n /** Tree data */\n data: TreeNode[];\n /** Selected node ID */\n selectedId?: string;\n /** Selection handler */\n onSelect?: (node: TreeNode) => void;\n /** Expanded node IDs */\n expandedIds?: string[];\n /** Expand handler */\n onExpand?: (nodeId: string) => void;\n /** Default expanded */\n defaultExpanded?: boolean;\n /** Show lines */\n showLines?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TreeView Component\n *\n * Hierarchical tree view with expand/collapse.\n * Supports selection, custom icons, and indentation lines.\n *\n * @example\n * ```tsx\n * <TreeView\n * data={fileTree}\n * selectedId={selectedNode}\n * onSelect={handleSelect}\n * showLines\n * />\n * ```\n */\nexport const TreeView: React.FC<TreeViewProps> = ({\n data,\n selectedId,\n onSelect,\n expandedIds: controlledExpandedIds,\n onExpand,\n defaultExpanded = false,\n showLines = false,\n className,\n}) => {\n const [internalExpandedIds, setInternalExpandedIds] = useState<Set<string>>(\n new Set(defaultExpanded ? data.map(node => node.id) : [])\n );\n\n const expandedIds =\n controlledExpandedIds !== undefined\n ? new Set(controlledExpandedIds)\n : internalExpandedIds;\n\n const toggleExpand = useCallback(\n (nodeId: string) => {\n if (controlledExpandedIds !== undefined && onExpand) {\n onExpand(nodeId);\n } else {\n setInternalExpandedIds(prev => {\n const newSet = new Set(prev);\n if (newSet.has(nodeId)) {\n newSet.delete(nodeId);\n } else {\n newSet.add(nodeId);\n }\n return newSet;\n });\n }\n },\n [controlledExpandedIds, onExpand]\n );\n\n const handleSelect = useCallback(\n (node: TreeNode) => {\n if (!node.disabled && onSelect) {\n onSelect(node);\n }\n },\n [onSelect]\n );\n\n const renderNode = (node: TreeNode, level: number = 0) => {\n const hasChildren = node.children && node.children.length > 0;\n const isExpanded = expandedIds.has(node.id);\n const isSelected = selectedId === node.id;\n\n return (\n <View key={node.id}>\n {/* Node item */}\n <Pressable\n onPress={() => handleSelect(node)}\n disabled={node.disabled}\n className={cn(\n 'flex-row items-center gap-2 px-2 py-1.5 rounded-md',\n !node.disabled && 'active:bg-gray-100 dark:active:bg-gray-800',\n isSelected && 'bg-blue-50 dark:bg-blue-900/30',\n node.disabled && 'opacity-50'\n )}\n style={{ paddingLeft: level * 24 + 8 }}\n accessibilityRole='button'\n accessibilityState={{ selected: isSelected, disabled: node.disabled }}\n >\n {/* Expand/collapse button */}\n {hasChildren ? (\n <Pressable\n onPress={() => toggleExpand(node.id)}\n className='w-4 h-4 items-center justify-center active:bg-gray-200 dark:active:bg-gray-700 rounded'\n hitSlop={8}\n accessibilityRole='button'\n accessibilityLabel={isExpanded ? 'Collapse' : 'Expand'}\n >\n <Text\n className={cn(\n 'text-xs text-gray-600 dark:text-gray-400',\n isExpanded && 'rotate-90'\n )}\n >\n ▶\n </Text>\n </Pressable>\n ) : (\n <View className='w-4 h-4' />\n )}\n\n {/* Icon */}\n {node.icon && (\n <View className='w-4 h-4 flex-shrink-0'>{node.icon}</View>\n )}\n\n {/* Label */}\n <Text\n className={cn(\n 'flex-1 text-sm',\n isSelected\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n {node.label}\n </Text>\n </Pressable>\n\n {/* Children */}\n {hasChildren && isExpanded && (\n <View\n className={cn(\n showLines &&\n 'border-l-2 border-gray-200 dark:border-gray-700 ml-2'\n )}\n >\n {node.children!.map(child => renderNode(child, level + 1))}\n </View>\n )}\n </View>\n );\n };\n\n return (\n <View className={cn('w-full', className)}>\n {data.map(node => renderNode(node, 0))}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport { View, Text, Pressable, Linking } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface AddressLinkProps {\n /** The blockchain address to display */\n address: string;\n /** Chain ID for EVM chains (positive) or Solana chains (negative) */\n chainId?: number;\n /** Block explorer base URL (if not using chainId) */\n explorerUrl?: string;\n /** Label to display before the address */\n label?: string;\n /** Display format: 'short' (default), 'medium', or 'full' */\n format?: 'short' | 'medium' | 'full';\n /** Show copy button */\n showCopy?: boolean;\n /** Show explorer link button */\n showExplorer?: boolean;\n /** Custom copy handler - receives address string */\n onCopy?: (address: string) => Promise<void>;\n /** Custom className */\n className?: string;\n}\n\n/**\n * Get block explorer URL for an address\n */\nconst getExplorerUrl = (\n address: string,\n chainId?: number,\n explorerUrl?: string\n): string | null => {\n if (explorerUrl) {\n return `${explorerUrl}/address/${address}`;\n }\n\n if (!chainId) {\n return null;\n }\n\n // Solana chains (negative chainIds)\n if (chainId < 0) {\n const cluster =\n chainId === -101\n ? ''\n : chainId === -102\n ? '?cluster=devnet'\n : '?cluster=testnet';\n return `https://explorer.solana.com/address/${address}${cluster}`;\n }\n\n // EVM chains\n const explorerMap: Record<number, string> = {\n 1: 'https://etherscan.io',\n 11155111: 'https://sepolia.etherscan.io',\n 5: 'https://goerli.etherscan.io',\n 137: 'https://polygonscan.com',\n 80002: 'https://amoy.polygonscan.com',\n 42161: 'https://arbiscan.io',\n 421614: 'https://sepolia.arbiscan.io',\n 10: 'https://optimistic.etherscan.io',\n 11155420: 'https://sepolia-optimism.etherscan.io',\n 8453: 'https://basescan.org',\n 84532: 'https://sepolia.basescan.org',\n };\n\n const baseUrl = explorerMap[chainId];\n if (!baseUrl) {\n return null;\n }\n\n return `${baseUrl}/address/${address}`;\n};\n\n/**\n * Format address based on display format\n */\nconst formatAddress = (\n address: string,\n format: 'short' | 'medium' | 'full'\n): string => {\n if (format === 'full') {\n return address;\n }\n\n if (format === 'medium') {\n return `${address.substring(0, 10)}...${address.substring(address.length - 8)}`;\n }\n\n return `${address.substring(0, 6)}...${address.substring(address.length - 4)}`;\n};\n\n/**\n * AddressLink Component\n *\n * Displays a blockchain address with copy and block explorer link functionality.\n * Supports both EVM chains and Solana chains.\n *\n * @example\n * ```tsx\n * <AddressLink\n * address=\"0x1234...5678\"\n * chainId={1}\n * showCopy\n * showExplorer\n * />\n * ```\n */\nexport const AddressLink: React.FC<AddressLinkProps> = ({\n address,\n chainId,\n explorerUrl,\n label,\n format = 'short',\n showCopy = true,\n showExplorer = true,\n onCopy,\n className,\n}) => {\n const [copied, setCopied] = useState(false);\n\n const formattedAddress = formatAddress(address, format);\n const explorerLink = getExplorerUrl(address, chainId, explorerUrl);\n\n const handleCopy = useCallback(async () => {\n if (!onCopy) return;\n try {\n await onCopy(address);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Copy failed\n }\n }, [address, onCopy]);\n\n const handleOpenExplorer = useCallback(() => {\n if (explorerLink) {\n Linking.openURL(explorerLink);\n }\n }, [explorerLink]);\n\n return (\n <View className={cn('flex-row items-center gap-2', className)}>\n {label && (\n <Text className='text-sm text-gray-600 dark:text-gray-400'>\n {label}:\n </Text>\n )}\n\n <Text\n className={cn(\n 'font-mono text-sm text-gray-900 dark:text-white',\n format === 'full' && 'flex-1'\n )}\n numberOfLines={format === 'full' ? undefined : 1}\n >\n {formattedAddress}\n </Text>\n\n <View className='flex-row items-center gap-1'>\n {showCopy && onCopy && (\n <Pressable\n onPress={handleCopy}\n className='p-1 rounded active:bg-gray-100 dark:active:bg-gray-800'\n accessibilityRole='button'\n accessibilityLabel={copied ? 'Copied!' : 'Copy address'}\n >\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n {copied ? '✓' : '📋'}\n </Text>\n </Pressable>\n )}\n\n {showExplorer && explorerLink && (\n <Pressable\n onPress={handleOpenExplorer}\n className='p-1 rounded active:bg-gray-100 dark:active:bg-gray-800'\n accessibilityRole='link'\n accessibilityLabel='View on block explorer'\n >\n <Text className='text-sm text-blue-600 dark:text-blue-400'>↗</Text>\n </Pressable>\n )}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, ScrollView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CodeDisplayProps {\n /** Code or text to display */\n children: React.ReactNode;\n /** Visual variant */\n variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'neutral';\n /** Size variant */\n size?: 'xs' | 'sm' | 'md' | 'lg';\n /** Display as inline or block */\n inline?: boolean;\n /** Text alignment (for block display) */\n align?: 'left' | 'center' | 'right';\n /** Whether to enable text wrapping */\n wrap?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * CodeDisplay Component\n *\n * Displays code, wallet addresses, or monospace text in a styled container.\n * Commonly used for displaying blockchain addresses, code snippets, or\n * technical identifiers.\n *\n * @example\n * ```tsx\n * <CodeDisplay variant=\"primary\" size=\"lg\" align=\"center\">\n * wallet@example.com\n * </CodeDisplay>\n * ```\n *\n * @example\n * ```tsx\n * <CodeDisplay variant=\"success\" inline>\n * 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb\n * </CodeDisplay>\n * ```\n */\nexport const CodeDisplay: React.FC<CodeDisplayProps> = ({\n children,\n variant = 'primary',\n size = 'md',\n inline = false,\n align = 'left',\n wrap = false,\n className,\n}) => {\n // Color variant configurations\n const variantClasses = {\n primary: 'text-blue-600 dark:text-blue-400 bg-blue-50 dark:bg-blue-900/30',\n secondary:\n 'text-purple-600 dark:text-purple-400 bg-purple-50 dark:bg-purple-900/30',\n success:\n 'text-green-600 dark:text-green-400 bg-green-50 dark:bg-green-900/30',\n warning:\n 'text-yellow-700 dark:text-yellow-400 bg-yellow-50 dark:bg-yellow-900/30',\n neutral: 'text-gray-700 dark:text-gray-300 bg-gray-100 dark:bg-gray-800',\n };\n\n // Size configurations\n const sizeClasses = {\n xs: {\n text: 'text-xs',\n padding: inline ? 'px-1.5 py-0.5' : 'px-2 py-1',\n },\n sm: {\n text: 'text-sm',\n padding: inline ? 'px-2 py-0.5' : 'px-3 py-1.5',\n },\n md: {\n text: 'text-base',\n padding: inline ? 'px-2.5 py-1' : 'px-4 py-2',\n },\n lg: {\n text: 'text-lg',\n padding: inline ? 'px-3 py-1' : 'px-4 py-2',\n },\n };\n\n // Text alignment classes\n const alignClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n };\n\n const sizeConfig = sizeClasses[size];\n\n // Extract background and text color classes\n const [textColorClass, bgClass] = variantClasses[variant].split(' ');\n\n if (inline) {\n return (\n <Text\n className={cn(\n 'font-mono rounded-lg',\n textColorClass,\n bgClass,\n sizeConfig.text,\n sizeConfig.padding,\n className\n )}\n >\n {children}\n </Text>\n );\n }\n\n const content = (\n <Text\n className={cn(\n 'font-mono',\n textColorClass,\n sizeConfig.text,\n !inline && alignClasses[align],\n wrap ? 'flex-wrap' : ''\n )}\n numberOfLines={wrap ? undefined : 1}\n >\n {children}\n </Text>\n );\n\n if (wrap) {\n return (\n <View\n className={cn('rounded-lg', bgClass, sizeConfig.padding, className)}\n >\n {content}\n </View>\n );\n }\n\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n className={cn('rounded-lg', bgClass, className)}\n contentContainerStyle={{ padding: 0 }}\n >\n <View className={sizeConfig.padding}>{content}</View>\n </ScrollView>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Modal,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { Calendar } from '../Calendar';\n\nexport interface DateInputProps {\n /** Current value (ISO date string YYYY-MM-DD or Date object) */\n value: string | Date;\n /** Callback when value changes */\n onChange: (value: string) => void;\n /** Minimum date */\n minDate?: Date;\n /** Maximum date */\n maxDate?: Date;\n /** Disabled state */\n disabled?: boolean;\n /** Placeholder text */\n placeholder?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * DateInput Component\n *\n * Date input field that opens a calendar picker.\n * Displays selected date in a readable format.\n *\n * @example\n * ```tsx\n * <DateInput\n * value={startDate}\n * onChange={setStartDate}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <DateInput\n * value={appointmentDate}\n * onChange={setAppointmentDate}\n * minDate={new Date()}\n * placeholder=\"Select date\"\n * />\n * ```\n */\nexport const DateInput: React.FC<DateInputProps> = ({\n value,\n onChange,\n minDate,\n maxDate,\n disabled = false,\n placeholder = 'Select date',\n size = 'md',\n className,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n\n // Size configurations\n const sizeClasses = {\n sm: 'py-1.5 px-3 text-sm',\n md: 'py-2 px-4 text-base',\n lg: 'py-3 px-4 text-lg',\n };\n\n // Convert value to Date\n const dateValue =\n value instanceof Date ? value : value ? new Date(value) : null;\n\n // Format date for display\n const formatDisplay = (date: Date | null): string => {\n if (!date) return '';\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n };\n\n // Handle date selection\n const handleDateChange = useCallback(\n (date: Date) => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n onChange(`${year}-${month}-${day}`);\n setIsOpen(false);\n },\n [onChange]\n );\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n return (\n <View className={cn('w-full', className)}>\n {/* Trigger Button */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center justify-between',\n 'bg-white dark:bg-gray-800',\n 'border border-gray-300 dark:border-gray-600',\n 'rounded-lg',\n sizeClasses[size],\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={placeholder}\n accessibilityState={{ disabled }}\n >\n <Text\n className={cn(\n 'flex-1',\n dateValue\n ? 'text-gray-900 dark:text-gray-100'\n : 'text-gray-400 dark:text-gray-500'\n )}\n >\n {dateValue ? formatDisplay(dateValue) : placeholder}\n </Text>\n <Text className='text-gray-400 dark:text-gray-500 ml-2'>📅</Text>\n </Pressable>\n\n {/* Calendar Modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={handleClose}\n >\n <TouchableWithoutFeedback onPress={handleClose}>\n <View className='flex-1 justify-center px-4 bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-lg p-4 shadow-xl'>\n <Calendar\n value={dateValue || new Date()}\n onChange={handleDateChange}\n minDate={minDate}\n maxDate={maxDate}\n />\n\n {/* Close button */}\n <View className='mt-4 pt-4 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={handleClose}\n className='items-center py-2'\n accessibilityRole='button'\n accessibilityLabel='Cancel'\n >\n <Text className='text-sm font-medium text-gray-600 dark:text-gray-400'>\n Cancel\n </Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Modal,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { Calendar } from '../Calendar';\nimport { TimePicker } from '../TimePicker';\n\nexport interface DateTimePickerProps {\n /** Date time value */\n value: Date;\n /** Change handler */\n onChange: (value: Date) => void;\n /** Use 12-hour format for time */\n use12Hour?: boolean;\n /** Minute step interval */\n minuteStep?: number;\n /** Minimum date */\n minDate?: Date;\n /** Maximum date */\n maxDate?: Date;\n /** Disabled state */\n disabled?: boolean;\n /** Placeholder text */\n placeholder?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * DateTimePicker Component\n *\n * Combined date and time picker with calendar and time selection.\n * Supports min/max dates and 12/24 hour formats.\n *\n * @example\n * ```tsx\n * <DateTimePicker\n * value={appointment}\n * onChange={setAppointment}\n * use12Hour\n * minDate={new Date()}\n * />\n * ```\n */\nexport const DateTimePicker: React.FC<DateTimePickerProps> = ({\n value,\n onChange,\n use12Hour = false,\n minuteStep = 1,\n minDate,\n maxDate,\n disabled = false,\n placeholder = 'Select date and time',\n className,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [selectedDate, setSelectedDate] = useState<Date>(value);\n\n // Format date time for display\n const formatDisplay = (date: Date): string => {\n const dateStr = date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n\n const hours = date.getHours();\n const minutes = date.getMinutes();\n\n if (use12Hour) {\n const hour12 = hours === 0 ? 12 : hours > 12 ? hours - 12 : hours;\n const period = hours >= 12 ? 'PM' : 'AM';\n return `${dateStr}, ${hour12}:${minutes.toString().padStart(2, '0')} ${period}`;\n }\n\n return `${dateStr}, ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;\n };\n\n // Handle date change\n const handleDateChange = useCallback(\n (date: Date) => {\n const newDateTime = new Date(date);\n newDateTime.setHours(selectedDate.getHours());\n newDateTime.setMinutes(selectedDate.getMinutes());\n setSelectedDate(newDateTime);\n },\n [selectedDate]\n );\n\n // Handle time change\n const handleTimeChange = useCallback(\n (timeStr: string) => {\n const [hours, minutes] = timeStr.split(':').map(Number);\n const newDateTime = new Date(selectedDate);\n newDateTime.setHours(hours);\n newDateTime.setMinutes(minutes);\n setSelectedDate(newDateTime);\n },\n [selectedDate]\n );\n\n // Get time string from date\n const getTimeString = (date: Date): string => {\n const hours = date.getHours();\n const minutes = date.getMinutes();\n return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;\n };\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n setSelectedDate(value);\n }, [value]);\n\n const handleConfirm = useCallback(() => {\n onChange(selectedDate);\n setIsOpen(false);\n }, [selectedDate, onChange]);\n\n const handleOpen = useCallback(() => {\n setSelectedDate(value);\n setIsOpen(true);\n }, [value]);\n\n return (\n <View className={cn('w-full', className)}>\n {/* Trigger Button */}\n <Pressable\n onPress={() => !disabled && handleOpen()}\n disabled={disabled}\n className={cn(\n 'flex-row items-center justify-between px-3 py-2',\n 'bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={placeholder}\n accessibilityState={{ disabled }}\n >\n <Text className='text-sm text-gray-900 dark:text-white'>\n {formatDisplay(value)}\n </Text>\n <Text className='text-gray-600 dark:text-gray-400'>📅</Text>\n </Pressable>\n\n {/* Picker Modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={handleClose}\n >\n <TouchableWithoutFeedback onPress={handleClose}>\n <View className='flex-1 justify-center px-4 bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-lg p-4 shadow-xl'>\n {/* Calendar */}\n <View className='mb-4'>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 mb-2'>\n Select Date\n </Text>\n <Calendar\n value={selectedDate}\n onChange={handleDateChange}\n minDate={minDate}\n maxDate={maxDate}\n />\n </View>\n\n {/* Divider */}\n <View className='h-px bg-gray-200 dark:bg-gray-700 my-3' />\n\n {/* Time picker */}\n <View>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 mb-2'>\n Select Time\n </Text>\n <TimePicker\n value={getTimeString(selectedDate)}\n onChange={handleTimeChange}\n use12Hour={use12Hour}\n minuteStep={minuteStep}\n />\n </View>\n\n {/* Actions */}\n <View className='flex-row gap-2 pt-4 mt-4 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={handleClose}\n className={cn(\n 'flex-1 items-center py-2',\n 'bg-gray-100 dark:bg-gray-800',\n 'rounded-md',\n 'active:bg-gray-200 dark:active:bg-gray-700'\n )}\n accessibilityRole='button'\n accessibilityLabel='Cancel'\n >\n <Text className='text-sm text-gray-700 dark:text-gray-300'>\n Cancel\n </Text>\n </Pressable>\n <Pressable\n onPress={handleConfirm}\n className={cn(\n 'flex-1 items-center py-2',\n 'bg-blue-600 dark:bg-blue-500',\n 'rounded-md',\n 'active:bg-blue-700 dark:active:bg-blue-600'\n )}\n accessibilityRole='button'\n accessibilityLabel='Confirm'\n >\n <Text className='text-sm text-white font-medium'>OK</Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useCallback } from 'react';\nimport {\n View,\n Text,\n FlatList,\n ActivityIndicator,\n Pressable,\n RefreshControl,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface InfiniteScrollProps<T> {\n /** Data items to render */\n data: T[];\n /** Render function for each item */\n renderItem: (item: T, index: number) => React.ReactNode;\n /** Key extractor for list items */\n keyExtractor: (item: T, index: number) => string;\n /** Load more callback */\n onLoadMore: () => void | Promise<void>;\n /** Loading state */\n loading?: boolean;\n /** Has more data */\n hasMore?: boolean;\n /** Pull to refresh handler */\n onRefresh?: () => void | Promise<void>;\n /** Refreshing state */\n refreshing?: boolean;\n /** Loading component */\n loader?: React.ReactNode;\n /** End message component */\n endMessage?: React.ReactNode;\n /** Empty state component */\n emptyComponent?: React.ReactNode;\n /** List header component */\n headerComponent?: React.ReactNode;\n /** Threshold to trigger load more (0-1) */\n threshold?: number;\n /** Horizontal scroll */\n horizontal?: boolean;\n /** Show scroll to top button */\n showScrollTop?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * InfiniteScroll Component\n *\n * FlatList wrapper with infinite scrolling support.\n * Automatically loads more data when approaching the end.\n *\n * @example\n * ```tsx\n * <InfiniteScroll\n * data={items}\n * renderItem={(item) => <ItemCard {...item} />}\n * keyExtractor={(item) => item.id}\n * onLoadMore={loadMoreItems}\n * loading={isLoading}\n * hasMore={hasNextPage}\n * />\n * ```\n */\nexport function InfiniteScroll<T>({\n data,\n renderItem,\n keyExtractor,\n onLoadMore,\n loading = false,\n hasMore = true,\n onRefresh,\n refreshing = false,\n loader,\n endMessage,\n emptyComponent,\n headerComponent,\n threshold = 0.5,\n horizontal = false,\n showScrollTop = false,\n className,\n}: InfiniteScrollProps<T>) {\n const flatListRef = React.useRef<FlatList>(null);\n const [showScrollTopButton, setShowScrollTopButton] = React.useState(false);\n\n // Handle end reached\n const handleEndReached = useCallback(() => {\n if (!loading && hasMore) {\n onLoadMore();\n }\n }, [loading, hasMore, onLoadMore]);\n\n // Handle scroll for scroll-to-top button\n const handleScroll = useCallback(\n (event: { nativeEvent: { contentOffset: { y: number } } }) => {\n if (showScrollTop && !horizontal) {\n setShowScrollTopButton(event.nativeEvent.contentOffset.y > 300);\n }\n },\n [showScrollTop, horizontal]\n );\n\n // Scroll to top\n const scrollToTop = useCallback(() => {\n flatListRef.current?.scrollToOffset({ offset: 0, animated: true });\n }, []);\n\n // Default empty component\n const defaultEmptyComponent = (\n <View className='flex-1 justify-center items-center py-8'>\n <Text className='text-gray-500 dark:text-gray-400'>No items found</Text>\n </View>\n );\n\n // Footer component\n const ListFooterComponent = useCallback(() => {\n const footerLoader = (\n <View className='flex-row justify-center items-center py-4'>\n <ActivityIndicator size='small' color='#3b82f6' />\n <Text className='ml-2 text-sm text-gray-600 dark:text-gray-400'>\n Loading...\n </Text>\n </View>\n );\n\n const footerEndMessage = (\n <View className='flex-row justify-center items-center py-4'>\n <Text className='text-sm text-gray-600 dark:text-gray-400'>\n No more items to load\n </Text>\n </View>\n );\n\n if (loading) {\n return <>{loader || footerLoader}</>;\n }\n if (!hasMore && data.length > 0) {\n return <>{endMessage || footerEndMessage}</>;\n }\n return null;\n }, [loading, hasMore, data.length, loader, endMessage]);\n\n return (\n <View className={cn('flex-1', className)}>\n <FlatList\n ref={flatListRef}\n data={data}\n renderItem={({ item, index }: { item: T; index: number }) => (\n <>{renderItem(item, index)}</>\n )}\n keyExtractor={keyExtractor}\n onEndReached={handleEndReached}\n onEndReachedThreshold={threshold}\n horizontal={horizontal}\n showsVerticalScrollIndicator={!horizontal}\n showsHorizontalScrollIndicator={horizontal}\n ListHeaderComponent={headerComponent ? <>{headerComponent}</> : null}\n ListFooterComponent={ListFooterComponent}\n ListEmptyComponent={\n !loading ? <>{emptyComponent || defaultEmptyComponent}</> : null\n }\n onScroll={showScrollTop ? handleScroll : undefined}\n scrollEventThrottle={showScrollTop ? 16 : undefined}\n refreshControl={\n onRefresh ? (\n <RefreshControl refreshing={refreshing} onRefresh={onRefresh} />\n ) : undefined\n }\n />\n\n {/* Scroll to top button */}\n {showScrollTop && showScrollTopButton && (\n <Pressable\n onPress={scrollToTop}\n className={cn(\n 'absolute bottom-4 right-4',\n 'w-12 h-12 rounded-full',\n 'bg-blue-600 dark:bg-blue-500',\n 'items-center justify-center',\n 'shadow-lg',\n 'active:bg-blue-700 dark:active:bg-blue-600'\n )}\n accessibilityRole='button'\n accessibilityLabel='Scroll to top'\n >\n <Text className='text-white text-lg'>↑</Text>\n </Pressable>\n )}\n </View>\n );\n}\n","import * as React from 'react';\nimport { useCallback } from 'react';\nimport { Text, Pressable, Linking } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ExternalLinkProps {\n /** Link URL */\n href: string;\n /** Link text content */\n children: React.ReactNode;\n /** Show external icon */\n showIcon?: boolean;\n /** Icon position */\n iconPosition?: 'left' | 'right';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'default' | 'primary' | 'muted';\n /** Additional className */\n className?: string;\n /** Press handler (called before navigation) */\n onPress?: () => void;\n}\n\n/**\n * ExternalLink Component\n *\n * Opens external URLs in the device browser.\n * Includes optional external link icon indicator.\n *\n * @example\n * ```tsx\n * <ExternalLink href=\"https://example.com\">\n * Visit Example\n * </ExternalLink>\n * ```\n *\n * @example\n * ```tsx\n * <ExternalLink\n * href=\"https://docs.example.com\"\n * variant=\"primary\"\n * iconPosition=\"left\"\n * >\n * Read Documentation\n * </ExternalLink>\n * ```\n */\nexport const ExternalLink: React.FC<ExternalLinkProps> = ({\n href,\n children,\n showIcon = true,\n iconPosition = 'right',\n size = 'md',\n variant = 'default',\n className,\n onPress,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n };\n\n // Color variant configurations\n const variantClasses = {\n default: 'text-blue-600 dark:text-blue-400',\n primary: 'text-blue-700 dark:text-blue-300 font-semibold',\n muted: 'text-gray-600 dark:text-gray-400',\n };\n\n const handlePress = useCallback(async () => {\n onPress?.();\n try {\n const canOpen = await Linking.canOpenURL(href);\n if (canOpen) {\n await Linking.openURL(href);\n }\n } catch {\n // Failed to open URL\n }\n }, [href, onPress]);\n\n return (\n <Pressable\n onPress={handlePress}\n className={cn('flex-row items-center gap-1', className)}\n accessibilityRole='link'\n accessibilityLabel={\n typeof children === 'string' ? children : 'External link'\n }\n accessibilityHint='Opens in external browser'\n >\n {showIcon && iconPosition === 'left' && (\n <Text className={cn(sizeClasses[size], variantClasses[variant])}>\n ↗\n </Text>\n )}\n <Text\n className={cn(sizeClasses[size], variantClasses[variant], 'underline')}\n >\n {children}\n </Text>\n {showIcon && iconPosition === 'right' && (\n <Text className={cn(sizeClasses[size], variantClasses[variant])}>\n ↗\n </Text>\n )}\n </Pressable>\n );\n};\n","import * as React from 'react';\nimport { useState, useEffect, useCallback } from 'react';\nimport {\n View,\n Text,\n TextInput,\n Pressable,\n Modal,\n TouchableWithoutFeedback,\n KeyboardAvoidingView,\n Platform,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TextInputModalProps {\n /** Modal visibility */\n isOpen: boolean;\n /** Close handler */\n onClose: () => void;\n /** Submit handler */\n onSubmit: (value: string) => void | Promise<void>;\n /** Modal title */\n title: string;\n /** Modal description */\n description: string;\n /** Input placeholder */\n placeholder?: string;\n /** Initial input value */\n initialValue?: string;\n /** Cancel button text */\n cancelText?: string;\n /** Confirm button text */\n confirmText?: string;\n /** Loading state */\n isLoading?: boolean;\n /** Loading button text */\n loadingText?: string;\n /** Max input length */\n maxLength?: number;\n /** Required validation */\n required?: boolean;\n /** Custom validation function */\n validate?: (value: string) => string | null;\n}\n\n/**\n * TextInputModal Component\n *\n * Modal dialog with text input for collecting user input.\n * Supports validation, loading states, and customization.\n *\n * @example\n * ```tsx\n * <TextInputModal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * onSubmit={handleSubmit}\n * title=\"Rename Item\"\n * description=\"Enter a new name for this item\"\n * placeholder=\"New name...\"\n * initialValue={currentName}\n * />\n * ```\n */\nexport const TextInputModal: React.FC<TextInputModalProps> = ({\n isOpen,\n onClose,\n onSubmit,\n title,\n description,\n placeholder = '',\n initialValue = '',\n cancelText = 'Cancel',\n confirmText = 'Confirm',\n isLoading = false,\n loadingText = 'Processing...',\n maxLength,\n required = true,\n validate,\n}) => {\n const [value, setValue] = useState(initialValue);\n const [error, setError] = useState<string | null>(null);\n\n // Reset value when modal opens\n useEffect(() => {\n if (isOpen) {\n setValue(initialValue);\n setError(null);\n }\n }, [isOpen, initialValue]);\n\n const handleSubmit = useCallback(async () => {\n // Clear previous errors\n setError(null);\n\n // Validate required\n if (required && !value.trim()) {\n setError('This field is required');\n return;\n }\n\n // Custom validation\n if (validate) {\n const validationError = validate(value);\n if (validationError) {\n setError(validationError);\n return;\n }\n }\n\n // Submit\n try {\n await onSubmit(value.trim());\n } catch (err) {\n setError(err instanceof Error ? err.message : 'An error occurred');\n }\n }, [value, required, validate, onSubmit]);\n\n const handleCancel = useCallback(() => {\n setValue(initialValue);\n setError(null);\n onClose();\n }, [initialValue, onClose]);\n\n const canSubmit = required ? value.trim().length > 0 : true;\n\n return (\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={isLoading ? undefined : handleCancel}\n >\n <TouchableWithoutFeedback onPress={isLoading ? undefined : handleCancel}>\n <View className='flex-1 justify-center px-4 bg-black/50'>\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n >\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-lg shadow-xl'>\n {/* Content */}\n <View className='p-4'>\n <Text className='text-lg font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n <Text className='text-sm text-gray-600 dark:text-gray-400 mt-2 mb-4'>\n {description}\n </Text>\n\n <TextInput\n value={value}\n onChangeText={setValue}\n placeholder={placeholder}\n placeholderTextColor='#9ca3af'\n maxLength={maxLength}\n editable={!isLoading}\n autoFocus\n className={cn(\n 'px-3 py-2 text-sm',\n 'bg-gray-50 dark:bg-gray-800',\n 'text-gray-900 dark:text-white',\n 'border rounded-md',\n error\n ? 'border-red-500 dark:border-red-400'\n : 'border-gray-300 dark:border-gray-600'\n )}\n accessibilityLabel={placeholder || title}\n />\n\n {error && (\n <Text\n className='text-xs text-red-600 dark:text-red-400 mt-2'\n accessibilityRole='alert'\n >\n {error}\n </Text>\n )}\n </View>\n\n {/* Footer */}\n <View className='flex-row gap-2 p-4 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={handleCancel}\n disabled={isLoading}\n className={cn(\n 'flex-1 items-center py-2',\n 'bg-gray-100 dark:bg-gray-800',\n 'rounded-md',\n 'active:bg-gray-200 dark:active:bg-gray-700',\n isLoading && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={cancelText}\n >\n <Text className='text-sm text-gray-700 dark:text-gray-300'>\n {cancelText}\n </Text>\n </Pressable>\n\n <Pressable\n onPress={handleSubmit}\n disabled={!canSubmit || isLoading}\n className={cn(\n 'flex-1 items-center py-2',\n 'bg-blue-600 dark:bg-blue-500',\n 'rounded-md',\n 'active:bg-blue-700 dark:active:bg-blue-600',\n (!canSubmit || isLoading) && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={confirmText}\n >\n <Text className='text-sm text-white font-medium'>\n {isLoading ? loadingText : confirmText}\n </Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </KeyboardAvoidingView>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n );\n};\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { Alert } from '../Alert';\n\nexport interface FormAlertsProps {\n /** Success message to display */\n successMessage?: string;\n /** Error message to display */\n errorMessage?: string;\n /** Title for success alert */\n successTitle?: string;\n /** Title for error alert */\n errorTitle?: string;\n /** Auto-dismiss success message after milliseconds (0 = no auto-dismiss) */\n autoDismissDelay?: number;\n /** Callback when success message should be cleared */\n onSuccessDismiss?: () => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * FormAlerts Component\n *\n * Displays success and error alerts for form submissions.\n * Success messages can auto-dismiss after a configured delay.\n *\n * @example\n * ```tsx\n * const [success, setSuccess] = useState('');\n * const [error, setError] = useState('');\n *\n * <FormAlerts\n * successMessage={success}\n * errorMessage={error}\n * onSuccessDismiss={() => setSuccess('')}\n * autoDismissDelay={3000}\n * />\n * ```\n */\nexport const FormAlerts: React.FC<FormAlertsProps> = ({\n successMessage,\n errorMessage,\n successTitle = 'Success',\n errorTitle = 'Error',\n autoDismissDelay = 0,\n onSuccessDismiss,\n className,\n}) => {\n // Auto-dismiss success message\n useEffect(() => {\n if (successMessage && autoDismissDelay > 0 && onSuccessDismiss) {\n const timer = setTimeout(() => {\n onSuccessDismiss();\n }, autoDismissDelay);\n\n return () => clearTimeout(timer);\n }\n }, [successMessage, autoDismissDelay, onSuccessDismiss]);\n\n if (!successMessage && !errorMessage) {\n return null;\n }\n\n return (\n <View className={cn('gap-3', className)}>\n {errorMessage && (\n <Alert variant='error' title={errorTitle} description={errorMessage} />\n )}\n {successMessage && (\n <Alert\n variant='success'\n title={successTitle}\n description={successMessage}\n />\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { ScrollView, View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ScrollAreaProps {\n /** Scrollable content */\n children: React.ReactNode;\n /** Maximum height */\n maxHeight?: number;\n /** Hide scrollbar */\n hideScrollbar?: boolean;\n /** Scroll direction */\n direction?: 'vertical' | 'horizontal' | 'both';\n /** Show scroll indicators */\n showsIndicator?: boolean;\n /** Additional className */\n className?: string;\n /** Content container className */\n contentClassName?: string;\n}\n\n/**\n * ScrollArea Component\n *\n * Container with scrollable content and optional scroll indicators.\n * Provides consistent scrollable areas across the application.\n *\n * @example\n * ```tsx\n * <ScrollArea maxHeight={400}>\n * <View>Long content...</View>\n * </ScrollArea>\n * ```\n *\n * @example\n * ```tsx\n * <ScrollArea direction=\"horizontal\" hideScrollbar>\n * <View className=\"w-[2000px]\">Wide content</View>\n * </ScrollArea>\n * ```\n */\nexport const ScrollArea: React.FC<ScrollAreaProps> = ({\n children,\n maxHeight,\n hideScrollbar = false,\n direction = 'vertical',\n showsIndicator = true,\n className,\n contentClassName,\n}) => {\n const isVertical = direction === 'vertical' || direction === 'both';\n const isHorizontal = direction === 'horizontal' || direction === 'both';\n\n return (\n <View\n className={cn('relative', className)}\n style={maxHeight ? { maxHeight } : undefined}\n >\n <ScrollView\n horizontal={direction === 'horizontal'}\n showsVerticalScrollIndicator={\n isVertical && showsIndicator && !hideScrollbar\n }\n showsHorizontalScrollIndicator={\n isHorizontal && showsIndicator && !hideScrollbar\n }\n scrollEnabled\n nestedScrollEnabled\n contentContainerStyle={\n direction === 'horizontal' ? { flexDirection: 'row' } : undefined\n }\n >\n <View className={contentClassName}>{children}</View>\n </ScrollView>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SectionBadgeProps {\n /** Icon element */\n icon: React.ReactNode;\n /** Badge text */\n text: string;\n /** Visual variant */\n variant?: 'default' | 'premium' | 'primary' | 'light';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * SectionBadge Component\n *\n * Badge with icon for section headers and feature highlights.\n * Commonly used for premium features, new features, or category labels.\n *\n * @example\n * ```tsx\n * <SectionBadge\n * icon={<StarIcon />}\n * text=\"Premium Feature\"\n * variant=\"premium\"\n * />\n * ```\n */\nexport const SectionBadge: React.FC<SectionBadgeProps> = ({\n icon,\n text,\n variant = 'default',\n size = 'md',\n className,\n}) => {\n // Variant color configurations\n const variantClasses = {\n default: 'bg-gray-100 dark:bg-gray-800',\n premium: 'bg-amber-100 dark:bg-amber-900/30',\n primary: 'bg-blue-100 dark:bg-blue-900/30',\n light:\n 'bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700',\n };\n\n const iconColorClasses = {\n default: 'text-gray-600 dark:text-gray-400',\n premium: 'text-amber-600 dark:text-amber-400',\n primary: 'text-blue-600 dark:text-blue-400',\n light: 'text-gray-600 dark:text-gray-400',\n };\n\n const textColorClasses = {\n default: 'text-gray-900 dark:text-white',\n premium: 'text-amber-900 dark:text-amber-100',\n primary: 'text-blue-900 dark:text-blue-100',\n light: 'text-gray-900 dark:text-white',\n };\n\n // Size configurations\n const sizeClasses = {\n sm: {\n container: 'px-4 py-2',\n iconSize: 'w-4 h-4',\n text: 'text-xs',\n },\n md: {\n container: 'px-6 py-3',\n iconSize: 'w-5 h-5',\n text: 'text-sm',\n },\n lg: {\n container: 'px-8 py-4',\n iconSize: 'w-6 h-6',\n text: 'text-base',\n },\n };\n\n const sizeConfig = sizeClasses[size];\n\n return (\n <View\n className={cn(\n 'flex-row items-center rounded-full mb-6',\n variantClasses[variant],\n sizeConfig.container,\n className\n )}\n >\n <View className={cn('mr-2', iconColorClasses[variant])}>{icon}</View>\n <Text\n className={cn(\n 'font-semibold',\n sizeConfig.text,\n textColorClasses[variant]\n )}\n >\n {text}\n </Text>\n </View>\n );\n};\n","import React from 'react';\nimport { View, Text, type ViewProps } from 'react-native';\nimport { cn } from '../lib/utils';\n\nexport type ChainType = 'evm' | 'solana' | 'bitcoin' | 'cosmos';\n\nexport interface ChainBadgeProps extends ViewProps {\n chainType: ChainType;\n size?: 'sm' | 'md' | 'lg';\n showLabel?: boolean;\n}\n\nconst chainConfig: Record<\n ChainType,\n { label: string; emoji: string; bgColor: string; textColor: string }\n> = {\n evm: {\n label: 'EVM',\n emoji: '⟠',\n bgColor:\n 'bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800',\n textColor: 'text-blue-700 dark:text-blue-300',\n },\n solana: {\n label: 'SOL',\n emoji: '◎',\n bgColor:\n 'bg-purple-50 dark:bg-purple-900/20 border-purple-200 dark:border-purple-800',\n textColor: 'text-purple-700 dark:text-purple-300',\n },\n bitcoin: {\n label: 'BTC',\n emoji: '₿',\n bgColor:\n 'bg-orange-50 dark:bg-orange-900/20 border-orange-200 dark:border-orange-800',\n textColor: 'text-orange-700 dark:text-orange-300',\n },\n cosmos: {\n label: 'ATOM',\n emoji: '⚛',\n bgColor:\n 'bg-indigo-50 dark:bg-indigo-900/20 border-indigo-200 dark:border-indigo-800',\n textColor: 'text-indigo-700 dark:text-indigo-300',\n },\n};\n\nconst sizeConfig = {\n sm: { padding: 'px-1.5 py-0.5', text: 'text-xs', gap: 'gap-0.5' },\n md: { padding: 'px-2 py-1', text: 'text-sm', gap: 'gap-1' },\n lg: { padding: 'px-2.5 py-1.5', text: 'text-base', gap: 'gap-1.5' },\n};\n\nexport const ChainBadge: React.FC<ChainBadgeProps> = ({\n chainType,\n size = 'md',\n showLabel = true,\n className,\n ...props\n}) => {\n const chain = chainConfig[chainType];\n const sizeStyles = sizeConfig[size];\n\n return (\n <View\n className={cn(\n 'flex-row items-center rounded-md border',\n chain.bgColor,\n sizeStyles.padding,\n sizeStyles.gap,\n className\n )}\n accessibilityLabel={`${chain.label} chain`}\n {...props}\n >\n <Text className={cn(sizeStyles.text, chain.textColor)}>\n {chain.emoji}\n </Text>\n {showLabel && (\n <Text className={cn('font-medium', sizeStyles.text, chain.textColor)}>\n {chain.label}\n </Text>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable, ActivityIndicator } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ListItemWithActionProps {\n /** Main content/text to display */\n children: React.ReactNode;\n /** Action to perform */\n onAction: () => void;\n /** Action button text */\n actionText?: string;\n /** Action button icon */\n actionIcon?: React.ReactNode;\n /** Whether the action is destructive */\n destructive?: boolean;\n /** Whether the action is in progress */\n isProcessing?: boolean;\n /** Variant of the list item */\n variant?: 'default' | 'compact' | 'elevated';\n /** Additional className */\n className?: string;\n}\n\n/**\n * ListItemWithAction Component\n *\n * Displays a list item with an action button (typically remove/delete).\n * Commonly used for managing lists of items with actions.\n *\n * @example\n * ```tsx\n * <ListItemWithAction\n * onAction={() => handleRemove(item.id)}\n * actionText=\"Remove\"\n * destructive\n * isProcessing={isDeleting}\n * >\n * user@example.com\n * </ListItemWithAction>\n * ```\n */\nexport const ListItemWithAction: React.FC<ListItemWithActionProps> = ({\n children,\n onAction,\n actionText = 'Remove',\n actionIcon,\n destructive = true,\n isProcessing = false,\n variant = 'default',\n className,\n}) => {\n const variantClasses = {\n default: 'bg-gray-50 dark:bg-gray-700',\n compact: 'bg-gray-50 dark:bg-gray-700 py-2 px-3',\n elevated:\n 'bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 shadow-sm',\n };\n\n return (\n <View\n className={cn(\n 'flex-row items-center justify-between p-4 rounded-lg',\n variantClasses[variant],\n className\n )}\n >\n <View className='flex-1 mr-4'>\n {typeof children === 'string' ? (\n <Text className='text-sm text-gray-900 dark:text-white'>\n {children}\n </Text>\n ) : (\n children\n )}\n </View>\n\n <Pressable\n onPress={onAction}\n disabled={isProcessing}\n className={cn(\n 'flex-row items-center px-3 py-1.5 rounded-md',\n destructive\n ? 'active:bg-red-50 dark:active:bg-red-900/20'\n : 'bg-gray-100 dark:bg-gray-600 active:bg-gray-200 dark:active:bg-gray-500',\n isProcessing && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={actionText}\n accessibilityState={{ disabled: isProcessing }}\n >\n {isProcessing ? (\n <ActivityIndicator\n size='small'\n color={destructive ? '#dc2626' : '#6b7280'}\n />\n ) : (\n <>\n {actionIcon && <View className='mr-1'>{actionIcon}</View>}\n <Text\n className={cn(\n 'text-sm font-medium',\n destructive\n ? 'text-red-600 dark:text-red-400'\n : 'text-gray-700 dark:text-gray-300'\n )}\n >\n {actionText}\n </Text>\n </>\n )}\n </Pressable>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Pressable, Modal, StyleSheet } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface OverlayProps {\n /** Whether overlay is visible */\n isOpen: boolean;\n /** Click handler for overlay backdrop */\n onClose?: () => void;\n /** Overlay content */\n children?: React.ReactNode;\n /** Opacity level */\n opacity?: 'light' | 'medium' | 'dark';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Overlay Component\n *\n * Full-screen backdrop overlay with optional content.\n * Typically used with modals, drawers, and popups.\n *\n * @example\n * ```tsx\n * <Overlay isOpen={isModalOpen} onClose={() => setIsModalOpen(false)}>\n * <Modal>Content</Modal>\n * </Overlay>\n * ```\n *\n * @example\n * ```tsx\n * <Overlay isOpen={true} opacity=\"dark\" />\n * ```\n */\nexport const Overlay: React.FC<OverlayProps> = ({\n isOpen,\n onClose,\n children,\n opacity = 'medium',\n className,\n}) => {\n if (!isOpen) return null;\n\n // Opacity configurations\n const opacityClasses = {\n light: 'bg-black/20',\n medium: 'bg-black/50',\n dark: 'bg-black/75',\n };\n\n return (\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={onClose}\n >\n <View style={styles.container}>\n <Pressable\n style={StyleSheet.absoluteFill}\n className={cn(opacityClasses[opacity], className)}\n onPress={onClose}\n accessibilityRole='button'\n accessibilityLabel='Close overlay'\n />\n {children && (\n <View style={styles.content} pointerEvents='box-none'>\n {children}\n </View>\n )}\n </View>\n </Modal>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n content: {\n ...StyleSheet.absoluteFillObject,\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport { View, Text, TextInput, Pressable, ScrollView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TransferListItem {\n /** Item ID */\n id: string;\n /** Item label */\n label: string;\n /** Optional description */\n description?: string;\n /** Disabled state */\n disabled?: boolean;\n}\n\nexport interface TransferListProps {\n /** Available items */\n source: TransferListItem[];\n /** Selected items */\n target: TransferListItem[];\n /** Change handler */\n onChange: (source: TransferListItem[], target: TransferListItem[]) => void;\n /** Source list title */\n sourceTitle?: string;\n /** Target list title */\n targetTitle?: string;\n /** Enable search */\n searchable?: boolean;\n /** Source search placeholder */\n sourceSearchPlaceholder?: string;\n /** Target search placeholder */\n targetSearchPlaceholder?: string;\n /** List height */\n height?: number;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TransferList Component\n *\n * Dual-list component for moving items between available and selected.\n * Supports search, bulk operations, and individual item transfer.\n *\n * @example\n * ```tsx\n * <TransferList\n * source={availableUsers}\n * target={selectedUsers}\n * onChange={(source, target) => {\n * setAvailableUsers(source);\n * setSelectedUsers(target);\n * }}\n * sourceTitle=\"Available Users\"\n * targetTitle=\"Selected Users\"\n * searchable\n * />\n * ```\n */\nexport const TransferList: React.FC<TransferListProps> = ({\n source,\n target,\n onChange,\n sourceTitle = 'Available',\n targetTitle = 'Selected',\n searchable = true,\n sourceSearchPlaceholder = 'Search available...',\n targetSearchPlaceholder = 'Search selected...',\n height = 300,\n disabled = false,\n className,\n}) => {\n const [sourceSearch, setSourceSearch] = useState('');\n const [targetSearch, setTargetSearch] = useState('');\n const [sourceSelected, setSourceSelected] = useState<Set<string>>(new Set());\n const [targetSelected, setTargetSelected] = useState<Set<string>>(new Set());\n\n // Filter items based on search\n const filteredSource = searchable\n ? source.filter(item =>\n item.label.toLowerCase().includes(sourceSearch.toLowerCase())\n )\n : source;\n\n const filteredTarget = searchable\n ? target.filter(item =>\n item.label.toLowerCase().includes(targetSearch.toLowerCase())\n )\n : target;\n\n // Toggle item selection\n const toggleSourceSelection = useCallback((id: string) => {\n setSourceSelected(prev => {\n const newSet = new Set(prev);\n if (newSet.has(id)) {\n newSet.delete(id);\n } else {\n newSet.add(id);\n }\n return newSet;\n });\n }, []);\n\n const toggleTargetSelection = useCallback((id: string) => {\n setTargetSelected(prev => {\n const newSet = new Set(prev);\n if (newSet.has(id)) {\n newSet.delete(id);\n } else {\n newSet.add(id);\n }\n return newSet;\n });\n }, []);\n\n // Move selected items to target\n const moveToTarget = useCallback(() => {\n const itemsToMove = source.filter(item => sourceSelected.has(item.id));\n const newSource = source.filter(item => !sourceSelected.has(item.id));\n const newTarget = [...target, ...itemsToMove];\n onChange(newSource, newTarget);\n setSourceSelected(new Set());\n }, [source, target, sourceSelected, onChange]);\n\n // Move selected items to source\n const moveToSource = useCallback(() => {\n const itemsToMove = target.filter(item => targetSelected.has(item.id));\n const newTarget = target.filter(item => !targetSelected.has(item.id));\n const newSource = [...source, ...itemsToMove];\n onChange(newSource, newTarget);\n setTargetSelected(new Set());\n }, [source, target, targetSelected, onChange]);\n\n // Move all items\n const moveAllToTarget = useCallback(() => {\n onChange([], [...target, ...source]);\n setSourceSelected(new Set());\n }, [source, target, onChange]);\n\n const moveAllToSource = useCallback(() => {\n onChange([...source, ...target], []);\n setTargetSelected(new Set());\n }, [source, target, onChange]);\n\n // Render list panel\n const renderList = (\n items: TransferListItem[],\n title: string,\n selected: Set<string>,\n onToggle: (id: string) => void,\n searchValue: string,\n onSearchChange: (value: string) => void,\n searchPlaceholder: string\n ) => (\n <View className='flex-1 border border-gray-300 dark:border-gray-700 rounded-md bg-white dark:bg-gray-900'>\n {/* Header */}\n <View className='px-3 py-2 border-b border-gray-300 dark:border-gray-700 bg-gray-50 dark:bg-gray-800'>\n <Text className='text-sm font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n <Text className='text-xs text-gray-600 dark:text-gray-400'>\n {items.length} item{items.length !== 1 ? 's' : ''}\n </Text>\n </View>\n\n {/* Search */}\n {searchable && (\n <View className='p-2 border-b border-gray-200 dark:border-gray-700'>\n <TextInput\n value={searchValue}\n onChangeText={onSearchChange}\n placeholder={searchPlaceholder}\n placeholderTextColor='#9ca3af'\n className='px-3 py-2 text-sm bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white border border-gray-300 dark:border-gray-700 rounded-md'\n />\n </View>\n )}\n\n {/* List */}\n <ScrollView style={{ height: searchable ? height - 120 : height - 60 }}>\n {items.length === 0 ? (\n <View className='flex-1 items-center justify-center py-8'>\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n No items\n </Text>\n </View>\n ) : (\n items.map(item => {\n const isSelected = selected.has(item.id);\n\n return (\n <Pressable\n key={item.id}\n onPress={() => !item.disabled && !disabled && onToggle(item.id)}\n disabled={item.disabled || disabled}\n className={cn(\n 'mx-2 my-1 px-3 py-2 rounded-md',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n (item.disabled || disabled) && 'opacity-50',\n isSelected &&\n 'bg-blue-50 dark:bg-blue-900/30 border border-blue-200 dark:border-blue-700'\n )}\n accessibilityRole='checkbox'\n accessibilityState={{\n checked: isSelected,\n disabled: item.disabled || disabled,\n }}\n >\n <View className='flex-row items-start gap-2'>\n {/* Checkbox */}\n <View\n className={cn(\n 'w-4 h-4 border-2 rounded items-center justify-center mt-0.5',\n isSelected\n ? 'bg-blue-600 border-blue-600 dark:bg-blue-500 dark:border-blue-500'\n : 'border-gray-300 dark:border-gray-600'\n )}\n >\n {isSelected && (\n <Text className='text-white text-xs'>✓</Text>\n )}\n </View>\n\n {/* Content */}\n <View className='flex-1'>\n <Text className='text-sm font-medium text-gray-900 dark:text-white'>\n {item.label}\n </Text>\n {item.description && (\n <Text className='text-xs text-gray-600 dark:text-gray-400'>\n {item.description}\n </Text>\n )}\n </View>\n </View>\n </Pressable>\n );\n })\n )}\n </ScrollView>\n </View>\n );\n\n return (\n <View className={cn('flex-row gap-4', className)}>\n {/* Source list */}\n {renderList(\n filteredSource,\n sourceTitle,\n sourceSelected,\n toggleSourceSelection,\n sourceSearch,\n setSourceSearch,\n sourceSearchPlaceholder\n )}\n\n {/* Transfer buttons */}\n <View className='justify-center gap-2'>\n <Pressable\n onPress={moveAllToTarget}\n disabled={disabled || source.length === 0}\n className={cn(\n 'px-3 py-2 bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n 'active:bg-gray-50 dark:active:bg-gray-800',\n (disabled || source.length === 0) && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Move all to selected'\n >\n <Text className='text-gray-700 dark:text-gray-300'>»</Text>\n </Pressable>\n\n <Pressable\n onPress={moveToTarget}\n disabled={disabled || sourceSelected.size === 0}\n className={cn(\n 'px-3 py-2 bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n 'active:bg-gray-50 dark:active:bg-gray-800',\n (disabled || sourceSelected.size === 0) && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Move selected to target'\n >\n <Text className='text-gray-700 dark:text-gray-300'>›</Text>\n </Pressable>\n\n <Pressable\n onPress={moveToSource}\n disabled={disabled || targetSelected.size === 0}\n className={cn(\n 'px-3 py-2 bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n 'active:bg-gray-50 dark:active:bg-gray-800',\n (disabled || targetSelected.size === 0) && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Move selected to source'\n >\n <Text className='text-gray-700 dark:text-gray-300'>‹</Text>\n </Pressable>\n\n <Pressable\n onPress={moveAllToSource}\n disabled={disabled || target.length === 0}\n className={cn(\n 'px-3 py-2 bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n 'active:bg-gray-50 dark:active:bg-gray-800',\n (disabled || target.length === 0) && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Move all to available'\n >\n <Text className='text-gray-700 dark:text-gray-300'>«</Text>\n </Pressable>\n </View>\n\n {/* Target list */}\n {renderList(\n filteredTarget,\n targetTitle,\n targetSelected,\n toggleTargetSelection,\n targetSearch,\n setTargetSearch,\n targetSearchPlaceholder\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable, ScrollView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface FileInfo {\n /** File name */\n name: string;\n /** File size in bytes */\n size: number;\n /** File type/mime */\n type?: string;\n /** File URI (for RN) */\n uri?: string;\n}\n\nexport interface FileInputProps {\n /** Callback when files should be selected (opens picker) */\n onSelectFiles: () => void;\n /** Current files */\n files?: FileInfo[];\n /** Callback to remove a file */\n onRemove?: (index: number) => void;\n /** Disabled state */\n disabled?: boolean;\n /** Show drop zone style */\n showDropZone?: boolean;\n /** Show file list */\n showFileList?: boolean;\n /** Maximum file size in bytes (for display) */\n maxSize?: number;\n /** Button text */\n buttonText?: string;\n /** Drop zone text */\n dropZoneText?: string;\n /** Error message */\n error?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * FileInput Component\n *\n * File input button/zone that triggers file selection callback.\n * The actual file picking should be handled by the parent using\n * expo-document-picker or similar library.\n *\n * @example\n * ```tsx\n * <FileInput\n * onSelectFiles={pickDocuments}\n * files={selectedFiles}\n * onRemove={removeFile}\n * showDropZone\n * />\n * ```\n */\nexport const FileInput: React.FC<FileInputProps> = ({\n onSelectFiles,\n files = [],\n onRemove,\n disabled = false,\n showDropZone = false,\n showFileList = true,\n maxSize,\n buttonText = 'Choose Files',\n dropZoneText = 'Tap to select files',\n error,\n className,\n}) => {\n // Format file size to human-readable string\n const formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];\n };\n\n // Drop zone UI\n if (showDropZone) {\n return (\n <View className={cn('w-full', className)}>\n <Pressable\n onPress={onSelectFiles}\n disabled={disabled}\n className={cn(\n 'border-2 border-dashed rounded-lg p-8',\n 'border-gray-300 dark:border-gray-600',\n 'active:border-blue-500 active:bg-blue-50 dark:active:bg-blue-900/10',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={buttonText}\n accessibilityState={{ disabled }}\n >\n <View className='items-center justify-center gap-3'>\n <Text className='text-4xl text-gray-400 dark:text-gray-500'>\n 📁\n </Text>\n <Text className='text-sm text-gray-600 dark:text-gray-400 text-center'>\n {dropZoneText}\n </Text>\n {maxSize && (\n <Text className='text-xs text-gray-500 dark:text-gray-500'>\n Max file size: {formatFileSize(maxSize)}\n </Text>\n )}\n </View>\n </Pressable>\n\n {error && (\n <Text className='mt-2 text-sm text-red-600 dark:text-red-400'>\n {error}\n </Text>\n )}\n\n {showFileList && files.length > 0 && (\n <FileList\n files={files}\n onRemove={onRemove}\n formatFileSize={formatFileSize}\n />\n )}\n </View>\n );\n }\n\n // Button UI\n return (\n <View className={cn('w-full', className)}>\n <Pressable\n onPress={onSelectFiles}\n disabled={disabled}\n className={cn(\n 'flex-row items-center px-4 py-2',\n 'border border-gray-300 dark:border-gray-600',\n 'rounded-lg',\n 'bg-white dark:bg-gray-800',\n 'active:bg-gray-50 dark:active:bg-gray-700',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={buttonText}\n accessibilityState={{ disabled }}\n >\n <Text className='text-lg mr-2'>📄</Text>\n <Text className='text-sm font-medium text-gray-700 dark:text-gray-300'>\n {buttonText}\n </Text>\n </Pressable>\n\n {error && (\n <Text className='mt-2 text-sm text-red-600 dark:text-red-400'>\n {error}\n </Text>\n )}\n\n {showFileList && files.length > 0 && (\n <FileList\n files={files}\n onRemove={onRemove}\n formatFileSize={formatFileSize}\n />\n )}\n </View>\n );\n};\n\n/**\n * FileList Component - Internal\n */\nconst FileList: React.FC<{\n files: FileInfo[];\n onRemove?: (index: number) => void;\n formatFileSize: (bytes: number) => string;\n}> = ({ files, onRemove, formatFileSize }) => {\n return (\n <ScrollView className='mt-3 max-h-48'>\n {files.map((file, index) => (\n <View\n key={`${file.name}-${index}`}\n className='flex-row items-center justify-between p-2 mb-2 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700'\n >\n <View className='flex-row items-center flex-1 mr-2'>\n <Text className='text-lg mr-2'>📄</Text>\n <View className='flex-1'>\n <Text\n className='text-sm font-medium text-gray-900 dark:text-gray-100'\n numberOfLines={1}\n >\n {file.name}\n </Text>\n <Text className='text-xs text-gray-500 dark:text-gray-400'>\n {formatFileSize(file.size)}\n </Text>\n </View>\n </View>\n\n {onRemove && (\n <Pressable\n onPress={() => onRemove(index)}\n className='p-1 active:bg-red-100 dark:active:bg-red-900/20 rounded'\n accessibilityRole='button'\n accessibilityLabel='Remove file'\n >\n <Text className='text-red-500 dark:text-red-400'>✕</Text>\n </Pressable>\n )}\n </View>\n ))}\n </ScrollView>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n Text,\n Image,\n Pressable,\n ImageSourcePropType,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface LogoProps {\n /** Logo size */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Additional className */\n className?: string;\n /** Show text alongside logo */\n showText?: boolean;\n /** Press handler */\n onPress?: () => void;\n /** Logo image source */\n logoSource?: ImageSourcePropType;\n /** Logo alt text */\n logoAlt?: string;\n /** Logo text (required) */\n logoText: string;\n}\n\n/**\n * Logo Component\n *\n * Displays a logo with optional text.\n * Supports multiple sizes and optional press handler.\n *\n * @example\n * ```tsx\n * <Logo\n * logoText=\"MyApp\"\n * logoSource={require('./assets/logo.png')}\n * size=\"lg\"\n * onPress={() => navigation.navigate('Home')}\n * />\n * ```\n */\nexport const Logo: React.FC<LogoProps> = ({\n size = 'md',\n className,\n showText = true,\n onPress,\n logoSource,\n logoAlt = 'Logo',\n logoText,\n}) => {\n // Size configurations\n const sizeConfig = {\n sm: {\n container: 'gap-2',\n image: { width: 24, height: 24 },\n text: 'text-lg',\n },\n md: {\n container: 'gap-2',\n image: { width: 32, height: 32 },\n text: 'text-2xl',\n },\n lg: {\n container: 'gap-3',\n image: { width: 40, height: 40 },\n text: 'text-3xl',\n },\n xl: {\n container: 'gap-4',\n image: { width: 48, height: 48 },\n text: 'text-4xl',\n },\n };\n\n const config = sizeConfig[size];\n\n const logoContent = (\n <>\n {logoSource && (\n <Image\n source={logoSource}\n style={config.image}\n accessibilityLabel={logoAlt}\n resizeMode='contain'\n />\n )}\n {showText && (\n <Text\n className={cn(\n 'font-bold text-gray-900 dark:text-gray-100',\n config.text\n )}\n >\n {logoText}\n </Text>\n )}\n </>\n );\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n className={cn(\n 'flex-row items-center',\n config.container,\n 'active:opacity-80',\n className\n )}\n accessibilityRole='button'\n accessibilityLabel={`${logoText} logo`}\n >\n {logoContent}\n </Pressable>\n );\n }\n\n return (\n <View\n className={cn('flex-row items-center', config.container, className)}\n accessibilityRole='image'\n accessibilityLabel={`${logoText} logo`}\n >\n {logoContent}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { Text, Animated } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface AnimatedCounterProps {\n /** Target value to count to */\n value: number;\n /** Animation duration in milliseconds */\n duration?: number;\n /** Number of decimal places */\n decimals?: number;\n /** Prefix (e.g., \"$\") */\n prefix?: string;\n /** Suffix (e.g., \"%\") */\n suffix?: string;\n /** Format with commas */\n formatWithCommas?: boolean;\n /** Additional className */\n className?: string;\n /** Text color className */\n textClassName?: string;\n}\n\n/**\n * AnimatedCounter Component\n *\n * Animated number counter that counts up/down to target value.\n * Useful for statistics, dashboards, and metrics display.\n *\n * @example\n * ```tsx\n * <AnimatedCounter\n * value={1234}\n * duration={2000}\n * prefix=\"$\"\n * formatWithCommas\n * />\n * ```\n *\n * @example\n * ```tsx\n * <AnimatedCounter\n * value={99.9}\n * decimals={1}\n * suffix=\"%\"\n * />\n * ```\n */\nexport const AnimatedCounter: React.FC<AnimatedCounterProps> = ({\n value,\n duration = 1000,\n decimals = 0,\n prefix = '',\n suffix = '',\n formatWithCommas = false,\n className,\n textClassName,\n}) => {\n const [displayValue, setDisplayValue] = useState(0);\n const animatedValue = useRef(new Animated.Value(0)).current;\n const previousValue = useRef(0);\n\n useEffect(() => {\n // Listen to animated value changes\n const listenerId = animatedValue.addListener(({ value: animValue }) => {\n setDisplayValue(animValue);\n });\n\n // Animate from previous value to new value\n Animated.timing(animatedValue, {\n toValue: value,\n duration,\n useNativeDriver: false,\n }).start();\n\n previousValue.current = value;\n\n return () => {\n animatedValue.removeListener(listenerId);\n };\n }, [value, duration, animatedValue]);\n\n // Format the display value\n const formatValue = (val: number): string => {\n const fixed = val.toFixed(decimals);\n\n if (formatWithCommas) {\n const parts = fixed.split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return parts.join('.');\n }\n\n return fixed;\n };\n\n return (\n <Text\n className={cn(\n 'text-2xl font-bold text-gray-900 dark:text-white',\n textClassName,\n className\n )}\n >\n {prefix}\n {formatValue(displayValue)}\n {suffix}\n </Text>\n );\n};\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { Animated, ViewStyle } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport type AnimationType =\n | 'fade-in'\n | 'fade-in-up'\n | 'fade-in-down'\n | 'fade-in-left'\n | 'fade-in-right'\n | 'scale-in';\n\nexport interface AnimatedSectionProps {\n /** Animation type */\n animation?: AnimationType;\n /** Animation delay in milliseconds */\n delay?: number;\n /** Animation duration in milliseconds */\n duration?: number;\n /** Children to animate */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n /** Additional style */\n style?: ViewStyle;\n}\n\n/**\n * AnimatedSection Component\n *\n * Wrapper component that animates its children on mount.\n * Supports various animation types for entrance animations.\n *\n * @example\n * ```tsx\n * <AnimatedSection animation=\"fade-in-up\" delay={200}>\n * <Card>Content</Card>\n * </AnimatedSection>\n * ```\n */\nexport const AnimatedSection: React.FC<AnimatedSectionProps> = ({\n animation = 'fade-in',\n delay = 0,\n duration = 400,\n children,\n className,\n style,\n}) => {\n const opacity = useRef(new Animated.Value(0)).current;\n const translateY = useRef(new Animated.Value(0)).current;\n const translateX = useRef(new Animated.Value(0)).current;\n const scale = useRef(new Animated.Value(1)).current;\n\n useEffect(() => {\n // Set initial values based on animation type\n switch (animation) {\n case 'fade-in':\n opacity.setValue(0);\n break;\n case 'fade-in-up':\n opacity.setValue(0);\n translateY.setValue(20);\n break;\n case 'fade-in-down':\n opacity.setValue(0);\n translateY.setValue(-20);\n break;\n case 'fade-in-left':\n opacity.setValue(0);\n translateX.setValue(-20);\n break;\n case 'fade-in-right':\n opacity.setValue(0);\n translateX.setValue(20);\n break;\n case 'scale-in':\n opacity.setValue(0);\n scale.setValue(0.9);\n break;\n }\n\n // Animate to final values\n const animations: Animated.CompositeAnimation[] = [];\n\n animations.push(\n Animated.timing(opacity, {\n toValue: 1,\n duration,\n delay,\n useNativeDriver: true,\n })\n );\n\n if (animation === 'fade-in-up' || animation === 'fade-in-down') {\n animations.push(\n Animated.timing(translateY, {\n toValue: 0,\n duration,\n delay,\n useNativeDriver: true,\n })\n );\n }\n\n if (animation === 'fade-in-left' || animation === 'fade-in-right') {\n animations.push(\n Animated.timing(translateX, {\n toValue: 0,\n duration,\n delay,\n useNativeDriver: true,\n })\n );\n }\n\n if (animation === 'scale-in') {\n animations.push(\n Animated.timing(scale, {\n toValue: 1,\n duration,\n delay,\n useNativeDriver: true,\n })\n );\n }\n\n Animated.parallel(animations).start();\n }, [animation, delay, duration, opacity, translateY, translateX, scale]);\n\n return (\n <Animated.View\n className={cn(className)}\n style={[\n style,\n {\n opacity,\n transform: [{ translateY }, { translateX }, { scale }],\n },\n ]}\n >\n {children}\n </Animated.View>\n );\n};\n\n// Utility components for common animation patterns\nexport const FadeIn: React.FC<{\n children: React.ReactNode;\n delay?: number;\n className?: string;\n}> = ({ children, delay = 0, className }) => (\n <AnimatedSection animation='fade-in' delay={delay} className={className}>\n {children}\n </AnimatedSection>\n);\n\nexport const FadeInUp: React.FC<{\n children: React.ReactNode;\n delay?: number;\n className?: string;\n}> = ({ children, delay = 0, className }) => (\n <AnimatedSection animation='fade-in-up' delay={delay} className={className}>\n {children}\n </AnimatedSection>\n);\n\nexport const FadeInScale: React.FC<{\n children: React.ReactNode;\n delay?: number;\n className?: string;\n}> = ({ children, delay = 0, className }) => (\n <AnimatedSection animation='scale-in' delay={delay} className={className}>\n {children}\n </AnimatedSection>\n);\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface MasonryProps {\n /** Children elements */\n children: React.ReactNode;\n /** Number of columns */\n columns?: number;\n /** Gap between items */\n gap?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Masonry Component\n *\n * Pinterest-style masonry grid layout for React Native.\n * Distributes items across columns for optimal spacing.\n *\n * @example\n * ```tsx\n * <Masonry columns={2} gap={16}>\n * {items.map(item => <Card key={item.id}>{item.content}</Card>)}\n * </Masonry>\n * ```\n */\nexport const Masonry: React.FC<MasonryProps> = ({\n children,\n columns = 2,\n gap = 16,\n className,\n}) => {\n // Distribute items into columns\n const childArray = React.Children.toArray(children);\n const columnArrays: React.ReactNode[][] = Array.from(\n { length: columns },\n () => []\n );\n\n childArray.forEach((child, index) => {\n columnArrays[index % columns].push(child);\n });\n\n return (\n <View className={cn('flex-row', className)} style={{ gap }}>\n {columnArrays.map((column, columnIndex) => (\n <View key={columnIndex} className='flex-1' style={{ gap }}>\n {column.map((item, itemIndex) => (\n <View key={itemIndex}>{item}</View>\n ))}\n </View>\n ))}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface IconContainerProps {\n /** Icon element */\n children: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Color variant */\n variant?:\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'error'\n | 'neutral';\n /** Shape variant */\n shape?: 'square' | 'rounded' | 'circle';\n /** Additional className */\n className?: string;\n}\n\n/**\n * IconContainer Component\n *\n * Styled container for displaying icons with consistent sizing and colors.\n * Commonly used in feature lists, settings, and navigation.\n *\n * @example\n * ```tsx\n * <IconContainer size=\"lg\" variant=\"primary\" shape=\"rounded\">\n * <SettingsIcon />\n * </IconContainer>\n * ```\n */\nexport const IconContainer: React.FC<IconContainerProps> = ({\n children,\n size = 'md',\n variant = 'primary',\n shape = 'rounded',\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'w-10 h-10',\n md: 'w-12 h-12',\n lg: 'w-16 h-16',\n xl: 'w-20 h-20',\n };\n\n // Variant configurations\n const variantClasses = {\n primary: 'bg-blue-100 dark:bg-blue-900/30',\n secondary: 'bg-purple-100 dark:bg-purple-900/30',\n success: 'bg-green-100 dark:bg-green-900/30',\n warning: 'bg-yellow-100 dark:bg-yellow-900/30',\n error: 'bg-red-100 dark:bg-red-900/30',\n neutral: 'bg-gray-100 dark:bg-gray-800',\n };\n\n // Shape configurations\n const shapeClasses = {\n square: 'rounded-lg',\n rounded: 'rounded-2xl',\n circle: 'rounded-full',\n };\n\n return (\n <View\n className={cn(\n 'items-center justify-center',\n sizeClasses[size],\n variantClasses[variant],\n shapeClasses[shape],\n className\n )}\n >\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, StyleSheet } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface GradientIconContainerProps {\n /** Icon element */\n children: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Shape variant */\n shape?: 'square' | 'rounded' | 'circle';\n /** Color variant */\n variant?: 'blue' | 'purple' | 'green' | 'orange' | 'gray';\n /** Additional className */\n className?: string;\n}\n\n/**\n * GradientIconContainer Component\n *\n * Container for icons with gradient-like background colors.\n * Note: True gradients require expo-linear-gradient; this uses solid colors.\n *\n * @example\n * ```tsx\n * <GradientIconContainer size=\"lg\" variant=\"blue\" shape=\"rounded\">\n * <ShieldIcon />\n * </GradientIconContainer>\n * ```\n */\nexport const GradientIconContainer: React.FC<GradientIconContainerProps> = ({\n children,\n size = 'md',\n shape = 'rounded',\n variant = 'blue',\n className,\n}) => {\n // Size configurations\n const sizeConfig = {\n sm: { container: 'w-10 h-10', icon: styles.iconSm },\n md: { container: 'w-12 h-12', icon: styles.iconMd },\n lg: { container: 'w-16 h-16', icon: styles.iconLg },\n xl: { container: 'w-20 h-20', icon: styles.iconXl },\n };\n\n // Shape configurations\n const shapeClasses = {\n square: 'rounded-lg',\n rounded: 'rounded-xl',\n circle: 'rounded-full',\n };\n\n // Color variants (solid colors approximating gradients)\n const variantClasses = {\n blue: 'bg-blue-600',\n purple: 'bg-purple-600',\n green: 'bg-green-600',\n orange: 'bg-orange-600',\n gray: 'bg-gray-700 dark:bg-gray-600',\n };\n\n const config = sizeConfig[size];\n\n return (\n <View\n className={cn(\n 'items-center justify-center',\n config.container,\n shapeClasses[shape],\n variantClasses[variant],\n className\n )}\n >\n <View style={config.icon}>{children}</View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n iconSm: { width: 20, height: 20 },\n iconMd: { width: 24, height: 24 },\n iconLg: { width: 32, height: 32 },\n iconXl: { width: 40, height: 40 },\n});\n","import * as React from 'react';\nimport { View, Text, ActivityIndicator } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PageSectionHeaderProps {\n /** Section title */\n title: string;\n /** Optional subtitle/description */\n description?: string;\n /** Item count to display */\n count?: number;\n /** Count label (e.g., \"items\", \"templates\") */\n countLabel?: string;\n /** Action button(s) */\n action?: React.ReactNode;\n /** Show loading indicator */\n loading?: boolean;\n /** Loading text */\n loadingText?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * PageSectionHeader Component\n *\n * A flexible header for page sections with title, description, count, and actions.\n * Commonly used at the top of content sections to provide context and actions.\n *\n * @example\n * ```tsx\n * <PageSectionHeader\n * title=\"Templates\"\n * count={templates.length}\n * action={<Button onPress={handleAdd}>Add Template</Button>}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <PageSectionHeader\n * title=\"Email Filters\"\n * description=\"Manage your email filtering rules\"\n * count={12}\n * countLabel=\"filters\"\n * loading={isRefreshing}\n * />\n * ```\n */\nexport const PageSectionHeader: React.FC<PageSectionHeaderProps> = ({\n title,\n description,\n count,\n countLabel,\n action,\n loading = false,\n loadingText = 'Loading...',\n size = 'md',\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: {\n title: 'text-lg font-semibold',\n description: 'text-sm',\n count: 'text-xs',\n },\n md: {\n title: 'text-xl font-semibold',\n description: 'text-base',\n count: 'text-sm',\n },\n lg: {\n title: 'text-2xl font-bold',\n description: 'text-lg',\n count: 'text-base',\n },\n };\n\n const sizeConfig = sizeClasses[size];\n\n return (\n <View\n className={cn('flex-row items-start justify-between gap-4', className)}\n >\n <View className='flex-1'>\n <View className='flex-row items-center gap-3 flex-wrap'>\n <Text\n className={cn(sizeConfig.title, 'text-gray-900 dark:text-gray-100')}\n >\n {title}\n </Text>\n\n {count !== undefined && (\n <Text\n className={cn(\n sizeConfig.count,\n 'text-gray-500 dark:text-gray-400'\n )}\n >\n ({count}\n {countLabel && ` ${countLabel}`})\n </Text>\n )}\n\n {loading && (\n <View className='flex-row items-center gap-2'>\n <ActivityIndicator size='small' color='#3b82f6' />\n <Text\n className={cn(\n sizeConfig.count,\n 'text-gray-500 dark:text-gray-400'\n )}\n >\n {loadingText}\n </Text>\n </View>\n )}\n </View>\n\n {description && (\n <Text\n className={cn(\n sizeConfig.description,\n 'mt-1 text-gray-600 dark:text-gray-400'\n )}\n >\n {description}\n </Text>\n )}\n </View>\n\n {action && <View>{action}</View>}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, StyleSheet } from 'react-native';\n\nexport interface VisuallyHiddenProps {\n /** Content to hide visually but keep accessible to screen readers */\n children: React.ReactNode;\n}\n\n/**\n * VisuallyHidden Component\n *\n * Hides content visually while keeping it accessible to screen readers.\n * In React Native, this uses accessibilityElementsHidden with absolute positioning.\n *\n * @example\n * ```tsx\n * <Pressable onPress={handleDelete}>\n * <TrashIcon />\n * <VisuallyHidden>Delete item</VisuallyHidden>\n * </Pressable>\n * ```\n */\nexport const VisuallyHidden: React.FC<VisuallyHiddenProps> = ({ children }) => {\n return (\n <View\n style={styles.hidden}\n accessibilityElementsHidden={false}\n importantForAccessibility='yes'\n >\n {typeof children === 'string' ? (\n <Text accessibilityRole='text'>{children}</Text>\n ) : (\n children\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n hidden: {\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n // clip is deprecated but needed for older devices\n // clipPath: 'inset(50%)', // Not supported in RN\n },\n});\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface BreadcrumbNavItem {\n /** Item label */\n label: string;\n /** Navigation handler */\n onPress?: () => void;\n}\n\nexport interface BreadcrumbNavProps {\n /** Breadcrumb items */\n items: BreadcrumbNavItem[];\n /** Custom separator */\n separator?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * BreadcrumbNav Component\n *\n * Simple breadcrumb navigation for React Native.\n * Shows a trail of navigational links.\n *\n * @example\n * ```tsx\n * <BreadcrumbNav\n * items={[\n * { label: 'Home', onPress: () => navigate('home') },\n * { label: 'Products', onPress: () => navigate('products') },\n * { label: 'Electronics' }\n * ]}\n * />\n * ```\n */\nexport const BreadcrumbNav: React.FC<BreadcrumbNavProps> = ({\n items,\n separator = '/',\n className,\n}) => {\n return (\n <View\n className={cn('flex-row items-center gap-2', className)}\n accessibilityRole='none'\n accessibilityLabel='Breadcrumb navigation'\n >\n {items.map((item, index) => (\n <React.Fragment key={index}>\n {index > 0 && (\n <Text className='text-gray-400 dark:text-gray-600 text-sm'>\n {typeof separator === 'string' ? separator : separator}\n </Text>\n )}\n {index === items.length - 1 ? (\n <Text className='text-gray-900 dark:text-white font-medium text-sm'>\n {item.label}\n </Text>\n ) : (\n <Pressable\n onPress={item.onPress}\n accessibilityRole='link'\n accessibilityLabel={item.label}\n >\n <Text className='text-blue-600 dark:text-blue-400 text-sm'>\n {item.label}\n </Text>\n </Pressable>\n )}\n </React.Fragment>\n ))}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface KbdProps {\n /** Keyboard key(s) to display */\n children: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Kbd Component\n *\n * Displays keyboard shortcuts with consistent styling.\n * Used to represent user input from keyboard.\n *\n * @example\n * ```tsx\n * <View className=\"flex-row items-center gap-1\">\n * <Kbd>Ctrl</Kbd>\n * <Text>+</Text>\n * <Kbd>C</Kbd>\n * </View>\n * ```\n *\n * @example\n * ```tsx\n * <Text>Press <Kbd size=\"sm\">Enter</Kbd> to submit</Text>\n * ```\n */\nexport const Kbd: React.FC<KbdProps> = ({\n children,\n size = 'md',\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'text-xs px-1.5 py-0.5',\n md: 'text-sm px-2 py-1',\n lg: 'text-base px-2.5 py-1.5',\n };\n\n return (\n <View\n className={cn(\n 'items-center justify-center',\n 'bg-gray-100 dark:bg-gray-800',\n 'border border-gray-300 dark:border-gray-600',\n 'rounded',\n sizeClasses[size],\n className\n )}\n accessibilityRole='text'\n >\n <Text\n className={cn(\n 'font-mono font-semibold',\n 'text-gray-900 dark:text-gray-100',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n size === 'lg' && 'text-base'\n )}\n >\n {children}\n </Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, ScrollView, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TableColumn<T> {\n /** Column key */\n key: string;\n /** Column label */\n label: React.ReactNode;\n /** Render cell content */\n render?: (row: T, index: number) => React.ReactNode;\n /** Column width */\n width?: number;\n /** Sortable column */\n sortable?: boolean;\n /** Align content */\n align?: 'left' | 'center' | 'right';\n}\n\nexport interface TableProps<T> {\n /** Table columns */\n columns: TableColumn<T>[];\n /** Table data */\n data: T[];\n /** Row key extractor */\n keyExtractor: (row: T, index: number) => string;\n /** Sort configuration */\n sort?: {\n column: string;\n direction: 'asc' | 'desc';\n };\n /** Sort handler */\n onSort?: (column: string) => void;\n /** Row click handler */\n onRowPress?: (row: T, index: number) => void;\n /** Striped rows */\n striped?: boolean;\n /** Compact mode */\n compact?: boolean;\n /** Show border */\n bordered?: boolean;\n /** Empty state message */\n emptyMessage?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Table Component\n *\n * Data table with sorting and customization for React Native.\n * Generic component supporting any data type.\n *\n * @example\n * ```tsx\n * <Table\n * columns={[\n * { key: 'name', label: 'Name', sortable: true },\n * { key: 'email', label: 'Email' },\n * { key: 'role', label: 'Role', align: 'center' }\n * ]}\n * data={users}\n * keyExtractor={(user) => user.id}\n * sort={sort}\n * onSort={handleSort}\n * onRowPress={handleRowPress}\n * />\n * ```\n */\nexport function Table<T extends Record<string, unknown>>({\n columns,\n data,\n keyExtractor,\n sort,\n onSort,\n onRowPress,\n striped = false,\n compact = false,\n bordered = false,\n emptyMessage = 'No data available',\n className,\n}: TableProps<T>) {\n const handleSort = (column: TableColumn<T>) => {\n if (column.sortable && onSort) {\n onSort(column.key);\n }\n };\n\n const alignClasses = {\n left: 'items-start',\n center: 'items-center',\n right: 'items-end',\n };\n\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={true}\n className={cn('w-full', className)}\n >\n <View className='flex-1'>\n {/* Header */}\n <View\n className={cn(\n 'flex-row bg-gray-50 dark:bg-gray-800',\n 'border-b border-gray-200 dark:border-gray-700'\n )}\n >\n {columns.map(column => (\n <Pressable\n key={column.key}\n onPress={() => column.sortable && handleSort(column)}\n disabled={!column.sortable}\n className={cn(\n compact ? 'px-3 py-2' : 'px-4 py-3',\n bordered &&\n 'border-r border-gray-200 dark:border-gray-700 last:border-r-0'\n )}\n style={{ width: column.width }}\n accessibilityRole='button'\n accessibilityLabel={`Sort by ${column.label}`}\n >\n <View\n className={cn(\n 'flex-row items-center gap-2',\n alignClasses[column.align || 'left']\n )}\n >\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 uppercase tracking-wider'>\n {column.label}\n </Text>\n {column.sortable && sort?.column === column.key && (\n <Text className='text-xs text-gray-500'>\n {sort.direction === 'asc' ? '↑' : '↓'}\n </Text>\n )}\n </View>\n </Pressable>\n ))}\n </View>\n\n {/* Body */}\n <View className='bg-white dark:bg-gray-900'>\n {data.length === 0 ? (\n <View className='px-4 py-8'>\n <Text className='text-center text-sm text-gray-500 dark:text-gray-400'>\n {emptyMessage}\n </Text>\n </View>\n ) : (\n data.map((row, rowIndex) => (\n <Pressable\n key={keyExtractor(row, rowIndex)}\n onPress={() => onRowPress?.(row, rowIndex)}\n disabled={!onRowPress}\n className={cn(\n 'flex-row',\n 'border-b border-gray-200 dark:border-gray-700',\n striped &&\n rowIndex % 2 === 1 &&\n 'bg-gray-50 dark:bg-gray-800/50'\n )}\n accessibilityRole='button'\n >\n {columns.map(column => (\n <View\n key={column.key}\n className={cn(\n compact ? 'px-3 py-2' : 'px-4 py-3',\n alignClasses[column.align || 'left'],\n bordered &&\n 'border-r border-gray-200 dark:border-gray-700 last:border-r-0'\n )}\n style={{ width: column.width }}\n >\n {column.render ? (\n column.render(row, rowIndex)\n ) : (\n <Text className='text-sm text-gray-900 dark:text-white'>\n {String(row[column.key] ?? '')}\n </Text>\n )}\n </View>\n ))}\n </Pressable>\n ))\n )}\n </View>\n </View>\n </ScrollView>\n );\n}\n","import * as React from 'react';\nimport { useState, useEffect, useRef } from 'react';\nimport {\n View,\n Text,\n TextInput,\n Pressable,\n ScrollView,\n Modal,\n KeyboardAvoidingView,\n Platform,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CommandItem {\n /** Item ID */\n id: string;\n /** Item label */\n label: string;\n /** Item icon */\n icon?: React.ReactNode;\n /** Action handler */\n onSelect: () => void;\n /** Group/category */\n group?: string;\n /** Keyboard shortcut display */\n shortcut?: string;\n /** Keywords for search */\n keywords?: string[];\n}\n\nexport interface CommandProps {\n /** Whether command palette is open */\n isOpen: boolean;\n /** Close handler */\n onClose: () => void;\n /** Available command items */\n items: CommandItem[];\n /** Placeholder text */\n placeholder?: string;\n /** Empty state message */\n emptyMessage?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Command Component\n *\n * Command palette for quick actions and navigation in React Native.\n * Searchable interface with grouping support.\n *\n * @example\n * ```tsx\n * <Command\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * items={[\n * { id: 'new', label: 'New File', icon: <PlusIcon />, onSelect: handleNew },\n * { id: 'open', label: 'Open File', icon: <FolderIcon />, onSelect: handleOpen }\n * ]}\n * placeholder=\"Type a command or search...\"\n * />\n * ```\n */\nexport const Command: React.FC<CommandProps> = ({\n isOpen,\n onClose,\n items,\n placeholder = 'Type a command or search...',\n emptyMessage = 'No results found.',\n className,\n}) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedIndex, setSelectedIndex] = useState(0);\n const inputRef = useRef<TextInput>(null);\n\n // Filter items based on search query\n const filteredItems = items.filter(item => {\n const query = searchQuery.toLowerCase();\n return (\n item.label.toLowerCase().includes(query) ||\n item.keywords?.some(keyword => keyword.toLowerCase().includes(query)) ||\n item.group?.toLowerCase().includes(query)\n );\n });\n\n // Group items\n const groupedItems = filteredItems.reduce(\n (groups, item) => {\n const group = item.group || 'Commands';\n if (!groups[group]) {\n groups[group] = [];\n }\n groups[group].push(item);\n return groups;\n },\n {} as Record<string, CommandItem[]>\n );\n\n // Reset state when closing\n useEffect(() => {\n if (!isOpen) {\n setSearchQuery('');\n setSelectedIndex(0);\n }\n }, [isOpen]);\n\n // Focus input when opening\n useEffect(() => {\n if (isOpen && inputRef.current) {\n setTimeout(() => inputRef.current?.focus(), 100);\n }\n }, [isOpen]);\n\n // Reset selected index when search changes\n useEffect(() => {\n setSelectedIndex(0);\n }, [searchQuery]);\n\n const handleSelect = (item: CommandItem) => {\n item.onSelect();\n onClose();\n };\n\n return (\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={onClose}\n >\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n className='flex-1'\n >\n {/* Backdrop */}\n <Pressable\n className='flex-1 bg-black/50 justify-start pt-20'\n onPress={onClose}\n >\n {/* Command Palette */}\n <Pressable\n className={cn(\n 'mx-4 bg-white dark:bg-gray-900 rounded-xl overflow-hidden',\n 'shadow-xl',\n className\n )}\n onPress={e => e.stopPropagation()}\n >\n {/* Search Input */}\n <View className='border-b border-gray-200 dark:border-gray-700 p-4'>\n <View className='flex-row items-center gap-3'>\n <View className='w-5 h-5 items-center justify-center'>\n <Text className='text-gray-400'>🔍</Text>\n </View>\n <TextInput\n ref={inputRef}\n value={searchQuery}\n onChangeText={setSearchQuery}\n placeholder={placeholder}\n placeholderTextColor='#9ca3af'\n className='flex-1 text-gray-900 dark:text-white text-base'\n autoCapitalize='none'\n autoCorrect={false}\n returnKeyType='search'\n />\n </View>\n </View>\n\n {/* Results */}\n <ScrollView\n className='max-h-96'\n keyboardShouldPersistTaps='handled'\n >\n <View className='p-2'>\n {Object.keys(groupedItems).length === 0 ? (\n <View className='px-4 py-8'>\n <Text className='text-sm text-gray-500 dark:text-gray-400 text-center'>\n {emptyMessage}\n </Text>\n </View>\n ) : (\n Object.entries(groupedItems).map(\n ([groupName, groupItems]) => (\n <View key={groupName} className='mb-4'>\n {/* Group Header */}\n <Text className='px-3 py-2 text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider'>\n {groupName}\n </Text>\n\n {/* Group Items */}\n <View className='gap-1'>\n {groupItems.map(item => {\n const globalIndex = filteredItems.indexOf(item);\n const isSelected = globalIndex === selectedIndex;\n\n return (\n <Pressable\n key={item.id}\n onPress={() => handleSelect(item)}\n className={cn(\n 'flex-row items-center gap-3 px-3 py-2 rounded-md',\n isSelected\n ? 'bg-blue-50 dark:bg-blue-900/30'\n : 'active:bg-gray-100 dark:active:bg-gray-800'\n )}\n accessibilityRole='button'\n accessibilityLabel={item.label}\n >\n {item.icon && (\n <View className='w-4 h-4'>{item.icon}</View>\n )}\n <Text\n className={cn(\n 'flex-1 text-sm',\n isSelected\n ? 'text-blue-700 dark:text-blue-300'\n : 'text-gray-900 dark:text-white'\n )}\n numberOfLines={1}\n >\n {item.label}\n </Text>\n {item.shortcut && (\n <Text className='text-xs text-gray-500 dark:text-gray-400 font-mono'>\n {item.shortcut}\n </Text>\n )}\n </Pressable>\n );\n })}\n </View>\n </View>\n )\n )\n )}\n </View>\n </ScrollView>\n\n {/* Footer */}\n <View className='border-t border-gray-200 dark:border-gray-700 px-4 py-2'>\n <Text className='text-xs text-gray-500 dark:text-gray-400 text-center'>\n Tap an item to select\n </Text>\n </View>\n </Pressable>\n </Pressable>\n </KeyboardAvoidingView>\n </Modal>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n Text,\n Pressable,\n ScrollView,\n useWindowDimensions,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\n/**\n * MasterListItem - Standardized list item with selection styling\n */\nexport interface MasterListItemProps {\n /** Whether this item is currently selected */\n isSelected: boolean;\n /** Press handler */\n onPress: () => void;\n /** Icon element to display (optional) */\n icon?: React.ReactNode;\n /** Main label text */\n label: string;\n /** Description text (optional) */\n description?: string;\n /** Additional className */\n className?: string;\n}\n\nexport const MasterListItem: React.FC<MasterListItemProps> = ({\n isSelected,\n onPress,\n icon,\n label,\n description,\n className,\n}) => {\n return (\n <Pressable\n onPress={onPress}\n className={cn(\n 'relative p-4 border-b border-gray-200 dark:border-gray-700',\n className\n )}\n accessibilityRole='button'\n accessibilityState={{ selected: isSelected }}\n >\n {/* Selection overlay */}\n {isSelected && (\n <View className='absolute inset-1 bg-blue-500/10 dark:bg-blue-400/10 rounded-lg' />\n )}\n\n {/* Content */}\n <View className='relative flex-row items-start'>\n {icon && (\n <View\n className={cn(\n 'mr-3 mt-0.5',\n isSelected\n ? 'text-blue-600 dark:text-blue-400'\n : 'text-gray-500 dark:text-gray-400'\n )}\n >\n {icon}\n </View>\n )}\n <View className='flex-1'>\n <Text\n className={cn(\n 'font-medium',\n isSelected\n ? 'text-blue-600 dark:text-blue-400'\n : 'text-gray-900 dark:text-gray-100'\n )}\n >\n {label}\n </Text>\n {description && (\n <Text\n className={cn(\n 'text-xs mt-0.5',\n isSelected\n ? 'text-blue-500 dark:text-blue-300'\n : 'text-gray-500 dark:text-gray-400'\n )}\n >\n {description}\n </Text>\n )}\n </View>\n </View>\n </Pressable>\n );\n};\n\nexport interface MasterDetailLayoutProps {\n /** Title shown above the master panel */\n masterTitle?: string;\n /** Subtitle shown below master title */\n masterSubtitle?: string;\n /** Text shown in the back button on mobile */\n backButtonText?: string;\n /** Content for the master panel */\n masterContent: React.ReactNode;\n /** Content for the detail panel */\n detailContent: React.ReactNode;\n /** Title for the detail panel */\n detailTitle?: string;\n /** Current mobile view state */\n mobileView?: 'navigation' | 'content';\n /** Callback when user wants to switch to navigation view */\n onBackToNavigation?: () => void;\n /** Custom class for master panel */\n masterClassName?: string;\n /** Custom class for detail panel */\n detailClassName?: string;\n /** Width of master panel on tablet (default: 320) */\n masterWidth?: number;\n /** Breakpoint for tablet layout (default: 768) */\n tabletBreakpoint?: number;\n}\n\n/**\n * MasterDetailLayout Component\n *\n * A responsive master-detail layout for React Native.\n * - Mobile: Toggle between master (navigation) and detail (content) views\n * - Tablet/Desktop: Side-by-side layout\n *\n * @example\n * ```tsx\n * <MasterDetailLayout\n * masterTitle=\"Table of Contents\"\n * masterContent={<NavigationMenu items={sections} />}\n * detailContent={<Article content={currentSection} />}\n * mobileView={view}\n * onBackToNavigation={() => setView('navigation')}\n * />\n * ```\n */\nexport const MasterDetailLayout: React.FC<MasterDetailLayoutProps> = ({\n masterTitle,\n masterSubtitle,\n backButtonText,\n masterContent,\n detailContent,\n detailTitle,\n mobileView = 'navigation',\n onBackToNavigation,\n masterClassName,\n detailClassName,\n masterWidth = 320,\n tabletBreakpoint = 768,\n}) => {\n const { width } = useWindowDimensions();\n const isTablet = width >= tabletBreakpoint;\n\n // Extract first part of title for back button\n const extractFirstPart = (text: string | undefined) => {\n if (!text) return 'Back';\n return text.split('-')[0].trim();\n };\n\n const buttonText = backButtonText\n ? extractFirstPart(backButtonText)\n : masterTitle\n ? extractFirstPart(masterTitle)\n : 'Back';\n\n // Tablet/Desktop: Side-by-side layout\n if (isTablet) {\n return (\n <View className='flex-1 flex-row gap-8 p-4'>\n {/* Master Panel */}\n <View style={{ width: masterWidth }}>\n {masterTitle && (\n <Text className='text-lg font-semibold text-gray-900 dark:text-white mb-4'>\n {masterTitle}\n </Text>\n )}\n {masterSubtitle && (\n <Text className='text-sm text-gray-600 dark:text-gray-400 mb-6'>\n {masterSubtitle}\n </Text>\n )}\n <View\n className={cn(\n 'bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700',\n masterClassName\n )}\n >\n <ScrollView>{masterContent}</ScrollView>\n </View>\n </View>\n\n {/* Detail Panel */}\n <View className='flex-1'>\n <View\n className={cn(\n 'bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 p-6',\n detailClassName\n )}\n >\n {detailTitle && (\n <Text className='text-2xl font-bold text-gray-900 dark:text-white mb-6'>\n {detailTitle}\n </Text>\n )}\n <ScrollView>{detailContent}</ScrollView>\n </View>\n </View>\n </View>\n );\n }\n\n // Mobile: Toggle between views\n return (\n <View className='flex-1'>\n {/* Mobile Navigation View */}\n {mobileView === 'navigation' && (\n <View className='flex-1 bg-white dark:bg-gray-800 p-6'>\n {masterTitle && (\n <Text className='text-xl font-semibold text-gray-900 dark:text-white mb-4'>\n {masterTitle}\n </Text>\n )}\n {masterSubtitle && (\n <Text className='text-sm text-gray-600 dark:text-gray-400 mb-6'>\n {masterSubtitle}\n </Text>\n )}\n <View className={masterClassName}>\n <ScrollView>{masterContent}</ScrollView>\n </View>\n </View>\n )}\n\n {/* Mobile Content View */}\n {mobileView === 'content' && (\n <View className='flex-1 p-4'>\n {/* Back button */}\n {onBackToNavigation && (\n <Pressable\n onPress={onBackToNavigation}\n className='mb-4 px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-800 self-start'\n accessibilityRole='button'\n accessibilityLabel={`Back to ${buttonText}`}\n >\n <Text className='text-sm font-medium text-gray-700 dark:text-gray-300'>\n ← {buttonText}\n </Text>\n </Pressable>\n )}\n\n {/* Detail content */}\n <View\n className={cn(\n 'flex-1 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 p-6',\n detailClassName\n )}\n >\n {detailTitle && (\n <Text className='text-2xl font-bold text-gray-900 dark:text-white mb-6'>\n {detailTitle}\n </Text>\n )}\n <ScrollView>{detailContent}</ScrollView>\n </View>\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PageHeaderProps {\n /** Page title */\n title?: string;\n /** Page description */\n description?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * PageHeader Component\n *\n * Simple page header with title and description.\n *\n * @example\n * ```tsx\n * <PageHeader\n * title=\"Dashboard\"\n * description=\"Welcome back! Here's your overview.\"\n * />\n * ```\n */\nexport const PageHeader: React.FC<PageHeaderProps> = ({\n title,\n description,\n className,\n}) => {\n return (\n <View className={cn('mb-8', className)}>\n {title && (\n <Text className='text-3xl font-bold text-gray-900 dark:text-white'>\n {title}\n </Text>\n )}\n {description && (\n <Text className='mt-2 text-gray-600 dark:text-gray-400'>\n {description}\n </Text>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface StandardPageLayoutProps {\n /** Page content */\n children: React.ReactNode;\n /** Background className */\n backgroundClassName?: string;\n /** Content className */\n contentClassName?: string;\n}\n\n/**\n * StandardPageLayout Component\n *\n * A simple page layout wrapper that applies consistent background\n * and content styling.\n *\n * @example\n * ```tsx\n * <StandardPageLayout\n * backgroundClassName=\"bg-gray-100 dark:bg-gray-900\"\n * contentClassName=\"p-4\"\n * >\n * <YourPageContent />\n * </StandardPageLayout>\n * ```\n */\nexport const StandardPageLayout: React.FC<StandardPageLayoutProps> = ({\n children,\n backgroundClassName,\n contentClassName,\n}) => {\n return (\n <View className={cn('flex-1', backgroundClassName)}>\n <View className={cn('flex-1', contentClassName)}>{children}</View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface StepListItem {\n /** Step content */\n content: React.ReactNode;\n /** Sub-items under this step */\n subItems?: React.ReactNode[];\n}\n\nexport interface StepListProps {\n /** List items (string or StepListItem) */\n items: (string | StepListItem)[];\n /** List type */\n type?: 'ordered' | 'unordered';\n /** Visual variant */\n variant?: 'default' | 'enhanced' | 'minimal';\n /** Additional className */\n className?: string;\n /** Item className */\n itemClassName?: string;\n}\n\n/**\n * StepList Component\n *\n * Displays a list of steps with optional numbering and sub-items.\n * Supports ordered/unordered lists with different visual styles.\n *\n * @example\n * ```tsx\n * <StepList\n * items={[\n * 'First step',\n * 'Second step',\n * { content: 'Third step', subItems: ['Sub-item A', 'Sub-item B'] }\n * ]}\n * type=\"ordered\"\n * variant=\"enhanced\"\n * />\n * ```\n */\nexport const StepList: React.FC<StepListProps> = ({\n items,\n type = 'ordered',\n variant = 'default',\n className,\n itemClassName,\n}) => {\n const renderStepNumber = (index: number) => {\n if (type === 'ordered') {\n if (variant === 'enhanced') {\n return (\n <View className='w-6 h-6 bg-blue-600 rounded-full items-center justify-center mr-3'>\n <Text className='text-white text-sm font-medium'>{index + 1}</Text>\n </View>\n );\n }\n if (variant === 'minimal') {\n return (\n <View className='w-6 h-6 bg-blue-100 dark:bg-blue-900/20 rounded-full items-center justify-center mr-3'>\n <Text className='text-blue-600 dark:text-blue-400 text-sm font-medium'>\n {index + 1}\n </Text>\n </View>\n );\n }\n return (\n <Text className='text-gray-600 dark:text-gray-400 mr-2'>\n {index + 1}.\n </Text>\n );\n }\n\n // Unordered\n if (variant === 'minimal') {\n return <View className='w-2 h-2 bg-blue-600 rounded-full mr-3 mt-2' />;\n }\n return <Text className='text-gray-600 dark:text-gray-400 mr-2'>•</Text>;\n };\n\n const renderItem = (item: string | StepListItem, index: number) => {\n const isStepItem = typeof item === 'object';\n const content = isStepItem ? item.content : item;\n const subItems = isStepItem ? item.subItems : undefined;\n\n return (\n <View\n key={index}\n className={cn(\n 'flex-row',\n variant === 'enhanced' && 'pb-4',\n variant === 'enhanced' &&\n index < items.length - 1 &&\n 'border-l-2 border-gray-200 dark:border-gray-700 ml-3 pl-6',\n itemClassName\n )}\n >\n {/* Step indicator */}\n {variant !== 'enhanced' || type === 'unordered' ? (\n renderStepNumber(index)\n ) : (\n <View className='absolute -left-3'>{renderStepNumber(index)}</View>\n )}\n\n {/* Content */}\n <View className='flex-1'>\n {typeof content === 'string' ? (\n <Text className='text-gray-600 dark:text-gray-400'>{content}</Text>\n ) : (\n content\n )}\n\n {/* Sub-items */}\n {subItems && subItems.length > 0 && (\n <View className='mt-2 ml-4 gap-1'>\n {subItems.map((subItem, subIndex) => (\n <View key={subIndex} className='flex-row'>\n <Text className='text-gray-500 dark:text-gray-500 mr-2'>\n •\n </Text>\n {typeof subItem === 'string' ? (\n <Text className='text-sm text-gray-500 dark:text-gray-500 flex-1'>\n {subItem}\n </Text>\n ) : (\n subItem\n )}\n </View>\n ))}\n </View>\n )}\n </View>\n </View>\n );\n };\n\n return (\n <View\n className={cn(\n variant === 'default' && 'gap-2',\n variant === 'enhanced' && 'gap-0',\n variant === 'minimal' && 'gap-3',\n className\n )}\n >\n {items.map(renderItem)}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport type FeatureCardColor =\n | 'green'\n | 'blue'\n | 'purple'\n | 'orange'\n | 'red'\n | 'indigo'\n | 'cyan'\n | 'emerald'\n | 'pink'\n | 'gray';\n\nexport interface FeatureCardProps {\n /** Icon or emoji to display */\n icon: React.ReactNode;\n /** Title of the feature */\n title: string;\n /** Description of the feature */\n description: string;\n /** List of benefits (shown as bullet points) */\n benefits?: string[];\n /** Metrics to display */\n metrics?: { [key: string]: string };\n /** Color theme */\n color?: FeatureCardColor;\n /** Highlight with gradient background */\n isHighlight?: boolean;\n /** Optional CTA element */\n cta?: React.ReactNode;\n /** Press handler */\n onPress?: () => void;\n /** Show colored left border */\n borderColor?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * FeatureCard Component\n *\n * Card component for displaying features with icon, title, description,\n * benefits, and metrics.\n *\n * @example\n * ```tsx\n * <FeatureCard\n * icon={<ShieldIcon />}\n * title=\"Security\"\n * description=\"End-to-end encryption for all your data\"\n * benefits={['256-bit encryption', 'Zero-knowledge architecture']}\n * color=\"blue\"\n * />\n * ```\n */\nexport const FeatureCard: React.FC<FeatureCardProps> = ({\n icon,\n title,\n description,\n benefits,\n metrics,\n color = 'blue',\n isHighlight = false,\n cta,\n onPress,\n borderColor = false,\n className,\n}) => {\n // Color configurations\n const colorClasses: Record<FeatureCardColor, string> = {\n blue: 'text-blue-600 dark:text-blue-400',\n green: 'text-green-600 dark:text-green-400',\n purple: 'text-purple-600 dark:text-purple-400',\n orange: 'text-orange-600 dark:text-orange-400',\n pink: 'text-pink-600 dark:text-pink-400',\n gray: 'text-gray-600 dark:text-gray-400',\n red: 'text-red-600 dark:text-red-400',\n indigo: 'text-indigo-600 dark:text-indigo-400',\n cyan: 'text-cyan-600 dark:text-cyan-400',\n emerald: 'text-emerald-600 dark:text-emerald-400',\n };\n\n const borderColorClasses: Record<FeatureCardColor, string> = {\n green: 'border-l-4 border-l-green-500',\n blue: 'border-l-4 border-l-blue-500',\n purple: 'border-l-4 border-l-purple-500',\n orange: 'border-l-4 border-l-orange-500',\n red: 'border-l-4 border-l-red-500',\n indigo: 'border-l-4 border-l-indigo-500',\n cyan: 'border-l-4 border-l-cyan-500',\n emerald: 'border-l-4 border-l-emerald-500',\n pink: 'border-l-4 border-l-pink-500',\n gray: 'border-l-4 border-l-gray-500',\n };\n\n const iconBackgroundClasses: Record<FeatureCardColor, string> = {\n green: 'bg-green-100 dark:bg-green-900/20',\n blue: 'bg-blue-100 dark:bg-blue-900/20',\n purple: 'bg-purple-100 dark:bg-purple-900/20',\n orange: 'bg-orange-100 dark:bg-orange-900/20',\n red: 'bg-red-100 dark:bg-red-900/20',\n indigo: 'bg-indigo-100 dark:bg-indigo-900/20',\n cyan: 'bg-cyan-100 dark:bg-cyan-900/20',\n emerald: 'bg-emerald-100 dark:bg-emerald-900/20',\n pink: 'bg-pink-100 dark:bg-pink-900/20',\n gray: 'bg-gray-100 dark:bg-gray-900/20',\n };\n\n const bulletColorClasses: Record<FeatureCardColor, string> = {\n green: 'bg-green-500',\n blue: 'bg-blue-500',\n purple: 'bg-purple-500',\n orange: 'bg-orange-500',\n red: 'bg-red-500',\n indigo: 'bg-indigo-500',\n cyan: 'bg-cyan-500',\n emerald: 'bg-emerald-500',\n pink: 'bg-pink-500',\n gray: 'bg-gray-500',\n };\n\n const CardContent = () => (\n <>\n {/* Icon */}\n {borderColor ? (\n <View\n className={cn(\n 'w-12 h-12 rounded-lg items-center justify-center mb-4',\n iconBackgroundClasses[color]\n )}\n >\n <View className={colorClasses[color]}>{icon}</View>\n </View>\n ) : (\n <View className={cn('mb-4', colorClasses[color])}>{icon}</View>\n )}\n\n {/* Title */}\n <Text className='text-xl font-semibold text-gray-900 dark:text-white mb-3'>\n {title}\n </Text>\n\n {/* Description */}\n <Text className='text-gray-600 dark:text-gray-300 mb-4 leading-relaxed'>\n {description}\n </Text>\n\n {/* CTA */}\n {cta && <View className='mt-3 mb-4'>{cta}</View>}\n\n {/* Benefits */}\n {benefits && benefits.length > 0 && (\n <View className='gap-2 mb-4'>\n {benefits.map((benefit, index) => (\n <View key={index} className='flex-row items-start'>\n <View\n className={cn(\n 'w-2 h-2 rounded-full mt-2 mr-3',\n bulletColorClasses[color]\n )}\n />\n <Text className='flex-1 text-sm text-gray-600 dark:text-gray-400'>\n {benefit}\n </Text>\n </View>\n ))}\n </View>\n )}\n\n {/* Metrics */}\n {metrics && Object.keys(metrics).length > 0 && (\n <View className='flex-row flex-wrap gap-4 mt-4'>\n {Object.entries(metrics).map(([key, value], index) => (\n <View\n key={index}\n className='flex-1 min-w-[80px] items-center p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg'\n >\n <Text className={cn('text-lg font-bold', colorClasses[color])}>\n {value}\n </Text>\n <Text className='text-xs text-gray-500 dark:text-gray-400 mt-1'>\n {key}\n </Text>\n </View>\n ))}\n </View>\n )}\n </>\n );\n\n const baseClasses = cn(\n 'p-6 rounded-xl',\n borderColor && borderColorClasses[color],\n isHighlight\n ? 'bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800'\n : 'bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700',\n className\n );\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n className={baseClasses}\n accessibilityRole='button'\n accessibilityLabel={title}\n >\n <CardContent />\n </Pressable>\n );\n }\n\n return (\n <View className={baseClasses}>\n <CardContent />\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface Feature {\n /** Unique identifier */\n id?: string;\n /** Icon element */\n icon: React.ReactNode;\n /** Feature title */\n title: string;\n /** Feature description */\n description: string | React.ReactNode;\n /** Badge text and variant */\n badge?: {\n text: string;\n variant?: 'success' | 'info' | 'warning' | 'default';\n };\n}\n\nexport interface FeatureGridProps {\n /** Array of features to display */\n features: Feature[];\n /** Number of columns */\n columns?: 1 | 2 | 3 | 4;\n /** Gap between items */\n gap?: 'sm' | 'md' | 'lg';\n /** Card style variant */\n cardVariant?: 'default' | 'card' | 'minimal';\n /** Icon size */\n iconSize?: 'sm' | 'md' | 'lg';\n /** Feature press handler */\n onFeaturePress?: (feature: Feature) => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * FeatureGrid Component\n *\n * Grid layout for displaying feature cards.\n *\n * @example\n * ```tsx\n * <FeatureGrid\n * features={[\n * { icon: <Icon1 />, title: 'Feature 1', description: 'Description 1' },\n * { icon: <Icon2 />, title: 'Feature 2', description: 'Description 2' },\n * ]}\n * columns={2}\n * />\n * ```\n */\nexport const FeatureGrid: React.FC<FeatureGridProps> = ({\n features,\n columns = 2,\n gap = 'md',\n cardVariant = 'default',\n iconSize = 'md',\n onFeaturePress,\n className,\n}) => {\n const gapClasses = {\n sm: 'gap-4',\n md: 'gap-6',\n lg: 'gap-8',\n };\n\n const iconSizeClasses = {\n sm: 'w-12 h-12',\n md: 'w-16 h-16',\n lg: 'w-20 h-20',\n };\n\n const badgeVariants = {\n success:\n 'bg-green-100 dark:bg-green-900/30 text-green-800 dark:text-green-300',\n info: 'bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-300',\n warning:\n 'bg-amber-100 dark:bg-amber-900/30 text-amber-800 dark:text-amber-300',\n default: 'bg-gray-100 dark:bg-gray-800 text-gray-800 dark:text-gray-300',\n };\n\n const renderFeature = (feature: Feature, index: number) => {\n const content = (\n <View\n className={cn(\n 'items-center',\n cardVariant === 'card' &&\n 'bg-white dark:bg-gray-800 rounded-2xl p-6 shadow-lg',\n cardVariant === 'minimal' && 'gap-4'\n )}\n >\n {/* Badge */}\n {feature.badge && (\n <View className='mb-4'>\n <View\n className={cn(\n 'px-2.5 py-0.5 rounded-full',\n badgeVariants[feature.badge.variant || 'default']\n )}\n >\n <Text className='text-xs font-medium'>{feature.badge.text}</Text>\n </View>\n </View>\n )}\n\n {/* Icon */}\n <View\n className={cn(\n 'items-center justify-center rounded-2xl mb-4',\n 'bg-blue-100 dark:bg-blue-900/30',\n iconSizeClasses[iconSize]\n )}\n >\n <View className='text-blue-600 dark:text-blue-400'>\n {feature.icon}\n </View>\n </View>\n\n {/* Title */}\n <Text className='text-lg font-bold text-gray-900 dark:text-white mb-2 text-center'>\n {feature.title}\n </Text>\n\n {/* Description */}\n {typeof feature.description === 'string' ? (\n <Text className='text-gray-600 dark:text-gray-300 text-center leading-relaxed'>\n {feature.description}\n </Text>\n ) : (\n feature.description\n )}\n </View>\n );\n\n if (onFeaturePress) {\n return (\n <Pressable\n key={feature.id || index}\n onPress={() => onFeaturePress(feature)}\n className='flex-1'\n style={{ minWidth: `${100 / columns - 5}%` }}\n accessibilityRole='button'\n accessibilityLabel={feature.title}\n >\n {content}\n </Pressable>\n );\n }\n\n return (\n <View\n key={feature.id || index}\n className='flex-1'\n style={{ minWidth: `${100 / columns - 5}%` }}\n >\n {content}\n </View>\n );\n };\n\n return (\n <View className={cn('flex-row flex-wrap', gapClasses[gap], className)}>\n {features.map(renderFeature)}\n </View>\n );\n};\n\n// Helper function to create feature objects\nexport const createFeature = (\n icon: React.ReactNode,\n title: string,\n description: string | React.ReactNode,\n options?: Partial<Feature>\n): Feature => ({\n icon,\n title,\n description,\n ...options,\n});\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CTAButton {\n /** Button label */\n label: string;\n /** Press handler */\n onPress: () => void;\n /** Button variant */\n variant?: 'primary' | 'secondary' | 'outline';\n}\n\nexport interface CTASectionProps {\n /** Section title */\n title: string;\n /** Section description */\n description: string;\n /** Primary CTA button */\n primaryButton: CTAButton;\n /** Secondary CTA button */\n secondaryButton?: CTAButton;\n /** Gradient preset */\n gradient?: 'blue-purple' | 'green-blue' | 'orange-red' | 'purple-pink';\n /** Text color theme */\n textColor?: 'light' | 'dark';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * CTASection Component\n *\n * Call-to-action section with gradient background and buttons.\n *\n * @example\n * ```tsx\n * <CTASection\n * title=\"Ready to get started?\"\n * description=\"Join thousands of users today.\"\n * primaryButton={{ label: 'Sign Up', onPress: handleSignUp }}\n * secondaryButton={{ label: 'Learn More', onPress: handleLearnMore }}\n * />\n * ```\n */\nexport const CTASection: React.FC<CTASectionProps> = ({\n title,\n description,\n primaryButton,\n secondaryButton,\n gradient = 'blue-purple',\n textColor = 'light',\n size = 'lg',\n className,\n}) => {\n const gradientClasses = {\n 'blue-purple': 'bg-blue-600 dark:bg-blue-700',\n 'green-blue': 'bg-green-600 dark:bg-green-700',\n 'orange-red': 'bg-orange-600 dark:bg-orange-700',\n 'purple-pink': 'bg-purple-600 dark:bg-purple-700',\n };\n\n const sizeClasses = {\n sm: 'py-8 px-4',\n md: 'py-12 px-6',\n lg: 'py-16 px-8',\n };\n\n const titleSizeClasses = {\n sm: 'text-2xl',\n md: 'text-3xl',\n lg: 'text-4xl',\n };\n\n const descriptionSizeClasses = {\n sm: 'text-base',\n md: 'text-lg',\n lg: 'text-xl',\n };\n\n const textColorClass = textColor === 'light' ? 'text-white' : 'text-gray-900';\n\n const renderButton = (button: CTAButton, isPrimary: boolean) => (\n <Pressable\n onPress={button.onPress}\n className={cn(\n 'px-6 py-3 rounded-lg',\n isPrimary ? 'bg-white' : 'bg-white/20 border border-white/30'\n )}\n accessibilityRole='button'\n accessibilityLabel={button.label}\n >\n <Text\n className={cn(\n 'text-base font-semibold text-center',\n isPrimary ? 'text-blue-600' : 'text-white'\n )}\n >\n {button.label}\n </Text>\n </Pressable>\n );\n\n return (\n <View\n className={cn(\n 'rounded-2xl overflow-hidden',\n gradientClasses[gradient],\n sizeClasses[size],\n className\n )}\n >\n <View className='items-center'>\n {/* Title */}\n <Text\n className={cn(\n 'font-bold mb-4 text-center',\n titleSizeClasses[size],\n textColorClass\n )}\n >\n {title}\n </Text>\n\n {/* Description */}\n <Text\n className={cn(\n 'mb-8 text-center opacity-90 max-w-lg',\n descriptionSizeClasses[size],\n textColorClass\n )}\n >\n {description}\n </Text>\n\n {/* Buttons */}\n <View className='flex-row gap-4'>\n {renderButton(primaryButton, true)}\n {secondaryButton && renderButton(secondaryButton, false)}\n </View>\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PromotionalBannerProps {\n /** Banner title */\n title: string;\n /** Optional subtitle */\n subtitle?: string;\n /** Button text */\n buttonText: string;\n /** Button press handler */\n onButtonPress: () => void;\n /** Visual variant */\n variant?: 'default' | 'prominent';\n /** Badge text */\n badgeText?: string;\n /** Icon element (optional) */\n icon?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * PromotionalBanner Component\n *\n * Banner for promotions, announcements, or CTAs.\n *\n * @example\n * ```tsx\n * <PromotionalBanner\n * title=\"Get Started Free\"\n * subtitle=\"No credit card required\"\n * buttonText=\"Sign Up\"\n * onButtonPress={handleSignUp}\n * badgeText=\"FREE\"\n * />\n * ```\n */\nexport const PromotionalBanner: React.FC<PromotionalBannerProps> = ({\n title,\n subtitle,\n buttonText,\n onButtonPress,\n variant = 'default',\n badgeText = 'FREE',\n icon,\n className,\n}) => {\n const isProminent = variant === 'prominent';\n\n return (\n <View\n className={cn(\n 'bg-green-50 dark:bg-green-900/20',\n 'border-b border-green-200 dark:border-green-700',\n isProminent && 'border-b-2',\n className\n )}\n >\n <View className='px-4 py-4'>\n <View className='flex-row items-center justify-between gap-4 flex-wrap'>\n {/* Left side: Badge + Title */}\n <View className='flex-row items-center flex-1'>\n {/* Badge */}\n <View className='bg-green-500 px-3 py-1 rounded-full mr-3'>\n <Text className='text-white text-xs font-bold'>{badgeText}</Text>\n </View>\n\n {/* Title & Subtitle */}\n <View className='flex-1'>\n <Text\n className={cn(\n 'text-green-800 dark:text-green-200 font-semibold',\n isProminent && 'text-lg'\n )}\n >\n {title}\n </Text>\n {subtitle && (\n <Text className='text-green-700 dark:text-green-300 text-sm'>\n {subtitle}\n </Text>\n )}\n </View>\n </View>\n\n {/* CTA Button */}\n <Pressable\n onPress={onButtonPress}\n className={cn(\n 'bg-green-600 dark:bg-green-700 rounded-lg',\n 'flex-row items-center',\n isProminent ? 'px-6 py-3' : 'px-4 py-2'\n )}\n accessibilityRole='button'\n accessibilityLabel={buttonText}\n >\n {icon && <View className='mr-2'>{icon}</View>}\n <Text\n className={cn(\n 'text-white font-bold',\n isProminent ? 'text-base' : 'text-sm'\n )}\n >\n {buttonText}\n </Text>\n </Pressable>\n </View>\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useRef, useEffect } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Animated,\n LayoutAnimation,\n Platform,\n UIManager,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\n// Enable LayoutAnimation on Android\nif (\n Platform.OS === 'android' &&\n UIManager.setLayoutAnimationEnabledExperimental\n) {\n UIManager.setLayoutAnimationEnabledExperimental(true);\n}\n\nexport interface CollapsibleSectionItem {\n /** Unique identifier */\n id: string;\n /** Item title */\n title: string;\n /** Item content */\n content?: React.ReactNode;\n}\n\nexport interface CollapsibleSectionProps {\n /** Section ID */\n id: string;\n /** Section title */\n title: string;\n /** Section content (shown when no subsections) */\n content?: React.ReactNode;\n /** Subsections */\n subsections?: CollapsibleSectionItem[];\n /** Whether section is selected */\n isSelected?: boolean;\n /** Currently selected subsection ID */\n selectedSubsection?: string | null;\n /** Section select handler */\n onSectionSelect?: (sectionId: string) => void;\n /** Subsection select handler */\n onSubsectionSelect?: (subsectionId: string, parentSectionId: string) => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * CollapsibleSection Component\n *\n * Collapsible section with optional subsections.\n * Useful for documentation, FAQs, or navigation.\n *\n * @example\n * ```tsx\n * <CollapsibleSection\n * id=\"getting-started\"\n * title=\"Getting Started\"\n * subsections={[\n * { id: 'install', title: 'Installation' },\n * { id: 'setup', title: 'Setup' },\n * ]}\n * isSelected={selectedSection === 'getting-started'}\n * onSectionSelect={setSelectedSection}\n * onSubsectionSelect={handleSubsectionSelect}\n * />\n * ```\n */\nexport const CollapsibleSection: React.FC<CollapsibleSectionProps> = ({\n id,\n title,\n subsections,\n isSelected = false,\n selectedSubsection = null,\n onSectionSelect,\n onSubsectionSelect,\n className,\n}) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const rotateAnim = useRef(new Animated.Value(0)).current;\n\n const hasSubsections = subsections && subsections.length > 0;\n\n useEffect(() => {\n Animated.timing(rotateAnim, {\n toValue: isExpanded ? 1 : 0,\n duration: 200,\n useNativeDriver: true,\n }).start();\n }, [isExpanded, rotateAnim]);\n\n const handleToggle = () => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n setIsExpanded(!isExpanded);\n };\n\n const handleSectionPress = () => {\n onSectionSelect?.(id);\n };\n\n const rotation = rotateAnim.interpolate({\n inputRange: [0, 1],\n outputRange: ['0deg', '90deg'],\n });\n\n return (\n <View className={className}>\n {/* Section Header */}\n <View className='flex-row items-center'>\n {/* Selection overlay */}\n {isSelected && !selectedSubsection && (\n <View className='absolute top-1 bottom-1 left-1 right-10 bg-blue-500/20 dark:bg-blue-400/20 rounded-lg' />\n )}\n\n {/* Title button */}\n <Pressable\n onPress={handleSectionPress}\n className='flex-1 py-4 pl-4 pr-2'\n accessibilityRole='button'\n accessibilityLabel={title}\n accessibilityState={{ selected: isSelected && !selectedSubsection }}\n >\n <Text\n className={cn(\n 'text-base font-medium',\n isSelected && !selectedSubsection\n ? 'text-blue-700 dark:text-blue-300'\n : 'text-gray-700 dark:text-gray-300'\n )}\n >\n {title}\n </Text>\n </Pressable>\n\n {/* Expand/collapse button */}\n {hasSubsections && (\n <Pressable\n onPress={handleToggle}\n className='p-2 rounded-md'\n accessibilityRole='button'\n accessibilityLabel={isExpanded ? 'Collapse' : 'Expand'}\n >\n <Animated.View style={{ transform: [{ rotate: rotation }] }}>\n <Text className='text-gray-500 text-lg'>›</Text>\n </Animated.View>\n </Pressable>\n )}\n </View>\n\n {/* Subsections */}\n {hasSubsections && isExpanded && (\n <View className='ml-6 mb-2'>\n {subsections.map(subsection => (\n <View key={subsection.id} className='relative'>\n {/* Selection overlay */}\n {selectedSubsection === subsection.id && (\n <View className='absolute top-0.5 bottom-0.5 left-0 right-8 bg-blue-500/20 dark:bg-blue-400/20 rounded-lg' />\n )}\n\n <Pressable\n onPress={() => onSubsectionSelect?.(subsection.id, id)}\n className='py-2 pl-4 pr-3'\n accessibilityRole='button'\n accessibilityLabel={subsection.title}\n accessibilityState={{\n selected: selectedSubsection === subsection.id,\n }}\n >\n <Text\n className={cn(\n 'text-sm',\n selectedSubsection === subsection.id\n ? 'text-blue-700 dark:text-blue-300'\n : 'text-gray-600 dark:text-gray-400'\n )}\n >\n {subsection.title}\n </Text>\n </Pressable>\n </View>\n ))}\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface DashboardStatCardProps {\n /** Stat title */\n title: string;\n /** Stat value */\n value: string | number;\n /** Change percentage */\n change?: number;\n /** Change period description */\n changePeriod?: string;\n /** Icon element */\n icon?: React.ReactNode;\n /** Color variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger';\n /** Additional className */\n className?: string;\n}\n\n/**\n * DashboardStatCard Component\n *\n * Statistics display card for dashboards.\n * Shows value, change indicator, and optional icon.\n *\n * @example\n * ```tsx\n * <DashboardStatCard\n * title=\"Total Revenue\"\n * value=\"$45,231\"\n * change={12.5}\n * changePeriod=\"vs last month\"\n * variant=\"success\"\n * />\n * ```\n */\nexport const DashboardStatCard: React.FC<DashboardStatCardProps> = ({\n title,\n value,\n change,\n changePeriod = 'vs last period',\n icon,\n variant = 'default',\n className,\n}) => {\n const variantClasses = {\n default: 'bg-white dark:bg-gray-900',\n primary: 'bg-blue-50 dark:bg-blue-900/20',\n success: 'bg-green-50 dark:bg-green-900/20',\n warning: 'bg-yellow-50 dark:bg-yellow-900/20',\n danger: 'bg-red-50 dark:bg-red-900/20',\n };\n\n const isPositive = change !== undefined && change >= 0;\n\n return (\n <View\n className={cn(\n 'rounded-lg border border-gray-200 dark:border-gray-700 p-6',\n variantClasses[variant],\n className\n )}\n >\n {/* Header */}\n <View className='flex-row items-start justify-between mb-2'>\n <Text className='text-sm font-medium text-gray-600 dark:text-gray-400'>\n {title}\n </Text>\n {icon && (\n <View className='text-gray-400 dark:text-gray-600'>{icon}</View>\n )}\n </View>\n\n {/* Value */}\n <Text className='text-3xl font-bold text-gray-900 dark:text-white'>\n {value}\n </Text>\n\n {/* Change indicator */}\n {change !== undefined && (\n <View className='flex-row items-center gap-1 mt-2'>\n <Text\n className={cn(\n 'text-sm font-medium',\n isPositive\n ? 'text-green-600 dark:text-green-400'\n : 'text-red-600 dark:text-red-400'\n )}\n >\n {isPositive ? '↑' : '↓'} {Math.abs(change)}%\n </Text>\n <Text className='text-xs text-gray-500 dark:text-gray-400'>\n {changePeriod}\n </Text>\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface StatDisplayProps {\n /** The main value/number to display */\n value: string | number;\n /** Label/description for the stat */\n label: string;\n /** Color variant */\n variant?: 'primary' | 'success' | 'warning' | 'danger' | 'neutral' | 'white';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Text alignment */\n align?: 'left' | 'center' | 'right';\n /** Icon element */\n icon?: React.ReactNode;\n /** Icon position */\n iconPosition?: 'top' | 'left';\n /** Additional className */\n className?: string;\n}\n\n/**\n * StatDisplay Component\n *\n * Displays a statistic or metric with a value and label.\n * Commonly used in dashboards, hero sections, and analytics.\n *\n * @example\n * ```tsx\n * <StatDisplay value=\"5K\" label=\"Gas Overhead\" variant=\"primary\" />\n * <StatDisplay value=\"42\" label=\"Active Users\" variant=\"success\" size=\"lg\" />\n * ```\n */\nexport const StatDisplay: React.FC<StatDisplayProps> = ({\n value,\n label,\n variant = 'neutral',\n size = 'md',\n align = 'center',\n icon,\n iconPosition = 'top',\n className,\n}) => {\n const variantClasses = {\n primary: {\n value: 'text-blue-600 dark:text-blue-400',\n label: 'text-blue-600/70 dark:text-blue-400/70',\n },\n success: {\n value: 'text-green-600 dark:text-green-400',\n label: 'text-green-600/70 dark:text-green-400/70',\n },\n warning: {\n value: 'text-yellow-600 dark:text-yellow-400',\n label: 'text-yellow-600/70 dark:text-yellow-400/70',\n },\n danger: {\n value: 'text-red-600 dark:text-red-400',\n label: 'text-red-600/70 dark:text-red-400/70',\n },\n neutral: {\n value: 'text-gray-900 dark:text-gray-100',\n label: 'text-gray-600 dark:text-gray-400',\n },\n white: {\n value: 'text-white',\n label: 'text-white/70',\n },\n };\n\n const sizeClasses = {\n sm: { value: 'text-xl', label: 'text-xs' },\n md: { value: 'text-2xl', label: 'text-sm' },\n lg: { value: 'text-3xl', label: 'text-base' },\n xl: { value: 'text-4xl', label: 'text-lg' },\n };\n\n const alignClasses = {\n left: 'items-start',\n center: 'items-center',\n right: 'items-end',\n };\n\n const variantConfig = variantClasses[variant];\n const sizeConfig = sizeClasses[size];\n\n if (iconPosition === 'left' && icon) {\n return (\n <View\n className={cn(\n 'flex-row items-center gap-3',\n align === 'center' && 'justify-center',\n className\n )}\n >\n <View className={variantConfig.value}>{icon}</View>\n <View>\n <Text\n className={cn('font-bold', sizeConfig.value, variantConfig.value)}\n >\n {value}\n </Text>\n <Text className={cn(sizeConfig.label, variantConfig.label)}>\n {label}\n </Text>\n </View>\n </View>\n );\n }\n\n return (\n <View className={cn(alignClasses[align], className)}>\n {icon && iconPosition === 'top' && (\n <View className={cn('mb-2', variantConfig.value)}>{icon}</View>\n )}\n <Text className={cn('font-bold', sizeConfig.value, variantConfig.value)}>\n {value}\n </Text>\n <Text className={cn(sizeConfig.label, variantConfig.label)}>{label}</Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface KeyValuePairProps {\n /** Label/key text */\n label: string;\n /** Value content */\n value: React.ReactNode;\n /** Layout orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Alignment for horizontal layout */\n align?: 'start' | 'center' | 'between';\n /** Label width (for horizontal layout) */\n labelWidth?: 'auto' | 'sm' | 'md' | 'lg';\n /** Text size */\n size?: 'sm' | 'md' | 'lg';\n /** Show separator */\n separator?: boolean;\n /** Label color variant */\n labelVariant?: 'default' | 'muted' | 'strong';\n /** Value color variant */\n valueVariant?: 'default' | 'muted' | 'strong' | 'primary';\n /** Additional className */\n className?: string;\n}\n\n/**\n * KeyValuePair Component\n *\n * Displays a label-value pair with flexible layout options.\n * Commonly used in forms, details pages, and data displays.\n *\n * @example\n * ```tsx\n * <KeyValuePair label=\"Email\" value=\"user@example.com\" />\n * <KeyValuePair\n * label=\"Status\"\n * value=\"Active\"\n * orientation=\"horizontal\"\n * align=\"between\"\n * />\n * ```\n */\nexport const KeyValuePair: React.FC<KeyValuePairProps> = ({\n label,\n value,\n orientation = 'vertical',\n align = 'start',\n labelWidth = 'auto',\n size = 'md',\n separator = false,\n labelVariant = 'muted',\n valueVariant = 'default',\n className,\n}) => {\n const sizeClasses = {\n sm: { label: 'text-sm', value: 'text-sm', gap: 'gap-1' },\n md: { label: 'text-base', value: 'text-base', gap: 'gap-2' },\n lg: { label: 'text-lg', value: 'text-lg', gap: 'gap-3' },\n };\n\n const labelWidthStyles = {\n auto: undefined,\n sm: 96,\n md: 128,\n lg: 160,\n };\n\n const alignClasses = {\n start: 'justify-start',\n center: 'justify-center',\n between: 'justify-between',\n };\n\n const labelVariantClasses = {\n default: 'text-gray-700 dark:text-gray-300',\n muted: 'text-gray-600 dark:text-gray-400',\n strong: 'text-gray-900 dark:text-gray-100 font-semibold',\n };\n\n const valueVariantClasses = {\n default: 'text-gray-900 dark:text-gray-100',\n muted: 'text-gray-600 dark:text-gray-400',\n strong: 'text-gray-900 dark:text-gray-100 font-semibold',\n primary: 'text-blue-600 dark:text-blue-400',\n };\n\n const sizeConfig = sizeClasses[size];\n\n return (\n <View\n className={cn(\n orientation === 'horizontal' ? 'flex-row items-center' : 'flex-col',\n orientation === 'horizontal' && alignClasses[align],\n sizeConfig.gap,\n separator && 'pb-3 mb-3 border-b border-gray-200 dark:border-gray-700',\n className\n )}\n >\n <Text\n className={cn(sizeConfig.label, labelVariantClasses[labelVariant])}\n style={\n orientation === 'horizontal' && labelWidth !== 'auto'\n ? { width: labelWidthStyles[labelWidth] }\n : undefined\n }\n >\n {label}\n </Text>\n {typeof value === 'string' || typeof value === 'number' ? (\n <Text\n className={cn(\n sizeConfig.value,\n valueVariantClasses[valueVariant],\n orientation === 'horizontal' && 'flex-1'\n )}\n >\n {value}\n </Text>\n ) : (\n <View className={cn(orientation === 'horizontal' && 'flex-1')}>\n {value}\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { Text, Pressable, Linking, Alert } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SmartLinkProps {\n /** Link destination - URL or internal path */\n to?: string;\n /** Alternative prop name for destination */\n href?: string;\n /** Force external link behavior */\n external?: boolean;\n /** Link text/content */\n children: React.ReactNode;\n /** Link variant */\n variant?: 'subtle' | 'default' | 'muted' | 'external' | 'inherit';\n /** Text size */\n size?: 'sm' | 'default' | 'lg';\n /** Navigation handler for internal links */\n onNavigate?: (path: string) => void;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * SmartLink Component\n *\n * Intelligent link component that handles both internal and external links.\n * External links open in browser, internal links use the onNavigate callback.\n *\n * @example\n * ```tsx\n * <SmartLink to=\"/profile\" onNavigate={navigate}>\n * View Profile\n * </SmartLink>\n * <SmartLink href=\"https://example.com\" external>\n * Visit Website\n * </SmartLink>\n * ```\n */\nexport const SmartLink: React.FC<SmartLinkProps> = ({\n to,\n href,\n external,\n children,\n variant = 'subtle',\n size = 'default',\n onNavigate,\n disabled = false,\n className,\n}) => {\n const destination = to || href;\n\n const variantClasses = {\n subtle: 'text-gray-700 dark:text-gray-300',\n default: 'text-blue-600 dark:text-blue-400 underline',\n muted: 'text-gray-500 dark:text-gray-500',\n external: 'text-blue-600 dark:text-blue-400 underline',\n inherit: 'text-inherit',\n };\n\n const sizeClasses = {\n sm: 'text-sm',\n default: 'text-base',\n lg: 'text-lg',\n };\n\n const handlePress = async () => {\n if (disabled || !destination) return;\n\n // Check if external\n const isExternal =\n external ||\n destination.startsWith('http') ||\n destination.startsWith('mailto:') ||\n destination.startsWith('tel:');\n\n if (isExternal) {\n // Open in browser\n try {\n const canOpen = await Linking.canOpenURL(destination);\n if (canOpen) {\n await Linking.openURL(destination);\n } else {\n Alert.alert('Error', 'Cannot open this link');\n }\n } catch {\n Alert.alert('Error', 'Failed to open link');\n }\n } else {\n // Internal navigation\n if (onNavigate) {\n onNavigate(destination);\n }\n }\n };\n\n // If no destination, render as plain text\n if (!destination) {\n return (\n <Text\n className={cn(\n variantClasses[variant],\n sizeClasses[size],\n disabled && 'opacity-50',\n className\n )}\n >\n {children}\n </Text>\n );\n }\n\n // Determine if external for styling\n const isExternal =\n external ||\n destination.startsWith('http') ||\n destination.startsWith('mailto:') ||\n destination.startsWith('tel:');\n\n const appliedVariant =\n isExternal && variant === 'subtle' ? 'external' : variant;\n\n return (\n <Pressable\n onPress={handlePress}\n disabled={disabled}\n accessibilityRole='link'\n accessibilityLabel={typeof children === 'string' ? children : undefined}\n accessibilityState={{ disabled }}\n >\n {({ pressed }) => (\n <Text\n className={cn(\n variantClasses[appliedVariant],\n sizeClasses[size],\n pressed && 'opacity-70',\n disabled && 'opacity-50',\n className\n )}\n >\n {children}\n {isExternal && appliedVariant === 'external' && ' ↗'}\n </Text>\n )}\n </Pressable>\n );\n};\n\nexport interface SmartContentProps {\n /** Content with potential links */\n children: string;\n /** Link mappings from text to paths */\n mappings?: Record<string, string>;\n /** Navigation handler for internal links */\n onNavigate?: (path: string) => void;\n /** Link variant */\n variant?: SmartLinkProps['variant'];\n /** Additional className */\n className?: string;\n}\n\n/**\n * SmartContent Component\n *\n * Automatically converts text matches to links based on mappings.\n *\n * @example\n * ```tsx\n * <SmartContent\n * mappings={{ 'privacy policy': '/privacy', 'contact us': '/contact' }}\n * onNavigate={navigate}\n * >\n * Please read our privacy policy or contact us for help.\n * </SmartContent>\n * ```\n */\nexport const SmartContent: React.FC<SmartContentProps> = ({\n children,\n mappings = {},\n onNavigate,\n variant = 'subtle',\n className,\n}) => {\n const processedContent = React.useMemo(() => {\n if (!children || typeof children !== 'string') {\n return {\n parts: [children || ''],\n links: [] as { text: string; path: string; index: number }[],\n };\n }\n\n let content = children;\n const links: { text: string; path: string; index: number }[] = [];\n\n // Sort by length (longest first) to avoid partial replacements\n const sortedMappings = Object.entries(mappings).sort(\n ([a], [b]) => b.length - a.length\n );\n\n let placeholderIndex = 0;\n sortedMappings.forEach(([text, path]) => {\n if (text && path) {\n const regex = new RegExp(\n `\\\\b${text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}\\\\b`,\n 'gi'\n );\n content = content.replace(regex, match => {\n links.push({ text: match, path, index: placeholderIndex });\n return `__LINK_${placeholderIndex++}__`;\n });\n }\n });\n\n // Split content by placeholders\n const parts = content.split(/(__LINK_\\d+__)/);\n\n return { parts, links };\n }, [children, mappings]);\n\n const { parts, links } = processedContent;\n\n return (\n <Text className={cn('text-gray-900 dark:text-gray-100', className)}>\n {parts.map((part, index) => {\n const linkMatch = part.match(/__LINK_(\\d+)__/);\n if (linkMatch) {\n const linkIndex = parseInt(linkMatch[1], 10);\n const link = links.find(l => l.index === linkIndex);\n if (link) {\n return (\n <SmartLink\n key={index}\n to={link.path}\n variant={variant}\n onNavigate={onNavigate}\n >\n {link.text}\n </SmartLink>\n );\n }\n }\n return <Text key={index}>{part}</Text>;\n })}\n </Text>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n Text,\n Pressable,\n ScrollView,\n NativeScrollEvent,\n NativeSyntheticEvent,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ScrollSpySection {\n /** Section ID */\n id: string;\n /** Section label */\n label: string;\n /** Subsections */\n subsections?: ScrollSpySection[];\n}\n\nexport interface ScrollSpyProps {\n /** Sections to track */\n sections: ScrollSpySection[];\n /** Active section ID */\n activeId?: string;\n /** Active section change handler */\n onActiveChange?: (id: string) => void;\n /** Section press handler - called when user taps a section link */\n onSectionPress?: (id: string) => void;\n /** Show subsections */\n showSubsections?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * ScrollSpy Component\n *\n * Navigation that highlights the active section.\n * Pairs with ScrollSpyContainer for automatic scroll tracking.\n *\n * @example\n * ```tsx\n * <ScrollSpy\n * sections={[\n * { id: 'intro', label: 'Introduction' },\n * { id: 'features', label: 'Features' },\n * { id: 'pricing', label: 'Pricing' }\n * ]}\n * activeId={activeSection}\n * onSectionPress={(id) => scrollToSection(id)}\n * />\n * ```\n */\nexport const ScrollSpy: React.FC<ScrollSpyProps> = ({\n sections,\n activeId,\n onActiveChange,\n onSectionPress,\n showSubsections = true,\n className,\n}) => {\n const handlePress = (id: string) => {\n if (onActiveChange) {\n onActiveChange(id);\n }\n if (onSectionPress) {\n onSectionPress(id);\n }\n };\n\n // Render section\n const renderSection = (section: ScrollSpySection, level: number = 0) => {\n const isActive = activeId === section.id;\n const hasActiveChild =\n section.subsections?.some(sub => activeId === sub.id) || false;\n\n return (\n <View key={section.id}>\n <Pressable\n onPress={() => handlePress(section.id)}\n className={cn(\n 'py-2 px-3 rounded-lg',\n isActive\n ? 'bg-blue-50 dark:bg-blue-900/30'\n : 'active:bg-gray-100 dark:active:bg-gray-800'\n )}\n style={{ paddingLeft: level * 12 + 12 }}\n accessibilityRole='button'\n accessibilityLabel={section.label}\n accessibilityState={{ selected: isActive }}\n >\n <Text\n className={cn(\n 'text-sm',\n level === 0 ? 'font-medium' : 'font-normal',\n isActive\n ? 'text-blue-700 dark:text-blue-300'\n : hasActiveChild\n ? 'text-gray-700 dark:text-gray-300'\n : 'text-gray-600 dark:text-gray-400'\n )}\n >\n {section.label}\n </Text>\n </Pressable>\n\n {/* Subsections */}\n {showSubsections &&\n section.subsections &&\n section.subsections.length > 0 && (\n <View className='ml-3 border-l-2 border-gray-200 dark:border-gray-700'>\n {section.subsections.map(subsection =>\n renderSection(subsection, level + 1)\n )}\n </View>\n )}\n </View>\n );\n };\n\n return (\n <View className={cn('gap-1', className)}>\n {sections.map(section => renderSection(section, 0))}\n </View>\n );\n};\n\nexport interface SectionPosition {\n id: string;\n y: number;\n height: number;\n}\n\nexport interface ScrollSpyContainerProps {\n /** Children content with sections */\n children: React.ReactNode;\n /** Sections configuration for tracking */\n sections: ScrollSpySection[];\n /** Active section change handler */\n onActiveChange?: (id: string) => void;\n /** Offset from top for determining active section */\n offset?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * ScrollSpyContainer Component\n *\n * Scrollable container that tracks section visibility.\n * Use with ScrollSpySection to mark sections for tracking.\n *\n * @example\n * ```tsx\n * <ScrollSpyContainer\n * sections={tocSections}\n * onActiveChange={setActiveSection}\n * >\n * <ScrollSpySection id=\"intro\">\n * <Introduction />\n * </ScrollSpySection>\n * <ScrollSpySection id=\"features\">\n * <Features />\n * </ScrollSpySection>\n * </ScrollSpyContainer>\n * ```\n */\nexport const ScrollSpyContainer: React.FC<ScrollSpyContainerProps> = ({\n children,\n sections,\n onActiveChange,\n offset = 80,\n className,\n}) => {\n const scrollViewRef = React.useRef<ScrollView>(null);\n const sectionPositions = React.useRef<Map<string, SectionPosition>>(\n new Map()\n );\n\n // Handle scroll event\n const handleScroll = (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n const y = event.nativeEvent.contentOffset.y;\n\n // Find active section based on scroll position\n const getAllIds = (secs: ScrollSpySection[]): string[] => {\n return secs.flatMap(section => [\n section.id,\n ...(section.subsections ? getAllIds(section.subsections) : []),\n ]);\n };\n\n const allIds = getAllIds(sections);\n let activeId = allIds[0];\n\n for (const id of allIds) {\n const position = sectionPositions.current.get(id);\n if (position && position.y <= y + offset) {\n activeId = id;\n }\n }\n\n if (onActiveChange) {\n onActiveChange(activeId);\n }\n };\n\n // Scroll to section\n const scrollToSection = React.useCallback(\n (id: string) => {\n const position = sectionPositions.current.get(id);\n if (position && scrollViewRef.current) {\n scrollViewRef.current.scrollTo({\n y: Math.max(0, position.y - offset + 1),\n animated: true,\n });\n }\n },\n [offset]\n );\n\n // Context for child sections to register positions\n const contextValue = React.useMemo(\n () => ({\n registerSection: (id: string, y: number, height: number) => {\n sectionPositions.current.set(id, { id, y, height });\n },\n unregisterSection: (id: string) => {\n sectionPositions.current.delete(id);\n },\n scrollToSection,\n }),\n [scrollToSection]\n );\n\n return (\n <ScrollSpyContext.Provider value={contextValue}>\n <ScrollView\n ref={scrollViewRef}\n onScroll={handleScroll}\n scrollEventThrottle={16}\n className={cn('flex-1', className)}\n >\n {children}\n </ScrollView>\n </ScrollSpyContext.Provider>\n );\n};\n\n// Context for section registration\ninterface ScrollSpyContextType {\n registerSection: (id: string, y: number, height: number) => void;\n unregisterSection: (id: string) => void;\n scrollToSection: (id: string) => void;\n}\n\nconst ScrollSpyContext = React.createContext<ScrollSpyContextType | null>(null);\n\nexport const useScrollSpy = () => {\n const context = React.useContext(ScrollSpyContext);\n return context;\n};\n\nexport interface ScrollSpySectionWrapperProps {\n /** Section ID - must match an ID in ScrollSpy sections */\n id: string;\n /** Section content */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * ScrollSpySectionWrapper Component\n *\n * Wrapper for content sections that should be tracked by ScrollSpy.\n *\n * @example\n * ```tsx\n * <ScrollSpySectionWrapper id=\"features\">\n * <FeaturesList />\n * </ScrollSpySectionWrapper>\n * ```\n */\nexport const ScrollSpySectionWrapper: React.FC<\n ScrollSpySectionWrapperProps\n> = ({ id, children, className }) => {\n const context = React.useContext(ScrollSpyContext);\n\n const handleLayout = React.useCallback(\n (event: { nativeEvent: { layout: { y: number; height: number } } }) => {\n if (context) {\n const { y, height } = event.nativeEvent.layout;\n context.registerSection(id, y, height);\n }\n },\n [context, id]\n );\n\n React.useEffect(() => {\n return () => {\n if (context) {\n context.unregisterSection(id);\n }\n };\n }, [context, id]);\n\n return (\n <View onLayout={handleLayout} className={className}>\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n PanResponder,\n GestureResponderEvent,\n PanResponderGestureState,\n LayoutChangeEvent,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SplitPaneProps {\n /** Left/Top panel content */\n left: React.ReactNode;\n /** Right/Bottom panel content */\n right: React.ReactNode;\n /** Split direction */\n direction?: 'horizontal' | 'vertical';\n /** Initial split position (0-1) */\n initialSplit?: number;\n /** Controlled split position */\n split?: number;\n /** Split change handler */\n onSplitChange?: (split: number) => void;\n /** Minimum left/top panel size (pixels) */\n minLeftSize?: number;\n /** Minimum right/bottom panel size (pixels) */\n minRightSize?: number;\n /** Divider size in pixels */\n dividerSize?: number;\n /** Allow resize */\n resizable?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * SplitPane Component\n *\n * Resizable split panel layout with draggable divider.\n * Supports horizontal and vertical splits.\n *\n * @example\n * ```tsx\n * <SplitPane\n * left={<Sidebar />}\n * right={<MainContent />}\n * direction=\"horizontal\"\n * initialSplit={0.3}\n * minLeftSize={200}\n * minRightSize={400}\n * />\n * ```\n */\nexport const SplitPane: React.FC<SplitPaneProps> = ({\n left,\n right,\n direction = 'horizontal',\n initialSplit = 0.5,\n split: controlledSplit,\n onSplitChange,\n minLeftSize = 100,\n minRightSize = 100,\n dividerSize = 12,\n resizable = true,\n className,\n}) => {\n const [internalSplit, setInternalSplit] = React.useState(initialSplit);\n const [isDragging, setIsDragging] = React.useState(false);\n const [containerSize, setContainerSize] = React.useState({\n width: 0,\n height: 0,\n });\n\n const split = controlledSplit !== undefined ? controlledSplit : internalSplit;\n const isHorizontal = direction === 'horizontal';\n\n // Handle layout change to get container dimensions\n const handleLayout = (event: LayoutChangeEvent) => {\n const { width, height } = event.nativeEvent.layout;\n setContainerSize({ width, height });\n };\n\n // Calculate new split value from gesture\n const calculateSplit = React.useCallback(\n (gestureState: PanResponderGestureState): number => {\n const totalSize = isHorizontal\n ? containerSize.width\n : containerSize.height;\n if (totalSize === 0) return split;\n\n const delta = isHorizontal ? gestureState.dx : gestureState.dy;\n const currentPosition = split * totalSize + delta;\n let newSplit = currentPosition / totalSize;\n\n // Clamp between 0 and 1\n newSplit = Math.max(0, Math.min(1, newSplit));\n\n // Apply min sizes\n const minLeftRatio = minLeftSize / totalSize;\n const maxLeftRatio = 1 - minRightSize / totalSize;\n\n newSplit = Math.max(minLeftRatio, Math.min(maxLeftRatio, newSplit));\n\n return newSplit;\n },\n [isHorizontal, containerSize, split, minLeftSize, minRightSize]\n );\n\n // Create PanResponder for gesture handling\n const panResponder = React.useMemo(\n () =>\n PanResponder.create({\n onStartShouldSetPanResponder: () => resizable,\n onMoveShouldSetPanResponder: () => resizable,\n onPanResponderGrant: () => {\n setIsDragging(true);\n },\n onPanResponderMove: (\n _event: GestureResponderEvent,\n gestureState: PanResponderGestureState\n ) => {\n const newSplit = calculateSplit(gestureState);\n\n if (controlledSplit !== undefined && onSplitChange) {\n onSplitChange(newSplit);\n } else {\n setInternalSplit(newSplit);\n }\n },\n onPanResponderRelease: () => {\n setIsDragging(false);\n },\n onPanResponderTerminate: () => {\n setIsDragging(false);\n },\n }),\n [resizable, controlledSplit, onSplitChange, calculateSplit]\n );\n\n // Calculate panel sizes\n const totalSize = isHorizontal ? containerSize.width : containerSize.height;\n const leftSize = Math.max(0, split * totalSize - dividerSize / 2);\n const rightSize = Math.max(0, (1 - split) * totalSize - dividerSize / 2);\n\n return (\n <View\n onLayout={handleLayout}\n className={cn(\n 'flex-1',\n isHorizontal ? 'flex-row' : 'flex-col',\n className\n )}\n >\n {/* Left/Top panel */}\n <View\n className='overflow-hidden'\n style={{\n [isHorizontal ? 'width' : 'height']: leftSize,\n }}\n >\n {left}\n </View>\n\n {/* Divider */}\n <View\n {...(resizable ? panResponder.panHandlers : {})}\n className={cn(\n 'items-center justify-center',\n 'bg-gray-200 dark:bg-gray-700',\n isDragging && 'bg-blue-500 dark:bg-blue-400',\n resizable && 'active:bg-blue-500 dark:active:bg-blue-400'\n )}\n style={{\n [isHorizontal ? 'width' : 'height']: dividerSize,\n }}\n >\n {/* Divider handle indicator */}\n {resizable && (\n <View\n className={cn(\n 'rounded-full',\n 'bg-gray-400 dark:bg-gray-500',\n isDragging && 'bg-white'\n )}\n style={{\n [isHorizontal ? 'width' : 'height']: 4,\n [isHorizontal ? 'height' : 'width']: 40,\n }}\n />\n )}\n </View>\n\n {/* Right/Bottom panel */}\n <View\n className='overflow-hidden flex-1'\n style={{\n [isHorizontal ? 'width' : 'height']: rightSize,\n }}\n >\n {right}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n FlatList,\n ListRenderItemInfo,\n StyleProp,\n ViewStyle,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface VirtualListProps<T> {\n /** List items */\n items: T[];\n /** Item height in pixels (for optimization) */\n itemHeight?: number;\n /** Container height */\n height?: number;\n /** Render item function */\n renderItem: (item: T, index: number) => React.ReactNode;\n /** Item key extractor */\n keyExtractor: (item: T, index: number) => string;\n /** Overscan count (items to render outside viewport) */\n overscan?: number;\n /** Show separator between items */\n showSeparator?: boolean;\n /** Separator style */\n separatorClassName?: string;\n /** Empty list message */\n emptyMessage?: React.ReactNode;\n /** Loading state */\n loading?: boolean;\n /** Pull to refresh handler */\n onRefresh?: () => void;\n /** Refreshing state */\n refreshing?: boolean;\n /** End reached handler */\n onEndReached?: () => void;\n /** End reached threshold (0-1) */\n onEndReachedThreshold?: number;\n /** Horizontal list */\n horizontal?: boolean;\n /** Additional className */\n className?: string;\n /** Content container className */\n contentClassName?: string;\n /** Style prop for height */\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * VirtualList Component\n *\n * Virtualized list for rendering large datasets efficiently.\n * Built on top of React Native's FlatList.\n *\n * @example\n * ```tsx\n * <VirtualList\n * items={largeDataset}\n * itemHeight={48}\n * height={600}\n * renderItem={(item) => <Text>{item.name}</Text>}\n * keyExtractor={(item) => item.id}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <VirtualList\n * items={messages}\n * itemHeight={80}\n * renderItem={(msg, index) => <MessageItem message={msg} index={index} />}\n * keyExtractor={(msg) => msg.id}\n * onEndReached={loadMore}\n * onRefresh={refresh}\n * refreshing={isRefreshing}\n * />\n * ```\n */\nexport function VirtualList<T>({\n items,\n itemHeight,\n height,\n renderItem,\n keyExtractor,\n overscan = 5,\n showSeparator = false,\n separatorClassName,\n emptyMessage,\n loading = false,\n onRefresh,\n refreshing = false,\n onEndReached,\n onEndReachedThreshold = 0.5,\n horizontal = false,\n className,\n contentClassName,\n style,\n}: VirtualListProps<T>) {\n // Render a single item\n const renderItemWrapper = React.useCallback(\n ({ item, index }: ListRenderItemInfo<T>) => {\n return <View>{renderItem(item, index)}</View>;\n },\n [renderItem]\n );\n\n // Item separator\n const ItemSeparator = React.useCallback(() => {\n if (!showSeparator) return null;\n return (\n <View\n className={cn(\n horizontal ? 'w-px h-full' : 'h-px w-full',\n 'bg-gray-200 dark:bg-gray-700',\n separatorClassName\n )}\n />\n );\n }, [showSeparator, horizontal, separatorClassName]);\n\n // Empty component\n const ListEmpty = React.useCallback(() => {\n if (loading) return null;\n if (emptyMessage) {\n return (\n <View className='flex-1 items-center justify-center p-4'>\n {emptyMessage}\n </View>\n );\n }\n return null;\n }, [loading, emptyMessage]);\n\n // Get item layout for optimization\n const getItemLayout = React.useMemo(() => {\n if (!itemHeight) return undefined;\n return (_data: T[] | null | undefined, index: number) => ({\n length: itemHeight,\n offset: itemHeight * index,\n index,\n });\n }, [itemHeight]);\n\n return (\n <View\n className={cn('flex-1', className)}\n style={[height ? { height } : undefined, style]}\n >\n <FlatList\n data={items}\n renderItem={renderItemWrapper}\n keyExtractor={keyExtractor}\n horizontal={horizontal}\n showsVerticalScrollIndicator={!horizontal}\n showsHorizontalScrollIndicator={horizontal}\n ItemSeparatorComponent={showSeparator ? ItemSeparator : undefined}\n ListEmptyComponent={ListEmpty}\n onRefresh={onRefresh}\n refreshing={refreshing}\n onEndReached={onEndReached}\n onEndReachedThreshold={onEndReachedThreshold}\n getItemLayout={getItemLayout}\n windowSize={overscan * 2 + 1}\n maxToRenderPerBatch={overscan * 2}\n initialNumToRender={overscan * 2}\n removeClippedSubviews={true}\n contentContainerStyle={contentClassName ? undefined : undefined}\n />\n </View>\n );\n}\n\nexport interface VirtualGridProps<T> {\n /** Grid items */\n items: T[];\n /** Number of columns */\n numColumns: number;\n /** Render item function */\n renderItem: (item: T, index: number) => React.ReactNode;\n /** Item key extractor */\n keyExtractor: (item: T, index: number) => string;\n /** Item height for optimization */\n itemHeight?: number;\n /** Gap between items */\n gap?: number;\n /** Empty list message */\n emptyMessage?: React.ReactNode;\n /** Loading state */\n loading?: boolean;\n /** Pull to refresh handler */\n onRefresh?: () => void;\n /** Refreshing state */\n refreshing?: boolean;\n /** End reached handler */\n onEndReached?: () => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * VirtualGrid Component\n *\n * Virtualized grid for rendering large datasets in grid layout.\n *\n * @example\n * ```tsx\n * <VirtualGrid\n * items={products}\n * numColumns={2}\n * renderItem={(product) => <ProductCard product={product} />}\n * keyExtractor={(product) => product.id}\n * gap={16}\n * />\n * ```\n */\nexport function VirtualGrid<T>({\n items,\n numColumns,\n renderItem,\n keyExtractor,\n itemHeight,\n gap = 8,\n emptyMessage,\n loading = false,\n onRefresh,\n refreshing = false,\n onEndReached,\n className,\n}: VirtualGridProps<T>) {\n // Render a single item\n const renderItemWrapper = React.useCallback(\n ({ item, index }: ListRenderItemInfo<T>) => {\n return (\n <View style={{ flex: 1, margin: gap / 2 }}>\n {renderItem(item, index)}\n </View>\n );\n },\n [renderItem, gap]\n );\n\n // Empty component\n const ListEmpty = React.useCallback(() => {\n if (loading) return null;\n if (emptyMessage) {\n return (\n <View className='flex-1 items-center justify-center p-4'>\n {emptyMessage}\n </View>\n );\n }\n return null;\n }, [loading, emptyMessage]);\n\n // Get item layout for optimization\n const getItemLayout = React.useMemo(() => {\n if (!itemHeight) return undefined;\n return (_data: T[] | null | undefined, index: number) => ({\n length: itemHeight + gap,\n offset: (itemHeight + gap) * Math.floor(index / numColumns),\n index,\n });\n }, [itemHeight, gap, numColumns]);\n\n return (\n <View className={cn('flex-1', className)}>\n <FlatList\n data={items}\n renderItem={renderItemWrapper}\n keyExtractor={keyExtractor}\n numColumns={numColumns}\n showsVerticalScrollIndicator={true}\n ListEmptyComponent={ListEmpty}\n onRefresh={onRefresh}\n refreshing={refreshing}\n onEndReached={onEndReached}\n onEndReachedThreshold={0.5}\n getItemLayout={getItemLayout}\n contentContainerStyle={{ padding: gap / 2 }}\n removeClippedSubviews={true}\n />\n </View>\n );\n}\n"],"names":["clsx","require$$0","React","ReactDebugCurrentFrame","jsxRuntimeModule","require$$1","AuthStatus","ChainType","Chain","Theme","FontSize","EmailComposeType","MobileView","MediumView","EmailAction","SubscriptionAction","RequestStatus","NotificationType","InfoType","EmailAddressType","SortOrder","EmailSortCriteria","ConnectionType","ConnectionState","PlatformType","EmailValidationState","FeatureFlag","ErrorType","Currency","exports","MessageType","TransactionStatus","address","AddressType","StorageType","AnalyticsEvent","currency","ContractType","ProcessedEventName","WalletType","RateLimitPeriodType","EntityType","EntityRole","InvitationStatus","date","isTestNet","adminEmails","logger_1","LogLevel","logger","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","useState","useRef","Animated","useCallback","useEffect","jsx","jsxs","View","Text","Pressable","sizeMap","cva","v","ActivityIndicator","getCardVariantColors","textVariants","TextInput","SCREEN_WIDTH","Dimensions","sizeConfig","variantConfig","Fragment","Modal","SafeAreaView","FlatList","RNText","name","Image","RNModal","KeyboardAvoidingView","Platform","ScrollView","createContext","useContext","PanResponder","Linking","pages","TouchableWithoutFeedback","useWindowDimensions","styles","StyleSheet","period","RefreshControl","CardContent","UIManager","LayoutAnimation","isExternal","Alert","links","parts","totalSize"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAOO,SAAS,MAAM,QAA8B;AAClD,SAAOA,KAAAA,KAAK,MAAM;AACpB;;;;;;;;;;;;;;;;ACAa,MAAI,IAAEC,OAAiB,IAAE,OAAO,IAAI,eAAe,GAAE,IAAE,OAAO,IAAI,gBAAgB,GAAE,IAAE,OAAO,UAAU,gBAAe,IAAE,EAAE,mDAAmD,mBAAkB,IAAE,EAAC,KAAI,MAAG,KAAI,MAAG,QAAO,MAAG,UAAS,KAAE;AAClP,WAAS,EAAE,GAAE,GAAE,GAAE;AAAC,QAAI,GAAE,IAAE,CAAA,GAAG,IAAE,MAAK,IAAE;AAAK,eAAS,MAAI,IAAE,KAAG;AAAG,eAAS,EAAE,QAAM,IAAE,KAAG,EAAE;AAAK,eAAS,EAAE,QAAM,IAAE,EAAE;AAAK,SAAI,KAAK,EAAE,GAAE,KAAK,GAAE,CAAC,KAAG,CAAC,EAAE,eAAe,CAAC,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC;AAAG,QAAG,KAAG,EAAE,aAAa,MAAI,KAAK,IAAE,EAAE,cAAa,EAAE,YAAS,EAAE,CAAC,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC;AAAG,WAAM,EAAC,UAAS,GAAE,MAAK,GAAE,KAAI,GAAE,KAAI,GAAE,OAAM,GAAE,QAAO,EAAE,QAAO;AAAA,EAAC;AAAC,4CAAiB;AAAE,iCAAA,MAAY;AAAE,iCAAA,OAAa;;;;;;;;;;;;;;;;;ACE1W,MAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,KAAC,WAAW;AAGd,UAAIC,UAAQD;AAMZ,UAAI,qBAAqB,OAAO,IAAI,eAAe;AACnD,UAAI,oBAAoB,OAAO,IAAI,cAAc;AACjD,UAAI,sBAAsB,OAAO,IAAI,gBAAgB;AACrD,UAAI,yBAAyB,OAAO,IAAI,mBAAmB;AAC3D,UAAI,sBAAsB,OAAO,IAAI,gBAAgB;AACrD,UAAI,sBAAsB,OAAO,IAAI,gBAAgB;AACrD,UAAI,qBAAqB,OAAO,IAAI,eAAe;AACnD,UAAI,yBAAyB,OAAO,IAAI,mBAAmB;AAC3D,UAAI,sBAAsB,OAAO,IAAI,gBAAgB;AACrD,UAAI,2BAA2B,OAAO,IAAI,qBAAqB;AAC/D,UAAI,kBAAkB,OAAO,IAAI,YAAY;AAC7C,UAAI,kBAAkB,OAAO,IAAI,YAAY;AAC7C,UAAI,uBAAuB,OAAO,IAAI,iBAAiB;AACvD,UAAI,wBAAwB,OAAO;AACnC,UAAI,uBAAuB;AAC3B,eAAS,cAAc,eAAe;AACpC,YAAI,kBAAkB,QAAQ,OAAO,kBAAkB,UAAU;AAC/D,iBAAO;AAAA,QACX;AAEE,YAAI,gBAAgB,yBAAyB,cAAc,qBAAqB,KAAK,cAAc,oBAAoB;AAEvH,YAAI,OAAO,kBAAkB,YAAY;AACvC,iBAAO;AAAA,QACX;AAEE,eAAO;AAAA,MACT;AAEA,UAAI,uBAAuBC,QAAM;AAEjC,eAAS,MAAM,QAAQ;AACrB;AACE;AACE,qBAAS,QAAQ,UAAU,QAAQ,OAAO,IAAI,MAAM,QAAQ,IAAI,QAAQ,IAAI,CAAC,GAAG,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACjH,mBAAK,QAAQ,CAAC,IAAI,UAAU,KAAK;AAAA,YACzC;AAEM,yBAAa,SAAS,QAAQ,IAAI;AAAA,UACxC;AAAA,QACA;AAAA,MACA;AAEA,eAAS,aAAa,OAAO,QAAQ,MAAM;AAGzC;AACE,cAAIC,0BAAyB,qBAAqB;AAClD,cAAI,QAAQA,wBAAuB,iBAAgB;AAEnD,cAAI,UAAU,IAAI;AAChB,sBAAU;AACV,mBAAO,KAAK,OAAO,CAAC,KAAK,CAAC;AAAA,UAChC;AAGI,cAAI,iBAAiB,KAAK,IAAI,SAAU,MAAM;AAC5C,mBAAO,OAAO,IAAI;AAAA,UACxB,CAAK;AAED,yBAAe,QAAQ,cAAc,MAAM;AAI3C,mBAAS,UAAU,MAAM,KAAK,QAAQ,KAAK,GAAG,SAAS,cAAc;AAAA,QACzE;AAAA,MACA;AAIA,UAAI,iBAAiB;AACrB,UAAI,qBAAqB;AACzB,UAAI,0BAA0B;AAE9B,UAAI,qBAAqB;AAIzB,UAAI,qBAAqB;AAEzB,UAAI;AAEJ;AACE,iCAAyB,OAAO,IAAI,wBAAwB;AAAA,MAC9D;AAEA,eAAS,mBAAmB,MAAM;AAChC,YAAI,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY;AAC1D,iBAAO;AAAA,QACX;AAGE,YAAI,SAAS,uBAAuB,SAAS,uBAAuB,sBAAuB,SAAS,0BAA0B,SAAS,uBAAuB,SAAS,4BAA4B,sBAAuB,SAAS,wBAAwB,kBAAmB,sBAAuB,yBAA0B;AAC7T,iBAAO;AAAA,QACX;AAEE,YAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,cAAI,KAAK,aAAa,mBAAmB,KAAK,aAAa,mBAAmB,KAAK,aAAa,uBAAuB,KAAK,aAAa,sBAAsB,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA,UAIjL,KAAK,aAAa,0BAA0B,KAAK,gBAAgB,QAAW;AAC1E,mBAAO;AAAA,UACb;AAAA,QACA;AAEE,eAAO;AAAA,MACT;AAEA,eAAS,eAAe,WAAW,WAAW,aAAa;AACzD,YAAI,cAAc,UAAU;AAE5B,YAAI,aAAa;AACf,iBAAO;AAAA,QACX;AAEE,YAAI,eAAe,UAAU,eAAe,UAAU,QAAQ;AAC9D,eAAO,iBAAiB,KAAK,cAAc,MAAM,eAAe,MAAM;AAAA,MACxE;AAGA,eAAS,eAAe,MAAM;AAC5B,eAAO,KAAK,eAAe;AAAA,MAC7B;AAGA,eAAS,yBAAyB,MAAM;AACtC,YAAI,QAAQ,MAAM;AAEhB,iBAAO;AAAA,QACX;AAEE;AACE,cAAI,OAAO,KAAK,QAAQ,UAAU;AAChC,kBAAM,mHAAwH;AAAA,UACpI;AAAA,QACA;AAEE,YAAI,OAAO,SAAS,YAAY;AAC9B,iBAAO,KAAK,eAAe,KAAK,QAAQ;AAAA,QAC5C;AAEE,YAAI,OAAO,SAAS,UAAU;AAC5B,iBAAO;AAAA,QACX;AAEE,gBAAQ,MAAI;AAAA,UACV,KAAK;AACH,mBAAO;AAAA,UAET,KAAK;AACH,mBAAO;AAAA,UAET,KAAK;AACH,mBAAO;AAAA,UAET,KAAK;AACH,mBAAO;AAAA,UAET,KAAK;AACH,mBAAO;AAAA,UAET,KAAK;AACH,mBAAO;AAAA,QAEb;AAEE,YAAI,OAAO,SAAS,UAAU;AAC5B,kBAAQ,KAAK,UAAQ;AAAA,YACnB,KAAK;AACH,kBAAI,UAAU;AACd,qBAAO,eAAe,OAAO,IAAI;AAAA,YAEnC,KAAK;AACH,kBAAI,WAAW;AACf,qBAAO,eAAe,SAAS,QAAQ,IAAI;AAAA,YAE7C,KAAK;AACH,qBAAO,eAAe,MAAM,KAAK,QAAQ,YAAY;AAAA,YAEvD,KAAK;AACH,kBAAI,YAAY,KAAK,eAAe;AAEpC,kBAAI,cAAc,MAAM;AACtB,uBAAO;AAAA,cACjB;AAEQ,qBAAO,yBAAyB,KAAK,IAAI,KAAK;AAAA,YAEhD,KAAK,iBACH;AACE,kBAAI,gBAAgB;AACpB,kBAAI,UAAU,cAAc;AAC5B,kBAAI,OAAO,cAAc;AAEzB,kBAAI;AACF,uBAAO,yBAAyB,KAAK,OAAO,CAAC;AAAA,cACzD,SAAmB,GAAG;AACV,uBAAO;AAAA,cACnB;AAAA,YACA;AAAA,UAGA;AAAA,QACA;AAEE,eAAO;AAAA,MACT;AAEA,UAAI,SAAS,OAAO;AAMpB,UAAI,gBAAgB;AACpB,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AAEJ,eAAS,cAAc;AAAA,MAAA;AAEvB,kBAAY,qBAAqB;AACjC,eAAS,cAAc;AACrB;AACE,cAAI,kBAAkB,GAAG;AAEvB,sBAAU,QAAQ;AAClB,uBAAW,QAAQ;AACnB,uBAAW,QAAQ;AACnB,wBAAY,QAAQ;AACpB,wBAAY,QAAQ;AACpB,iCAAqB,QAAQ;AAC7B,2BAAe,QAAQ;AAEvB,gBAAI,QAAQ;AAAA,cACV,cAAc;AAAA,cACd,YAAY;AAAA,cACZ,OAAO;AAAA,cACP,UAAU;AAAA,YAClB;AAEM,mBAAO,iBAAiB,SAAS;AAAA,cAC/B,MAAM;AAAA,cACN,KAAK;AAAA,cACL,MAAM;AAAA,cACN,OAAO;AAAA,cACP,OAAO;AAAA,cACP,gBAAgB;AAAA,cAChB,UAAU;AAAA,YAClB,CAAO;AAAA,UAEP;AAEI;AAAA,QACJ;AAAA,MACA;AACA,eAAS,eAAe;AACtB;AACE;AAEA,cAAI,kBAAkB,GAAG;AAEvB,gBAAI,QAAQ;AAAA,cACV,cAAc;AAAA,cACd,YAAY;AAAA,cACZ,UAAU;AAAA,YAClB;AAEM,mBAAO,iBAAiB,SAAS;AAAA,cAC/B,KAAK,OAAO,CAAA,GAAI,OAAO;AAAA,gBACrB,OAAO;AAAA,cACjB,CAAS;AAAA,cACD,MAAM,OAAO,CAAA,GAAI,OAAO;AAAA,gBACtB,OAAO;AAAA,cACjB,CAAS;AAAA,cACD,MAAM,OAAO,CAAA,GAAI,OAAO;AAAA,gBACtB,OAAO;AAAA,cACjB,CAAS;AAAA,cACD,OAAO,OAAO,CAAA,GAAI,OAAO;AAAA,gBACvB,OAAO;AAAA,cACjB,CAAS;AAAA,cACD,OAAO,OAAO,CAAA,GAAI,OAAO;AAAA,gBACvB,OAAO;AAAA,cACjB,CAAS;AAAA,cACD,gBAAgB,OAAO,CAAA,GAAI,OAAO;AAAA,gBAChC,OAAO;AAAA,cACjB,CAAS;AAAA,cACD,UAAU,OAAO,CAAA,GAAI,OAAO;AAAA,gBAC1B,OAAO;AAAA,eACR;AAAA,YACT,CAAO;AAAA,UAEP;AAEI,cAAI,gBAAgB,GAAG;AACrB,kBAAM,8EAAmF;AAAA,UAC/F;AAAA,QACA;AAAA,MACA;AAEA,UAAI,yBAAyB,qBAAqB;AAClD,UAAI;AACJ,eAAS,8BAA8B,MAAM,QAAQ,SAAS;AAC5D;AACE,cAAI,WAAW,QAAW;AAExB,gBAAI;AACF,oBAAM,MAAK;AAAA,YACnB,SAAe,GAAG;AACV,kBAAI,QAAQ,EAAE,MAAM,KAAI,EAAG,MAAM,cAAc;AAC/C,uBAAS,SAAS,MAAM,CAAC,KAAK;AAAA,YACtC;AAAA,UACA;AAGI,iBAAO,OAAO,SAAS;AAAA,QAC3B;AAAA,MACA;AACA,UAAI,UAAU;AACd,UAAI;AAEJ;AACE,YAAI,kBAAkB,OAAO,YAAY,aAAa,UAAU;AAChE,8BAAsB,IAAI,gBAAe;AAAA,MAC3C;AAEA,eAAS,6BAA6B,IAAI,WAAW;AAEnD,YAAK,CAAC,MAAM,SAAS;AACnB,iBAAO;AAAA,QACX;AAEE;AACE,cAAI,QAAQ,oBAAoB,IAAI,EAAE;AAEtC,cAAI,UAAU,QAAW;AACvB,mBAAO;AAAA,UACb;AAAA,QACA;AAEE,YAAI;AACJ,kBAAU;AACV,YAAI,4BAA4B,MAAM;AAEtC,cAAM,oBAAoB;AAC1B,YAAI;AAEJ;AACE,+BAAqB,uBAAuB;AAG5C,iCAAuB,UAAU;AACjC,sBAAW;AAAA,QACf;AAEE,YAAI;AAEF,cAAI,WAAW;AAEb,gBAAI,OAAO,WAAY;AACrB,oBAAM,MAAK;AAAA,YACnB;AAGM,mBAAO,eAAe,KAAK,WAAW,SAAS;AAAA,cAC7C,KAAK,WAAY;AAGf,sBAAM,MAAK;AAAA,cACrB;AAAA,YACA,CAAO;AAED,gBAAI,OAAO,YAAY,YAAY,QAAQ,WAAW;AAGpD,kBAAI;AACF,wBAAQ,UAAU,MAAM,EAAE;AAAA,cACpC,SAAiB,GAAG;AACV,0BAAU;AAAA,cACpB;AAEQ,sBAAQ,UAAU,IAAI,CAAA,GAAI,IAAI;AAAA,YACtC,OAAa;AACL,kBAAI;AACF,qBAAK,KAAI;AAAA,cACnB,SAAiB,GAAG;AACV,0BAAU;AAAA,cACpB;AAEQ,iBAAG,KAAK,KAAK,SAAS;AAAA,YAC9B;AAAA,UACA,OAAW;AACL,gBAAI;AACF,oBAAM,MAAK;AAAA,YACnB,SAAe,GAAG;AACV,wBAAU;AAAA,YAClB;AAEM,eAAE;AAAA,UACR;AAAA,QACA,SAAW,QAAQ;AAEf,cAAI,UAAU,WAAW,OAAO,OAAO,UAAU,UAAU;AAGzD,gBAAI,cAAc,OAAO,MAAM,MAAM,IAAI;AACzC,gBAAI,eAAe,QAAQ,MAAM,MAAM,IAAI;AAC3C,gBAAI,IAAI,YAAY,SAAS;AAC7B,gBAAI,IAAI,aAAa,SAAS;AAE9B,mBAAO,KAAK,KAAK,KAAK,KAAK,YAAY,CAAC,MAAM,aAAa,CAAC,GAAG;AAO7D;AAAA,YACR;AAEM,mBAAO,KAAK,KAAK,KAAK,GAAG,KAAK,KAAK;AAGjC,kBAAI,YAAY,CAAC,MAAM,aAAa,CAAC,GAAG;AAMtC,oBAAI,MAAM,KAAK,MAAM,GAAG;AACtB,qBAAG;AACD;AACA;AAGA,wBAAI,IAAI,KAAK,YAAY,CAAC,MAAM,aAAa,CAAC,GAAG;AAE/C,0BAAI,SAAS,OAAO,YAAY,CAAC,EAAE,QAAQ,YAAY,MAAM;AAK7D,0BAAI,GAAG,eAAe,OAAO,SAAS,aAAa,GAAG;AACpD,iCAAS,OAAO,QAAQ,eAAe,GAAG,WAAW;AAAA,sBACvE;AAEgB;AACE,4BAAI,OAAO,OAAO,YAAY;AAC5B,8CAAoB,IAAI,IAAI,MAAM;AAAA,wBACtD;AAAA,sBACA;AAGgB,6BAAO;AAAA,oBACvB;AAAA,kBACA,SAAqB,KAAK,KAAK,KAAK;AAAA,gBACpC;AAEU;AAAA,cACV;AAAA,YACA;AAAA,UACA;AAAA,QACA,UAAG;AACC,oBAAU;AAEV;AACE,mCAAuB,UAAU;AACjC,yBAAY;AAAA,UAClB;AAEI,gBAAM,oBAAoB;AAAA,QAC9B;AAGE,YAAI,OAAO,KAAK,GAAG,eAAe,GAAG,OAAO;AAC5C,YAAI,iBAAiB,OAAO,8BAA8B,IAAI,IAAI;AAElE;AACE,cAAI,OAAO,OAAO,YAAY;AAC5B,gCAAoB,IAAI,IAAI,cAAc;AAAA,UAChD;AAAA,QACA;AAEE,eAAO;AAAA,MACT;AACA,eAAS,+BAA+B,IAAI,QAAQ,SAAS;AAC3D;AACE,iBAAO,6BAA6B,IAAI,KAAK;AAAA,QACjD;AAAA,MACA;AAEA,eAAS,gBAAgB,WAAW;AAClC,YAAI,YAAY,UAAU;AAC1B,eAAO,CAAC,EAAE,aAAa,UAAU;AAAA,MACnC;AAEA,eAAS,qCAAqC,MAAM,QAAQ,SAAS;AAEnE,YAAI,QAAQ,MAAM;AAChB,iBAAO;AAAA,QACX;AAEE,YAAI,OAAO,SAAS,YAAY;AAC9B;AACE,mBAAO,6BAA6B,MAAM,gBAAgB,IAAI,CAAC;AAAA,UACrE;AAAA,QACA;AAEE,YAAI,OAAO,SAAS,UAAU;AAC5B,iBAAO,8BAA8B,IAAI;AAAA,QAC7C;AAEE,gBAAQ,MAAI;AAAA,UACV,KAAK;AACH,mBAAO,8BAA8B,UAAU;AAAA,UAEjD,KAAK;AACH,mBAAO,8BAA8B,cAAc;AAAA,QACzD;AAEE,YAAI,OAAO,SAAS,UAAU;AAC5B,kBAAQ,KAAK,UAAQ;AAAA,YACnB,KAAK;AACH,qBAAO,+BAA+B,KAAK,MAAM;AAAA,YAEnD,KAAK;AAEH,qBAAO,qCAAqC,KAAK,MAAM,QAAQ,OAAO;AAAA,YAExE,KAAK,iBACH;AACE,kBAAI,gBAAgB;AACpB,kBAAI,UAAU,cAAc;AAC5B,kBAAI,OAAO,cAAc;AAEzB,kBAAI;AAEF,uBAAO,qCAAqC,KAAK,OAAO,GAAG,QAAQ,OAAO;AAAA,cACtF,SAAmB,GAAG;AAAA,cAAA;AAAA,YACtB;AAAA,UACA;AAAA,QACA;AAEE,eAAO;AAAA,MACT;AAEA,UAAI,iBAAiB,OAAO,UAAU;AAEtC,UAAI,qBAAqB,CAAA;AACzB,UAAI,yBAAyB,qBAAqB;AAElD,eAAS,8BAA8B,SAAS;AAC9C;AACE,cAAI,SAAS;AACX,gBAAI,QAAQ,QAAQ;AACpB,gBAAI,QAAQ,qCAAqC,QAAQ,MAAM,QAAQ,SAAS,QAAQ,MAAM,OAAO,IAAI;AACzG,mCAAuB,mBAAmB,KAAK;AAAA,UACrD,OAAW;AACL,mCAAuB,mBAAmB,IAAI;AAAA,UACpD;AAAA,QACA;AAAA,MACA;AAEA,eAAS,eAAe,WAAW,QAAQ,UAAU,eAAe,SAAS;AAC3E;AAEE,cAAI,MAAM,SAAS,KAAK,KAAK,cAAc;AAE3C,mBAAS,gBAAgB,WAAW;AAClC,gBAAI,IAAI,WAAW,YAAY,GAAG;AAChC,kBAAI,UAAU;AAId,kBAAI;AAGF,oBAAI,OAAO,UAAU,YAAY,MAAM,YAAY;AAEjD,sBAAI,MAAM,OAAO,iBAAiB,iBAAiB,OAAO,WAAW,YAAY,eAAe,+FAAoG,OAAO,UAAU,YAAY,IAAI,iGAAsG;AAC3U,sBAAI,OAAO;AACX,wBAAM;AAAA,gBAClB;AAEU,0BAAU,UAAU,YAAY,EAAE,QAAQ,cAAc,eAAe,UAAU,MAAM,8CAA8C;AAAA,cAC/I,SAAiB,IAAI;AACX,0BAAU;AAAA,cACpB;AAEQ,kBAAI,WAAW,EAAE,mBAAmB,QAAQ;AAC1C,8CAA8B,OAAO;AAErC,sBAAM,4RAAqT,iBAAiB,eAAe,UAAU,cAAc,OAAO,OAAO;AAEjY,8CAA8B,IAAI;AAAA,cAC5C;AAEQ,kBAAI,mBAAmB,SAAS,EAAE,QAAQ,WAAW,qBAAqB;AAGxE,mCAAmB,QAAQ,OAAO,IAAI;AACtC,8CAA8B,OAAO;AAErC,sBAAM,sBAAsB,UAAU,QAAQ,OAAO;AAErD,8CAA8B,IAAI;AAAA,cAC5C;AAAA,YACA;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAEA,UAAI,cAAc,MAAM;AAExB,eAAS,QAAQ,GAAG;AAClB,eAAO,YAAY,CAAC;AAAA,MACtB;AAYA,eAAS,SAAS,OAAO;AACvB;AAEE,cAAI,iBAAiB,OAAO,WAAW,cAAc,OAAO;AAC5D,cAAI,OAAO,kBAAkB,MAAM,OAAO,WAAW,KAAK,MAAM,YAAY,QAAQ;AACpF,iBAAO;AAAA,QACX;AAAA,MACA;AAGA,eAAS,kBAAkB,OAAO;AAChC;AACE,cAAI;AACF,+BAAmB,KAAK;AACxB,mBAAO;AAAA,UACb,SAAa,GAAG;AACV,mBAAO;AAAA,UACb;AAAA,QACA;AAAA,MACA;AAEA,eAAS,mBAAmB,OAAO;AAwBjC,eAAO,KAAK;AAAA,MACd;AACA,eAAS,uBAAuB,OAAO;AACrC;AACE,cAAI,kBAAkB,KAAK,GAAG;AAC5B,kBAAM,mHAAwH,SAAS,KAAK,CAAC;AAE7I,mBAAO,mBAAmB,KAAK;AAAA,UACrC;AAAA,QACA;AAAA,MACA;AAEA,UAAI,oBAAoB,qBAAqB;AAC7C,UAAI,iBAAiB;AAAA,QACnB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,UAAU;AAAA;AAEZ,UAAI;AACJ,UAAI;AAOJ,eAAS,YAAY,QAAQ;AAC3B;AACE,cAAI,eAAe,KAAK,QAAQ,KAAK,GAAG;AACtC,gBAAI,SAAS,OAAO,yBAAyB,QAAQ,KAAK,EAAE;AAE5D,gBAAI,UAAU,OAAO,gBAAgB;AACnC,qBAAO;AAAA,YACf;AAAA,UACA;AAAA,QACA;AAEE,eAAO,OAAO,QAAQ;AAAA,MACxB;AAEA,eAAS,YAAY,QAAQ;AAC3B;AACE,cAAI,eAAe,KAAK,QAAQ,KAAK,GAAG;AACtC,gBAAI,SAAS,OAAO,yBAAyB,QAAQ,KAAK,EAAE;AAE5D,gBAAI,UAAU,OAAO,gBAAgB;AACnC,qBAAO;AAAA,YACf;AAAA,UACA;AAAA,QACA;AAEE,eAAO,OAAO,QAAQ;AAAA,MACxB;AAEA,eAAS,qCAAqC,QAAQ,MAAM;AAC1D;AACE,cAAI,OAAO,OAAO,QAAQ,YAAY,kBAAkB,WAAW,KAAsD;AAAA,QAS7H;AAAA,MACA;AAEA,eAAS,2BAA2B,OAAO,aAAa;AACtD;AACE,cAAI,wBAAwB,WAAY;AACtC,gBAAI,CAAC,4BAA4B;AAC/B,2CAA6B;AAE7B,oBAAM,6OAA4P,WAAW;AAAA,YACrR;AAAA,UACA;AAEI,gCAAsB,iBAAiB;AACvC,iBAAO,eAAe,OAAO,OAAO;AAAA,YAClC,KAAK;AAAA,YACL,cAAc;AAAA,UACpB,CAAK;AAAA,QACL;AAAA,MACA;AAEA,eAAS,2BAA2B,OAAO,aAAa;AACtD;AACE,cAAI,wBAAwB,WAAY;AACtC,gBAAI,CAAC,4BAA4B;AAC/B,2CAA6B;AAE7B,oBAAM,6OAA4P,WAAW;AAAA,YACrR;AAAA,UACA;AAEI,gCAAsB,iBAAiB;AACvC,iBAAO,eAAe,OAAO,OAAO;AAAA,YAClC,KAAK;AAAA,YACL,cAAc;AAAA,UACpB,CAAK;AAAA,QACL;AAAA,MACA;AAuBA,UAAI,eAAe,SAAU,MAAM,KAAK,KAAK,MAAM,QAAQ,OAAO,OAAO;AACvE,YAAI,UAAU;AAAA;AAAA,UAEZ,UAAU;AAAA;AAAA,UAEV;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,UAEA,QAAQ;AAAA;AAGV;AAKE,kBAAQ,SAAS;AAKjB,iBAAO,eAAe,QAAQ,QAAQ,aAAa;AAAA,YACjD,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,OAAO;AAAA,UACb,CAAK;AAED,iBAAO,eAAe,SAAS,SAAS;AAAA,YACtC,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,OAAO;AAAA,UACb,CAAK;AAGD,iBAAO,eAAe,SAAS,WAAW;AAAA,YACxC,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,OAAO;AAAA,UACb,CAAK;AAED,cAAI,OAAO,QAAQ;AACjB,mBAAO,OAAO,QAAQ,KAAK;AAC3B,mBAAO,OAAO,OAAO;AAAA,UAC3B;AAAA,QACA;AAEE,eAAO;AAAA,MACT;AAQA,eAAS,OAAO,MAAM,QAAQ,UAAU,QAAQ,MAAM;AACpD;AACE,cAAI;AAEJ,cAAI,QAAQ,CAAA;AACZ,cAAI,MAAM;AACV,cAAI,MAAM;AAOV,cAAI,aAAa,QAAW;AAC1B;AACE,qCAAuB,QAAQ;AAAA,YACvC;AAEM,kBAAM,KAAK;AAAA,UACjB;AAEI,cAAI,YAAY,MAAM,GAAG;AACvB;AACE,qCAAuB,OAAO,GAAG;AAAA,YACzC;AAEM,kBAAM,KAAK,OAAO;AAAA,UACxB;AAEI,cAAI,YAAY,MAAM,GAAG;AACvB,kBAAM,OAAO;AACb,iDAAqC,QAAQ,IAAI;AAAA,UACvD;AAGI,eAAK,YAAY,QAAQ;AACvB,gBAAI,eAAe,KAAK,QAAQ,QAAQ,KAAK,CAAC,eAAe,eAAe,QAAQ,GAAG;AACrF,oBAAM,QAAQ,IAAI,OAAO,QAAQ;AAAA,YACzC;AAAA,UACA;AAGI,cAAI,QAAQ,KAAK,cAAc;AAC7B,gBAAI,eAAe,KAAK;AAExB,iBAAK,YAAY,cAAc;AAC7B,kBAAI,MAAM,QAAQ,MAAM,QAAW;AACjC,sBAAM,QAAQ,IAAI,aAAa,QAAQ;AAAA,cACjD;AAAA,YACA;AAAA,UACA;AAEI,cAAI,OAAO,KAAK;AACd,gBAAI,cAAc,OAAO,SAAS,aAAa,KAAK,eAAe,KAAK,QAAQ,YAAY;AAE5F,gBAAI,KAAK;AACP,yCAA2B,OAAO,WAAW;AAAA,YACrD;AAEM,gBAAI,KAAK;AACP,yCAA2B,OAAO,WAAW;AAAA,YACrD;AAAA,UACA;AAEI,iBAAO,aAAa,MAAM,KAAK,KAAK,MAAM,QAAQ,kBAAkB,SAAS,KAAK;AAAA,QACtF;AAAA,MACA;AAEA,UAAI,sBAAsB,qBAAqB;AAC/C,UAAI,2BAA2B,qBAAqB;AAEpD,eAAS,gCAAgC,SAAS;AAChD;AACE,cAAI,SAAS;AACX,gBAAI,QAAQ,QAAQ;AACpB,gBAAI,QAAQ,qCAAqC,QAAQ,MAAM,QAAQ,SAAS,QAAQ,MAAM,OAAO,IAAI;AACzG,qCAAyB,mBAAmB,KAAK;AAAA,UACvD,OAAW;AACL,qCAAyB,mBAAmB,IAAI;AAAA,UACtD;AAAA,QACA;AAAA,MACA;AAEA,UAAI;AAEJ;AACE,wCAAgC;AAAA,MAClC;AAUA,eAAS,eAAe,QAAQ;AAC9B;AACE,iBAAO,OAAO,WAAW,YAAY,WAAW,QAAQ,OAAO,aAAa;AAAA,QAChF;AAAA,MACA;AAEA,eAAS,8BAA8B;AACrC;AACE,cAAI,oBAAoB,SAAS;AAC/B,gBAAI,OAAO,yBAAyB,oBAAoB,QAAQ,IAAI;AAEpE,gBAAI,MAAM;AACR,qBAAO,qCAAqC,OAAO;AAAA,YAC3D;AAAA,UACA;AAEI,iBAAO;AAAA,QACX;AAAA,MACA;AAEA,eAAS,2BAA2B,QAAQ;AAC1C;AAOE,iBAAO;AAAA,QACX;AAAA,MACA;AAQA,UAAI,wBAAwB,CAAA;AAE5B,eAAS,6BAA6B,YAAY;AAChD;AACE,cAAI,OAAO,4BAA2B;AAEtC,cAAI,CAAC,MAAM;AACT,gBAAI,aAAa,OAAO,eAAe,WAAW,aAAa,WAAW,eAAe,WAAW;AAEpG,gBAAI,YAAY;AACd,qBAAO,gDAAgD,aAAa;AAAA,YAC5E;AAAA,UACA;AAEI,iBAAO;AAAA,QACX;AAAA,MACA;AAcA,eAAS,oBAAoB,SAAS,YAAY;AAChD;AACE,cAAI,CAAC,QAAQ,UAAU,QAAQ,OAAO,aAAa,QAAQ,OAAO,MAAM;AACtE;AAAA,UACN;AAEI,kBAAQ,OAAO,YAAY;AAC3B,cAAI,4BAA4B,6BAA6B,UAAU;AAEvE,cAAI,sBAAsB,yBAAyB,GAAG;AACpD;AAAA,UACN;AAEI,gCAAsB,yBAAyB,IAAI;AAInD,cAAI,aAAa;AAEjB,cAAI,WAAW,QAAQ,UAAU,QAAQ,WAAW,oBAAoB,SAAS;AAE/E,yBAAa,iCAAiC,yBAAyB,QAAQ,OAAO,IAAI,IAAI;AAAA,UACpG;AAEI,0CAAgC,OAAO;AAEvC,gBAAM,6HAAkI,2BAA2B,UAAU;AAE7K,0CAAgC,IAAI;AAAA,QACxC;AAAA,MACA;AAYA,eAAS,kBAAkB,MAAM,YAAY;AAC3C;AACE,cAAI,OAAO,SAAS,UAAU;AAC5B;AAAA,UACN;AAEI,cAAI,QAAQ,IAAI,GAAG;AACjB,qBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,kBAAI,QAAQ,KAAK,CAAC;AAElB,kBAAI,eAAe,KAAK,GAAG;AACzB,oCAAoB,OAAO,UAAU;AAAA,cAC/C;AAAA,YACA;AAAA,UACA,WAAe,eAAe,IAAI,GAAG;AAE/B,gBAAI,KAAK,QAAQ;AACf,mBAAK,OAAO,YAAY;AAAA,YAChC;AAAA,UACA,WAAe,MAAM;AACf,gBAAI,aAAa,cAAc,IAAI;AAEnC,gBAAI,OAAO,eAAe,YAAY;AAGpC,kBAAI,eAAe,KAAK,SAAS;AAC/B,oBAAI,WAAW,WAAW,KAAK,IAAI;AACnC,oBAAI;AAEJ,uBAAO,EAAE,OAAO,SAAS,KAAI,GAAI,MAAM;AACrC,sBAAI,eAAe,KAAK,KAAK,GAAG;AAC9B,wCAAoB,KAAK,OAAO,UAAU;AAAA,kBACxD;AAAA,gBACA;AAAA,cACA;AAAA,YACA;AAAA,UACA;AAAA,QACA;AAAA,MACA;AASA,eAAS,kBAAkB,SAAS;AAClC;AACE,cAAI,OAAO,QAAQ;AAEnB,cAAI,SAAS,QAAQ,SAAS,UAAa,OAAO,SAAS,UAAU;AACnE;AAAA,UACN;AAEI,cAAI;AAEJ,cAAI,OAAO,SAAS,YAAY;AAC9B,wBAAY,KAAK;AAAA,UACvB,WAAe,OAAO,SAAS,aAAa,KAAK,aAAa;AAAA;AAAA,UAE1D,KAAK,aAAa,kBAAkB;AAClC,wBAAY,KAAK;AAAA,UACvB,OAAW;AACL;AAAA,UACN;AAEI,cAAI,WAAW;AAEb,gBAAI,OAAO,yBAAyB,IAAI;AACxC,2BAAe,WAAW,QAAQ,OAAO,QAAQ,MAAM,OAAO;AAAA,UACpE,WAAe,KAAK,cAAc,UAAa,CAAC,+BAA+B;AACzE,4CAAgC;AAEhC,gBAAI,QAAQ,yBAAyB,IAAI;AAEzC,kBAAM,uGAAuG,SAAS,SAAS;AAAA,UACrI;AAEI,cAAI,OAAO,KAAK,oBAAoB,cAAc,CAAC,KAAK,gBAAgB,sBAAsB;AAC5F,kBAAM,4HAAiI;AAAA,UAC7I;AAAA,QACA;AAAA,MACA;AAOA,eAAS,sBAAsB,UAAU;AACvC;AACE,cAAI,OAAO,OAAO,KAAK,SAAS,KAAK;AAErC,mBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,gBAAI,MAAM,KAAK,CAAC;AAEhB,gBAAI,QAAQ,cAAc,QAAQ,OAAO;AACvC,8CAAgC,QAAQ;AAExC,oBAAM,4GAAiH,GAAG;AAE1H,8CAAgC,IAAI;AACpC;AAAA,YACR;AAAA,UACA;AAEI,cAAI,SAAS,QAAQ,MAAM;AACzB,4CAAgC,QAAQ;AAExC,kBAAM,uDAAuD;AAE7D,4CAAgC,IAAI;AAAA,UAC1C;AAAA,QACA;AAAA,MACA;AAEA,UAAI,wBAAwB,CAAA;AAC5B,eAAS,kBAAkB,MAAM,OAAO,KAAK,kBAAkB,QAAQ,MAAM;AAC3E;AACE,cAAI,YAAY,mBAAmB,IAAI;AAGvC,cAAI,CAAC,WAAW;AACd,gBAAI,OAAO;AAEX,gBAAI,SAAS,UAAa,OAAO,SAAS,YAAY,SAAS,QAAQ,OAAO,KAAK,IAAI,EAAE,WAAW,GAAG;AACrG,sBAAQ;AAAA,YAChB;AAEM,gBAAI,aAAa,2BAAiC;AAElD,gBAAI,YAAY;AACd,sBAAQ;AAAA,YAChB,OAAa;AACL,sBAAQ,4BAA2B;AAAA,YAC3C;AAEM,gBAAI;AAEJ,gBAAI,SAAS,MAAM;AACjB,2BAAa;AAAA,YACrB,WAAiB,QAAQ,IAAI,GAAG;AACxB,2BAAa;AAAA,YACrB,WAAiB,SAAS,UAAa,KAAK,aAAa,oBAAoB;AACrE,2BAAa,OAAO,yBAAyB,KAAK,IAAI,KAAK,aAAa;AACxE,qBAAO;AAAA,YACf,OAAa;AACL,2BAAa,OAAO;AAAA,YAC5B;AAEM,kBAAM,2IAAqJ,YAAY,IAAI;AAAA,UACjL;AAEI,cAAI,UAAU,OAAO,MAAM,OAAO,KAAK,QAAQ,IAAI;AAGnD,cAAI,WAAW,MAAM;AACnB,mBAAO;AAAA,UACb;AAOI,cAAI,WAAW;AACb,gBAAI,WAAW,MAAM;AAErB,gBAAI,aAAa,QAAW;AAC1B,kBAAI,kBAAkB;AACpB,oBAAI,QAAQ,QAAQ,GAAG;AACrB,2BAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,sCAAkB,SAAS,CAAC,GAAG,IAAI;AAAA,kBACjD;AAEY,sBAAI,OAAO,QAAQ;AACjB,2BAAO,OAAO,QAAQ;AAAA,kBACpC;AAAA,gBACA,OAAiB;AACL,wBAAM,sJAAgK;AAAA,gBAClL;AAAA,cACA,OAAe;AACL,kCAAkB,UAAU,IAAI;AAAA,cAC1C;AAAA,YACA;AAAA,UACA;AAEI;AACE,gBAAI,eAAe,KAAK,OAAO,KAAK,GAAG;AACrC,kBAAI,gBAAgB,yBAAyB,IAAI;AACjD,kBAAI,OAAO,OAAO,KAAK,KAAK,EAAE,OAAO,SAAU,GAAG;AAChD,uBAAO,MAAM;AAAA,cACvB,CAAS;AACD,kBAAI,gBAAgB,KAAK,SAAS,IAAI,oBAAoB,KAAK,KAAK,SAAS,IAAI,WAAW;AAE5F,kBAAI,CAAC,sBAAsB,gBAAgB,aAAa,GAAG;AACzD,oBAAI,eAAe,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK,SAAS,IAAI,WAAW;AAE7E,sBAAM,mOAA4P,eAAe,eAAe,cAAc,aAAa;AAE3T,sCAAsB,gBAAgB,aAAa,IAAI;AAAA,cACjE;AAAA,YACA;AAAA,UACA;AAEI,cAAI,SAAS,qBAAqB;AAChC,kCAAsB,OAAO;AAAA,UACnC,OAAW;AACL,8BAAkB,OAAO;AAAA,UAC/B;AAEI,iBAAO;AAAA,QACX;AAAA,MACA;AAKA,eAAS,wBAAwB,MAAM,OAAO,KAAK;AACjD;AACE,iBAAO,kBAAkB,MAAM,OAAO,KAAK,IAAI;AAAA,QACnD;AAAA,MACA;AACA,eAAS,yBAAyB,MAAM,OAAO,KAAK;AAClD;AACE,iBAAO,kBAAkB,MAAM,OAAO,KAAK,KAAK;AAAA,QACpD;AAAA,MACA;AAEA,UAAI,MAAO;AAGX,UAAI,OAAQ;AAEZ,kCAAA,WAAmB;AACnB,kCAAA,MAAc;AACd,kCAAA,OAAe;AAAA,IACf,GAAG;AAAA,EACH;;;;;;;AClzCA,MAAI,QAAQ,IAAI,aAAa,cAAc;AACzCC,eAAA,UAAiBH,sCAAA;AAAA,EACnB,OAAO;AACLG,eAAA,UAAiBC,mCAAA;AAAA,EACnB;;;;;;;;;;ACDA,SAAO,eAAe,OAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,QAAA,WAAmB,kBAAoB,MAAA,cAAsB,MAAA,uBAA+B,qBAAuB,MAAA,kBAA0B,MAAA,iBAAyB,0BAA4B,MAAA,YAAoB,MAAA,mBAA2B,MAAA,WAAmB,MAAA,mBAA2B,sBAAwB,MAAA,qBAA6B,MAAA,cAAsB,mBAAqB,MAAA,aAAqB,MAAA,mBAA2B,iBAAmB,MAAA,QAAgB,MAAA,QAAgB,kBAAoB,MAAA,aAAqB;AAE3gB,MAAI;AACJ,GAAC,SAAUC,aAAY;AACnB,IAAAA,YAAW,WAAW,IAAI;AAC1B,IAAAA,YAAW,cAAc,IAAI;AAC7B,IAAAA,YAAW,UAAU,IAAI;AAAA,EAC7B,GAAG,eAAe,MAAA,aAAqB,aAAa,CAAA,EAAG;AAEvD,MAAI;AACJ,GAAC,SAAUC,YAAW;AAClB,IAAAA,WAAU,KAAK,IAAI;AACnB,IAAAA,WAAU,QAAQ,IAAI;AAAA,EAC1B,GAAG,cAAc,MAAA,YAAoB,YAAY,CAAA,EAAG;AAEpD,MAAI;AACJ,GAAC,SAAUC,QAAO;AAEd,IAAAA,OAAM,aAAa,IAAI;AACvB,IAAAA,OAAM,aAAa,IAAI;AACvB,IAAAA,OAAM,YAAY,IAAI;AAEtB,IAAAA,OAAM,iBAAiB,IAAI;AAC3B,IAAAA,OAAM,gBAAgB,IAAI;AAC1B,IAAAA,OAAM,cAAc,IAAI;AAExB,IAAAA,OAAM,kBAAkB,IAAI;AAC5B,IAAAA,OAAM,kBAAkB,IAAI;AAC5B,IAAAA,OAAM,iBAAiB,IAAI;AAE3B,IAAAA,OAAM,kBAAkB,IAAI;AAC5B,IAAAA,OAAM,kBAAkB,IAAI;AAC5B,IAAAA,OAAM,iBAAiB,IAAI;AAE3B,IAAAA,OAAM,cAAc,IAAI;AACxB,IAAAA,OAAM,cAAc,IAAI;AACxB,IAAAA,OAAM,aAAa,IAAI;AAEvB,IAAAA,OAAM,mBAAmB,IAAI;AAC7B,IAAAA,OAAM,gBAAgB,IAAI;AAE1B,IAAAA,OAAM,aAAa,IAAI;AACvB,IAAAA,OAAM,aAAa,IAAI;AAEvB,IAAAA,OAAM,gBAAgB,IAAI;AAC1B,IAAAA,OAAM,eAAe,IAAI;AAEzB,IAAAA,OAAM,cAAc,IAAI;AACxB,IAAAA,OAAM,gBAAgB,IAAI;AAE1B,IAAAA,OAAM,gBAAgB,IAAI;AAC1B,IAAAA,OAAM,gBAAgB,IAAI;AAE1B,IAAAA,OAAM,eAAe,IAAI;AACzB,IAAAA,OAAM,eAAe,IAAI;AAEzB,IAAAA,OAAM,gBAAgB,IAAI;AAC1B,IAAAA,OAAM,gBAAgB,IAAI;AAE1B,IAAAA,OAAM,eAAe,IAAI;AACzB,IAAAA,OAAM,eAAe,IAAI;AAEzB,IAAAA,OAAM,eAAe,IAAI;AACzB,IAAAA,OAAM,eAAe,IAAI;AAEzB,IAAAA,OAAM,eAAe,IAAI;AACzB,IAAAA,OAAM,eAAe,IAAI;AAEzB,IAAAA,OAAM,eAAe,IAAI;AACzB,IAAAA,OAAM,eAAe,IAAI;AAEzB,IAAAA,OAAM,kBAAkB,IAAI;AAC5B,IAAAA,OAAM,kBAAkB,IAAI;AAE5B,IAAAA,OAAM,eAAe,IAAI;AACzB,IAAAA,OAAM,eAAe,IAAI;AACzB,IAAAA,OAAM,aAAa,IAAI;AAEvB,IAAAA,OAAM,kBAAkB,IAAI;AAC5B,IAAAA,OAAM,kBAAkB,IAAI;AAE5B,IAAAA,OAAM,eAAe,IAAI;AAEzB,IAAAA,OAAM,aAAa,IAAI;AAEvB,IAAAA,OAAM,aAAa,IAAI;AAIvB,IAAAA,OAAM,eAAe,IAAI;AACzB,IAAAA,OAAM,eAAe,IAAI;AAGzB,IAAAA,OAAM,gBAAgB,IAAI;AAC1B,IAAAA,OAAM,gBAAgB,IAAI;AAE1B,IAAAA,OAAM,gBAAgB,IAAI;AAC1B,IAAAA,OAAM,gBAAgB,IAAI;AAE1B,IAAAA,OAAM,gBAAgB,IAAI;AAC1B,IAAAA,OAAM,eAAe,IAAI;AACzB,IAAAA,OAAM,gBAAgB,IAAI;AAE1B,IAAAA,OAAM,WAAW,IAAI;AACrB,IAAAA,OAAM,cAAc,IAAI;AAAA,EAC5B,GAAG,UAAU,MAAA,QAAgB,QAAQ,CAAA,EAAG;AAExC,MAAI;AACJ,GAAC,SAAUC,QAAO;AACd,IAAAA,OAAM,OAAO,IAAI;AACjB,IAAAA,OAAM,MAAM,IAAI;AAChB,IAAAA,OAAM,QAAQ,IAAI;AAAA,EACtB,GAAG,UAAU,MAAA,QAAgB,QAAQ,CAAA,EAAG;AAExC,MAAI;AACJ,GAAC,SAAUC,WAAU;AACjB,IAAAA,UAAS,OAAO,IAAI;AACpB,IAAAA,UAAS,QAAQ,IAAI;AACrB,IAAAA,UAAS,OAAO,IAAI;AAAA,EACxB,GAAG,aAAa,MAAA,WAAmB,WAAW,CAAA,EAAG;AAEjD,MAAI;AACJ,GAAC,SAAUC,mBAAkB;AACzB,IAAAA,kBAAiB,KAAK,IAAI;AAC1B,IAAAA,kBAAiB,OAAO,IAAI;AAC5B,IAAAA,kBAAiB,WAAW,IAAI;AAChC,IAAAA,kBAAiB,SAAS,IAAI;AAAA,EAClC,GAAG,qBAAqB,MAAA,mBAA2B,mBAAmB,CAAA,EAAG;AAEzE,MAAI;AACJ,GAAC,SAAUC,aAAY;AACnB,IAAAA,YAAW,iBAAiB,IAAI;AAChC,IAAAA,YAAW,SAAS,IAAI;AACxB,IAAAA,YAAW,QAAQ,IAAI;AACvB,IAAAA,YAAW,YAAY,IAAI;AAAA,EAC/B,GAAG,eAAe,MAAA,aAAqB,aAAa,CAAA,EAAG;AAEvD,MAAI;AACJ,GAAC,SAAUC,aAAY;AACnB,IAAAA,YAAW,MAAM,IAAI;AACrB,IAAAA,YAAW,OAAO,IAAI;AAAA,EAC1B,GAAG,eAAe,MAAA,aAAqB,aAAa,CAAA,EAAG;AAEvD,MAAI;AACJ,GAAC,SAAUC,cAAa;AACpB,IAAAA,aAAY,MAAM,IAAI;AACtB,IAAAA,aAAY,OAAO,IAAI;AACvB,IAAAA,aAAY,SAAS,IAAI;AACzB,IAAAA,aAAY,QAAQ,IAAI;AACxB,IAAAA,aAAY,MAAM,IAAI;AACtB,IAAAA,aAAY,QAAQ,IAAI;AACxB,IAAAA,aAAY,WAAW,IAAI;AAC3B,IAAAA,aAAY,aAAa,IAAI;AAAA,EACjC,GAAG,gBAAgB,MAAA,cAAsB,cAAc,CAAA,EAAG;AAE1D,MAAI;AACJ,GAAC,SAAUC,qBAAoB;AAC3B,IAAAA,oBAAmB,MAAM,IAAI;AAC7B,IAAAA,oBAAmB,UAAU,IAAI;AACjC,IAAAA,oBAAmB,QAAQ,IAAI;AAC/B,IAAAA,oBAAmB,SAAS,IAAI;AAAA,EACpC,GAAG,uBAAuB,MAAA,qBAA6B,qBAAqB,CAAA,EAAG;AAE/E,MAAI;AACJ,GAAC,SAAUC,gBAAe;AACtB,IAAAA,eAAc,MAAM,IAAI;AACxB,IAAAA,eAAc,SAAS,IAAI;AAC3B,IAAAA,eAAc,SAAS,IAAI;AAC3B,IAAAA,eAAc,OAAO,IAAI;AAAA,EAC7B,GAAG,kBAAkB,MAAA,gBAAwB,gBAAgB,CAAA,EAAG;AAEhE,MAAI;AACJ,GAAC,SAAUC,mBAAkB;AACzB,IAAAA,kBAAiB,MAAM,IAAI;AAC3B,IAAAA,kBAAiB,SAAS,IAAI;AAC9B,IAAAA,kBAAiB,SAAS,IAAI;AAC9B,IAAAA,kBAAiB,OAAO,IAAI;AAAA,EAChC,GAAG,qBAAqB,MAAA,mBAA2B,mBAAmB,CAAA,EAAG;AAEzE,MAAI;AACJ,GAAC,SAAUC,WAAU;AACjB,IAAAA,UAAS,MAAM,IAAI;AACnB,IAAAA,UAAS,SAAS,IAAI;AACtB,IAAAA,UAAS,SAAS,IAAI;AACtB,IAAAA,UAAS,OAAO,IAAI;AAAA,EACxB,GAAG,aAAa,MAAA,WAAmB,WAAW,CAAA,EAAG;AAEjD,MAAI;AACJ,GAAC,SAAUC,mBAAkB;AACzB,IAAAA,kBAAiB,QAAQ,IAAI;AAC7B,IAAAA,kBAAiB,KAAK,IAAI;AAC1B,IAAAA,kBAAiB,KAAK,IAAI;AAC1B,IAAAA,kBAAiB,QAAQ,IAAI;AAAA,EACjC,GAAG,qBAAqB,MAAA,mBAA2B,mBAAmB,CAAA,EAAG;AAEzE,MAAI;AACJ,GAAC,SAAUC,YAAW;AAClB,IAAAA,WAAU,KAAK,IAAI;AACnB,IAAAA,WAAU,MAAM,IAAI;AAAA,EACxB,GAAG,cAAc,MAAA,YAAoB,YAAY,CAAA,EAAG;AAEpD,MAAI;AACJ,GAAC,SAAUC,oBAAmB;AAC1B,IAAAA,mBAAkB,MAAM,IAAI;AAC5B,IAAAA,mBAAkB,SAAS,IAAI;AAC/B,IAAAA,mBAAkB,MAAM,IAAI;AAC5B,IAAAA,mBAAkB,MAAM,IAAI;AAAA,EAChC,GAAG,sBAAsB,MAAA,oBAA4B,oBAAoB,CAAA,EAAG;AAE5E,MAAI;AACJ,GAAC,SAAUC,iBAAgB;AACvB,IAAAA,gBAAe,SAAS,IAAI;AAC5B,IAAAA,gBAAe,MAAM,IAAI;AACzB,IAAAA,gBAAe,MAAM,IAAI;AACzB,IAAAA,gBAAe,aAAa,IAAI;AAChC,IAAAA,gBAAe,aAAa,IAAI;AAChC,IAAAA,gBAAe,aAAa,IAAI;AAChC,IAAAA,gBAAe,aAAa,IAAI;AAChC,IAAAA,gBAAe,UAAU,IAAI;AAAA,EACjC,GAAG,mBAAmB,MAAA,iBAAyB,iBAAiB,CAAA,EAAG;AAEnE,MAAI;AACJ,GAAC,SAAUC,kBAAiB;AACxB,IAAAA,iBAAgB,SAAS,IAAI;AAC7B,IAAAA,iBAAgB,cAAc,IAAI;AAClC,IAAAA,iBAAgB,YAAY,IAAI;AAChC,IAAAA,iBAAgB,WAAW,IAAI;AAC/B,IAAAA,iBAAgB,cAAc,IAAI;AAClC,IAAAA,iBAAgB,UAAU,IAAI;AAC9B,IAAAA,iBAAgB,SAAS,IAAI;AAC7B,IAAAA,iBAAgB,OAAO,IAAI;AAAA,EAC/B,GAAG,oBAAoB,MAAA,kBAA0B,kBAAkB,CAAA,EAAG;AAEtE,MAAI;AACJ,GAAC,SAAUC,eAAc;AACrB,IAAAA,cAAa,KAAK,IAAI;AACtB,IAAAA,cAAa,cAAc,IAAI;AAC/B,IAAAA,cAAa,SAAS,IAAI;AAAA,EAC9B,GAAG,iBAAiB,MAAA,eAAuB,eAAe,CAAA,EAAG;AAE7D,MAAI;AACJ,GAAC,SAAUC,uBAAsB;AAC7B,IAAAA,sBAAqB,OAAO,IAAI;AAChC,IAAAA,sBAAqB,SAAS,IAAI;AAClC,IAAAA,sBAAqB,SAAS,IAAI;AAClC,IAAAA,sBAAqB,SAAS,IAAI;AAAA,EACtC,GAAG,yBAAyB,MAAA,uBAA+B,uBAAuB,CAAA,EAAG;AAErF,MAAI;AACJ,GAAC,SAAUC,cAAa;AACpB,IAAAA,aAAY,WAAW,IAAI;AAC3B,IAAAA,aAAY,eAAe,IAAI;AAC/B,IAAAA,aAAY,kBAAkB,IAAI;AAClC,IAAAA,aAAY,WAAW,IAAI;AAC3B,IAAAA,aAAY,eAAe,IAAI;AAC/B,IAAAA,aAAY,WAAW,IAAI;AAAA,EAC/B,GAAG,gBAAgB,MAAA,cAAsB,cAAc,CAAA,EAAG;AAE1D,MAAI;AACJ,GAAC,SAAUC,YAAW;AAClB,IAAAA,WAAU,SAAS,IAAI;AACvB,IAAAA,WAAU,MAAM,IAAI;AACpB,IAAAA,WAAU,YAAY,IAAI;AAC1B,IAAAA,WAAU,YAAY,IAAI;AAC1B,IAAAA,WAAU,SAAS,IAAI;AAAA,EAC3B,GAAG,cAAc,MAAA,YAAoB,YAAY,CAAA,EAAG;AAEpD,MAAI;AACJ,GAAC,SAAUC,WAAU;AACjB,IAAAA,UAAS,KAAK,IAAI;AAClB,IAAAA,UAAS,KAAK,IAAI;AAClB,IAAAA,UAAS,KAAK,IAAI;AAClB,IAAAA,UAAS,KAAK,IAAI;AAClB,IAAAA,UAAS,KAAK,IAAI;AAAA,EACtB,GAAG,aAAa,MAAA,WAAmB,WAAW,CAAA,EAAG;;;;;;;;;ACnRjD,WAAO,eAAcC,WAAU,cAAc,EAAE,OAAO,MAAM;AAC5DA,cAAA,2BAAmCA,UAAA,mBAA2BA,UAAA,oBAA4B;AAC1F,UAAM,UAAU5B,aAAA;AAIhB,UAAM,oBAAoB,CAAC,WAAW;AAClC,aAAQ,WAAW,UAAa,WAAW,QAAQ,QAAQ,OAAO,aAAa;AAAA,IACnF;AACA4B,cAAA,oBAA4B;AAI5B,UAAM,mBAAmB,CAAC,WAAW;AACjC,cAAQ,GAAIA,UAAQ,mBAAmB,MAAM,KACzC,QAAQ,OAAO,OAAO,KACtB,QAAQ,OAAO,SAAS;AAAA,IAChC;AACAA,cAAA,mBAA2B;AAI3B,UAAM,2BAA2B,CAAC,WAAW;AACzC,UAAI,EAAC,GAAIA,UAAQ,mBAAmB,MAAM,GAAG;AACzC,eAAO,QAAQ,gBAAgB;AAAA,MACvC;AACI,cAAQA,UAAQ,kBAAkB,MAAM,GAAG;AACvC,eAAO,QAAQ,gBAAgB;AAAA,MACvC;AACI,aAAO,QAAQ,gBAAgB;AAAA,IACnC;AACAA,cAAA,2BAAmC;AAAA;;;;;;;;AC7BnC,SAAO,eAAe,QAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,SAAA,qBAA6B,OAAA,oBAA4B,OAAA,cAAsB;AAC/E,SAAA,kBAA0B;AAC1B,SAAA,eAAuB;AACvB,SAAA,oBAA4B;AAC5B,SAAA,iBAAyB;AAKzB,MAAI;AACJ,GAAC,SAAUC,cAAa;AAEpB,IAAAA,aAAY,UAAU,IAAI;AAE1B,IAAAA,aAAY,UAAU,IAAI;AAE1B,IAAAA,aAAY,mBAAmB,IAAI;AAEnC,IAAAA,aAAY,mBAAmB,IAAI;AAAA,EACvC,GAAG,gBAAgB,OAAA,cAAsB,cAAc,CAAA,EAAG;AAK1D,MAAI;AACJ,GAAC,SAAUC,oBAAmB;AAE1B,IAAAA,mBAAkB,SAAS,IAAI;AAE/B,IAAAA,mBAAkB,QAAQ,IAAI;AAE9B,IAAAA,mBAAkB,SAAS,IAAI;AAAA,EACnC,GAAG,sBAAsB,OAAA,oBAA4B,oBAAoB,CAAA,EAAG;AAS5E,WAAS,gBAAgBC,UAAS;AAC9B,QAAI;AAEA,UAAIA,SAAQ,SAAS,MAAMA,SAAQ,SAAS,IAAI;AAC5C,eAAO;AAAA,MACnB;AAGQ,YAAM,cAAc;AACpB,UAAI,CAAC,YAAY,KAAKA,QAAO,GAAG;AAC5B,eAAO;AAAA,MACnB;AAEQ,UAAI;AAEA,cAAM,OAAO,QAAQ,MAAM;AAC3B,cAAM,UAAU,KAAK,OAAOA,QAAO;AACnC,eAAO,QAAQ,WAAW;AAAA,MACtC,QACc;AAEF,eAAO;AAAA,MACnB;AAAA,IACA,QACU;AACF,aAAO;AAAA,IACf;AAAA,EACA;AAMA,WAAS,aAAaA,UAAS;AAC3B,WAAO,sBAAsB,KAAKA,QAAO;AAAA,EAC7C;AAMA,WAAS,kBAAkB,WAAW;AAClC,WAAO,gBAAgB,SAAS;AAAA,EACpC;AAMA,WAAS,eAAe,WAAW;AAC/B,WAAO,aAAa,SAAS;AAAA,EACjC;AAOA,SAAA,qBAA6B;AAAA;AAAA,IAEzB,UAAU;AAAA;AAAA,IAEV,cAAc,KAAK,KAAK,KAAK;AAAA;AAAA,IAE7B,gBAAgB;AAAA,MACZ,QAAQ;AAAA,MACR,OAAO;AAAA;;IAGX,eAAe;AAAA;AAAA,IAEf,aAAa;AAAA,MACT,SAAS;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA;;;;;;;;;;ACpHjB,SAAO,eAAe,SAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,UAAA,cAAsB;AACtB,UAAA,YAAoB;AACpB,UAAA,YAAoB;AACpB,UAAA,iBAAyB;AACzB,UAAA,uBAA+B;AAC/B,UAAA,mBAA2B;AAC3B,UAAA,oBAA4B;AAC5B,UAAA,sBAA8B;AAC9B,UAAA,sBAA8B;AAC9B,QAAM,UAAU/B,aAAA;AAEhB,QAAM,WAAWI,cAAA;AAIjB,MAAI;AACJ,GAAC,SAAU4B,cAAa;AACpB,IAAAA,aAAY,YAAY,IAAI;AAC5B,IAAAA,aAAY,eAAe,IAAI;AAC/B,IAAAA,aAAY,SAAS,IAAI;AACzB,IAAAA,aAAY,SAAS,IAAI;AAAA,EAC7B,GAAG,gBAAgB,QAAA,cAAsB,cAAc,CAAA,EAAG;AAM1D,WAAS,UAAUD,UAAS;AACxB,UAAM,eAAeA,SAAQ,YAAW;AAExC,QAAI,CAAC,aAAa,SAAS,MAAM,KAAK,CAAC,aAAa,SAAS,MAAM,GAAG;AAClE,aAAO;AAAA,IACf;AAEI,UAAM,iBAAiB,aAAa,SAAS,MAAM,IAC7C,aAAa,MAAM,GAAG,EAAE,IACxB,aAAa,MAAM,GAAG,EAAE;AAC9B,QAAI,eAAe,WAAW,GAAG;AAC7B,aAAO;AAAA,IACf;AAEI,UAAM,SAAS,eAAe,MAAM,GAAG;AAEvC,UAAM,kBAAkB;AACxB,eAAW,SAAS,QAAQ;AACxB,UAAI,MAAM,WAAW,KAAK,CAAC,gBAAgB,KAAK,KAAK,GAAG;AACpD,eAAO;AAAA,MACnB;AAEQ,UAAI,MAAM,SAAS,IAAI,GAAG;AACtB,eAAO;AAAA,MACnB;AAAA,IACA;AACI,WAAO;AAAA,EACX;AAKA,WAAS,UAAUA,UAAS;AACxB,UAAM,eAAeA,SAAQ,YAAW;AAExC,UAAM,gBAAgB;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAGJ,UAAM,oBAAoB,cAAc,KAAK,CAAC,QAAQ,aAAa,SAAS,GAAG,CAAC;AAChF,QAAI,CAAC,mBAAmB;AACpB,aAAO;AAAA,IACf;AAEI,UAAM,iBAAiB,aAAa,MAAM,GAAG,CAAC,kBAAkB,MAAM;AACtE,QAAI,eAAe,WAAW,GAAG;AAC7B,aAAO;AAAA,IACf;AAEI,UAAM,SAAS,eAAe,MAAM,GAAG;AAEvC,UAAM,kBAAkB;AACxB,eAAW,SAAS,QAAQ;AACxB,UAAI,MAAM,WAAW,KAAK,CAAC,gBAAgB,KAAK,KAAK,GAAG;AACpD,eAAO;AAAA,MACnB;AAEQ,UAAI,MAAM,SAAS,IAAI,GAAG;AACtB,eAAO;AAAA,MACnB;AAAA,IACA;AACI,WAAO;AAAA,EACX;AAKA,WAAS,eAAeA,UAAS,oBAAoB,QAAW;AAE5D,YAAQ,SAAS,cAAcA,QAAO,GAAG;AACrC,aAAO,YAAY;AAAA,IAC3B;AAEI,YAAQ,SAAS,iBAAiBA,QAAO,GAAG;AACxC,aAAO,YAAY;AAAA,IAC3B;AAEI,QAAI,qBAAqBA,SAAQ,SAAS,GAAG,GAAG;AAC5C,UAAI,sBAAsB,YAAY,YAAY;AAC9C,eAAO,YAAY;AAAA,MAC/B;AACQ,UAAI,sBAAsB,YAAY,eAAe;AACjD,eAAO,YAAY;AAAA,MAC/B;AAAA,IACA;AACI,WAAO;AAAA,EACX;AAIA,WAAS,qBAAqBA,UAAS,WAAW;AAC9C,QAAI,CAACA,YAAW,OAAOA,aAAY,UAAU;AACzC,aAAO;AAAA,IACf;AACI,UAAM,cAAc,eAAeA,QAAO;AAC1C,YAAQ,WAAS;AAAA,MACb,KAAK,QAAQ,UAAU;AACnB,eAAQ,gBAAgB,YAAY,cAChC,gBAAgB,YAAY;AAAA,MACpC,KAAK,QAAQ,UAAU;AACnB,eAAQ,gBAAgB,YAAY,iBAChC,gBAAgB,YAAY;AAAA,MACpC;AAEI,eAAO,CAAC,CAAC;AAAA,IACrB;AAAA,EACA;AAIA,WAAS,iBAAiB,WAAW,WAAW;AAC5C,QAAI,CAAC,aAAa,OAAO,cAAc,UAAU;AAC7C,aAAO;AAAA,IACf;AACI,YAAQ,WAAS;AAAA,MACb,KAAK,QAAQ,UAAU;AAEnB,eAAO,uBAAuB,KAAK,SAAS;AAAA,MAChD,KAAK,QAAQ,UAAU;AAEnB,eAAO,gCAAgC,KAAK,SAAS;AAAA,MACzD;AAEI,eAAO,UAAU,SAAS;AAAA,IACtC;AAAA,EACA;AAIA,WAAS,kBAAkB,OAAO;AAC9B,QAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACrC,aAAO;AAAA,IACf;AACI,UAAM,QAAQ,MAAM,MAAM,GAAG;AAC7B,QAAI,MAAM,WAAW,GAAG;AACpB,aAAO;AAAA,IACf;AACI,UAAM,CAACA,UAAS,MAAM,IAAI;AAC1B,QAAI,CAACA,YAAW,CAAC,QAAQ;AACrB,aAAO;AAAA,IACf;AACI,UAAM,OAAO,eAAeA,QAAO;AACnC,WAAO;AAAA,MACH,SAAAA;AAAA,MACA;AAAA,MACA;AAAA;EAER;AAKA,WAAS,oBAAoBA,UAAS;AAClC,QAAI,CAACA,YAAWA,SAAQ,SAAS,IAAI;AACjC,aAAOA;AAAA,IACf;AAEI,UAAM,cAAc,eAAeA,QAAO;AAC1C,SAAK,gBAAgB,YAAY,WAC7B,gBAAgB,YAAY,YAC5BA,SAAQ,UAAU,IAAI;AACtB,aAAOA;AAAA,IACf;AAEI,WAAO,GAAGA,SAAQ,MAAM,GAAG,CAAC,CAAC,MAAMA,SAAQ,MAAM,EAAE,CAAC;AAAA,EACxD;AAIA,WAAS,oBAAoB,WAAW;AACpC,QAAI,CAAC,WAAW;AACZ,aAAO;AAAA,IACf;AACI,YAAQ,WAAS;AAAA,MACb,KAAK,QAAQ,UAAU;AACnB,eAAO;AAAA,MACX,KAAK,QAAQ,UAAU;AACnB,eAAO;AAAA,MACX;AACI,eAAO;AAAA,IACnB;AAAA,EACA;;;;;;;AC3NA,SAAO,eAAe,YAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,aAAA,iBAAyB;AACzB,aAAA,kBAA0B;AAC1B,aAAA,kBAA0B;AAC1B,aAAA,iBAAyB;AACzB,QAAM,YAAY/B,eAAA;AAClB,WAAS,eAAe,QAAQ;AAC5B,QAAI,CAAC,UAAU,OAAO,WAAW,GAAG;AAChC,YAAM,IAAI,MAAM,wBAAwB;AAAA,IAChD;AACI,QAAI,OAAO,SAAS,KAAK;AACrB,YAAM,IAAI,MAAM,qCAAqC;AAAA,IAC7D;AAEI,UAAM,cAAc;AACpB,QAAI,CAAC,YAAY,KAAK,MAAM,GAAG;AAC3B,YAAM,IAAI,MAAM,uBAAuB;AAAA,IAC/C;AACI,WAAO;AAAA,EACX;AACA,WAAS,gBAAgB,SAAS,MAAM;AACpC,QAAI,CAAC,WAAW,QAAQ,WAAW,GAAG;AAClC,YAAM,IAAI,MAAM,iCAAiC;AAAA,IACzD;AACI,QAAI,QAAQ,SAAS,KAAK;AACtB,YAAM,IAAI,MAAM,8CAA8C;AAAA,IACtE;AACI,QAAI,CAAC,QAAQ,KAAK,WAAW,GAAG;AAC5B,YAAM,IAAI,MAAM,8BAA8B;AAAA,IACtD;AACI,QAAI,KAAK,SAAS,KAAO;AACrB,YAAM,IAAI,MAAM,6CAA6C;AAAA,IACrE;AACI,WAAO;AAAA,EACX;AACA,WAAS,gBAAgB+B,UAAS,WAAW;AACzC,QAAI,CAACA,YAAWA,SAAQ,WAAW,GAAG;AAClC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IACjD;AACI,QAAI,EAAC,GAAI,UAAU,sBAAsBA,UAAS,SAAS,GAAG;AAC1D,YAAM,IAAI,MAAM,WAAW,SAAS,iBAAiB;AAAA,IAC7D;AACI,WAAO;AAAA,EACX;AACA,WAAS,eAAe,QAAQ;AAE5B,QAAI,WAAW,QACX,WAAW,UACX,WAAW,MACV,OAAO,WAAW,YAAY,OAAO,KAAI,MAAO,IAAK;AACtD,YAAM,IAAI,MAAM,uBAAuB;AAAA,IAC/C;AACI,QAAI;AACJ,QAAI;AACA,UAAI,OAAO,WAAW,UAAU;AAE5B,YAAI,CAAC,UAAU,KAAK,OAAO,KAAI,CAAE,GAAG;AAChC,gBAAM,IAAI,MAAM,uBAAuB;AAAA,QACvD;AACY,uBAAe,OAAO,MAAM;AAAA,MACxC,WACiB,OAAO,WAAW,UAAU;AAEjC,YAAI,CAAC,OAAO,SAAS,MAAM,GAAG;AAC1B,gBAAM,IAAI,MAAM,uBAAuB;AAAA,QACvD;AACY,uBAAe,OAAO,KAAK,MAAM,MAAM,CAAC;AAAA,MACpD,WACiB,OAAO,WAAW,UAAU;AACjC,uBAAe;AAAA,MAC3B,OACa;AACD,cAAM,IAAI,MAAM,uBAAuB;AAAA,MACnD;AAAA,IACA,QACU;AACF,YAAM,IAAI,MAAM,uBAAuB;AAAA,IAC/C;AACI,QAAI,eAAe,IAAI;AACnB,YAAM,IAAI,MAAM,2BAA2B;AAAA,IACnD;AACI,WAAO;AAAA,EACX;;;;;;;;AClFA,SAAO,eAAe,aAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,cAAA,cAAsB;AAOtB,MAAI;AACJ,GAAC,SAAUE,cAAa;AAEpB,IAAAA,aAAY,eAAe,IAAI;AAE/B,IAAAA,aAAY,iBAAiB,IAAI;AAEjC,IAAAA,aAAY,eAAe,IAAI;AAE/B,IAAAA,aAAY,QAAQ,IAAI;AAAA,EAC5B,GAAG,gBAAgB,YAAA,cAAsB,cAAc,CAAA,EAAG;;;;;;;;ACZ1D,SAAO,eAAe,WAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,YAAA,wBAAgC,UAAA,iBAAyB;AAczD,MAAI;AACJ,GAAC,SAAUC,iBAAgB;AAEvB,IAAAA,gBAAe,YAAY,IAAI;AAE/B,IAAAA,gBAAe,aAAa,IAAI;AAEhC,IAAAA,gBAAe,aAAa,IAAI;AAEhC,IAAAA,gBAAe,YAAY,IAAI;AAE/B,IAAAA,gBAAe,gBAAgB,IAAI;AAEnC,IAAAA,gBAAe,cAAc,IAAI;AAEjC,IAAAA,gBAAe,aAAa,IAAI;AAEhC,IAAAA,gBAAe,eAAe,IAAI;AAElC,IAAAA,gBAAe,cAAc,IAAI;AAEjC,IAAAA,gBAAe,YAAY,IAAI;AAE/B,IAAAA,gBAAe,eAAe,IAAI;AAElC,IAAAA,gBAAe,eAAe,IAAI;AAElC,IAAAA,gBAAe,WAAW,IAAI;AAE9B,IAAAA,gBAAe,aAAa,IAAI;AAEhC,IAAAA,gBAAe,eAAe,IAAI;AAElC,IAAAA,gBAAe,mBAAmB,IAAI;AAEtC,IAAAA,gBAAe,uBAAuB,IAAI;AAE1C,IAAAA,gBAAe,qBAAqB,IAAI;AAExC,IAAAA,gBAAe,kBAAkB,IAAI;AAErC,IAAAA,gBAAe,kBAAkB,IAAI;AAErC,IAAAA,gBAAe,gBAAgB,IAAI;AAEnC,IAAAA,gBAAe,gBAAgB,IAAI;AAEnC,IAAAA,gBAAe,mBAAmB,IAAI;AAEtC,IAAAA,gBAAe,cAAc,IAAI;AAAA,EACrC,GAAG,mBAAmB,UAAA,iBAAyB,iBAAiB,CAAA,EAAG;AAAA,EAmBnE,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYxB,OAAO,YAAY,QAAQ,SAAS,QAAQ;AACxC,aAAO;AAAA,QACH;AAAA,QACA,UAAU;AAAA,QACV;AAAA,QACA,WAAW,KAAK,IAAG;AAAA;IAE/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWI,OAAO,SAAS,UAAU,UAAU;AAChC,aAAO;AAAA,QACH,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW,KAAK,IAAG;AAAA;IAE/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYI,OAAO,MAAM,WAAW,cAAc,UAAU;AAC5C,aAAO;AAAA,QACH,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,WAAW;AAAA,QACX,WAAW,KAAK,IAAG;AAAA;IAE/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaI,OAAO,aAAa,QAAQ,UAAU,QAAQC,WAAU;AACpD,aAAO;AAAA,QACH;AAAA,QACA,WAAW;AAAA,QACX;AAAA,QACA,UAAAA;AAAA,QACA,WAAW,KAAK,IAAG;AAAA;IAE/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYI,OAAO,WAAW,SAAS,aAAa,UAAU;AAC9C,aAAO;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,KAAK,IAAG;AAAA;IAE/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYI,OAAO,YAAY,QAAQ,OAAO,SAAS;AACvC,aAAO;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,KAAK,IAAG;AAAA;IAE/B;AAAA,EACA;AACA,YAAA,wBAAgC;;;;;;;;;ACvMhC,WAAO,eAAcP,WAAU,cAAc,EAAE,OAAO,MAAM;AAC5DA,cAAA,qBAA6BA,UAAA,eAAuBA,UAAA,YAAoB;AAExE,QAAI,UAAU5B,aAAA;AACd,WAAO,eAAe4B,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAU,EAAE,CAAE;AAIhH,QAAI;AACJ,KAAC,SAAUQ,eAAc;AACrB,MAAAA,cAAa,QAAQ,IAAI;AACzB,MAAAA,cAAa,aAAa,IAAI;AAAA,IAClC,GAAG,iBAAiBR,UAAA,eAAuB,eAAe,CAAA,EAAG;AAI7D,QAAI;AACJ,KAAC,SAAUS,qBAAoB;AAC3B,MAAAA,oBAAmB,UAAU,IAAI;AACjC,MAAAA,oBAAmB,kBAAkB,IAAI;AACzC,MAAAA,oBAAmB,eAAe,IAAI;AACtC,MAAAA,oBAAmB,mBAAmB,IAAI;AAC1C,MAAAA,oBAAmB,kBAAkB,IAAI;AACzC,MAAAA,oBAAmB,gBAAgB,IAAI;AACvC,MAAAA,oBAAmB,gBAAgB,IAAI;AACvC,MAAAA,oBAAmB,YAAY,IAAI;AACnC,MAAAA,oBAAmB,gBAAgB,IAAI;AACvC,MAAAA,oBAAmB,kBAAkB,IAAI;AACzC,MAAAA,oBAAmB,cAAc,IAAI;AACrC,MAAAA,oBAAmB,sBAAsB,IAAI;AAAA,IACjD,GAAG,uBAAuBT,UAAA,qBAA6B,qBAAqB,CAAA,EAAG;AAAA;;;;;;;;ACpC/E,SAAO,eAAe,SAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,UAAA,eAAuB;AAAA,EACvB,MAAM,qBAAqB,MAAM;AAAA,IAC7B,YAAY,SAAS,QAAQ,YAAY,UAAU;AAC/C,YAAM,OAAO;AACb,WAAK,OAAO;AACZ,WAAK,SAAS;AACd,WAAK,aAAa;AAClB,WAAK,WAAW;AAAA,IACxB;AAAA,EACA;AACA,UAAA,eAAuB;;;;;;;;ACZvB,SAAO,eAAe,QAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,SAAA,aAAqB;AAkBrB,MAAI;AACJ,GAAC,SAAUU,aAAY;AAEnB,IAAAA,YAAW,UAAU,IAAI;AAEzB,IAAAA,YAAW,SAAS,IAAI;AAExB,IAAAA,YAAW,UAAU,IAAI;AAEzB,IAAAA,YAAW,eAAe,IAAI;AAE9B,IAAAA,YAAW,UAAU,IAAI;AAAA,EAC7B,GAAG,eAAe,OAAA,aAAqB,aAAa,CAAA,EAAG;;;;;;;;AC9BvD,SAAO,eAAe,YAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,aAAA,sBAA8B;AAO9B,MAAI;AACJ,GAAC,SAAUC,sBAAqB;AAC5B,IAAAA,qBAAoB,MAAM,IAAI;AAC9B,IAAAA,qBAAoB,KAAK,IAAI;AAC7B,IAAAA,qBAAoB,OAAO,IAAI;AAAA,EACnC,GAAG,wBAAwB,WAAA,sBAA8B,sBAAsB,CAAA,EAAG;;;;;;;;ACZlF,SAAO,eAAe,QAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,SAAA,cAAsB,OAAA,eAAuB;AAI7C,SAAA,eAAuB;AAAA,IACnB,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,UAAU;AAAA;AAKd,SAAA,cAAsB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;;;;;;;;ACpBJ,SAAO,eAAe,cAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,eAAA,mBAA2B;AAK3B,eAAA,mBAA2B;;;;;;;;ACP3B,SAAO,eAAe,QAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,SAAA,mBAA2B,OAAA,aAAqB,OAAA,aAAqB;AASrE,MAAI;AACJ,GAAC,SAAUC,aAAY;AACnB,IAAAA,YAAW,UAAU,IAAI;AACzB,IAAAA,YAAW,cAAc,IAAI;AAAA,EACjC,GAAG,eAAe,OAAA,aAAqB,aAAa,CAAA,EAAG;AAQvD,MAAI;AACJ,GAAC,SAAUC,aAAY;AAEnB,IAAAA,YAAW,OAAO,IAAI;AAEtB,IAAAA,YAAW,SAAS,IAAI;AAExB,IAAAA,YAAW,QAAQ,IAAI;AAAA,EAC3B,GAAG,eAAe,OAAA,aAAqB,aAAa,CAAA,EAAG;AAIvD,MAAI;AACJ,GAAC,SAAUC,mBAAkB;AAEzB,IAAAA,kBAAiB,SAAS,IAAI;AAE9B,IAAAA,kBAAiB,UAAU,IAAI;AAE/B,IAAAA,kBAAiB,UAAU,IAAI;AAE/B,IAAAA,kBAAiB,SAAS,IAAI;AAAA,EAClC,GAAG,qBAAqB,OAAA,mBAA2B,mBAAmB,CAAA,EAAG;;;;;;;;;AC5CzE,WAAO,eAAcd,WAAU,cAAc,EAAE,OAAO,MAAM;AAC5DA,cAAA,mBAA2BA,UAAA,qBAA6BA,UAAA,sBAA8BA,UAAA,oBAA4B;AAClHA,cAAA,wBAAgC;AAChCA,cAAA,gBAAwB;AACxB,UAAM,WAAW5B,cAAA;AASjB4B,cAAA,oBAA4B;AAAA,MACxB,eAAe;AAAA,MACf,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,gBAAgB;AAAA;AAOpBA,cAAA,sBAA8B;AAAA,MAC1B,eAAe;AAAA,MACf,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,gBAAgB;AAAA;AAMpBA,cAAA,qBAA6B;AAAA,MACzB,eAAe;AAAA,MACf,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,gBAAgB;AAAA;AAMpBA,cAAA,mBAA2B;AAAA,MACvB,CAAC,SAAS,WAAW,KAAK,GAAGA,UAAQ;AAAA,MACrC,CAAC,SAAS,WAAW,OAAO,GAAGA,UAAQ;AAAA,MACvC,CAAC,SAAS,WAAW,MAAM,GAAGA,UAAQ;AAAA;AAU1C,aAAS,sBAAsB,MAAM;AACjC,aAAOA,UAAQ,iBAAiB,IAAI;AAAA,IACxC;AAOA,aAAS,cAAc,MAAM,YAAY;AACrC,aAAOA,UAAQ,iBAAiB,IAAI,EAAE,UAAU;AAAA,IACpD;AAAA;;;;;;;;ACnFA,SAAO,eAAe,uBAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,wBAAA,wBAAgC;AAEhC,QAAM,UAAU5B,aAAA;AAAA,EAChB,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,IAKxB,OAAO,SAAS+B,UAAS;AACrB,UAAI,CAACA,UAAS;AACV,eAAO;AAAA,MACnB;AAEQ,UAAI,KAAK,UAAU,KAAKA,QAAO,GAAG;AAC9B,eAAO;AAAA,UACH,MAAM;AAAA,UACN,SAASA,SAAQ,YAAW;AAAA,UAC5B,WAAW,QAAQ,UAAU;AAAA;MAE7C;AAEQ,UAAI,CAACA,SAAQ,WAAW,IAAI,KACxBA,SAAQ,UAAU,MAClBA,SAAQ,UAAU,MAClB,KAAK,aAAa,KAAKA,QAAO,GAAG;AACjC,eAAO;AAAA,UACH,MAAM;AAAA,UACN,SAASA;AAAA;AAAA,UACT,WAAW,QAAQ,UAAU;AAAA;MAE7C;AAEQ,WAAKA,SAAQ,cAAc,SAAS,MAAM,KACtCA,SAAQ,YAAW,EAAG,SAAS,MAAM,MACrCA,SAAQ,UAAU;AAAA,MAClB,KAAK,UAAU,KAAKA,QAAO,GAAG;AAC9B,eAAO;AAAA,UACH,MAAMA,SAAQ,YAAW;AAAA,UACzB,SAAS;AAAA,UACT,WAAW,QAAQ,UAAU;AAAA;AAAA;MAE7C;AAEQ,UAAIA,SAAQ,YAAW,EAAG,SAAS,GAAG,GAAG;AACrC,cAAM,QAAQA,SAAQ,YAAW,EAAG,MAAM,GAAG;AAC7C,YAAI,MAAM,WAAW,GAAG;AACpB,gBAAM,CAAC,MAAM,GAAG,IAAI;AACpB,cAAI,KAAK,eAAe,SAAS,GAAG,KAChC,KAAK,eAAe,KAAK,IAAI,KAC7B,KAAK,UAAU,GAAG;AAClB,mBAAO;AAAA,cACH,MAAMA,SAAQ,YAAW;AAAA,cACzB,SAAS;AAAA,cACT,WAAW,QAAQ,UAAU;AAAA;AAAA;UAErD;AAAA,QACA;AAAA,MACA;AAEQ,aAAO;AAAA,IACf;AAAA;AAAA;AAAA;AAAA,IAII,OAAO,kBAAkBA,UAAS;AAC9B,aAAO,KAAK,UAAU,KAAKA,QAAO;AAAA,IAC1C;AAAA;AAAA;AAAA;AAAA,IAII,OAAO,qBAAqBA,UAAS;AACjC,aAAQ,CAACA,SAAQ,WAAW,IAAI,KAC5BA,SAAQ,UAAU,MAClBA,SAAQ,UAAU,MAClB,KAAK,aAAa,KAAKA,QAAO;AAAA,IAC1C;AAAA;AAAA;AAAA;AAAA,IAII,OAAO,eAAeA,UAAS;AAC3B,cAASA,SAAQ,cAAc,SAAS,MAAM,KAC1CA,SAAQ,YAAW,EAAG,SAAS,MAAM,MACrCA,SAAQ,UAAU,KAClB,KAAK,UAAU,KAAKA,QAAO;AAAA,IACvC;AAAA;AAAA;AAAA;AAAA,IAII,OAAO,eAAeA,UAAS;AAC3B,UAAI,CAACA,SAAQ,cAAc,SAAS,GAAG;AACnC,eAAO;AACX,YAAM,QAAQA,SAAQ,YAAW,EAAG,MAAM,GAAG;AAC7C,UAAI,MAAM,WAAW;AACjB,eAAO;AACX,YAAM,CAAC,MAAM,GAAG,IAAI;AACpB,aAAQ,KAAK,eAAe,SAAS,GAAG,KACpC,KAAK,eAAe,KAAK,IAAI,KAC7B,KAAK,UAAU;AAAA,IAC3B;AAAA,EACA;AACA,wBAAA,wBAAgC;AAEhC,wBAAsB,YAAY;AAClC,wBAAsB,eAAe;AACrC,wBAAsB,YAAY;AAClC,wBAAsB,iBAAiB;AAEvC,wBAAsB,iBAAiB;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;;;;;;;;;AC1HJ,WAAO,eAAcH,WAAU,cAAc,EAAE,OAAO,MAAM;AAC5DA,cAAA,YAAoBA,4BAA0BA,UAAA,QAAgBA,UAAA,UAAkBA,wBAAsBA,UAAA,kBAA0BA,UAAA,oBAA4BA,0BAAwBA,UAAA,WAAmBA,UAAA,gBAAwBA,UAAA,wBAAgCA,UAAA,YAAoBA,oBAAkBA,UAAA,WAAmBA,UAAA,YAAoBA,qBAAmBA,UAAA,WAAmBA,UAAA,kBAA0B;AAI5Y,UAAM,kBAAkB,CAAC,cAAc,aAAa;AAChD,aAAO,CAAC,SAAS;AACb,YAAI;AACA,cAAI,aAAa,IAAI,GAAG;AACpB,mBAAO,EAAE,SAAS,MAAM,KAAI;AAAA,UAC5C;AACY,iBAAO,EAAE,SAAS,OAAO,OAAO,WAAW,QAAQ,IAAI,MAAM,KAAI;AAAA,QAC7E,SACe,OAAO;AACV,iBAAO;AAAA,YACH,SAAS;AAAA,YACT,OAAO,wBAAwB,QAAQ,KAAK,iBAAiB,QAAQ,MAAM,UAAU,eAAe;AAAA,YACpG,MAAM;AAAA;QAEtB;AAAA,MACA;AAAA,IACA;AACAA,cAAA,kBAA0B;AAI1B,UAAM,WAAW,CAAC,UAAU,OAAO,UAAU;AAC7CA,cAAA,WAAmB;AACnB,UAAM,WAAW,CAAC,UAAU,OAAO,UAAU,YAAY,CAAC,MAAM,KAAK;AACrEA,cAAA,WAAmB;AACnB,UAAM,YAAY,CAAC,UAAU,OAAO,UAAU;AAC9CA,cAAA,YAAoB;AACpB,UAAM,WAAW,CAAC,UAAU,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC/FA,cAAA,WAAmB;AACnB,UAAM,UAAU,CAAC,UAAU,MAAM,QAAQ,KAAK;AAC9CA,cAAA,UAAkB;AAClB,UAAM,YAAY,CAAC,UAAU,UAAU,QAAQ,UAAU;AACzDA,cAAA,YAAoB;AAIpB,UAAM,wBAAwB,CAAC,KAAK,kBAAkB;AAClD,UAAI,EAAC,GAAIA,UAAQ,UAAU,GAAG;AAC1B,eAAO;AACX,aAAO,cAAc,MAAM,CAAC,SAAS,QAAQ,GAAG;AAAA,IACpD;AACAA,cAAA,wBAAgC;AAIhC,UAAM,gBAAgB,CAAC,MAAM,kBAAkB;AAC3C,UAAI,EAAC,GAAIA,UAAQ,SAAS,IAAI;AAC1B,eAAO;AACX,aAAO,KAAK,MAAM,aAAa;AAAA,IACnC;AACAA,cAAA,gBAAwB;AAIxB,UAAM,WAAW,CAAC,cAAc,CAAC,UAAU;AACvC,aAAO,UAAU,UAAa,UAAU,KAAK;AAAA,IACjD;AACAA,cAAA,WAAmB;AAInB,UAAM,gBAAgB,CAAC,SAAS;AAC5B,cAAO,GAAIA,UAAQ,UAAU,IAAI,MAAK,GAAIA,UAAQ,WAAW,KAAK,OAAO;AAAA,IAC7E;AACAA,cAAA,gBAAwB;AACxB,UAAM,oBAAoB,CAAC,MAAM,kBAAkB;AAC/C,UAAI,EAAC,GAAIA,UAAQ,eAAe,IAAI,KAAK,CAAC,KAAK;AAC3C,eAAO;AACX,UAAI,iBAAiB,UAAU,MAAM;AACjC,eAAO,cAAc,KAAK,IAAI;AAAA,MACtC;AACI,aAAO;AAAA,IACX;AACAA,cAAA,oBAA4B;AAC5B,UAAM,kBAAkB,CAAC,SAAS;AAC9B,cAAQ,GAAIA,UAAQ,eAAe,IAAI,KACnC,CAAC,KAAK,WACN,WAAW,SACX,GAAIA,UAAQ,UAAU,KAAK,KAAK;AAAA,IACxC;AACAA,cAAA,kBAA0B;AAI1B,UAAM,cAAc,CAAC,UAAU;AAC3B,UAAI,EAAC,GAAIA,UAAQ,UAAU,KAAK;AAC5B,eAAO;AACX,YAAMe,QAAO,IAAI,KAAK,KAAK;AAC3B,aAAO,CAAC,MAAMA,MAAK,SAAS;AAAA,IAChC;AACAf,cAAA,cAAsB;AAItB,UAAM,UAAU,CAAC,UAAU;AACvB,UAAI,EAAC,GAAIA,UAAQ,UAAU,KAAK;AAC5B,eAAO;AACX,YAAM,aAAa;AACnB,aAAO,WAAW,KAAK,KAAK;AAAA,IAChC;AACAA,cAAA,UAAkB;AAIlB,UAAM,QAAQ,CAAC,UAAU;AACrB,UAAI,EAAC,GAAIA,UAAQ,UAAU,KAAK;AAC5B,eAAO;AACX,UAAI;AACA,YAAI,IAAI,KAAK;AACb,eAAO;AAAA,MACf,QACU;AACF,eAAO;AAAA,MACf;AAAA,IACA;AACAA,cAAA,QAAgB;AAIhB,UAAM,kBAAkB,CAAC,WAAW,aAAa;AAC7C,aAAO,CAAC,MAAM,UAAU,aAAa;AACjC,YAAI,CAAC,UAAU,IAAI,GAAG;AAClB,gBAAM,IAAI,UAAU,WAAW,OAAO,cAAc,QAAQ,EAAE;AAAA,QAC1E;AAAA,MACA;AAAA,IACA;AACAA,cAAA,kBAA0B;AAI1B,UAAM,YAAY,CAAC,YAAY,cAAc;AACzC,UAAI;AACA,cAAM,SAAS,KAAK,MAAM,UAAU;AACpC,YAAI,WAAW;AACX,cAAI,UAAU,MAAM,GAAG;AACnB,mBAAO,EAAE,SAAS,MAAM,MAAM,OAAM;AAAA,UACpD;AACY,iBAAO;AAAA,YACH,SAAS;AAAA,YACT,OAAO;AAAA,YACP,MAAM;AAAA;QAEtB;AACQ,eAAO,EAAE,SAAS,MAAM,MAAM,OAAM;AAAA,MAC5C,SACW,OAAO;AACV,eAAO;AAAA,UACH,SAAS;AAAA,UACT,OAAO,qBAAqB,iBAAiB,QAAQ,MAAM,UAAU,eAAe;AAAA,UACpF,MAAM;AAAA;MAElB;AAAA,IACA;AACAA,cAAA,YAAoB;AAAA;;;;;;;;ACxJpB,SAAO,eAAe,cAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,eAAA,qBAA6B;AAC7B,eAAA,yBAAiC;AACjC,eAAA,qBAA6B;AAC7B,eAAA,qBAA6B;AAC7B,eAAA,mBAA2B;AAC3B,eAAA,eAAuB;AACvB,eAAA,gBAAwB;AACxB,eAAA,YAAoB;AACpB,eAAA,oBAA4B;AAkB5B,WAAS,mBAAmB,SAAS,QAAQ,UAAU;AACnD,WAAO,GAAG,OAAO,IAAI,MAAM,IAAI,QAAQ;AAAA,EAC3C;AAcA,WAAS,uBAAuB,SAASG,UAAS;AAC9C,WAAO,GAAG,OAAO,IAAIA,SAAQ,YAAW,CAAE;AAAA,EAC9C;AAOA,WAAS,mBAAmB,SAAS;AACjC,WAAO,GAAG,OAAO;AAAA,EACrB;AAQA,WAAS,mBAAmB,kBAAkBa,YAAW;AACrD,WAAO,GAAG,iBAAiB,YAAW,CAAE,IAAIA,UAAS;AAAA,EACzD;AAOA,WAAS,iBAAiBb,UAAS;AAC/B,WAAOA,SAAQ,YAAW;AAAA,EAC9B;AAIA,WAAS,aAAa,OAAO,WAAW,IAAI;AACxC,UAAM,UAAU,OAAO,MAAM,QAAQ;AACrC,UAAM,QAAQ,QAAQ;AACtB,UAAM,WAAW,QAAQ;AACzB,QAAI,aAAa,IAAI;AACjB,aAAO,MAAM,SAAQ;AAAA,IAC7B;AACI,WAAO,GAAG,KAAK,IAAI,SAAS,SAAQ,EAAG,SAAS,UAAU,GAAG,EAAE,QAAQ,OAAO,EAAE,CAAC;AAAA,EACrF;AAIA,WAAS,cAAcA,UAAS;AAC5B,WAAOA,SAAQ,YAAW,MAAO;AAAA,EACrC;AAMA,WAAS,UAAU,SAAS;AAExB,UAAM,cAAc,oBAAI,IAAI;AAAA,MACxB;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,IACR,CAAK;AAED,UAAM,iBAAiB,oBAAI,IAAI;AAAA,MAC3B;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,IACR,CAAK;AACD,WAAO,YAAY,IAAI,OAAO,KAAK,eAAe,IAAI,OAAO;AAAA,EACjE;AAIA,WAAS,kBAAkB,MAAM,gBAAgB;AAC7C,eAAW,SAAS,gBAAgB;AAChC,UAAI,KAAK,KAAK,MAAM,UAAa,KAAK,KAAK,MAAM,MAAM;AACnD,gBAAQ,MAAM,6BAA6B,OAAO,KAAK,CAAC,EAAE;AAC1D,eAAO;AAAA,MACnB;AAAA,IACA;AACI,WAAO;AAAA,EACX;;;;;;;;ACzIA,SAAO,eAAe,MAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,OAAA,sBAA8B;AAC9B,OAAA,gBAAwB;AACxB,OAAA,oBAA4B;AAC5B,OAAA,6BAAqC;AACrC,OAAA,wBAAgC;AAChC,OAAA,gBAAwB;AACxB,OAAA,0BAAkC;AAClC,OAAA,eAAuB;AACvB,QAAM,UAAU/B,aAAA;AAOhB,WAAS,oBAAoB,aAAa,OAAO;AAC7C,UAAM,cAAc,SAAS,GAAG,KAAK,IAAG,CAAE,IAAI,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC;AACrF,WAAO,qBAAqB,WAAW;AAAA,SAAY,WAAW;AAAA,EAClE;AAMA,WAAS,cAAc,WAAW,kBAAkB,IAAI;AACpD,UAAM,iBAAiB,IAAI,KAAK,UAAU,QAAO,IAAK,kBAAkB,KAAK,KAAK,GAAI;AACtF,WAAO,oBAAI,KAAI,IAAK;AAAA,EACxB;AAIA,WAAS,kBAAkB,QAAQ;AAC/B,YAAQ,QAAM;AAAA,MACV,KAAK,QAAQ,WAAW;AACpB,eAAO;AAAA,MACX,KAAK,QAAQ,WAAW;AACpB,eAAO;AAAA,MACX,KAAK,QAAQ,WAAW;AACpB,eAAO;AAAA,MACX;AACI,eAAO;AAAA,IACnB;AAAA,EACA;AAIA,WAAS,2BAA2B,QAAQ;AACxC,WAAO,WAAW,QAAQ,WAAW;AAAA,EACzC;AAIA,WAAS,sBAAsB,QAAQ;AACnC,WAAO,WAAW,QAAQ,WAAW,aAAa,WAAW,QAAQ,WAAW;AAAA,EACpF;AAIA,WAAS,gBAAgB;AACrB,WAAO,GAAG,KAAK,IAAG,CAAE,IAAI,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC;AAAA,EACnE;AAIA,WAAS,wBAAwB,SAAS;AACtC,UAAM,QAAQ,QAAQ,MAAM,iBAAiB;AAC7C,WAAO,QAAQ,MAAM,CAAC,EAAE,KAAI,IAAK;AAAA,EACrC;AAIA,WAAS,aAAa,OAAO;AACzB,QAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACrC,aAAO;AAAA,IACf;AAEI,QAAI,MAAM,SAAS,IAAI;AACnB,aAAO;AAAA,IACf;AAEI,UAAM,QAAQ,MAAM,MAAM,GAAG;AAC7B,QAAI,MAAM,UAAU,GAAG;AACnB,YAAM,YAAY,SAAS,MAAM,CAAC,GAAG,EAAE;AACvC,UAAI,CAAC,MAAM,SAAS,GAAG;AAEnB,cAAM,YAAY,KAAK,IAAG,IAAK,KAAK,KAAK,KAAK;AAC9C,YAAI,YAAY,WAAW;AACvB,iBAAO;AAAA,QACvB;AAAA,MACA;AAAA,IACA;AACI,WAAO;AAAA,EACX;;;;;;;;AC1FA,SAAO,eAAe,aAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,cAAA,mBAA2B;AAC3B,cAAA,eAAuB;AACvB,cAAA,qBAA6B;AAa7B,WAAS,iBAAiB,OAAO;AAC7B,QAAI,CAAC,OAAO;AACR,aAAO,CAAA;AAAA,IACf;AACI,WAAO,MACF,MAAM,GAAG,EACT,IAAI,CAAC,UAAU,MAAM,KAAI,EAAG,YAAW,CAAE,EACzC,OAAO,CAAC,UAAU,MAAM,SAAS,KAAK,MAAM,SAAS,GAAG,CAAC;AAAA,EAClE;AAgBA,WAAS,aAAa,OAAO6C,cAAa;AACtC,QAAI,CAAC,OAAO;AACR,aAAO;AAAA,IACf;AACI,WAAOA,aAAY,SAAS,MAAM,YAAW,CAAE;AAAA,EACnD;AAoBA,WAAS,mBAAmB,OAAO;AAC/B,UAAMA,eAAc,iBAAiB,KAAK;AAC1C,WAAO,CAAC,UAAU;AACd,aAAO,aAAa,OAAOA,YAAW;AAAA,IAC9C;AAAA,EACA;;;;;;;;;ACzEA,WAAO,eAAcjB,WAAU,cAAc,EAAE,OAAO,MAAM;AAC5DA,cAAA,oBAA4BA,UAAA,gBAAwB;AACpDA,cAAA,aAAqB;AACrBA,cAAA,YAAoB;AAEpBA,cAAA,gBAAwB;AACxBA,cAAA,oBAA4B;AAU5B,aAAS,WAAW,QAAQ;AACxB,cAAQ,SAAS,KAAK,IAAI,IAAIA,UAAQ,aAAa,GAAG,QAAQ,CAAC;AAAA,IACnE;AAUA,aAAS,UAAU,QAAQ;AACvB,aAAO,KAAK,MAAM,WAAW,MAAM,IAAI,KAAK,IAAI,IAAIA,UAAQ,aAAa,CAAC;AAAA,IAC9E;AAAA;;;;;;;;AC9BA,SAAO,eAAe,MAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,OAAA,kBAA0B;AAC1B,OAAA,kBAA0B;AAC1B,OAAA,qBAA6B;AAC7B,OAAA,YAAoB;AACpB,OAAA,gBAAwB;AACxB,OAAA,UAAkB;AAClB,OAAA,WAAmB;AAInB,WAAS,gBAAgBe,OAAM;AAC3B,UAAM,UAAU,OAAOA,UAAS,WAAW,IAAI,KAAKA,KAAI,IAAIA;AAC5D,QAAI,MAAM,QAAQ,QAAO,CAAE,GAAG;AAC1B,aAAO;AAAA,IACf;AACI,UAAM,MAAM,oBAAI,KAAI;AACpB,UAAM,SAAS,IAAI,QAAO,IAAK,QAAQ,QAAO;AAC9C,UAAM,WAAW,KAAK,MAAM,UAAU,MAAO,KAAK,KAAK,GAAG;AAE1D,QAAI,aAAa,GAAG;AAChB,aAAO,QAAQ,mBAAmB,SAAS;AAAA,QACvC,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,QAAQ;AAAA,MACpB,CAAS;AAAA,IACT;AAEI,QAAI,aAAa,GAAG;AAChB,aAAO;AAAA,IACf;AAEI,QAAI,WAAW,GAAG;AACd,aAAO,QAAQ,mBAAmB,SAAS;AAAA,QACvC,SAAS;AAAA,MACrB,CAAS;AAAA,IACT;AAEI,QAAI,QAAQ,YAAW,MAAO,IAAI,YAAW,GAAI;AAC7C,aAAO,QAAQ,mBAAmB,SAAS;AAAA,QACvC,OAAO;AAAA,QACP,KAAK;AAAA,MACjB,CAAS;AAAA,IACT;AAEI,WAAO,QAAQ,mBAAmB,SAAS;AAAA,MACvC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,IACb,CAAK;AAAA,EACL;AAIA,WAAS,gBAAgB,WAAW;AAChC,WAAO,IAAI,KAAK,SAAS,EAAE,YAAW;AAAA,EAC1C;AAIA,WAAS,mBAAmBA,OAAM;AAC9B,UAAM,UAAU,OAAOA,UAAS,YAAY,OAAOA,UAAS,WACtD,IAAI,KAAKA,KAAI,IACbA;AACN,QAAI,MAAM,QAAQ,QAAO,CAAE,GAAG;AAC1B,aAAO;AAAA,IACf;AACI,UAAM,MAAM,oBAAI,KAAI;AACpB,UAAM,SAAS,IAAI,QAAO,IAAK,QAAQ,QAAO;AAC9C,UAAM,cAAc,KAAK,MAAM,SAAS,GAAI;AAC5C,UAAM,cAAc,KAAK,MAAM,cAAc,EAAE;AAC/C,UAAM,YAAY,KAAK,MAAM,cAAc,EAAE;AAC7C,UAAM,WAAW,KAAK,MAAM,YAAY,EAAE;AAC1C,UAAM,YAAY,KAAK,MAAM,WAAW,CAAC;AACzC,UAAM,aAAa,KAAK,MAAM,WAAW,EAAE;AAC3C,UAAM,YAAY,KAAK,MAAM,WAAW,GAAG;AAC3C,QAAI,cAAc,IAAI;AAClB,aAAO;AAAA,IACf;AACI,QAAI,cAAc,IAAI;AAClB,aAAO,gBAAgB,IAAI,iBAAiB,GAAG,WAAW;AAAA,IAClE;AACI,QAAI,YAAY,IAAI;AAChB,aAAO,cAAc,IAAI,eAAe,GAAG,SAAS;AAAA,IAC5D;AACI,QAAI,WAAW,GAAG;AACd,aAAO,aAAa,IAAI,cAAc,GAAG,QAAQ;AAAA,IACzD;AACI,QAAI,YAAY,GAAG;AACf,aAAO,cAAc,IAAI,eAAe,GAAG,SAAS;AAAA,IAC5D;AACI,QAAI,aAAa,IAAI;AACjB,aAAO,eAAe,IAAI,gBAAgB,GAAG,UAAU;AAAA,IAC/D;AACI,WAAO,cAAc,IAAI,eAAe,GAAG,SAAS;AAAA,EACxD;AAIA,WAAS,UAAU,YAAY;AAC3B,QAAI;AACA,YAAMA,QAAO,IAAI,KAAK,UAAU;AAChC,UAAI,MAAMA,MAAK,QAAO,CAAE,GAAG;AACvB,eAAO;AAAA,MACnB;AACQ,aAAOA;AAAA,IACf,QACU;AACF,aAAO;AAAA,IACf;AAAA,EACA;AAIA,WAAS,cAAcA,OAAM,WAAW,SAAS;AAC7C,WAAOA,SAAQ,aAAaA,SAAQ;AAAA,EACxC;AAIA,WAAS,QAAQA,OAAM,MAAM;AACzB,UAAM,SAAS,IAAI,KAAKA,KAAI;AAC5B,WAAO,QAAQ,OAAO,QAAO,IAAK,IAAI;AACtC,WAAO;AAAA,EACX;AAIA,WAAS,SAASA,OAAM,OAAO;AAC3B,UAAM,SAAS,IAAI,KAAKA,KAAI;AAC5B,WAAO,SAAS,OAAO,SAAQ,IAAK,KAAK;AACzC,WAAO;AAAA,EACX;;;;;;;;ACpIA,SAAO,eAAe,QAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,SAAA,WAAmB;AACnB,SAAA,aAAqB;AACrB,SAAA,cAAsB;AACtB,SAAA,cAAsB;AACtB,SAAA,cAAsB;AACtB,SAAA,cAAsB;AACtB,SAAA,sBAA8B;AAC9B,SAAA,UAAkB;AAClB,SAAA,aAAqB;AACrB,SAAA,aAAqB;AACrB,SAAA,YAAoB;AACpB,SAAA,cAAsB;AACtB,SAAA,cAAsB;AACtB,SAAA,eAAuB;AACvB,SAAA,YAAoB;AACpB,SAAA,eAAuB;AAIvB,WAAS,SAAS,KAAK,WAAW,SAAS,OAAO;AAC9C,QAAI,CAAC,OAAO,IAAI,UAAU,WAAW;AACjC,aAAO;AAAA,IACf;AACI,WAAO,IAAI,MAAM,GAAG,YAAY,OAAO,MAAM,IAAI;AAAA,EACrD;AAIA,WAAS,WAAW,KAAK;AACrB,QAAI,CAAC;AACD,aAAO;AACX,WAAO,IAAI,OAAO,CAAC,EAAE,YAAW,IAAK,IAAI,MAAM,CAAC;AAAA,EACpD;AAIA,WAAS,YAAY,KAAK;AACtB,QAAI,CAAC;AACD,aAAO;AACX,WAAO,IACF,YAAW,EACX,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,WAAW,IAAI,CAAC,EAC9B,KAAK,GAAG;AAAA,EACjB;AAIA,WAAS,YAAY,KAAK;AACtB,QAAI,CAAC;AACD,aAAO;AACX,WAAO,IACF,QAAQ,mBAAmB,OAAO,EAClC,QAAQ,WAAW,GAAG,EACtB,YAAW;AAAA,EACpB;AAIA,WAAS,YAAY,KAAK;AACtB,QAAI,CAAC;AACD,aAAO;AACX,WAAO,IACF,QAAQ,gBAAgB,CAAC,GAAG,SAAU,OAAO,KAAK,YAAW,IAAK,EAAG,EACrE,QAAQ,MAAM,CAAC,SAAS,KAAK,YAAW,CAAE;AAAA,EACnD;AAIA,WAAS,YAAY,KAAK;AACtB,QAAI,CAAC;AACD,aAAO;AACX,WAAO,IACF,QAAQ,mBAAmB,OAAO,EAClC,QAAQ,WAAW,GAAG,EACtB,YAAW;AAAA,EACpB;AAIA,WAAS,oBAAoB,KAAK;AAC9B,QAAI,CAAC;AACD,aAAO;AACX,WAAO,IAAI,QAAQ,QAAQ,GAAG,EAAE,KAAI;AAAA,EACxC;AAIA,WAAS,QAAQ,KAAK;AAClB,WAAO,CAAC,OAAO,IAAI,KAAI,EAAG,WAAW;AAAA,EACzC;AAIA,WAAS,WAAW,KAAK;AACrB,WAAO,CAAC,QAAQ,GAAG;AAAA,EACvB;AAIA,WAAS,WAAW,KAAK;AACrB,QAAI,CAAC;AACD,aAAO;AACX,UAAM,cAAc;AAAA,MAChB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA;AAET,WAAO,IAAI,QAAQ,YAAY,CAAC,SAAS,YAAY,IAAI,CAAC;AAAA,EAC9D;AAIA,WAAS,UAAU,KAAK;AACpB,QAAI,CAAC;AACD,aAAO;AACX,WAAO,IAAI,QAAQ,YAAY,EAAE;AAAA,EACrC;AAIA,WAAS,YAAY,MAAM,cAAc,GAAG;AACxC,QAAI,CAAC;AACD,aAAO;AACX,UAAM,QAAQ,KAAK,KAAI,EAAG,MAAM,KAAK;AACrC,UAAM,WAAW,MACZ,MAAM,GAAG,WAAW,EACpB,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,YAAW,CAAE,EAC1C,KAAK,EAAE;AACZ,WAAO;AAAA,EACX;AAIA,WAAS,YAAY,OAAO,WAAW,GAAG;AACtC,QAAI,UAAU;AACV,aAAO;AACX,UAAM,IAAI;AACV,UAAM,KAAK,WAAW,IAAI,IAAI;AAC9B,UAAM,QAAQ,CAAC,SAAS,MAAM,MAAM,MAAM,MAAM,IAAI;AACpD,UAAM,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC;AAClD,WAAO,YAAY,QAAQ,KAAK,IAAI,GAAG,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,MAAM,MAAM,CAAC;AAAA,EAC3E;AAIA,WAAS,aAAa,QAAQ,UAAU,gBAAgB;AACpD,QAAI;AACJ,YAAQ,SAAO;AAAA,MACX,KAAK;AACD,gBAAQ;AACR;AAAA,MACJ,KAAK;AACD,gBAAQ;AACR;AAAA,MACJ,KAAK;AACD,gBAAQ;AACR;AAAA,MACJ,KAAK;AACD,gBAAQ;AACR;AAAA,MACJ;AACI,gBAAQ;AAAA,IACpB;AACI,QAAI,SAAS;AACb,aAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B,gBAAU,MAAM,OAAO,KAAK,MAAM,KAAK,OAAM,IAAK,MAAM,MAAM,CAAC;AAAA,IACvE;AACI,WAAO;AAAA,EACX;AAIA,WAAS,UAAU,OAAO,UAAU,QAAQ;AACxC,QAAI,UAAU,GAAG;AACb,aAAO;AAAA,IACf;AACI,WAAO,UAAU,GAAG,QAAQ;AAAA,EAChC;AAIA,WAAS,aAAa,KAAK;AACvB,WAAO,IAAI,SAAQ,EAAG,QAAQ,yBAAyB,GAAG;AAAA,EAC9D;;;;;;;;AC1LA,SAAO,eAAe,aAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,cAAA,UAAkB,YAAA,YAAoB,YAAA,cAAsB,YAAA,eAAuB,YAAA,eAAuB,qBAAiB,YAAA,mBAA2B,YAAA,iBAAyB,YAAA,cAAsB,YAAA,qBAA6B,YAAA,eAAuB,YAAA,eAAuB,yBAAqB,YAAA,cAAsB,YAAA,kBAA0B,YAAA,qBAA6B,YAAA,cAAsB;AAExY,QAAM,cAAc;AACpB,cAAA,cAAsB;AACtB,QAAM,qBAAqB;AAC3B,cAAA,qBAA6B;AAC7B,QAAM,kBAAkB;AACxB,cAAA,kBAA0B;AAE1B,QAAM,cAAc;AAAA,IAChB,cAAc;AAAA,IACd,WAAW;AAAA,IACX,UAAU;AAAA;AAEd,cAAA,cAAsB;AAEtB,QAAM,aAAa;AAAA,IACf,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,SAAS;AAAA;AAEb,cAAA,aAAqB;AAErB,QAAM,eAAe;AAAA,IACjB,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,OAAO;AAAA,IACP,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,YAAY;AAAA;AAEhB,cAAA,eAAuB;AAEvB,QAAM,eAAe;AAAA,IACjB,qBAAqB,KAAK,OAAO;AAAA;AAAA,IACjC,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA;AAAA,IAClB,uBAAuB;AAAA;AAAA;AAE3B,cAAA,eAAuB;AAEvB,QAAM,qBAAqB;AAAA,IACvB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,YAAY;AAAA;AAEhB,cAAA,qBAA6B;AAE7B,QAAM,cAAc;AAAA,IAChB,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA;AAEd,cAAA,cAAsB;AAEtB,QAAM,iBAAiB;AAAA,IACnB,sBAAsB;AAAA,IACtB,iBAAiB;AAAA,IACjB,eAAe;AAAA,IACf,uBAAuB;AAAA,IACvB,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,mBAAmB;AAAA;AAEvB,cAAA,iBAAyB;AAEzB,QAAM,mBAAmB;AAAA,IACrB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,mBAAmB;AAAA,IACnB,kBAAkB;AAAA,IAClB,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB,wBAAwB;AAAA;AAE5B,cAAA,mBAA2B;AAE3B,QAAM,SAAS;AAAA,IACX,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,OAAO;AAAA,IACP,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,eAAe;AAAA;AAEnB,cAAA,SAAiB;AAEjB,QAAM,eAAe;AAAA,IACjB,eAAe;AAAA,IACf,eAAe;AAAA;AAEnB,cAAA,eAAuB;AAEvB,QAAM,eAAe;AAAA,IACjB,UAAU;AAAA,IACV,eAAe;AAAA,IACf,UAAU;AAAA,IACV,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA;AAEZ,cAAA,eAAuB;AAEvB,QAAM,cAAc;AAAA,IAChB,kBAAkB;AAAA,IAClB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,eAAe;AAAA;AAEnB,cAAA,cAAsB;AAEtB,QAAM,YAAY;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA;AAEf,cAAA,YAAoB;AAEpB,QAAM,UAAU;AAAA,IACZ,UAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO;AAAA;AAEX,cAAA,UAAkB;;;;;;;;ACrJlB,SAAO,eAAe,cAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,eAAA,gBAAwB;AAKxB,eAAA,gBAAwB;AAAA,IACpB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,OAAO;AAAA;;;;;;;;ACNX,SAAO,eAAeG,QAAS,cAAc,EAAE,OAAO,MAAM;AAC5DA,SAAA,gBAAwBA,OAAA,YAAoBA,OAAA,iBAAyBA,OAAA,YAAoBA,OAAA,aAAqBA,OAAA,SAAiBA,OAAA,WAAmB;AAClJ,MAAI;AACJ,GAAC,SAAUC,WAAU;AACjB,IAAAA,UAAS,OAAO,IAAI;AACpB,IAAAA,UAAS,MAAM,IAAI;AACnB,IAAAA,UAAS,MAAM,IAAI;AACnB,IAAAA,UAAS,OAAO,IAAI;AAAA,EACxB,GAAG,aAAaD,OAAA,WAAmB,WAAW,CAAA,EAAG;AAAA,EACjD,MAAM,OAAO;AAAA,IACT,cAAc;AACV,WAAK,gBAAgB,QAAQ,IAAI,aAAa;AAAA,IACtD;AAAA,IACI,kBAAkB;AACd,cAAO,oBAAI,KAAI,GAAG,YAAW;AAAA,IACrC;AAAA,IACI,cAAc,QAAQ,SAAS,SAAS;AACpC,YAAM,YAAY,KAAK,gBAAe;AACtC,YAAM,aAAa,UAAU,KAAK,OAAO,MAAM;AAC/C,aAAO,IAAI,SAAS,IAAI,UAAU,IAAI,OAAO;AAAA,IACrD;AAAA,IACI,UAAU,OAAO;AAEb,UAAI,CAAC,KAAK,eAAe;AACrB,eAAO,UAAU,SAAS,SAAS,UAAU,SAAS;AAAA,MAClE;AACQ,aAAO;AAAA,IACf;AAAA,IACI,MAAM,SAAS,SAAS,MAAM;AAC1B,UAAI,KAAK,UAAU,SAAS,KAAK,GAAG;AAChC,gBAAQ,MAAM,KAAK,cAAc,SAAS,OAAO,SAAS,OAAO,CAAC;AAClE,YAAI,MAAM;AACN,kBAAQ,MAAM,IAAI;AAAA,QAClC;AAAA,MACA;AAAA,IACA;AAAA,IACI,KAAK,SAAS,SAAS,MAAM;AACzB,UAAI,KAAK,UAAU,SAAS,IAAI,GAAG;AAC/B,gBAAQ,KAAK,KAAK,cAAc,SAAS,MAAM,SAAS,OAAO,CAAC;AAChE,YAAI,MAAM;AACN,kBAAQ,KAAK,IAAI;AAAA,QACjC;AAAA,MACA;AAAA,IACA;AAAA,IACI,KAAK,SAAS,SAAS,MAAM;AACzB,UAAI,KAAK,UAAU,SAAS,IAAI,GAAG;AAC/B,gBAAQ,IAAI,KAAK,cAAc,SAAS,MAAM,SAAS,OAAO,CAAC;AAC/D,YAAI,MAAM;AACN,kBAAQ,IAAI,IAAI;AAAA,QAChC;AAAA,MACA;AAAA,IACA;AAAA,IACI,MAAM,SAAS,SAAS,MAAM;AAC1B,UAAI,KAAK,UAAU,SAAS,KAAK,GAAG;AAChC,gBAAQ,IAAI,KAAK,cAAc,SAAS,OAAO,SAAS,OAAO,CAAC;AAChE,YAAI,MAAM;AACN,kBAAQ,IAAI,IAAI;AAAA,QAChC;AAAA,MACA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAII,YAAY,SAAS;AACjB,aAAO;AAAA,QACH,OAAO,CAAC,SAAS,SAAS,KAAK,MAAM,SAAS,SAAS,IAAI;AAAA,QAC3D,MAAM,CAAC,SAAS,SAAS,KAAK,KAAK,SAAS,SAAS,IAAI;AAAA,QACzD,MAAM,CAAC,SAAS,SAAS,KAAK,KAAK,SAAS,SAAS,IAAI;AAAA,QACzD,OAAO,CAAC,SAAS,SAAS,KAAK,MAAM,SAAS,SAAS,IAAI;AAAA;IAEvE;AAAA,EACA;AAEA,QAAME,WAAS,IAAI,OAAM;AACzBF,SAAA,SAAiBE;AAEjB,QAAM,aAAaA,SAAO,YAAY,MAAM;AAC5CF,SAAA,aAAqB;AACrB,QAAM,YAAYE,SAAO,YAAY,KAAK;AAC1CF,SAAA,YAAoB;AACpB,QAAM,iBAAiBE,SAAO,YAAY,UAAU;AACpDF,SAAA,iBAAyB;AACzB,QAAM,YAAYE,SAAO,YAAY,KAAK;AAC1CF,SAAA,YAAoB;AACpB,QAAM,gBAAgBE,SAAO,YAAY,SAAS;AAClDF,SAAA,gBAAwB;;;;;;;;ACrFxB,SAAO,eAAe,WAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,YAAA,wBAAgC;AAChC,YAAA,qBAA6B;AAC7B,YAAA,uBAA+B;AAC/B,YAAA,oBAA4B;AAAA,EAI5B,MAAM,sBAAsB;AAAA,IACxB,YAAY,MAAM;AACd,WAAK,SAAS,oBAAI,IAAG;AACrB,UAAI,MAAM;AACN,YAAI,OAAO,SAAS,UAAU;AAC1B,eAAK,YAAY,IAAI;AAAA,QACrC,WACqB,MAAM,QAAQ,IAAI,GAAG;AAC1B,qBAAW,CAAC,KAAK,KAAK,KAAK,MAAM;AAC7B,iBAAK,OAAO,KAAK,KAAK;AAAA,UAC1C;AAAA,QACA,OACiB;AACD,qBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,IAAI,GAAG;AAC7C,gBAAI,UAAU,QAAW;AACrB,mBAAK,OAAO,KAAK,KAAK;AAAA,YAC9C;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,IACI,YAAY,KAAK;AACb,YAAM,SAAS,IAAI,WAAW,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI;AACpD,UAAI,CAAC;AACD;AACJ,iBAAW,QAAQ,OAAO,MAAM,GAAG,GAAG;AAClC,cAAM,CAAC,KAAK,QAAQ,EAAE,IAAI,KAAK,MAAM,GAAG;AACxC,YAAI,KAAK;AACL,eAAK,OAAO,mBAAmB,GAAG,GAAG,mBAAmB,KAAK,CAAC;AAAA,QAC9E;AAAA,MACA;AAAA,IACA;AAAA,IACI,OAAO,MAAM,OAAO;AAChB,UAAI,CAAC,KAAK,OAAO,IAAI,IAAI,GAAG;AACxB,aAAK,OAAO,IAAI,MAAM,CAAA,CAAE;AAAA,MACpC;AACQ,YAAM,iBAAiB,KAAK,OAAO,IAAI,IAAI;AAC3C,UAAI,gBAAgB;AAChB,uBAAe,KAAK,KAAK;AAAA,MACrC;AAAA,IACA;AAAA,IACI,OAAO,MAAM;AACT,WAAK,OAAO,OAAO,IAAI;AAAA,IAC/B;AAAA,IACI,IAAI,MAAM;AACN,YAAM,SAAS,KAAK,OAAO,IAAI,IAAI;AACnC,aAAO,UAAU,OAAO,SAAS,IAAI,OAAO,CAAC,IAAI;AAAA,IACzD;AAAA,IACI,OAAO,MAAM;AACT,aAAO,KAAK,OAAO,IAAI,IAAI,KAAK,CAAA;AAAA,IACxC;AAAA,IACI,IAAI,MAAM;AACN,aAAO,KAAK,OAAO,IAAI,IAAI;AAAA,IACnC;AAAA,IACI,IAAI,MAAM,OAAO;AACb,WAAK,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC;AAAA,IACrC;AAAA,IACI,WAAW;AACP,YAAM,QAAQ,CAAA;AACd,WAAK,OAAO,QAAQ,CAAC,QAAQ,QAAQ;AACjC,mBAAW,SAAS,QAAQ;AACxB,gBAAM,KAAK,GAAG,mBAAmB,GAAG,CAAC,IAAI,mBAAmB,KAAK,CAAC,EAAE;AAAA,QACpF;AAAA,MACA,CAAS;AACD,aAAO,MAAM,KAAK,GAAG;AAAA,IAC7B;AAAA,IACI,QAAQ,UAAU;AACd,WAAK,OAAO,QAAQ,CAAC,QAAQ,QAAQ;AACjC,mBAAW,SAAS,QAAQ;AACxB,mBAAS,OAAO,GAAG;AAAA,QACnC;AAAA,MACA,CAAS;AAAA,IACT;AAAA,EACA;AAIA,WAAS,sBAAsB,MAAM;AAEjC,QAAI,OAAO,oBAAoB,aAAa;AACxC,aAAO,IAAI,gBAAgB,IAAI;AAAA,IACvC;AAEI,WAAO,IAAI,sBAAsB,IAAI;AAAA,EACzC;AAIA,WAAS,mBAAmB,QAAQ;AAChC,UAAM,eAAe,sBAAsB,MAAS;AACpD,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC/C,UAAI,UAAU,UAAa,UAAU,MAAM;AACvC,qBAAa,OAAO,KAAK,OAAO,KAAK,CAAC;AAAA,MAClD;AAAA,IACA;AACI,WAAO;AAAA,EACX;AAIA,WAAS,qBAAqB,QAAQ;AAClC,WAAO,OAAO,SAAQ;AAAA,EAC1B;AAIA,WAAS,kBAAkB,aAAa;AACpC,UAAM,SAAS,sBAAsB,WAAW;AAChD,UAAM,SAAS,CAAA;AACf,WAAO,QAAQ,CAAC,OAAO,QAAQ;AAC3B,aAAO,GAAG,IAAI;AAAA,IACtB,CAAK;AACD,WAAO;AAAA,EACX;;;;;;;;ACzHA,SAAO,eAAe,cAAS,cAAc,EAAE,OAAO,MAAM;AAC5D,eAAA,gBAAwB,aAAA,oBAA4B,aAAA,YAAoB,aAAA,cAAsB,aAAA,eAAuB,aAAA,mBAA2B,aAAA,YAAoB;AACpK,QAAM,WAAW9C,cAAA;AAKjB,QAAM,YAAY,OAAO,WAAW,YAAY;AAC5C,QAAI;AACA,YAAM,OAAO,MAAM,UAAS;AAC5B,aAAO,EAAE,MAAM,SAAS,KAAI;AAAA,IACpC,SACW,OAAO;AACV,YAAM,WAAW,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AACzE,eAAS,OAAO,MAAM,2BAA2B,SAAS,OAAO,IAAI,SAAS,KAAK;AACnF,aAAO,EAAE,OAAO,UAAU,SAAS,MAAK;AAAA,IAChD;AAAA,EACA;AACA,eAAA,YAAoB;AAIpB,QAAM,mBAAmB,OAAO,WAAW,YAAY,UAAU,YAAY;AACzE,eAAW,IAAI;AACf,aAAS,IAAI;AACb,QAAI;AACA,YAAM,SAAS,MAAM,UAAS;AAC9B,aAAO;AAAA,IACf,SACW,OAAO;AACV,YAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC1E,eAAS,YAAY;AACrB,eAAS,OAAO,MAAM,qBAAqB,YAAY,IAAI,SAAS,KAAK;AACzE,aAAO;AAAA,IACf;AAEQ,iBAAW,KAAK;AAAA,IACxB;AAAA,EACA;AACA,eAAA,mBAA2B;AAI3B,QAAM,eAAe,OAAO,YAAY,YAAY;AAChD,QAAI;AACA,YAAM,UAAU,MAAM,QAAQ,IAAI,WAAW,IAAI,QAAM,GAAE,CAAE,CAAC;AAC5D,aAAO,EAAE,MAAM,SAAS,SAAS,KAAI;AAAA,IAC7C,SACW,OAAO;AACV,YAAM,WAAW,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AACzE,eAAS,OAAO,MAAM,+BAA+B,SAAS,OAAO,IAAI,SAAS,KAAK;AACvF,aAAO,EAAE,OAAO,UAAU,SAAS,MAAK;AAAA,IAChD;AAAA,EACA;AACA,eAAA,eAAuB;AAIvB,QAAM,cAAc,OAAO,WAAW,WAAW,YAAY;AACzD,UAAM,iBAAiB,IAAI,QAAQ,CAAC,GAAG,WAAW,WAAW,MAAM,OAAO,IAAI,MAAM,6BAA6B,SAAS,IAAI,CAAC,GAAG,SAAS,CAAC;AAC5I,QAAI;AACA,aAAO,MAAM,QAAQ,KAAK,CAAC,UAAS,GAAI,cAAc,CAAC;AAAA,IAC/D,SACW,OAAO;AACV,eAAS,OAAO,MAAM,4BAA4B,SAAS,KAAK;AAChE,YAAM;AAAA,IACd;AAAA,EACA;AACA,eAAA,cAAsB;AAItB,QAAM,QAAQ,oBAAI,IAAG;AACrB,QAAM,YAAY,OAAO,KAAK,WAAW,QAAQ,IAAI,KAAK,QACrD;AACD,UAAM,SAAS,MAAM,IAAI,GAAG;AAC5B,UAAM,MAAM,KAAK,IAAG;AACpB,QAAI,UAAU,MAAM,OAAO,YAAY,OAAO,KAAK;AAC/C,aAAO,OAAO;AAAA,IACtB;AACI,UAAM,SAAS,MAAM,UAAS;AAC9B,UAAM,IAAI,KAAK,EAAE,MAAM,QAAQ,WAAW,KAAK,KAAK,OAAO;AAC3D,WAAO;AAAA,EACX;AACA,eAAA,YAAoB;AAIpB,QAAM,oBAAoB,MAAM;AAC5B,UAAM,MAAM,KAAK,IAAG;AACpB,eAAW,CAAC,KAAK,KAAK,KAAK,MAAM,QAAO,GAAI;AACxC,UAAI,MAAM,MAAM,aAAa,MAAM,KAAK;AACpC,cAAM,OAAO,GAAG;AAAA,MAC5B;AAAA,IACA;AAAA,EACA;AACA,eAAA,oBAA4B;AAI5B,QAAM,cAAc,oBAAI,IAAG;AAC3B,QAAM,gBAAgB,CAAC,IAAI,OAAO,QAAQ;AACtC,WAAO,IAAI,SAAS;AAChB,aAAO,IAAI,QAAQ,aAAW;AAC1B,cAAM,kBAAkB,YAAY,IAAI,GAAG;AAC3C,YAAI,iBAAiB;AACjB,uBAAa,eAAe;AAAA,QAC5C;AACY,cAAM,UAAU,WAAW,YAAY;AACnC,sBAAY,OAAO,GAAG;AACtB,cAAI;AACA,kBAAM,SAAS,MAAM,GAAG,GAAG,IAAI;AAC/B,oBAAQ,MAAM;AAAA,UAClC,SACuB,OAAO;AACV,qBAAS,OAAO,MAAM,8BAA8B,KAAK,KAAK;AAC9D,oBAAQ,MAAS;AAAA,UACrC;AAAA,QACA,GAAe,KAAK;AACR,oBAAY,IAAI,KAAK,OAAO;AAAA,MACxC,CAAS;AAAA,IACT;AAAA,EACA;AACA,eAAA,gBAAwB;;;;;;;;IC/HxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,WAAO,eAAc4B,WAAU,cAAc,EAAE,OAAO,MAAM;AAC5DA,cAAA,aAAqBA,UAAA,aAAqBA,6BAA2BA,UAAA,cAAsBA,UAAA,eAAuBA,gCAA8BA,UAAA,aAAqBA,UAAA,eAAuBA,UAAA,qBAA6BA,UAAA,eAAuBA,UAAA,wBAAgCA,UAAA,iBAAyBA,wBAAsBA,UAAA,kBAA0BA,UAAA,iBAAyBA,UAAA,iBAAyBA,UAAA,kBAA0BA,UAAA,oBAA4BA,UAAA,kBAA0BA,2BAAyBA,UAAA,eAAuBA,UAAA,oBAA4BA,UAAA,qBAA6BA,UAAA,cAAsBA,UAAA,mBAA2BA,UAAA,oBAA4BA,qCAAmCA,UAAA,QAAgBA,UAAA,qBAA6BA,sBAAoBA,UAAA,gBAAwBA,UAAA,eAAuBA,6BAA2BA,UAAA,aAAqBA,UAAA,aAAqBA,UAAA,WAAmBA,UAAA,WAAmBA,UAAA,cAAsBA,UAAA,YAAoBA,iCAA+BA,UAAA,oBAA4BA,UAAA,mBAA2BA,UAAA,mBAA2BA,UAAA,cAAsBA,UAAA,WAAmBA,UAAA,iBAAyBA,4BAA0BA,UAAA,YAAoBA,UAAA,QAAgBA,UAAA,aAAqB;AAC/rCA,cAAA,wBAAgCA,UAAA,gBAAwBA,8BAA4BA,UAAA,gBAAwBA,UAAA,sBAA8BA,oCAAkCA,UAAA,6BAAqCA,UAAA,oBAA4BA,UAAA,mBAA2BA,UAAA,gBAAwBA,UAAA,YAAoBA,UAAA,eAAuBA,mCAAiCA,UAAA,qBAA6BA,UAAA,qBAA6BA,UAAA,qBAA6BA,UAAA,oBAA4BA,UAAA,uBAA+BA,UAAA,mBAA2BA,sBAAoBA,UAAA,YAAoBA,UAAA,sBAA8BA,UAAA,iBAAyBA,UAAA,sBAA8BA,UAAA,cAAsBA,UAAA,gBAAwBA,sBAAoBA,UAAA,WAAmBA,UAAA,cAAsBA,kBAAgBA,UAAA,oBAA4BA,UAAA,WAAmBA,qBAAmBA,UAAA,WAAmBA,UAAA,YAAoBA,UAAA,kBAA0BA,UAAA,UAAkBA,UAAA,YAAoBA,UAAA,UAAkBA,0BAAwBA,UAAA,wBAAgCA,UAAA,kBAA0BA,UAAA,kBAA0BA,UAAA,wBAAgCA,UAAA,gBAAwBA,UAAA,wBAAgCA,+BAA6BA,UAAA,sBAA8BA,UAAA,oBAA4BA,UAAA,mBAA2B;AAClwCA,cAAA,WAAmBA,UAAA,gBAAwBA,oBAAkBA,UAAA,YAAoBA,UAAA,cAAsBA,yBAAuBA,UAAA,eAAuBA,UAAA,SAAiBA,UAAA,mBAA2BA,UAAA,iBAAyBA,UAAA,cAAsBA,UAAA,qBAA6BA,yBAAuBA,UAAA,eAAuBA,UAAA,aAAqBA,UAAA,cAAsBA,UAAA,kBAA0BA,UAAA,qBAA6BA,UAAA,cAAsBA,qBAAmBA,UAAA,cAAsBA,UAAA,cAAsBA,UAAA,cAAsBA,UAAA,cAAsBA,UAAA,YAAoBA,UAAA,eAAuBA,sBAAoBA,UAAA,sBAA8BA,UAAA,aAAqBA,oBAAkBA,UAAA,cAAsBA,UAAA,eAAuBA,wBAAsBA,UAAA,aAAqBA,UAAA,aAAqBA,UAAA,YAAoBA,UAAA,gBAAwBA,UAAA,kBAA0BA,UAAA,qBAA6BA,4BAA0BA,UAAA,WAAmBA,UAAA,UAAkBA,UAAA,YAAoBA,UAAA,aAAqBA,UAAA,gBAAwBA,UAAA,oBAA4BA,+BAA6BA,UAAA,eAAuBA,UAAA,mBAA2BA,UAAA,eAAuB;AACpnCA,cAAA,gBAAwBA,8BAA4BA,UAAA,YAAoBA,UAAA,cAAsBA,UAAA,eAAuBA,UAAA,mBAA2BA,sBAAoBA,UAAA,oBAA4BA,UAAA,uBAA+BA,UAAA,qBAA6BA,UAAA,wBAAgCA,0BAAwBA,UAAA,YAAoBA,UAAA,iBAAyBA,sBAAoBA,UAAA,aAAqBA,UAAA,SAAiB;AAK3Z,QAAI,UAAU5B,aAAA;AACd,WAAO,eAAe4B,WAAS,cAAc,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAW,EAAE,CAAE;AAClH,WAAO,eAAeA,WAAS,SAAS,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAM,EAAE,CAAE;AACxG,WAAO,eAAeA,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAU,EAAE,CAAE;AAChH,WAAO,eAAeA,WAAS,mBAAmB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAgB,EAAE,CAAE;AAC5H,WAAO,eAAeA,WAAS,kBAAkB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAe,EAAE,CAAE;AAC1H,WAAO,eAAeA,WAAS,YAAY,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAS,EAAE,CAAE;AAC9G,WAAO,eAAeA,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAY,EAAE,CAAE;AACpH,WAAO,eAAeA,WAAS,oBAAoB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAiB,EAAE,CAAE;AAC9H,WAAO,eAAeA,WAAS,oBAAoB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAiB,EAAE,CAAE;AAC9H,WAAO,eAAeA,WAAS,qBAAqB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAkB,EAAE,CAAE;AAChI,WAAO,eAAeA,WAAS,wBAAwB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAqB,EAAE,CAAE;AACtI,WAAO,eAAeA,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAU,EAAE,CAAE;AAChH,WAAO,eAAeA,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAY,EAAE,CAAE;AACpH,WAAO,eAAeA,WAAS,YAAY,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAS,EAAE,CAAE;AAC9G,WAAO,eAAeA,WAAS,YAAY,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAS,EAAE,CAAE;AAC9G,WAAO,eAAeA,WAAS,cAAc,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAW,EAAE,CAAE;AAClH,WAAO,eAAeA,WAAS,cAAc,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAW,EAAE,CAAE;AAClH,WAAO,eAAeA,WAAS,oBAAoB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAiB,EAAE,CAAE;AAC9H,WAAO,eAAeA,WAAS,gBAAgB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAa,EAAE,CAAE;AACtH,WAAO,eAAeA,WAAS,iBAAiB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAc,EAAE,CAAE;AACxH,WAAO,eAAeA,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAU,EAAE,CAAE;AAChH,WAAO,eAAeA,WAAS,sBAAsB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAmB,EAAE,CAAE;AAClI,WAAO,eAAeA,WAAS,SAAS,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,QAAQ;AAAA,IAAM,EAAE,CAAE;AACxG,QAAI,kBAAkBxB,oBAAA;AACtB,WAAO,eAAewB,WAAS,4BAA4B,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAyB,EAAE,CAAE;AACtJ,WAAO,eAAeA,WAAS,qBAAqB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAkB,EAAE,CAAE;AACxI,WAAO,eAAeA,WAAS,oBAAoB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAiB,EAAE,CAAE;AACtI,QAAI,WAAWqB,cAAA;AACf,WAAO,eAAerB,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAY,EAAE,CAAE;AACrH,WAAO,eAAeA,WAAS,sBAAsB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAmB,EAAE,CAAE;AACnI,WAAO,eAAeA,WAAS,qBAAqB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAkB,EAAE,CAAE;AACjI,WAAO,eAAeA,WAAS,gBAAgB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAa,EAAE,CAAE;AACvH,WAAO,eAAeA,WAAS,kBAAkB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAe,EAAE,CAAE;AAC3H,WAAO,eAAeA,WAAS,mBAAmB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAgB,EAAE,CAAE;AAC7H,WAAO,eAAeA,WAAS,qBAAqB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAkB,EAAE,CAAE;AACjI,QAAI,eAAesB,kBAAA;AACnB,WAAO,eAAetB,WAAS,mBAAmB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,aAAa;AAAA,IAAgB,EAAE,CAAE;AACjI,WAAO,eAAeA,WAAS,kBAAkB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,aAAa;AAAA,IAAe,EAAE,CAAE;AAC/H,WAAO,eAAeA,WAAS,kBAAkB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,aAAa;AAAA,IAAe,EAAE,CAAE;AAC/H,WAAO,eAAeA,WAAS,mBAAmB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,aAAa;AAAA,IAAgB,EAAE,CAAE;AACjI,QAAI,gBAAgBuB,mBAAA;AACpB,WAAO,eAAevB,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAY,EAAE,CAAE;AAC1H,QAAI,cAAcwB,iBAAA;AAClB,WAAO,eAAexB,WAAS,kBAAkB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,YAAY;AAAA,IAAe,EAAE,CAAE;AAC9H,WAAO,eAAeA,WAAS,yBAAyB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,YAAY;AAAA,IAAsB,EAAE,CAAE;AAC5I,QAAI,QAAQyB,WAAA;AACZ,WAAO,eAAezB,WAAS,gBAAgB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,MAAM;AAAA,IAAa,EAAE,CAAE;AACpH,WAAO,eAAeA,WAAS,sBAAsB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,MAAM;AAAA,IAAmB,EAAE,CAAE;AAChI,QAAI,YAAY0B,eAAA;AAChB,WAAO,eAAe1B,WAAS,gBAAgB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,UAAU;AAAA,IAAa,EAAE,CAAE;AAExH,QAAI,WAAW2B,cAAA;AACf,WAAO,eAAe3B,WAAS,cAAc,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAW,EAAE,CAAE;AACnH,QAAI,gBAAgB4B,kBAAA;AACpB,WAAO,eAAe5B,WAAS,uBAAuB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAoB,EAAE,CAAE;AAC1I,QAAI,WAAW6B,cAAA;AACf,WAAO,eAAe7B,WAAS,gBAAgB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAa,EAAE,CAAE;AACvH,WAAO,eAAeA,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAY,EAAE,CAAE;AAErH,QAAI,iBAAiB8B,oBAAA;AACrB,WAAO,eAAe9B,WAAS,oBAAoB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,eAAe;AAAA,IAAiB,EAAE,CAAE;AAKrI,QAAI,WAAW+B,cAAA;AACf,WAAO,eAAe/B,WAAS,cAAc,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAW,EAAE,CAAE;AACnH,WAAO,eAAeA,WAAS,cAAc,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAW,EAAE,CAAE;AACnH,WAAO,eAAeA,WAAS,oBAAoB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAiB,EAAE,CAAE;AAC/H,QAAI,gBAAgBgC,mBAAA;AACpB,WAAO,eAAehC,WAAS,qBAAqB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAkB,EAAE,CAAE;AACtI,WAAO,eAAeA,WAAS,uBAAuB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAoB,EAAE,CAAE;AAC1I,WAAO,eAAeA,WAAS,sBAAsB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAmB,EAAE,CAAE;AACxI,WAAO,eAAeA,WAAS,yBAAyB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAsB,EAAE,CAAE;AAC9I,WAAO,eAAeA,WAAS,iBAAiB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAc,EAAE,CAAE;AAC9H,QAAI,4BAA4BiC,6BAAA;AAChC,WAAO,eAAejC,WAAS,yBAAyB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,0BAA0B;AAAA,IAAsB,EAAE,CAAE;AAC1J,QAAI,oBAAoBkC,sBAAA;AACxB,WAAO,eAAelC,WAAS,mBAAmB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAgB,EAAE,CAAE;AACtI,WAAO,eAAeA,WAAS,mBAAmB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAgB,EAAE,CAAE;AACtI,WAAO,eAAeA,WAAS,yBAAyB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAsB,EAAE,CAAE;AAClJ,WAAO,eAAeA,WAAS,iBAAiB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAc,EAAE,CAAE;AAClI,WAAO,eAAeA,WAAS,WAAW,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAQ,EAAE,CAAE;AACtH,WAAO,eAAeA,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAU,EAAE,CAAE;AAC1H,WAAO,eAAeA,WAAS,WAAW,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAQ,EAAE,CAAE;AACtH,WAAO,eAAeA,WAAS,mBAAmB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAgB,EAAE,CAAE;AACtI,WAAO,eAAeA,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAU,EAAE,CAAE;AAC1H,WAAO,eAAeA,WAAS,YAAY,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAS,EAAE,CAAE;AACxH,WAAO,eAAeA,WAAS,YAAY,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAS,EAAE,CAAE;AACxH,WAAO,eAAeA,WAAS,YAAY,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAS,EAAE,CAAE;AACxH,WAAO,eAAeA,WAAS,qBAAqB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAkB,EAAE,CAAE;AAC1I,WAAO,eAAeA,WAAS,SAAS,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAM,EAAE,CAAE;AAClH,WAAO,eAAeA,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAY,EAAE,CAAE;AAC9H,WAAO,eAAeA,WAAS,YAAY,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAS,EAAE,CAAE;AACxH,WAAO,eAAeA,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAU,EAAE,CAAE;AAC1H,WAAO,eAAeA,WAAS,iBAAiB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,kBAAkB;AAAA,IAAc,EAAE,CAAE;AAClI,QAAI,YAAYmC,eAAA;AAChB,WAAO,eAAenC,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,UAAU;AAAA,IAAY,EAAE,CAAE;AACtH,WAAO,eAAeA,WAAS,uBAAuB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,UAAU;AAAA,IAAoB,EAAE,CAAE;AACtI,WAAO,eAAeA,WAAS,kBAAkB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,UAAU;AAAA,IAAe,EAAE,CAAE;AAC5H,WAAO,eAAeA,WAAS,uBAAuB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,UAAU;AAAA,IAAoB,EAAE,CAAE;AACtI,WAAO,eAAeA,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,UAAU;AAAA,IAAU,EAAE,CAAE;AAClH,WAAO,eAAeA,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,UAAU;AAAA,IAAU,EAAE,CAAE;AAClH,WAAO,eAAeA,WAAS,oBAAoB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,UAAU;AAAA,IAAiB,EAAE,CAAE;AAChI,WAAO,eAAeA,WAAS,wBAAwB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,UAAU;AAAA,IAAqB,EAAE,CAAE;AACxI,WAAO,eAAeA,WAAS,qBAAqB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,UAAU;AAAA,IAAkB,EAAE,CAAE;AAClI,QAAI,kBAAkBoC,oBAAA;AACtB,WAAO,eAAepC,WAAS,sBAAsB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAmB,EAAE,CAAE;AAC1I,WAAO,eAAeA,WAAS,sBAAsB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAmB,EAAE,CAAE;AAC1I,WAAO,eAAeA,WAAS,sBAAsB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAmB,EAAE,CAAE;AAC1I,WAAO,eAAeA,WAAS,0BAA0B,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAuB,EAAE,CAAE;AAClJ,WAAO,eAAeA,WAAS,gBAAgB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAa,EAAE,CAAE;AAC9H,WAAO,eAAeA,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAU,EAAE,CAAE;AACxH,WAAO,eAAeA,WAAS,iBAAiB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAc,EAAE,CAAE;AAChI,WAAO,eAAeA,WAAS,oBAAoB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAiB,EAAE,CAAE;AACtI,WAAO,eAAeA,WAAS,qBAAqB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAkB,EAAE,CAAE;AAIxI,QAAI,SAASqC,YAAA;AACb,WAAO,eAAerC,WAAS,8BAA8B,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,OAAO;AAAA,IAA2B,EAAE,CAAE;AACjJ,WAAO,eAAeA,WAAS,2BAA2B,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,OAAO;AAAA,IAAwB,EAAE,CAAE;AAC3I,WAAO,eAAeA,WAAS,uBAAuB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,OAAO;AAAA,IAAoB,EAAE,CAAE;AACnI,WAAO,eAAeA,WAAS,iBAAiB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,OAAO;AAAA,IAAc,EAAE,CAAE;AACvH,WAAO,eAAeA,WAAS,qBAAqB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,OAAO;AAAA,IAAkB,EAAE,CAAE;AAC/H,WAAO,eAAeA,WAAS,iBAAiB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,OAAO;AAAA,IAAc,EAAE,CAAE;AACvH,WAAO,eAAeA,WAAS,yBAAyB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,OAAO;AAAA,IAAsB,EAAE,CAAE;AACvI,WAAO,eAAeA,WAAS,gBAAgB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,OAAO;AAAA,IAAa,EAAE,CAAE;AACrH,QAAI,iBAAiBsC,mBAAA;AACrB,WAAO,eAAetC,WAAS,oBAAoB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,eAAe;AAAA,IAAiB,EAAE,CAAE;AACrI,WAAO,eAAeA,WAAS,gBAAgB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,eAAe;AAAA,IAAa,EAAE,CAAE;AAC7H,WAAO,eAAeA,WAAS,sBAAsB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,eAAe;AAAA,IAAmB,EAAE,CAAE;AAKzI,QAAI,aAAauC,gBAAA;AACjB,WAAO,eAAevC,WAAS,qBAAqB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,WAAW;AAAA,IAAkB,EAAE,CAAE;AACnI,WAAO,eAAeA,WAAS,iBAAiB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,WAAW;AAAA,IAAc,EAAE,CAAE;AAC3H,WAAO,eAAeA,WAAS,cAAc,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,WAAW;AAAA,IAAW,EAAE,CAAE;AACrH,WAAO,eAAeA,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,WAAW;AAAA,IAAU,EAAE,CAAE;AAEnH,QAAI,SAASwC,YAAA;AACb,WAAO,eAAexC,WAAS,WAAW,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,OAAO;AAAA,IAAQ,EAAE,CAAE;AAC3G,WAAO,eAAeA,WAAS,YAAY,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,OAAO;AAAA,IAAS,EAAE,CAAE;AAC7G,WAAO,eAAeA,WAAS,mBAAmB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,OAAO;AAAA,IAAgB,EAAE,CAAE;AAC3H,WAAO,eAAeA,WAAS,sBAAsB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,OAAO;AAAA,IAAmB,EAAE,CAAE;AACjI,WAAO,eAAeA,WAAS,mBAAmB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,OAAO;AAAA,IAAgB,EAAE,CAAE;AAC3H,WAAO,eAAeA,WAAS,iBAAiB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,OAAO;AAAA,IAAc,EAAE,CAAE;AACvH,WAAO,eAAeA,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,OAAO;AAAA,IAAU,EAAE,CAAE;AAE/G,QAAI,WAAWyC,cAAA;AACf,WAAO,eAAezC,WAAS,cAAc,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAW,EAAE,CAAE;AACnH,WAAO,eAAeA,WAAS,cAAc,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAW,EAAE,CAAE;AACnH,WAAO,eAAeA,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAY,EAAE,CAAE;AACrH,WAAO,eAAeA,WAAS,gBAAgB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAa,EAAE,CAAE;AACvH,WAAO,eAAeA,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAY,EAAE,CAAE;AACrH,WAAO,eAAeA,WAAS,WAAW,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAQ,EAAE,CAAE;AAC7G,WAAO,eAAeA,WAAS,cAAc,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAW,EAAE,CAAE;AACnH,WAAO,eAAeA,WAAS,uBAAuB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAoB,EAAE,CAAE;AACrI,WAAO,eAAeA,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAU,EAAE,CAAE;AACjH,WAAO,eAAeA,WAAS,gBAAgB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAa,EAAE,CAAE;AACvH,WAAO,eAAeA,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAU,EAAE,CAAE;AACjH,WAAO,eAAeA,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAY,EAAE,CAAE;AACrH,WAAO,eAAeA,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAY,EAAE,CAAE;AACrH,WAAO,eAAeA,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAY,EAAE,CAAE;AACrH,WAAO,eAAeA,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAY,EAAE,CAAE;AACrH,WAAO,eAAeA,WAAS,YAAY,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAS,EAAE,CAAE;AAI/G,QAAI,gBAAgB0C,mBAAA;AACpB,WAAO,eAAe1C,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAY,EAAE,CAAE;AAC1H,WAAO,eAAeA,WAAS,sBAAsB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAmB,EAAE,CAAE;AACxI,WAAO,eAAeA,WAAS,mBAAmB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAgB,EAAE,CAAE;AAClI,WAAO,eAAeA,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAY,EAAE,CAAE;AAC1H,WAAO,eAAeA,WAAS,cAAc,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAW,EAAE,CAAE;AACxH,WAAO,eAAeA,WAAS,gBAAgB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAa,EAAE,CAAE;AAC5H,WAAO,eAAeA,WAAS,gBAAgB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAa,EAAE,CAAE;AAC5H,WAAO,eAAeA,WAAS,sBAAsB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAmB,EAAE,CAAE;AACxI,WAAO,eAAeA,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAY,EAAE,CAAE;AAC1H,WAAO,eAAeA,WAAS,kBAAkB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAe,EAAE,CAAE;AAChI,WAAO,eAAeA,WAAS,oBAAoB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAiB,EAAE,CAAE;AACpI,WAAO,eAAeA,WAAS,UAAU,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAO,EAAE,CAAE;AAChH,WAAO,eAAeA,WAAS,gBAAgB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAa,EAAE,CAAE;AAC5H,WAAO,eAAeA,WAAS,gBAAgB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAa,EAAE,CAAE;AAC5H,WAAO,eAAeA,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAY,EAAE,CAAE;AAC1H,WAAO,eAAeA,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAU,EAAE,CAAE;AACtH,WAAO,eAAeA,WAAS,WAAW,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,cAAc;AAAA,IAAQ,EAAE,CAAE;AAClH,QAAI,kBAAkB2C,oBAAA;AACtB,WAAO,eAAe3C,WAAS,iBAAiB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAc,EAAE,CAAE;AAIhI,QAAI,WAAW4C,cAAA;AACf,WAAO,eAAe5C,WAAS,YAAY,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAS,EAAE,CAAE;AAC/G,WAAO,eAAeA,WAAS,UAAU,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAO,EAAE,CAAE;AAC3G,WAAO,eAAeA,WAAS,cAAc,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAW,EAAE,CAAE;AACnH,WAAO,eAAeA,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAU,EAAE,CAAE;AACjH,WAAO,eAAeA,WAAS,kBAAkB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAe,EAAE,CAAE;AAC3H,WAAO,eAAeA,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAU,EAAE,CAAE;AACjH,WAAO,eAAeA,WAAS,iBAAiB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,SAAS;AAAA,IAAc,EAAE,CAAE;AAIzH,QAAI,eAAe6C,iBAAA;AACnB,WAAO,eAAe7C,WAAS,yBAAyB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,aAAa;AAAA,IAAsB,EAAE,CAAE;AAC7I,WAAO,eAAeA,WAAS,sBAAsB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,aAAa;AAAA,IAAmB,EAAE,CAAE;AACvI,WAAO,eAAeA,WAAS,wBAAwB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,aAAa;AAAA,IAAqB,EAAE,CAAE;AAC3I,WAAO,eAAeA,WAAS,qBAAqB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,aAAa;AAAA,IAAkB,EAAE,CAAE;AAIrI,QAAI,kBAAkB8C,oBAAA;AACtB,WAAO,eAAe9C,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAU,EAAE,CAAE;AACxH,WAAO,eAAeA,WAAS,oBAAoB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAiB,EAAE,CAAE;AACtI,WAAO,eAAeA,WAAS,gBAAgB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAa,EAAE,CAAE;AAC9H,WAAO,eAAeA,WAAS,eAAe,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAY,EAAE,CAAE;AAC5H,WAAO,eAAeA,WAAS,aAAa,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAU,EAAE,CAAE;AACxH,WAAO,eAAeA,WAAS,qBAAqB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAkB,EAAE,CAAE;AACxI,WAAO,eAAeA,WAAS,iBAAiB,EAAE,YAAY,MAAM,KAAK,WAAY;AAAE,aAAO,gBAAgB;AAAA,IAAc,EAAE,CAAE;AAAA;;;;ACvNhI,MAAM,gBASF;AAAA,EACF,CAACX,YAAAA,SAAS,IAAI,GAAG;AAAA,IACf,MAAM;AAAA,IACN,WACE;AAAA,IACF,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,kBAAkB;AAAA,EAAA;AAAA,EAEpB,CAACA,YAAAA,SAAS,OAAO,GAAG;AAAA,IAClB,MAAM;AAAA,IACN,WACE;AAAA,IACF,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,kBAAkB;AAAA,EAAA;AAAA,EAEpB,CAACA,YAAAA,SAAS,OAAO,GAAG;AAAA,IAClB,MAAM;AAAA,IACN,WACE;AAAA,IACF,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,kBAAkB;AAAA,EAAA;AAAA,EAEpB,CAACA,YAAAA,SAAS,KAAK,GAAG;AAAA,IAChB,MAAM;AAAA,IACN,WAAW;AAAA,IACX,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,kBAAkB;AAAA,EAAA;AAEtB;AA4BO,MAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAUA,YAAAA,SAAS;AAAA,EACnB,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,0BAA0B;AAC5B,MAAM;AACJ,QAAM,CAAC,SAAS,UAAU,IAAI0D,MAAAA,SAAS,KAAK;AAC5C,QAAM,YAAYC,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,IAAI,CAAC,EAAE;AACnD,QAAM,cAAcD,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,CAAC,CAAC,EAAE;AAClD,QAAM,oBAAoBD,MAAAA,OAA6C,IAAI;AAE3E,QAAM,SAAS,cAAc,OAAO;AAEpC,QAAM,sBAAsBE,MAAAA,YAAY,MAAM;AAC5C,QAAI,kBAAkB,SAAS;AAC7B,mBAAa,kBAAkB,OAAO;AACtC,wBAAkB,UAAU;AAAA,IAC9B;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,QAAM,gBAAgBA,MAAAA,YAAY,MAAM;AACtC,wBAAA;AACAD,gBAAAA,SAAS,SAAS;AAAA,MAChBA,YAAAA,SAAS,OAAO,WAAW;AAAA,QACzB,SAAS;AAAA,QACT,UAAU;AAAA,QACV,iBAAiB;AAAA,MAAA,CAClB;AAAA,MACDA,YAAAA,SAAS,OAAO,aAAa;AAAA,QAC3B,SAAS;AAAA,QACT,UAAU;AAAA,QACV,iBAAiB;AAAA,MAAA,CAClB;AAAA,IAAA,CACF,EAAE,MAAM,MAAM;AACb,iBAAW,KAAK;AAChB,gBAAA;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,qBAAqB,WAAW,aAAa,SAAS,CAAC;AAG3DE,QAAAA,UAAU,MAAM;AACd,QAAI,WAAW;AACb,iBAAW,IAAI;AACf,gBAAU,SAAS,IAAI;AACvB,kBAAY,SAAS,CAAC;AAEtBF,kBAAAA,SAAS,SAAS;AAAA,QAChBA,YAAAA,SAAS,OAAO,WAAW;AAAA,UACzB,SAAS;AAAA,UACT,iBAAiB;AAAA,UACjB,UAAU;AAAA,QAAA,CACX;AAAA,QACDA,YAAAA,SAAS,OAAO,aAAa;AAAA,UAC3B,SAAS;AAAA,UACT,UAAU;AAAA,UACV,iBAAiB;AAAA,QAAA,CAClB;AAAA,MAAA,CACF,EAAE,MAAM,MAAM;AAEb,YAAI,WAAW,GAAG;AAChB,4BAAkB,UAAU,WAAW,MAAM;AAC3C,0BAAA;AAAA,UACF,GAAG,QAAQ;AAAA,QACb;AAAA,MACF,CAAC;AAAA,IACH,WAAW,SAAS;AAClB,oBAAA;AAAA,IACF;AAEA,WAAO,MAAM,oBAAA;AAAA,EACf,GAAG,CAAC,SAAS,CAAC;AAGdE,QAAAA,UAAU,MAAM;AACd,WAAO,MAAM,oBAAA;AAAA,EACf,GAAG,CAAC,mBAAmB,CAAC;AAExB,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,SACEC,kCAAAA;AAAAA,IAACH,YAAAA,SAAS;AAAA,IAAT;AAAA,MACC,OAAO;AAAA,QACL,WAAW,CAAC,EAAE,YAAY,WAAW;AAAA,QACrC,SAAS;AAAA,MAAA;AAAA,MAEX,WAAW,GAAG,sCAAsC,SAAS;AAAA,MAC7D,mBAAkB;AAAA,MAClB,yBAAwB;AAAA,MAExB,UAAAI,kCAAAA;AAAAA,QAACC,YAAAA;AAAAA,QAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA,OAAO;AAAA,UAAA;AAAA,UAIT,UAAA;AAAA,YAAAF,sCAACE,YAAAA,MAAA,EAAK,WAAU,wBACb,UAAA,8CACEC,kBAAA,EAAK,WAAW,GAAG,WAAW,OAAO,SAAS,GAC5C,UAAA,OAAO,MACV,GAEJ;AAAA,YAGAF,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,kBACd,UAAA;AAAA,cAAAF,kCAAAA,IAACG,YAAAA,QAAK,WAAW,GAAG,iBAAiB,OAAO,UAAU,GACnD,UAAA,OACH;AAAA,cACC,cACCH,kCAAAA,IAACG,kBAAA,EAAK,WAAW,GAAG,gBAAgB,OAAO,gBAAgB,GACxD,UAAA,YAAA,CACH,IACE;AAAA,YAAA,GACN;AAAA,YAGAH,kCAAAA;AAAAA,cAACI,YAAAA;AAAAA,cAAA;AAAA,gBACC,SAAS;AAAA,gBACT,WAAU;AAAA,gBACV,mBAAkB;AAAA,gBAClB,oBAAoB;AAAA,gBAEpB,UAAAJ,kCAAAA,IAACG,oBAAK,WAAW,GAAG,WAAW,OAAO,SAAS,GAAI,UAAA,IAAA,CAAS;AAAA,cAAA;AAAA,YAAA;AAAA,UAC9D;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;AAkDO,MAAM,YAAY,CAAC,UAA4B,OAAwB;AAC5E,QAAM,EAAE,kBAAkB,IAAA,IAAS;AACnC,QAAM,CAAC,WAAW,YAAY,IAAIR,MAAAA,SAAS,KAAK;AAChD,QAAM,CAAC,aAAa,cAAc,IAChCA,MAAAA,SAAyC,IAAI;AAE/C,QAAM,aAAaG,MAAAA;AAAAA,IACjB,CAAC;AAAA,MACC;AAAA,MACA;AAAA,MACA,UAAU7D,YAAAA,SAAS;AAAA,MACnB,WAAW;AAAA,IAAA,MAMP;AACJ,qBAAe,EAAE,OAAO,aAAa,SAAS,UAAU;AACxD,mBAAa,IAAI;AAAA,IACnB;AAAA,IACA,CAAC,eAAe;AAAA,EAAA;AAGlB,QAAM,aAAa6D,MAAAA,YAAY,MAAM;AACnC,iBAAa,KAAK;AAAA,EACpB,GAAG,CAAA,CAAE;AAEL,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AChRO,MAAM,sBAAsB,CAAC,SAAqC;AACvE,MAAI,CAAC,KAAM,QAAO;AAClB,QAAMO,WAAkC;AAAA,IACtC,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,SAAS;AAAA,EAAA;AAEX,SAAOA,SAAQ,IAAI,KAAK;AAC1B;AAKO,MAAM,wBAAwB,CACnC,aACA,UACA,MACW;;AACX,MAAI,YAAY,WAAW,UAAU,GAAG;AACtC,UAAM,eAAe,YAClB,QAAQ,aAAa,EAAE,EACvB,QAAQ,YAAY,SAAS;AAChC,aAAO,aAAE,OAAO,UAAS,kBAAlB,gCAAuC,EAAE,OAAO,QAAQ,QAAA;AAAA,EACjE,WAAW,CAAC,UAAU,WAAW,YAAY,EAAE,SAAS,WAAW,GAAG;AACpE,aAAO,aAAE,OAAO,MAAK,iBAAd,gCAAkC,EAAE,OAAO,QAAQ,QAAA;AAAA,EAC5D,OAAO;AACL,UAAM,WAAW,oBAAoB,QAAQ;AAC7C,aAAO,aAAE,OAAO,WAAW,MAApB,mBAAwB,cAAxB,gCAAyC,EAAE,OAAO,QAAQ,QAAA;AAAA,EACnE;AACF;AAKO,MAAM,iBAAiB,CAC5B,SACA,cACI;AAAA,EACJ,YAAY,WAAW,YAAY;AAAA,EACnC,aAAa,WAAW;AAC1B;ACjEA,MAAM,iBAAiBC,uBAAAA;AAAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SAAS;AAAA,QACT,OAAO;AAAA,QACP,aAAa;AAAA,QACb,uBAAuB;AAAA,QACvB,SAAS;AAAA,QACT,MAAM;AAAA,QACN,UAAU;AAAA,QACV,sBAAsB;AAAA,QACtB,oBAAoB;AAAA,QACpB,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,YAAY;AAAA,MAAA;AAAA,MAEd,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ;AAyBO,MAAM,SAASrF,iBAAM;AAAA,EAI1B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA,GAEL,QACG;AACH,UAAM,EAAE,YAAY,YAAA,IAAgB,eAAe,SAAS,QAAQ;AAEpE,UAAM,cAAc,WAAW;AAC/B,UAAM,WACJ,QAAQ,SAAS,aAAa,SAAS,SAAS,OAAO;AAEzD,UAAM,oBAAoB,sBAAsB,aAAa,UAAUsF,OAAAA,QAAC;AAExE,WACEN,kCAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT,eAAe,EAAE,SAAS,MAAM;AAAA,UAChC;AAAA,UACA,cAAc;AAAA,UACd;AAAA,QAAA;AAAA,QAEF,UAAU;AAAA,QACV;AAAA,QACA,mBAAkB;AAAA,QAClB;AAAA,QACA,oBAAoB,EAAE,UAAU,WAAA;AAAA,QAC/B,GAAG;AAAA,QAEH,UAAA;AAAA,UAAA,eACCJ,kCAAAA;AAAAA,YAACQ,YAAAA;AAAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAM;AAAA,cACN,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAGb,OAAO,aAAa,WACnBR,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAW,GAAG,2BAA2B,aAAa,GACzD,SAAA,CACH,IAEA;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AAEA,OAAO,cAAc;ACjHrB,MAAM,eACJ;AAEF,MAAM,gBAAgB;AAAA,EACpB,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,MAAM,OAA4B,CAAC;AAAA,EACxC,UAAU;AAAA,EACV,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,gBAAgB,CAAC,QAAQ,WAAW,WAAW,OAAO,EAAE;AAAA,IAC5D;AAAA,EAAA;AAEF,QAAM,kBAAkB,kBAAkB,QAAQ;AAElD,QAAM,iBACJ,YAAY,YACR,eACAM,OAAAA;AAAAA,IACE;AAAA,EAAA;AAGR,SACET,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA,cAAc,OAAO;AAAA,QACrB;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEH,UAAA,kBACCD,uCAACC,YAAAA,MAAA,EAAK,WAAU,8BACb,UAAA;AAAA,QAAA,QAAQF,kCAAAA,IAACE,kBAAA,EAAK,WAAU,iBAAiB,UAAA,MAAK;AAAA,QAC/CF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,UAAU,SAAA,CAAS;AAAA,QAClC,WACCF,kCAAAA;AAAAA,UAACI,YAAAA;AAAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,WAAU;AAAA,YACV,oBAAmB;AAAA,YACnB,mBAAkB;AAAA,YAElB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,WAAU,UAAA,IAAA,CAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MAC7B,EAAA,CAEJ,IAEA;AAAA,IAAA;AAAA,EAAA;AAIR;AAOO,MAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,SACEF,kCAAAA,KAACC,oBAAK,WAAW,GAAG,WAAW,SAAS,GAAI,GAAG,OAC5C,UAAA;AAAA,IAAA,+CAAUC,kBAAA,EAAK,WAAWO,OAAAA,aAAa,QAAQ,GAAA,GAAO,UAAA,OAAM;AAAA,IAC5D,qDACEP,kBAAA,EAAK,WAAWO,OAAAA,aAAa,KAAK,GAAA,GAAO,UAAA,aAAY;AAAA,IAEvD;AAAA,EAAA,GACH;AAEJ;AAEO,MAAM,cAAmC,CAAC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,SACEV,sCAACE,YAAAA,QAAK,WAAW,GAAG,IAAI,SAAS,GAAI,GAAG,OACrC,UACH;AAEJ;AAEO,MAAM,aAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,SACEF,sCAACE,YAAAA,QAAK,WAAW,GAAG,8BAA8B,SAAS,GAAI,GAAG,OAC/D,UACH;AAEJ;ACpGO,MAAM,QAAQjF,iBAAM;AAAA,EACzB,CACE,EAAE,WAAW,OAAO,UAAU,UAAU,SAAS,QAAQ,GAAG,MAAA,GAC5D,QACG;AACH,UAAM,CAAC,WAAW,YAAY,IAAIA,iBAAM,SAAS,KAAK;AAEtD,UAAM,cAAc,CAAC,MAAqD;AACxE,mBAAa,IAAI;AACjB,yCAAU;AAAA,IACZ;AAEA,UAAM,aAAa,CAAC,MAAqD;AACvE,mBAAa,KAAK;AAClB,uCAAS;AAAA,IACX;AAEA,UAAM,aAAa,aAAa,SAAS,CAAC;AAE1C,WACE+E,kCAAAA;AAAAA,MAACW,YAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACTJ,OAAAA,SAAE,MAAM,QAAA;AAAA,UACR,aAAa;AAAA,UACb,SAAS;AAAA,UACT,YAAY;AAAA,UACZ;AAAA,QAAA;AAAA,QAEF,UAAU;AAAA,QACV,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,oBAAoB;AAAA,UAClB,UAAU,CAAC;AAAA,QAAA;AAAA,QAEZ,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AAEA,MAAM,cAAc;AC7DpB,MAAM,UAAU;AAAA,EACd,OAAO;AAAA,EACP,SAAS;AAAA,EACT,OAAO;AAAA,EACP,YAAY;AACd;AAEA,MAAM,WAAW;AAAA,EACf,SAAS;AAAA;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA;AAAA,EACT,SAAS;AAAA;AAAA,EACT,OAAO;AAAA;AACT;AAUO,MAAM,UAAkC,CAAC;AAAA,EAC9C,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AAAA,EACA,qBAAqB;AAAA,EACrB,cAAc;AAAA,EACd,WAAW;AAAA,EACX,GAAG;AACL,MAAM;AACJ,QAAM,eAAe,QAAQ,IAAI;AACjC,QAAM,QAAQ,SAAS,OAAO;AAE9B,SACEN,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW,GAAG,+BAA+B,SAAS;AAAA,MACtD,mBAAkB;AAAA,MAClB;AAAA,MACC,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAAF,kCAAAA,IAACQ,YAAAA,mBAAA,EAAkB,MAAM,cAAc,MAAA,CAAc;AAAA,QACpD,YACCR,kCAAAA,IAACG,kBAAA,EAAK,WAAU,iDACb,UAAA,YAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AChDA,MAAM,eAAuC;AAAA,EAC3C,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,OAAO;AACT;AAEO,MAAM,aAGR,CAAC,EAAE,UAAU,UAAA,MAChBH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAW,GAAG,oBAAoB,SAAS,GAAI,SAAA,CAAS;AAGzD,MAAM,mBAGR,CAAC,EAAE,UAAU,UAAA,MAChBH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAW,GAAG,WAAW,SAAS,GAAI,SAAA,CAAS;AAWhD,MAAM,QAA8B,CAAC;AAAA,EAC1C,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,gBAAgB,QACpBH,kCAAAA,IAACG,kBAAA,EAAK,WAAU,WAAW,UAAA,aAAa,OAAO,EAAA,CAAE;AAGnD,QAAM,aACJ,OAAOI,gBAAE,MAAM,OAAO,MAAM,aAAaA,gBAAE,MAAM,OAAO,EAAA,IAAM;AAEhE,SACEN,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW,GAAG,YAAY,8BAA8B,SAAS;AAAA,MACjE,mBAAkB;AAAA,MACjB,GAAG;AAAA,MAEH,UAAA;AAAA,QAAA,iBAAiBF,kCAAAA,IAACE,kBAAA,EAAK,WAAU,iBAAiB,UAAA,eAAc;AAAA,QACjED,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,UACb,UAAA;AAAA,UAAA,SAASF,kCAAAA,IAACG,kBAAA,EAAK,WAAU,oBAAoB,UAAA,OAAM;AAAA,UACnD,eAAeH,kCAAAA,IAACG,kBAAA,EAAK,WAAU,WAAW,UAAA,aAAY;AAAA,UACtD;AAAA,QAAA,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;ACvCO,MAAM,eAA4C,CAAC;AAAA,EACxD;AAAA,EACA,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,cAAc;AAAA,EACd;AAAA,EACA,GAAG;AACL,MAAM;AACJ,SACEH,kCAAAA,IAAC,QAAA,EAAQ,GAAG,aAAa,UAAU,YAAY,WAC5C,UAAA,YACCC,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,oCACb,UAAA;AAAA,IAAA,eAAeF,kCAAAA,IAAC,SAAA,EAAQ,MAAK,QAAA,CAAQ;AAAA,IACtCA,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,gBAAgB,UAAA,YAAA,CAAY;AAAA,EAAA,EAAA,CAC9C,IAEA,UAEJ;AAEJ;ACAO,MAAM,MAA0B,CAAC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AAEJ,QAAM,iBAAyC;AAAA,IAC7C,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,EAAA;AAIR,QAAM,YAAY,KACd;AAAA,IACE,aAAa;AAAA,IACb,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,EAAA,EACR,EAAE,IACJ;AAGJ,QAAM,iBAAiB,UACnB;AAAA,IACE,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA,EACN,OAAO,IACT;AAGJ,QAAM,gBAAgB,SAClB;AAAA,IACE,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,EACJ,MAAM,IACR;AAGJ,QAAM,WAAW,IACb;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,EAAA,EACN,CAAC,IACH;AAGJ,QAAM,WAAW,IACb;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,EAAA,EACN,CAAC,IACH;AAGJ,QAAM,iBAA2B,CAAA;AACjC,MAAI,EAAG,gBAAe,KAAK,OAAO,eAAe,CAAC,CAAC;AACnD,MAAI,GAAI,gBAAe,KAAK,QAAQ,eAAe,EAAE,CAAC;AACtD,MAAI,GAAI,gBAAe,KAAK,QAAQ,eAAe,EAAE,CAAC;AAGtD,QAAM,gBAA0B,CAAA;AAChC,MAAI,EAAG,eAAc,KAAK,OAAO,eAAe,CAAC,CAAC;AAClD,MAAI,GAAI,eAAc,KAAK,QAAQ,eAAe,EAAE,CAAC;AACrD,MAAI,GAAI,eAAc,KAAK,QAAQ,eAAe,EAAE,CAAC;AAErD,SACEH,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT,GAAG;AAAA,QACH,GAAG;AAAA,QACH;AAAA,QACA,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEH;AAAA,IAAA;AAAA,EAAA;AAGP;AC7HO,MAAM,OAA4B,CAAC;AAAA,EACxC,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AAEJ,QAAM,mBAA2C;AAAA,IAC/C,KAAK;AAAA,IACL,eAAe;AAAA,IACf,KAAK;AAAA,IACL,eAAe;AAAA,EAAA;AAIjB,QAAM,eAAe,QACjB;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,SAAS;AAAA,IACT,UAAU;AAAA,EAAA,EACV,KAAK,IACP;AAGJ,QAAM,iBAAiB,UACnB;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA,EACR,OAAO,IACT;AAGJ,QAAM,cAAsC;AAAA,IAC1C,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,gBAAgB;AAAA,EAAA;AAIlB,QAAM,aAAa,MACf;AAAA,IACE,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,EAAA,EACP,GAAG,IACL;AAEJ,SACEF,kCAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,QACT;AAAA,QACA,iBAAiB,SAAS;AAAA,QAC1B;AAAA,QACA;AAAA,QACA,YAAY,IAAI;AAAA,QAChB;AAAA,QACA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;AC9DO,MAAM,QAA8B,CAAC;AAAA,EAC1C;AAAA,EACA,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,aAAa,cAAc;AAGjC,QAAM,aAAqD;AAAA,IACzD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,OAAO;AAAA,IAAA;AAAA,IAET,YAAY;AAAA,MACV,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,OAAO;AAAA,IAAA;AAAA,EACT;AAIF,QAAM,eAAuC;AAAA,IAC3C,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,SAAS;AAAA,IACT,UAAU;AAAA,EAAA;AAIZ,QAAM,iBAAyC;AAAA,IAC7C,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA;AAGV,SACEA,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,aAAa,aAAa;AAAA,QAC1B,WAAW,SAAS,EAAE,OAAO;AAAA,QAC7B,aAAa,KAAK;AAAA,QAClB,eAAe,OAAO;AAAA,QACtB,QAAQ;AAAA,QACR,SAAS,aAAa,WAAW;AAAA,QACjC;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEH,UAAA,UACGjF,iBAAM,SAAS,IAAI,UAAU,CAAC,OAAO,UACnCgF,kCAAAA,KAAChF,iBAAM,UAAN,EACE,UAAA;AAAA,QAAA;AAAA,QACA,QAAQA,iBAAM,SAAS,MAAM,QAAQ,IAAI,KACxC+E,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,aAAa,gBAAgB;AAAA,YAAA;AAAA,UAC/B;AAAA,QAAA;AAAA,MACF,EAAA,GARiB,KAUrB,CACD,IACD;AAAA,IAAA;AAAA,EAAA;AAGV;AAKO,MAAM,SAAkD,CAAA,UAC7DF,sCAAC,SAAM,WAAU,YAAY,GAAG,MAAA,CAAO;AAMlC,MAAM,SAAkD,CAAA,UAC7DA,sCAAC,SAAM,WAAU,cAAc,GAAG,MAAA,CAAO;ACzGpC,MAAM,UAAkC,CAAC;AAAA,EAC9C;AAAA,EACA,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AAEJ,QAAM,iBAAiB;AAAA,IACrB,YAAY;AAAA,MACV,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,IAEN,UAAU;AAAA,MACR,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,EACN;AAIF,QAAM,kBAAkB;AAAA,IACtB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAIT,QAAM,iBAAiB;AAAA,IACrB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAIR,MAAI,gBAAgB,YAAY;AAC9B,WACEA,kCAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,eAAe,OAAO;AAAA,UACtB,eAAe,SAAS,OAAO;AAAA,UAC/B;AAAA,QAAA;AAAA,QAEF,OAAO,EAAE,OAAO,gBAAgB,SAAS,EAAA;AAAA,QACzC,mBAAkB;AAAA,QACjB,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AAGA,MAAI,CAAC,OAAO;AACV,WACEF,kCAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,eAAe,OAAO;AAAA,UACtB,eAAe,WAAW,OAAO;AAAA,UACjC;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,OAAO,EAAE,QAAQ,gBAAgB,SAAS,EAAA;AAAA,QAC1C,mBAAkB;AAAA,QACjB,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AAGA,QAAM,uBAAuB;AAAA,IAC3B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAGT,SACED,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,eAAe,WAAW,OAAO;AAAA,QACjC,qBAAqB,aAAa;AAAA,QAClC;AAAA,MAAA;AAAA,MAEF,mBAAkB;AAAA,MACjB,GAAG;AAAA,MAEH,UAAA;AAAA,QAAA,kBAAkB,UACjBF,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW,GAAG,UAAU,eAAe,OAAO,GAAG,aAAa;AAAA,YAC9D,OAAO,EAAE,QAAQ,gBAAgB,SAAS,EAAA;AAAA,UAAE;AAAA,QAAA;AAAA,QAGhDF,kCAAAA;AAAAA,UAACG,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACTO,OAAAA,aAAa,KAAK,GAAA;AAAA,cAClB;AAAA,YAAA;AAAA,YAGD,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAEF,kBAAkB,WACjBV,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW,GAAG,UAAU,eAAe,OAAO,GAAG,aAAa;AAAA,YAC9D,OAAO,EAAE,QAAQ,gBAAgB,SAAS,EAAA;AAAA,UAAE;AAAA,QAAA;AAAA,MAC9C;AAAA,IAAA;AAAA,EAAA;AAIR;AC9HO,MAAM,YAAsC,CAAC;AAAA,EAClD,cAAc;AAAA,EACd,UAAU;AAAA,EACV,YAAY;AAAA,EACZ;AACF,MAAM;AAEJ,QAAM,iBAAiB;AAAA,IACrB,YAAY;AAAA,MACV,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,IAEN,UAAU;AAAA,MACR,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,EACN;AAIF,QAAM,mBAAmB;AAAA,IACvB,YAAY;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,IAAA;AAAA,IAET,UAAU;AAAA,MACR,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,IAAA;AAAA,EACT;AAGF,QAAM,eAAe,gBAAgB;AAErC,SACEF,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,mBAAkB;AAAA,MAClB,WAAW;AAAA,QACT;AAAA,QACA,eAAe,WAAW;AAAA,QAC1B,iBAAiB,WAAW,EAAE,SAAS;AAAA,QACvC,eAAe,WAAW,EAAE,OAAO;AAAA,QACnC;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;ACrFA,MAAM,EAAE,OAAOU,eAAA,IAAiBC,YAAAA,WAAW,IAAI,QAAQ;AAmChD,MAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV;AACF,MAAM;AAEJ,QAAM,YAAY;AAAA,IAChB,IAAI;AAAA;AAAA,IACJ,IAAI;AAAA;AAAA,IACJ,IAAI;AAAA;AAAA,IACJ,IAAI;AAAA;AAAA,IACJ,OAAO;AAAA;AAAA,IACP,MAAMD;AAAAA,EAAA;AAIR,QAAM,iBAAiB;AAAA,IACrB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,QAAM,WAAW,UAAU,IAAI;AAE/B,SACEZ,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,UAAU;AAAA,QACV,eAAe,OAAO;AAAA,QACtB;AAAA,MAAA;AAAA,MAEF,OAAO;AAAA,QACL,UAAU,WAAWU,iBAAe,WAAW;AAAA,MAAA;AAAA,MAGhD;AAAA,IAAA;AAAA,EAAA;AAGP;AChDO,MAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA,OAAO;AAAA,EACP;AACF,MAAM;AACJ,QAAM,iBAAiB,MAAM;AAC3B,YAAQ,MAAA;AAAA,MACN,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AAAA,MACL;AACE,eAAO;AAAA,IAAA;AAAA,EAEb;AAEA,SACEZ,sCAACE,YAAAA,QAAK,WAAW,GAAG,QAAQ,kBAAkB,SAAS,GAAI,UAAS;AAExE;ACdO,MAAM,SAAgC,CAAC;AAAA,EAC5C,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP;AACF,MAAM;AAEJ,QAAM,cAAc;AAAA,IAClB,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,OAAO;AAAA,IAAA;AAAA,IAET,YAAY;AAAA,MACV,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,OAAO;AAAA,IAAA;AAAA,EACT;AAIF,QAAM,kBACJ,OAAO,SAAS,WACZ,SAAS,aACP,EAAE,QAAQ,KAAA,IACV,EAAE,OAAO,SACX;AAEN,QAAM,YAAY,OAAO,SAAS,WAAW,YAAY,IAAI,EAAE,IAAI,IAAI;AAEvE,SACEF,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW,GAAG,QAAQ,UAAU,CAAC,QAAQ,WAAW,SAAS;AAAA,MAC7D,OAAO;AAAA,MACP,6BAA2B;AAAA,IAAA;AAAA,EAAA;AAGjC;AC9EA,MAAM,EAAE,OAAOU,eAAA,IAAiBC,YAAAA,WAAW,IAAI,QAAQ;AAgDhD,MAAM,OAA4B,CAAC;AAAA,EACxC;AAAA,EACA,OAAO;AAAA,EACP,MAAM;AAAA,EACN,aAAa;AAAA,EACb;AACF,MAAM;AAEJ,QAAM,YAAY;AAAA,IAChB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,EAAA;AAIT,QAAM,aAAa;AAAA,IACjB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,EAAA;AAIT,QAAM,oBAAoB;AAAA,IACxB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,SAAS;AAAA,EAAA;AAGX,QAAM,WAAW,UAAU,GAAG;AAI9B,QAAM,eAAe,CAAC,OAAe,MAAM;AACzC,UAAM,WAAW,YAAY,OAAO;AACpC,UAAM,iBAAiBD,iBAAe;AACtC,UAAM,eAAe,iBAAiB,YAAY;AAClD,WAAO,cAAc,OAAO,YAAY,OAAO;AAAA,EACjD;AAGA,QAAM,oBAAoB3F,iBAAM,SAAS,IAAI,UAAU,CAAA,UAAS;AAC9D,QAAIA,iBAAM,eAAe,KAAK,GAAG;AAC/B,YAAM,UAAW,MAAM,MAAwB,WAAW;AAC1D,aAAOA,iBAAM,aAAa,OAA6B;AAAA,QACrD,OAAO;AAAA,UACL,OAAO,aAAa,OAAO;AAAA,UAC3B,GAAI,MAAM,MAA6B;AAAA,QAAA;AAAA,MACzC,CACD;AAAA,IACH;AACA,WAAO;AAAA,EACT,CAAC;AAED,SACE+E,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,WAAW,GAAG;AAAA,QACd,kBAAkB,UAAU;AAAA,QAC5B;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,IAAA;AAAA,EAAA;AAGP;AAOO,MAAM,WAAyD,CAAC;AAAA,EACrE;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,+CACGA,YAAAA,MAAA,EAAK,WAAW,GAAG,SAAS,GAAG,OAC7B,UACH;AAEJ;AC9GO,MAAM,QAAQjF,iBAAM;AAAA,EACzB,CAAC,EAAE,UAAU,UAAU,UAAU,WAAW,GAAG,MAAA,GAAS,QAAQ;AAC9D,WACEgF,kCAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACTO,OAAAA,aAAa,MAAM,QAAA;AAAA,UACnB,YAAY;AAAA,UACZ;AAAA,QAAA;AAAA,QAEF,mBAAkB;AAAA,QACjB,GAAG;AAAA,QAEH,UAAA;AAAA,UAAA;AAAA,UACA,YAAYV,kCAAAA,IAACG,kBAAA,EAAK,WAAU,qBAAoB,UAAA,IAAA,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGxD;AACF;AAEA,MAAM,cAAc;ACEb,MAAM,WAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AAEJ,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,QAAM,mBAAmB,CAAC,aAAqB;AAE7C,QAAI,aAAa,SAAS,SAAS,WAAW;AAC5C;AAAA,IACF;AAEA,iBAAa,QAAQ;AAAA,EACvB;AAEA,QAAM,iBAAiB,MAAM;AAC7B,QAAM,gBAAgB,aAAa,cAAc;AAEjD,gDACGD,YAAAA,MAAA,EAAK,WAAW,GAAG,UAAU,SAAS,GACrC,UAAA;AAAA,IAAAF,kCAAAA;AAAAA,MAACW,YAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA,cAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA,UAAU,CAAC,YAAY,CAAC;AAAA,QACxB;AAAA,QACA,WAAS;AAAA,QACT,mBAAkB;AAAA,QAClB,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,YAAY,IAAI;AAAA,UAChB,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ;AAAA,QAAA;AAAA,QAEF,sBAAqB;AAAA,QACrB,mBAAkB;AAAA,QAClB,oBAAoB,EAAE,SAAA;AAAA,QACrB,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,IAIL,iBACCX,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,kCACd,UAAAD,kCAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,aAAa,iBAAiB,YAAY,MACtC,yCACA;AAAA,UACJ,aACE,kBAAkB,aAClB;AAAA,QAAA;AAAA,QAGH,UAAA;AAAA,UAAA;AAAA,UACA,aAAa,MAAM,SAAS;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,EAC/B,CACF;AAAA,EAAA,GAEJ;AAEJ;ACjFO,MAAM,WAAoC,CAAC;AAAA,EAChD,SAAS;AAAA,EACT,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AAAA,EACA,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,MAAM;AAEJ,QAAM,CAAC,qBAAqB,sBAAsB,IAChDR,MAAAA,SAAS,cAAc;AACzB,QAAM,eAAe,sBAAsB;AAC3C,QAAM,UAAU,eAAe,oBAAoB;AAEnD,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,MACF,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,IAER,IAAI;AAAA,MACF,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,IAER,IAAI;AAAA,MACF,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,EACR;AAGF,QAAM,oBAAoB,MAAM;AAC9B,QAAI,OAAO;AACT,aAAO,UACH,8BACA;AAAA,IACN;AAEA,UAAM,iBAAiB;AAAA,MACrB,SAAS,UACL,gCACA;AAAA,MACJ,SAAS,UACL,kCACA;AAAA,MACJ,SAAS,UACL,oCACA;AAAA,MACJ,OAAO,UACH,8BACA;AAAA,IAAA;AAGN,WAAO,eAAe,OAAO;AAAA,EAC/B;AAEA,QAAM,cAAc,MAAM;AACxB,QAAI,SAAU;AAEd,UAAM,aAAa,CAAC;AAEpB,QAAI,CAAC,cAAc;AACjB,6BAAuB,UAAU;AAAA,IACnC;AAEA,yCAAW;AAAA,EACb;AAEA,QAAM,SAAS,YAAY,IAAI;AAE/B,gDACGO,YAAAA,MAAA,EAAK,WAAW,GAAG,iBAAiB,SAAS,GAC5C,UAAA;AAAA,IAAAD,kCAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA,YAAY;AAAA,QAAA;AAAA,QAEd,mBAAkB;AAAA,QAClB,oBAAoB;AAAA,UAClB,SAAS,gBAAgB,UAAU;AAAA,UACnC;AAAA,QAAA;AAAA,QAEF,oBAAoB;AAAA,QACnB,GAAG;AAAA,QAEJ,UAAA;AAAA,UAAAJ,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,6CACd,UAAAF,kCAAAA;AAAAA,YAACE,YAAAA;AAAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,OAAO;AAAA,gBACP,kBAAA;AAAA,cAAkB;AAAA,cAGnB,UAAA,gBACCF,kCAAAA;AAAAA,gBAACE,YAAAA;AAAAA,gBAAA;AAAA,kBACC,WAAW,GAAG,uBAAuB,OAAO,OAAO,OAAO;AAAA,gBAAA;AAAA,cAAA,IAE1D,UACFF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAW,GAAG,uBAAuB,OAAO,KAAK,EAAA,CAAG,IACxD;AAAA,YAAA;AAAA,UAAA,GAER;AAAA,WACE,SAAS,gBACTD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,wBACb,UAAA;AAAA,YAAA,SACCD,kCAAAA;AAAAA,cAACE,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAW,GAAG,iCAAiC,OAAO,IAAI;AAAA,gBAEzD,UAAA;AAAA,kBAAA;AAAA,kBACA,YAAYH,kCAAAA,IAACG,kBAAA,EAAK,WAAU,qBAAoB,UAAA,IAAA,CAAC;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGrD,eACCH,kCAAAA;AAAAA,cAACG,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAW,GAAG,oCAAoC,OAAO,IAAI;AAAA,gBAE5D,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACH,EAAA,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGH,gBACCH,kCAAAA,IAACG,kBAAA,EAAK,WAAU,+CACb,UAAA,aAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;ACjKO,MAAM,SAASlF,iBAAM;AAAA,EAC1B,CACE;AAAA,IACE,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB;AAAA,IACA,WAAW;AAAA,IACX,OAAO;AAAA,IACP;AAAA,IACA,GAAG;AAAA,EAAA,GAEL,QACG;AAEH,UAAM,CAAC,qBAAqB,sBAAsB,IAChD0E,MAAAA,SAAS,cAAc;AACzB,UAAM,eAAe,sBAAsB;AAC3C,UAAM,UAAU,eAAe,oBAAoB;AAGnD,UAAM,gBAAgB1E,iBAAM;AAAA,MAC1B,IAAI4E,qBAAS,MAAM,UAAU,IAAI,CAAC;AAAA,IAAA,EAClC;AAEF5E,qBAAM,UAAU,MAAM;AACpB4E,kBAAAA,SAAS,OAAO,eAAe;AAAA,QAC7B,SAAS,UAAU,IAAI;AAAA,QACvB,UAAU;AAAA,QACV,iBAAiB;AAAA,MAAA,CAClB,EAAE,MAAA;AAAA,IACL,GAAG,CAAC,SAAS,aAAa,CAAC;AAG3B,UAAMiB,cAAa;AAAA,MACjB,IAAI;AAAA,QACF,OAAO;AAAA,QACP,OAAO;AAAA,QACP,YAAY;AAAA,MAAA;AAAA,MAEd,IAAI;AAAA,QACF,OAAO;AAAA,QACP,OAAO;AAAA,QACP,YAAY;AAAA,MAAA;AAAA,MAEd,IAAI;AAAA,QACF,OAAO;AAAA,QACP,OAAO;AAAA,QACP,YAAY;AAAA,MAAA;AAAA,IACd;AAGF,UAAM,SAASA,YAAW,IAAI;AAE9B,UAAM,cAAc,MAAM;AACxB,UAAI,SAAU;AAEd,YAAM,aAAa,CAAC;AAEpB,UAAI,CAAC,cAAc;AACjB,+BAAuB,UAAU;AAAA,MACnC;AAEA,yDAAkB;AAAA,IACpB;AAEA,UAAM,kBAAkB,cAAc,YAAY;AAAA,MAChD,YAAY,CAAC,GAAG,CAAC;AAAA,MACjB,aAAa,CAAC,GAAG,OAAO,UAAU;AAAA,IAAA,CACnC;AAED,WACEd,kCAAAA;AAAAA,MAACI,YAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA,OAAO;AAAA,UACP,UACI,iCACA;AAAA,UACJ,YAAY;AAAA,UACZ;AAAA,QAAA;AAAA,QAEF,mBAAkB;AAAA,QAClB,oBAAoB,EAAE,SAAS,SAAA;AAAA,QAC9B,GAAG;AAAA,QAEJ,UAAAJ,kCAAAA;AAAAA,UAACH,YAAAA,SAAS;AAAA,UAAT;AAAA,YACC,WAAW,GAAG,mCAAmC,OAAO,KAAK;AAAA,YAC7D,OAAO;AAAA,cACL,WAAW,CAAC,EAAE,YAAY,iBAAiB;AAAA,cAC3C,YAAY;AAAA,YAAA;AAAA,UACd;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAGN;AACF;AAEA,OAAO,cAAc;ACrGd,MAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX,OAAO;AAAA,EACP;AAAA,EACA,GAAG;AACL,MAAM;AAEJ,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAGR,QAAM,WAAW;AAAA,IACf,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAIR,QAAMkB,iBAAgB;AAAA,IACpB,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,IAER,OAAO;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,IAER,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,IAER,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,EACR;AAGF,QAAM,SAASA,eAAc,OAAO;AAEpC,gDACGb,YAAAA,MAAA,EAAK,WAAW,GAAG,qCAAqC,SAAS,GAC/D,UAAA;AAAA,IAAA,YACCF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAW,GAAG,SAAS,IAAI,GAAG,OAAO,MAAM,QAAQ,GACtD,UAAA,OAAO,MACV;AAAA,IAEFH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAW,GAAG,YAAY,IAAI,GAAG,OAAO,IAAI,GAAI,GAAG,WACtD,SAAA,CACH;AAAA,EAAA,GACF;AAEJ;ACnCO,MAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,WAAW;AAAA,EACX;AAAA,EACA,QAAQ;AACV,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAIR,MAAAA,SAAS,KAAK;AAE1C,QAAM,iBAAiB,QAAQ,KAAK,CAAA,QAAO,IAAI,UAAU,KAAK;AAE9D,QAAM,eAAeG,MAAAA;AAAAA,IACnB,CAAC,gBAAwB;AACvB,qDAAgB;AAChB,gBAAU,KAAK;AAAA,IACjB;AAAA,IACA,CAAC,aAAa;AAAA,EAAA;AAGhB,QAAM,eAAe,CAAC,EAAE,KAAA,MACtBE,kCAAAA;AAAAA,IAACI,YAAAA;AAAAA,IAAA;AAAA,MACC,SAAS,MAAM,CAAC,KAAK,YAAY,aAAa,KAAK,KAAK;AAAA,MACxD,UAAU,KAAK;AAAA,MACf,WAAW;AAAA,QACT;AAAA,QACA,KAAK,UAAU,SAAS;AAAA,QACxB,KAAK,YAAY;AAAA,MAAA;AAAA,MAEnB,mBAAkB;AAAA,MAClB,oBAAoB;AAAA,QAClB,UAAU,KAAK,UAAU;AAAA,QACzB,UAAU,KAAK;AAAA,MAAA;AAAA,MAGjB,UAAAH,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,8CACd,UAAA;AAAA,QAAAF,kCAAAA;AAAAA,UAACG,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,KAAK,UAAU,QACX,iDACA;AAAA,YAAA;AAAA,YAGL,UAAA,KAAK;AAAA,UAAA;AAAA,QAAA;AAAA,QAEP,KAAK,UAAU,+CACbA,YAAAA,MAAA,EAAK,WAAU,oCAAmC,UAAA,IAAA,CAAC;AAAA,MAAA,EAAA,CAExD;AAAA,IAAA;AAAA,EAAA;AAIJ,SACEF,kCAAAA,KAAAe,4BAAA,EAEE,UAAA;AAAA,IAAAf,kCAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS,MAAM,CAAC,YAAY,UAAU,IAAI;AAAA,QAC1C;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA,YAAY;AAAA,UACZ;AAAA,QAAA;AAAA,QAEF,mBAAkB;AAAA,QAClB,oBAAoB,EAAE,UAAU,UAAU,OAAA;AAAA,QAE1C,UAAA;AAAA,UAAAJ,kCAAAA;AAAAA,YAACG,YAAAA;AAAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,iBACI,qCACA;AAAA,cAAA;AAAA,cAEN,eAAe;AAAA,cAEd,4DAAgB,UAAS;AAAA,YAAA;AAAA,UAAA;AAAA,UAE5BH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,yCAAwC,UAAA,IAAA,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAI3DH,kCAAAA;AAAAA,MAACiB,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,eAAc;AAAA,QACd,aAAW;AAAA,QACX,gBAAgB,MAAM,UAAU,KAAK;AAAA,QAErC,gDAACf,kBAAA,EAAK,WAAU,kCACd,UAAAD,kCAAAA,KAACiB,YAAAA,cAAA,EAAa,WAAU,0CAEtB,UAAA;AAAA,UAAAjB,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,sGACd,UAAA;AAAA,YAAAF,kCAAAA,IAACI,YAAAA,WAAA,EAAU,SAAS,MAAM,UAAU,KAAK,GACvC,UAAAJ,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,8CAA6C,UAAA,SAAA,CAE7D,GACF;AAAA,YACAH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,yDACb,UAAA,OACH;AAAA,kDACCD,YAAAA,MAAA,EAAK,OAAO,EAAE,OAAO,KAAG,CAAG;AAAA,UAAA,GAC9B;AAAA,UAGAF,kCAAAA;AAAAA,YAACmB,YAAAA;AAAAA,YAAA;AAAA,cACC,MAAM;AAAA,cACN,YAAY;AAAA,cACZ,cAAc,CAAC,SAAuB,KAAK;AAAA,cAC3C,OAAO,EAAE,WAAW,IAAA;AAAA,YAAI;AAAA,UAAA;AAAA,QAC1B,EAAA,CACF,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAKO,MAAM,gBAAgB;AAKtB,MAAM,cAAkD,CAAC;AAAA,EAC9D,cAAc;AAChB,MAAMnB,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,oCAAoC,UAAA,YAAA,CAAY;ACzI/D,MAAM,cAA0C,CAAC;AAAA,EACtD,OAAO;AAAA,EACP;AAAA,EACA,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,OAAO;AAAA,EACP,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,UAAU;AAAA,EACV;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,CAAC,eAAe,gBAAgB,IAAIR,MAAAA,SAAS,EAAE;AAGrD,QAAM,QAAQ,oBAAoB,SAAY,kBAAkB;AAChE,QAAM,eAAe,oBAAoB;AAGzC,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,MACF,OAAO;AAAA,MACP,MAAM;AAAA,MACN,aAAa,WAAW,SAAS;AAAA,MACjC,cAAc;AAAA,IAAA;AAAA,IAEhB,IAAI;AAAA,MACF,OAAO;AAAA,MACP,MAAM;AAAA,MACN,aAAa,WAAW,UAAU;AAAA,MAClC,cAAc;AAAA,IAAA;AAAA,IAEhB,IAAI;AAAA,MACF,OAAO;AAAA,MACP,MAAM;AAAA,MACN,aAAa,WAAW,UAAU;AAAA,MAClC,cAAc;AAAA,IAAA;AAAA,EAChB;AAGF,QAAMmB,cAAa,YAAY,IAAI;AAEnC,QAAM,eAAehB,MAAAA;AAAAA,IACnB,CAAC,aAAqB;AACpB,UAAI,CAAC,cAAc;AACjB,yBAAiB,QAAQ;AAAA,MAC3B;AACA,mDAAe;AAAA,IACjB;AAAA,IACA,CAAC,cAAc,YAAY;AAAA,EAAA;AAG7B,QAAM,cAAcA,MAAAA,YAAY,MAAM;AACpC,QAAI,CAAC,cAAc;AACjB,uBAAiB,EAAE;AAAA,IACrB;AACA,iDAAe;AAAA,EACjB,GAAG,CAAC,cAAc,YAAY,CAAC;AAE/B,gDACGI,YAAAA,MAAA,EAAK,WAAW,GAAG,mBAAmB,SAAS,GAE7C,UAAA;AAAA,IAAA,YACCF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,wEACd,UAAAF,kCAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW,GAAGW,YAAW,MAAM,kCAAkC;AAAA,QAClE,UAAA;AAAA,MAAA;AAAA,IAAA,GAGH;AAAA,IAIFd,kCAAAA;AAAAA,MAACW,YAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA,cAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA,UAAU,CAAC,YAAY,CAAC;AAAA,QACxB,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACAG,YAAW;AAAA,UACXA,YAAW;AAAA,UACXA,YAAW;AAAA,UACX,YAAY;AAAA,UACZ,WAAW;AAAA,QAAA;AAAA,QAEb,sBAAqB;AAAA,QACrB,mBAAkB;AAAA,QAClB,oBAAoB,EAAE,SAAA;AAAA,QACrB,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,IAIL,aAAa,SAAS,CAAC,WACtBd,kCAAAA;AAAAA,MAACI,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT;AAAA,QACA,WAAU;AAAA,QACV,mBAAkB;AAAA,QAClB,oBAAmB;AAAA,QAEnB,UAAAJ,kCAAAA,IAACG,oBAAK,WAAW,GAAGW,YAAW,MAAM,eAAe,GAAG,UAAA,IAAA,CAAC;AAAA,MAAA;AAAA,IAAA;AAAA,IAK3D,WACCd,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,oEACd,UAAAF,kCAAAA,IAACQ,YAAAA,mBAAA,EAAkB,MAAK,SAAQ,OAAM,UAAA,CAAU,EAAA,CAClD;AAAA,EAAA,GAEJ;AAEJ;AC5GO,MAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,WAAW;AAAA,EACX,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB;AAAA,EACA,OAAO;AAAA,EACP;AACF,MAAM;AAEJ,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,MACF,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,IAAA;AAAA,IAER,IAAI;AAAA,MACF,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,IAAA;AAAA,IAER,IAAI;AAAA,MACF,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,IAAA;AAAA,EACR;AAGF,QAAMM,cAAa,YAAY,IAAI;AAEnC,QAAM,aAAa,CAAC,QAAwB;AAC1C,QAAI,UAAU;AACd,QAAI,QAAQ,UAAa,UAAU,IAAK,WAAU;AAClD,QAAI,QAAQ,UAAa,UAAU,IAAK,WAAU;AAClD,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB,CAAC,SAAiB;AACzC,UAAM,WAAW,WAAW,IAAI;AAChC,QAAI,CAAC,MAAM,QAAQ,GAAG;AACpB,YAAM,eAAe,WAAW,QAAQ;AACxC,eAAS,YAAY;AAAA,IACvB,WAAW,SAAS,IAAI;AACtB,eAAS,OAAO,CAAC;AAAA,IACnB;AAAA,EACF;AAEA,QAAM,YAAY,MAAM;AACtB,QAAI,SAAU;AACd,UAAM,WAAW,WAAW,QAAQ,IAAI;AACxC,aAAS,QAAQ;AAAA,EACnB;AAEA,QAAM,YAAY,MAAM;AACtB,QAAI,SAAU;AACd,UAAM,WAAW,WAAW,QAAQ,IAAI;AACxC,aAAS,QAAQ;AAAA,EACnB;AAEA,QAAM,eAAe,QAAQ,UAAa,QAAQ;AAClD,QAAM,eAAe,QAAQ,UAAa,QAAQ;AAElD,QAAM,gBAAgB,CAAC;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,MAOAd,kCAAAA;AAAAA,IAACI,YAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,UAAU,YAAY;AAAA,MACtB,mBAAkB;AAAA,MAClB,oBAAoB;AAAA,MACpB,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACAU,YAAW;AAAA,SACV,YAAY,mBAAmB;AAAA,MAAA;AAAA,MAGlC,UAAAd,kCAAAA,IAACG,oBAAK,WAAW,GAAG,oCAAoCW,YAAW,IAAI,GACpE,UAAA,KAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAKJ,MAAI,gBAAgB,oBAAoB,SAAS;AAC/C,kDACGZ,YAAAA,MAAA,EAAK,WAAW,GAAG,+BAA+B,SAAS,GAC1D,UAAA;AAAA,MAAAF,kCAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,gBAAgB,CAAC;AAAA,UACjB,MAAK;AAAA,UACL,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZA,kCAAAA;AAAAA,QAACW,YAAAA;AAAAA,QAAA;AAAA,UACC,OAAO,OAAO,KAAK;AAAA,UACnB,cAAc;AAAA,UACd,cAAa;AAAA,UACb,UAAU,CAAC;AAAA,UACX;AAAA,UACA,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACAG,YAAW;AAAA,YACX,YAAY;AAAA,UAAA;AAAA,UAEd,oBAAmB;AAAA,QAAA;AAAA,MAAA;AAAA,MAErBd,kCAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,gBAAgB,CAAC;AAAA,UACjB,MAAK;AAAA,UACL,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IACZ,GACF;AAAA,EAEJ;AAGA,MAAI,gBAAgB,oBAAoB,SAAS;AAC/C,kDACGE,YAAAA,MAAA,EAAK,WAAW,GAAG,qCAAqC,SAAS,GAChE,UAAA;AAAA,MAAAF,kCAAAA;AAAAA,QAACW,YAAAA;AAAAA,QAAA;AAAA,UACC,OAAO,OAAO,KAAK;AAAA,UACnB,cAAc;AAAA,UACd,cAAa;AAAA,UACb,UAAU,CAAC;AAAA,UACX;AAAA,UACA,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACAG,YAAW;AAAA,YACX,YAAY;AAAA,UAAA;AAAA,UAEd,oBAAmB;AAAA,QAAA;AAAA,MAAA;AAAA,MAErBb,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,yBACd,UAAA;AAAA,QAAAF,kCAAAA;AAAAA,UAACI,YAAAA;AAAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,UAAU,YAAY,CAAC;AAAA,YACvB,mBAAkB;AAAA,YAClB,oBAAmB;AAAA,YACnB,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,eACC,YAAY,CAAC,iBAAiB;AAAA,YAAA;AAAA,YAGjC,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,4CAA2C,UAAA,IAAA,CAAC;AAAA,UAAA;AAAA,QAAA;AAAA,QAE9DH,kCAAAA;AAAAA,UAACI,YAAAA;AAAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,UAAU,YAAY,CAAC;AAAA,YACvB,mBAAkB;AAAA,YAClB,oBAAmB;AAAA,YACnB,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,eACC,YAAY,CAAC,iBAAiB;AAAA,YAAA;AAAA,YAGjC,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,4CAA2C,UAAA,IAAA,CAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MAC9D,EAAA,CACF;AAAA,IAAA,GACF;AAAA,EAEJ;AAGA,SACEH,kCAAAA;AAAAA,IAACW,YAAAA;AAAAA,IAAA;AAAA,MACC,OAAO,OAAO,KAAK;AAAA,MACnB,cAAc;AAAA,MACd,cAAa;AAAA,MACb,UAAU,CAAC;AAAA,MACX;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAG,YAAW;AAAA,QACX,YAAY;AAAA,QACZ;AAAA,MAAA;AAAA,MAEF,oBAAmB;AAAA,IAAA;AAAA,EAAA;AAGzB;AC/NO,MAAM,OAA4B,CAAC;AAAA,EACxC;AAAA,EACA,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AACF,MAAM;AAEJ,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EAAA;AAIT,QAAM,gBAAgB;AAAA,IACpB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAIR,QAAM,eAAe;AAAA,IACnB,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,EAAA;AAIV,QAAM,eAAe,QACjB;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA,EACP,KAAK,IACP;AAGJ,QAAM,mBAAmB;AAAA,IACvB,MAAM;AAAA,IACN,WAAW;AAAA,IACX,WAAW;AAAA,IACX,YAAY;AAAA,EAAA;AAGd,SACEd,kCAAAA;AAAAA,IAACoB,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT,YAAY,IAAI;AAAA,QAChB,cAAc,MAAM;AAAA,QACpB,aAAa,KAAK;AAAA,QAClB;AAAA,QACA,iBAAiB,SAAS;AAAA,QAC1B;AAAA,MAAA;AAAA,MAEF;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAGP;AC3EO,MAAM,UAAkC,CAAC;AAAA,EAC9C;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,SAAS;AAAA,EACT,QAAQ;AAAA,EACR;AAAA,EACA;AACF,MAAM;AAEJ,QAAM,eAAe;AAAA,IACnB,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EAAA;AAGL,QAAM,aAAa,QAAQ,aAAa,KAAK;AAG7C,QAAM,cAAc;AAAA,IAClB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAIR,QAAM,gBAAgB;AAAA,IACpB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,IACN,WAAW;AAAA,EAAA;AAIb,QAAM,eAAe;AAAA,IACnB,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,EAAA;AAIX,QAAM,eAAe,QACjB;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA,EACP,KAAK,IACP;AAEJ,SACEpB,kCAAAA;AAAAA,IAACG,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT,YAAY,UAAU;AAAA,QACtB,cAAc,MAAM;AAAA,QACpB,aAAa,KAAK;AAAA,QAClB;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,mBAAkB;AAAA,MAEjB;AAAA,IAAA;AAAA,EAAA;AAGP;AC/EO,MAAM,OAA4B,CAAC;AAAA,EACxC;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AACF,MAAM;AAEJ,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAIN,QAAM,mBAAmB;AAAA,IACvB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,EAAA;AAIV,QAAM,qBAAqB;AAAA,IACzB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,EAAA;AAGV,SACEH,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,iBAAiB,OAAO;AAAA,QACxB,YAAY,IAAI;AAAA,QAChB;AAAA,MAAA;AAAA,MAGF,UAAAF,kCAAAA;AAAAA,QAACG,YAAAA;AAAAA,QAAA;AAAA,UACC,WAAW,GAAG,yBAAyB,mBAAmB,OAAO,CAAC;AAAA,UAClE,OAAO,EAAE,YAAY,YAAA;AAAA,UAEpB;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN;ACxCO,MAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,OAAO,YAAY;AAGzB,MAAI,KAAK,UAAU,WAAW;AAC5B,WAAOH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAuB,UAAA,KAAA,CAAK;AAAA,EAC3C;AAGA,QAAM,mBAAmB,MAAc;AACrC,UAAM,iBAAiB,SAAS;AAChC,UAAM,kBAAkB,YAAY;AAEpC,YAAQ,UAAA;AAAA,MACN,KAAK;AACH,eAAO,WAAW,KAAK,MAAM,KAAK,SAAS,eAAe;AAAA,MAE5D,KAAK,UAAU;AACb,cAAM,aAAa,KAAK,MAAM,kBAAkB,CAAC;AACjD,cAAM,QAAQ,KAAK,MAAM,GAAG,UAAU;AACtC,cAAM,MAAM,KAAK,MAAM,KAAK,UAAU,kBAAkB,WAAW;AACnE,eAAO,QAAQ,WAAW;AAAA,MAC5B;AAAA,MAEA,KAAK;AAAA,MACL;AACE,eAAO,KAAK,MAAM,GAAG,eAAe,IAAI;AAAA,IAAA;AAAA,EAE9C;AAEA,QAAM,gBAAgB,iBAAA;AAEtB,+CAAQA,YAAAA,MAAA,EAAK,WAAW,GAAG,SAAS,GAAI,UAAA,eAAc;AACxD;AC1BO,MAAM,QAA8B,CAAC;AAAA,EAC1C;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AAEJ,QAAM,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAGV,QAAM,qBAAqB;AAAA,IACzB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAIV,QAAM,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAGV,QAAM,qBAAqB;AAAA,IACzB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAIV,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,QAAM,kBAAkB;AAAA,IACtB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAIN,QAAM,kBAAkB;AAAA,IACtB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAIV,QAAM,eACJ,UAAU,SACN,aAAa,UAAa,QAAQ,WAChC,GAAG,QAAQ,MACX,MAAM,SAAA,IACR;AAEN,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA,UAAU,eAAe,OAAO,IAAI,eAAe,OAAO;AAAA,IAC1D,YAAY,IAAI;AAAA,IAChB,OAAO,iBAAiB;AAAA,IACxB;AAAA,EAAA;AAGF,QAAM,cAAc;AAAA,IAClB,gBAAgB,IAAI;AAAA,IACpB;AAAA,IACA,UAAU,mBAAmB,OAAO,IAAI,mBAAmB,OAAO;AAAA,EAAA;AAGpE,QAAM,UACJF,kCAAAA,KAAAe,kBAAAA,UAAA,EACG,UAAA;AAAA,IAAA,OACChB,kCAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,gBAAgB,OAAO;AAAA,QAAA;AAAA,MACzB;AAAA,IAAA;AAAA,IAGH,QAAQF,kCAAAA,IAACE,kBAAA,EAAK,WAAU,QAAQ,UAAA,MAAK;AAAA,IACrC,YAAYF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAW,aAAc,UAAS;AAAA,IACpD,sDACEA,kBAAA,EAAK,WAAW,GAAG,aAAa,MAAM,GAAI,UAAA,cAAa;AAAA,IAEzD,eAAe,aACdH,kCAAAA;AAAAA,MAACI,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,WAAU;AAAA,QACV,mBAAkB;AAAA,QAClB,oBAAmB;AAAA,QAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAW,aAAa,UAAA,IAAA,CAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EACjC,GAEJ;AAGF,MAAI,SAAS;AACX,WACEH,kCAAAA;AAAAA,MAACI,YAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,QACX,mBAAkB;AAAA,QAEjB,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AAEA,SAAOJ,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAW,kBAAmB,UAAA,SAAQ;AACrD;AC5JO,MAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,YAAY,aAAa,IAAIP,MAAAA,SAAS,KAAK;AAGlD,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,QAAM,kBAAkB;AAAA,IACtB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,QAAM,oBAAoB;AAAA,IACxB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAIN,QAAM,gBAAgB;AAAA,IACpB,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EAAA;AAIR,QAAM,mBAAmB,CAAC0B,UAAyB;AACjD,UAAM,QAAQA,MAAK,KAAA,EAAO,MAAM,KAAK;AACrC,QAAI,MAAM,WAAW,GAAG;AACtB,aAAO,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,YAAA;AAAA,IAC5B;AACA,WACE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,YAAA,IACnB,MAAM,MAAM,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,YAAA;AAAA,EAEtC;AAGA,QAAM,kBAAkB,aAAa,OAAO,iBAAiB,IAAI,IAAI;AACrE,QAAM,YAAY,OAAO,CAAC;AAE1B,QAAM,mBAAmB,MAAM;AAC7B,kBAAc,IAAI;AAAA,EACpB;AAEA,QAAM,UACJpB,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,YACd,UAAA;AAAA,IAAAF,kCAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,YAAY,IAAI;AAAA,UAChB,CAAC,aAAa;AAAA,UACd;AAAA,QAAA;AAAA,QAGD,UAAA,YACCF,kCAAAA;AAAAA,UAACsB,YAAAA;AAAAA,UAAA;AAAA,YACC,QAAQ,EAAE,KAAK,IAAA;AAAA,YACf,WAAU;AAAA,YACV,oBAAoB;AAAA,YACpB,SAAS;AAAA,UAAA;AAAA,QAAA,IAGXtB,kCAAAA;AAAAA,UAACG,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,gBAAgB,IAAI;AAAA,YAAA;AAAA,YAGrB,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,IAGH,UACCH,kCAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,cAAc,MAAM;AAAA,UACpB,kBAAkB,IAAI;AAAA,QAAA;AAAA,QAExB,oBAAoB;AAAA,MAAA;AAAA,IAAA;AAAA,EACtB,GAEJ;AAGF,MAAI,SAAS;AACX,WACEF,kCAAAA;AAAAA,MAACI,YAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA,mBAAkB;AAAA,QAClB,oBAAoB;AAAA,QAEnB,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AAEA,SAAO;AACT;AAgBO,MAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA,MAAM;AAAA,EACN,OAAO;AAAA,EACP;AACF,MAAM;AACJ,QAAM,aAAanF,iBAAM,SAAS,QAAQ,QAAQ;AAClD,QAAM,SAAS,WAAW,SAAS;AACnC,QAAM,kBAAkB,WAAW,MAAM,GAAG,GAAG;AAG/C,QAAM,iBAAiB;AAAA,IACrB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,gDACGiF,YAAAA,MAAA,EAAK,WAAW,GAAG,8BAA8B,SAAS,GACxD,UAAA;AAAA,IAAA,gBAAgB,IAAI,CAAC,OAAO,UAC3BF,kCAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QAEC,WAAW,GAAG,QAAQ,KAAK,eAAe,IAAI,CAAC;AAAA,QAC/C,OAAO,EAAE,QAAQ,gBAAgB,SAAS,MAAA;AAAA,QAEzC,2BAAM,eAAe,KAAK,IACvBjF,iBAAM,aAAa,OAA0C;AAAA,UAC3D;AAAA,QAAA,CACD,IACD;AAAA,MAAA;AAAA,MARC;AAAA,IAAA,CAUR;AAAA,IACA,SAAS,KACR+E,kCAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT,eAAe,IAAI;AAAA,UACnB;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,IAAI;AAAA,YACJ,IAAI;AAAA,YACJ,IAAI;AAAA,YACJ,IAAI;AAAA,UAAA,EACJ,IAAI;AAAA,QAAA;AAAA,QAGR,UAAAD,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,gBACE,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,cAAA,EACJ,IAAI;AAAA,YAAA;AAAA,YAET,UAAA;AAAA,cAAA;AAAA,cACG;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACJ;AAAA,IAAA;AAAA,EACF,GAEJ;AAEJ;ACxMO,MAAM,WAAoC,CAAC;AAAA,EAChD,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,MAAM;AAAA,EACN;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,gBAAgBP,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,GAAG,CAAC,EAAE;AAEtDE,QAAAA,UAAU,MAAM;AACd,QAAI,SAAS;AACXF,kBAAAA,SAAS;AAAA,QACPA,YAAAA,SAAS,SAAS;AAAA,UAChBA,YAAAA,SAAS,OAAO,eAAe;AAAA,YAC7B,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,UAAA,CAClB;AAAA,UACDA,YAAAA,SAAS,OAAO,eAAe;AAAA,YAC7B,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,UAAA,CAClB;AAAA,QAAA,CACF;AAAA,MAAA,EACD,MAAA;AAAA,IACJ;AAAA,EACF,GAAG,CAAC,SAAS,aAAa,CAAC;AAG3B,QAAM,iBAAiB;AAAA,IACrB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA;AAIV,QAAM,aAAa;AAAA,IACjB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAIN,QAAM,eAAe,SAAS;AAG9B,QAAM,iBAAiB,CAAC,QAAiB;AACvC,UAAM,QAAoD,CAAA;AAE1D,QAAI,UAAU,QAAW;AACvB,YAAM,QAAQ;AAAA,IAChB;AAEA,QAAI,WAAW,QAAW;AACxB,YAAM,SAAS;AAAA,IACjB;AAEA,WACEG,kCAAAA;AAAAA,MAACH,YAAAA,SAAS;AAAA,MAAT;AAAA,QAEC,WAAW;AAAA,UACT;AAAA,UACA,eAAe,OAAO;AAAA,UACtB;AAAA,QAAA;AAAA,QAEF,OAAO,CAAC,OAAO,UAAU,EAAE,SAAS,cAAA,IAAkB,MAAS;AAAA,QAC9D,GAAG;AAAA,MAAA;AAAA,MAPC;AAAA,IAAA;AAAA,EAUX;AAGA,MAAI,eAAe,GAAG;AACpB,WACEG,sCAACE,YAAAA,QAAK,WAAW,GAAG,iBAAiB,WAAW,GAAG,CAAC,GACjD,UAAA,MAAM,KAAK,EAAE,QAAQ,cAAc,EAAE,IAAI,CAAC,GAAG,MAAM,eAAe,CAAC,CAAC,GACvE;AAAA,EAEJ;AAEA,SAAO,eAAA;AACT;AAKO,MAAM,eAET,CAAC,EAAE,QAAQ,GAAG,GAAG,MAAA,MACnBF,sCAAC,UAAA,EAAS,SAAQ,QAAO,OAAe,GAAG,MAAA,CAAO;AAM7C,MAAM,iBAET,CAAA,UAASA,sCAAC,YAAS,SAAQ,UAAU,GAAG,MAAA,CAAO;AAK5C,MAAM,iBAET,WAASA,kCAAAA,IAAC,UAAA,EAAS,SAAQ,UAAS,OAAO,KAAM,GAAG,MAAA,CAAO;ACrH/D,MAAM,cAAc/E,iBAAM,cAIvB;AAAA,EACD,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AACR,CAAC;AAyBM,MAAM,OAA4B,CAAC;AAAA,EACxC;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AAAA,EACA,OAAO;AAAA,EACP;AACF,MAAM;AAEJ,QAAM,gBAAgB,SAAS,YAAY,YAAY;AACvD,QAAM,eAAe,UAAU;AAG/B,QAAM,iBAAiB;AAAA,IACrB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAIN,QAAM,oBAAoBA,iBAAM,SAAS,IAAI,UAAU,CAAC,OAAO,UAAU;AACvE,QAAIA,iBAAM,eAAe,KAAK,GAAG;AAC/B,aAAOA,iBAAM,aAAa,OAA4C;AAAA,QACpE,OAAO,QAAQ;AAAA,MAAA,CAChB;AAAA,IACH;AACA,WAAO;AAAA,EACT,CAAC;AAED,SACE+E,sCAAC,YAAY,UAAZ,EAAqB,OAAO,EAAE,MAAM,QAAQ,cAAc,KAAA,GACzD,UAAAA,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW,GAAG,QAAQ,eAAe,OAAO,GAAG,SAAS;AAAA,MACxD,mBAAkB;AAAA,MAEjB,UAAA;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;AAOO,MAAM,WAAoC,CAAC;AAAA,EAChD;AAAA,EACA,QAAQ;AAAA,EACR;AACF,MAAM;AACJ,QAAM,EAAE,MAAM,QAAQ,SAASjF,iBAAM,WAAW,WAAW;AAG3D,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAIN,QAAM,YAAY,MAAc;AAC9B,QAAI,WAAW,OAAQ,QAAO;AAE9B,QAAI,SAAS,WAAW;AACtB,cAAQ,QAAA;AAAA,QACN,KAAK;AACH,iBAAO,GAAG,KAAK;AAAA,QACjB,KAAK;AACH,iBAAO,GAAG,OAAO,aAAa,KAAK,KAAK,CAAC;AAAA,QAC3C;AACE,iBAAO,GAAG,KAAK;AAAA,MAAA;AAAA,IAErB,OAAO;AACL,cAAQ,QAAA;AAAA,QACN,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MAAA;AAAA,IAEb;AAAA,EACF;AAEA,QAAM,eAAe,UAAA;AAErB,gDACGiF,YAAAA,MAAA,EAAK,WAAW,GAAG,iBAAiB,SAAS,GAC3C,UAAA;AAAA,IAAA,iBAAiB,MAChBF,kCAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,YAAY,IAAI;AAAA,UAChB,SAAS,YAAY,QAAQ;AAAA,QAAA;AAAA,QAG9B,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGLH,kCAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,YAAY,IAAI;AAAA,QAAA;AAAA,QAGjB;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAEJ;ACrIO,MAAM,WAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AAAA,EACV;AAAA,EACA;AACF,MAAM;AAEJ,QAAM,aAAa;AAAA,IACjB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAIN,QAAM,eAAe;AAAA,IACnB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAIT,QAAM,mBAAmB;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAIT,QAAM,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAIT,QAAM,gBAAgB;AAAA,IACpB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,EAAA;AAGP,SACEF,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,cAAc,YAAY;AAAA,QAC1B,WAAW,GAAG;AAAA,QACd,iBAAiB,SAAS,aAAa,KAAK;AAAA,QAC5C;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA;AAAA,QACDF,kCAAAA;AAAAA,UAACG,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT,eAAe,OAAO;AAAA,cACtB,iBAAiB,SAAS,iBAAiB,KAAK;AAAA,cAChD;AAAA,YAAA;AAAA,YAGD;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAGN;ACtEO,MAAM,kBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA,QAAQ;AAAA,EACR,UAAAhD,YAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,eAAe,MAAc;AACjC,QAAI;AACF,YAAM,UAAoC;AAAA,QACxC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAGF,UAAI,UAAU,YAAY;AACxB,gBAAQ,WAAWA;AAAA,MACrB;AAEA,aAAO,IAAI,KAAK,aAAa,QAAQ,OAAO,EAAE,OAAO,KAAK;AAAA,IAC5D,SAAS,OAAO;AAEd,cAAQ,MAAM,4BAA4B,KAAK;AAC/C,aAAO,MAAM,eAAe,MAAM;AAAA,IACpC;AAAA,EACF;AAEA,+CAAQgD,kBAAA,EAAK,WAAW,GAAG,SAAS,GAAI,0BAAe;AACzD;ACvCO,MAAM,UAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA,WAAW;AAAA,EACX;AACF,MAAM;AAEJ,QAAM,iBAAiB;AAAA,IACrB,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,IAER,SAAS;AAAA,MACP,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,IAER,SAAS;AAAA,MACP,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,IAER,QAAQ;AAAA,MACN,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,IAER,SAAS;AAAA,MACP,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,EACR;AAIF,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,QAAMY,iBAAgB,eAAe,OAAO;AAE5C,SACEd,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACAa,eAAc;AAAA,QACd,YAAY,UAAUA,eAAc,MAAM;AAAA,QAC1C,YAAY,IAAI;AAAA,QAChB;AAAA,MAAA;AAAA,MAGA,UAAA;AAAA,SAAA,SAAS,SACTd,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,wCACb,UAAA;AAAA,UAAA;AAAA,UACA,+CACEC,kBAAA,EAAK,WAAW,GAAG,iBAAiBY,eAAc,KAAK,GACrD,UAAA,MAAA,CACH;AAAA,QAAA,GAEJ;AAAA,QAEFf,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAW,GAAG,CAAC,SAAS,CAAC,QAAQa,eAAc,IAAI,GACtD,SAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;ACjFO,MAAM,WAAoC,CAAC;AAAA,EAChD,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,OAAO;AAAA,EACP,YAAY;AAAA,EACZ;AAAA,EACA,gBAAgB;AAAA,EAChB;AACF,MAAM;AAEJ,QAAM,gBAAgB9F,iBAAM,OAAO,IAAI4E,YAAAA,SAAS,MAAM,CAAC,CAAC,EAAE;AAE1D5E,mBAAM,UAAU,MAAM;AACpB,QAAI,eAAe;AACjB4E,kBAAAA,SAAS;AAAA,QACPA,YAAAA,SAAS,SAAS;AAAA,UAChBA,YAAAA,SAAS,OAAO,eAAe;AAAA,YAC7B,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,UAAA,CAClB;AAAA,UACDA,YAAAA,SAAS,OAAO,eAAe;AAAA,YAC7B,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,UAAA,CAClB;AAAA,QAAA,CACF;AAAA,MAAA,EACD,MAAA;AAAA,IACJ;AAAA,EACF,GAAG,CAAC,eAAe,aAAa,CAAC;AAGjC,QAAM,aAAa,KAAK,IAAI,KAAK,IAAK,QAAQ,MAAO,KAAK,CAAC,GAAG,GAAG;AAGjE,QAAM,eAAe;AAAA,IACnB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,EAAA;AAIV,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,QAAM,oBAAoB,cAAc,YAAY;AAAA,IAClD,YAAY,CAAC,GAAG,CAAC;AAAA,IACjB,aAAa,CAAC,MAAM,MAAM;AAAA,EAAA,CAC3B;AAED,gDACGK,YAAAA,MAAA,EAAK,WAAW,GAAG,UAAU,SAAS,GACrC,UAAA;AAAA,IAAAF,kCAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,YAAY,IAAI;AAAA,QAAA;AAAA,QAElB,mBAAkB;AAAA,QAClB,oBAAoB;AAAA,UAClB,KAAK,gBAAgB,SAAY;AAAA,UACjC,KAAK;AAAA,UACL,KAAK;AAAA,QAAA;AAAA,QAGN,UAAA,gBACCF,kCAAAA;AAAAA,UAACH,YAAAA,SAAS;AAAA,UAAT;AAAA,YACC,WAAW,GAAG,uBAAuB,aAAa,OAAO,CAAC;AAAA,YAC1D,OAAO,EAAE,OAAO,mBAAmB,SAAS,IAAA;AAAA,UAAI;AAAA,QAAA,IAGlDG,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW,GAAG,uBAAuB,aAAa,OAAO,CAAC;AAAA,YAC1D,OAAO,EAAE,OAAO,GAAG,UAAU,IAAA;AAAA,UAAI;AAAA,QAAA;AAAA,MACnC;AAAA,IAAA;AAAA,KAGF,aAAa,UACbF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,QACd,UAAAF,kCAAAA,IAACG,kBAAA,EAAK,WAAU,uDACb,mBAAS,GAAG,KAAK,MAAM,UAAU,CAAC,KACrC,EAAA,CACF;AAAA,EAAA,GAEJ;AAEJ;AAiCO,MAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA,MAAM;AAAA,EACN,UAAU;AAAA,EACV,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA,UAAU,YAAY;AACxB,MAAM;AACJ,QAAM,aAAa,KAAK,IAAI,KAAK,IAAK,QAAQ,MAAO,KAAK,CAAC,GAAG,GAAG;AACjE,QAAM,eAAe,SAAS,GAAG,KAAK,MAAM,UAAU,CAAC;AAGvD,QAAM,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAIR,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,SACEH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAW,GAAG,UAAU,SAAS,GACrC,UAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,oCACd,UAAA;AAAA,IAAAF,kCAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,YAAY,IAAI;AAAA,QAAA;AAAA,QAGlB,UAAAF,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,YAAY,IAAI;AAAA,cAChB,eAAe,OAAO;AAAA,YAAA;AAAA,YAExB,OAAO,EAAE,OAAO,GAAG,UAAU,IAAA;AAAA,YAC7B,mBAAkB;AAAA,YAClB,oBAAoB,EAAE,KAAK,OAAO,KAAK,GAAG,IAAA;AAAA,UAAI;AAAA,QAAA;AAAA,MAChD;AAAA,IAAA;AAAA,IAED,aAAa,kBAAkB,mDAC7BC,YAAAA,MAAA,EAAK,WAAU,wDACb,UAAA,aAAA,CACH;AAAA,EAAA,EAAA,CAEJ,EAAA,CACF;AAEJ;ACvKO,MAAM,QAA8B,CAAC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,kBAAkB;AAAA,EAClB,sBAAsB;AAAA,EACtB;AAAA,EACA;AACF,MAAM;AAEJ,QAAM,cAAc;AAAA,IAClB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,WAAW;AAAA,EAAA;AAGb,QAAM,qBAAqB,MAAM;AAC/B,QAAI,qBAAqB;AACvB,cAAA;AAAA,IACF;AAAA,EACF;AAEA,SACEH,kCAAAA;AAAAA,IAACuB,YAAAA;AAAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,eAAc;AAAA,MACd,aAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,sBAAoB;AAAA,MAEpB,UAAAvB,kCAAAA;AAAAA,QAACwB,YAAAA;AAAAA,QAAA;AAAA,UACC,UAAUC,YAAAA,SAAS,OAAO,QAAQ,YAAY;AAAA,UAC9C,WAAU;AAAA,UAEV,UAAAzB,kCAAAA;AAAAA,YAACI,YAAAA;AAAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,WAAU;AAAA,cAEV,UAAAH,kCAAAA;AAAAA,gBAACG,YAAAA;AAAAA,gBAAA;AAAA,kBACC,SAAS,CAAA,MAAK,EAAE,gBAAA;AAAA,kBAChB,WAAW;AAAA,oBACT;AAAA,oBACA,YAAY,IAAI;AAAA,oBAChB;AAAA,kBAAA;AAAA,kBAIA,UAAA;AAAA,qBAAA,SAAS,oBACTH,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,sGACb,UAAA;AAAA,sBAAA,SACCF,kCAAAA,IAACG,kBAAA,EAAK,WAAU,8DACb,UAAA,OACH;AAAA,sBAED,mBACCH,kCAAAA;AAAAA,wBAACI,YAAAA;AAAAA,wBAAA;AAAA,0BACC,SAAS;AAAA,0BACT,WAAU;AAAA,0BACV,mBAAkB;AAAA,0BAClB,oBAAmB;AAAA,0BAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,4CAA2C,UAAA,IAAA,CAE3D;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACF,GAEJ;AAAA,oBAIFH,kCAAAA,IAAC0B,YAAAA,YAAA,EAAW,SAAS,OAAQ,SAAA,CAAS;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACxC;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;AAUO,MAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AACF,MACE1B,kCAAAA;AAAAA,EAACE,YAAAA;AAAAA,EAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAGD;AAAA,EAAA;AACH;AAWK,MAAM,eAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AACF,4CAAOA,YAAAA,MAAA,EAAK,WAAW,GAAG,aAAa,SAAS,GAAI,SAAA,CAAS;AAUtD,MAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AACF,MACEF,kCAAAA;AAAAA,EAACE,YAAAA;AAAAA,EAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAGD;AAAA,EAAA;AACH;ACvJF,MAAM,eAAeyB,MAAAA,cAA6C,MAAS;AAEpE,MAAM,WAAW,MAAM;AAC5B,QAAM,UAAUC,MAAAA,WAAW,YAAY;AACvC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AACA,SAAO;AACT;AAOO,MAAM,QAA8B,CAAC,EAAE,OAAO,eAAe;AAClE,QAAM,EAAE,IAAI,OAAO,aAAa,UAAU,WAAW,WAAW;AAChE,QAAM,YAAYhC,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,IAAI,CAAC,EAAE;AAEnDE,QAAAA,UAAU,MAAM;AACdF,gBAAAA,SAAS,OAAO,WAAW;AAAA,MACzB,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,UAAU;AAAA,IAAA,CACX,EAAE,MAAA;AAAA,EACL,GAAG,CAAC,SAAS,CAAC;AAGd,QAAM,mBAAmB;AAAA,IACvB,SAAS;AAAA,IACT,SACE;AAAA,IACF,OAAO;AAAA,IACP,SACE;AAAA,IACF,MAAM;AAAA,EAAA;AAIR,QAAM,mBAAmB;AAAA,IACvB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,EAAA;AAIR,QAAM,QAAQ;AAAA,IACZ,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,EAAA;AAGR,SACEI,kCAAAA;AAAAA,IAACJ,YAAAA,SAAS;AAAA,IAAT;AAAA,MACC,OAAO,EAAE,WAAW,CAAC,EAAE,YAAY,UAAA,CAAW,EAAA;AAAA,MAC9C,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA,iBAAiB,OAAO;AAAA,MAAA;AAAA,MAG1B,UAAA;AAAA,QAAAG,sCAACE,YAAAA,MAAA,EAAK,WAAW,GAAG,iBAAiB,iBAAiB,OAAO,CAAC,GAC5D,UAAAF,kCAAAA,IAACG,YAAAA,QAAK,WAAU,WAAW,UAAA,MAAM,OAAO,GAAE,GAC5C;AAAA,QAEAF,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,kBACb,UAAA;AAAA,UAAA,SACCF,kCAAAA,IAACG,kBAAA,EAAK,WAAU,+CACb,UAAA,OACH;AAAA,UAED,eACCH,kCAAAA,IAACG,kBAAA,EAAK,WAAU,iDACb,UAAA,aACH;AAAA,UAED,UACCH,kCAAAA,IAACI,uBAAA,EAAU,SAAS,OAAO,SAAS,WAAU,QAC5C,UAAAJ,sCAACG,YAAAA,MAAA,EAAK,WAAU,wDACb,UAAA,OAAO,OACV,EAAA,CACF;AAAA,QAAA,GAEJ;AAAA,QAEAH,kCAAAA;AAAAA,UAACI,YAAAA;AAAAA,UAAA;AAAA,YACC,SAAS,MAAM,SAAS,EAAE;AAAA,YAC1B,WAAU;AAAA,YACV,mBAAkB;AAAA,YAClB,oBAAmB;AAAA,YAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,yBAAwB,UAAA,IAAA,CAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MAC3C;AAAA,IAAA;AAAA,EAAA;AAGN;AAKA,MAAM,YAGD,CAAC,EAAE,OAAO,eAAe;AAC5BJ,QAAAA,UAAU,MAAM;AACd,UAAM,WAAW,MAAM,YAAY;AAEnC,QAAI,WAAW,GAAG;AAChB,YAAM,QAAQ,WAAW,MAAM;AAC7B,iBAAS,MAAM,EAAE;AAAA,MACnB,GAAG,QAAQ;AAEX,aAAO,MAAM,aAAa,KAAK;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,MAAM,IAAI,MAAM,UAAU,QAAQ,CAAC;AAEvC,SAAOC,kCAAAA,IAAC,OAAA,EAAM,OAAc,SAAA,CAAoB;AAClD;AA6BO,MAAM,gBAAyD,CAAC;AAAA,EACrE;AACF,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAIL,MAAAA,SAAyB,CAAA,CAAE;AAEvD,QAAM,cAAcG,kBAAY,CAAC,OAAe;AAC9C,cAAU,UAAQ,KAAK,OAAO,OAAK,EAAE,OAAO,EAAE,CAAC;AAAA,EACjD,GAAG,CAAA,CAAE;AAEL,QAAM,WAAWA,kBAAY,CAAC,UAAoC;AAChE,UAAM,KAAK,KAAK,SAAS,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC;AACjD,cAAU,CAAA,SAAQ,CAAC,GAAG,MAAM,EAAE,GAAG,OAAO,GAAA,CAAI,CAAC;AAAA,EAC/C,GAAG,CAAA,CAAE;AAEL,SACEG,kCAAAA,KAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,QAAQ,UAAU,YAAA,GAC/C,UAAA;AAAA,IAAA;AAAA,IACA,OAAO,SAAS,KACfD,kCAAAA;AAAAA,MAACkB,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,eAAc;AAAA,QAEd,UAAAlB,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,sBACb,iBAAO,IAAI,CAAA,UACVF,sCAAC,WAAA,EAAyB,OAAc,UAAU,eAAlC,MAAM,EAAyC,CAChE,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GAEJ;AAEJ;AC9KO,MAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,cAAc;AAAA,EACd;AACF,MAAM;AACJ,MAAI,CAAC,UAAW,QAAO;AAEvB,QAAM,UACJC,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT,SAAS,eAAe,WAAW;AAAA,QACnC;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,mBAAkB;AAAA,MAClB,oBAAoB,WAAW;AAAA,MAE/B,UAAA;AAAA,QAAAF,kCAAAA,IAAC,SAAA,EAAQ,MAAM,YAAA,CAAa;AAAA,QAC3B,WACCA,kCAAAA,IAACG,kBAAA,EAAK,WAAU,mDACb,UAAA,QAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAMN,MAAI,SAAS,cAAc;AACzB,WACEH,kCAAAA;AAAAA,MAACiB,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,aAAW;AAAA,QACX,eAAc;AAAA,QACd,sBAAoB;AAAA,QAEnB,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AAGA,SAAO;AACT;AC/DO,MAAM,cAA0C,CAAC;AAAA,EACtD,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AACF,MAAM;AACJ,QAAM,WAAWrB,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,CAAC,CAAC,EAAE;AAC/C,QAAM,WAAWD,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,CAAC,CAAC,EAAE;AAC/C,QAAM,WAAWD,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,CAAC,CAAC,EAAE;AAE/CE,QAAAA,UAAU,MAAM;AACd,UAAM,kBAAkB,CAAC,WAA2B,UAAkB;AACpE,aAAOF,YAAAA,SAAS;AAAA,QACdA,YAAAA,SAAS,SAAS;AAAA,UAChBA,YAAAA,SAAS,MAAM,KAAK;AAAA,UACpBA,YAAAA,SAAS,OAAO,WAAW;AAAA,YACzB,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,UAAA,CAClB;AAAA,UACDA,YAAAA,SAAS,OAAO,WAAW;AAAA,YACzB,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,UAAA,CAClB;AAAA,UACDA,qBAAS,MAAM,MAAM,KAAK;AAAA,QAAA,CAC3B;AAAA,MAAA;AAAA,IAEL;AAEA,UAAM,QAAQ,gBAAgB,UAAU,CAAC;AACzC,UAAM,QAAQ,gBAAgB,UAAU,GAAG;AAC3C,UAAM,QAAQ,gBAAgB,UAAU,GAAG;AAE3C,UAAM,MAAA;AACN,UAAM,MAAA;AACN,UAAM,MAAA;AAEN,WAAO,MAAM;AACX,YAAM,KAAA;AACN,YAAM,KAAA;AACN,YAAM,KAAA;AAAA,IACR;AAAA,EACF,GAAG,CAAC,UAAU,UAAU,QAAQ,CAAC;AAEjC,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,QAAM,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,WAAW;AAAA,IACX,OAAO;AAAA,EAAA;AAGT,QAAM,aAAa;AAAA,IACjB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,QAAM,WAAW;AAAA,IACf;AAAA,IACA,YAAY,IAAI;AAAA,IAChB,eAAe,OAAO;AAAA,EAAA;AAGxB,QAAM,mBAAmB,CAAC,eAA+B;AAAA,IACvD,SAAS,UAAU,YAAY;AAAA,MAC7B,YAAY,CAAC,GAAG,CAAC;AAAA,MACjB,aAAa,CAAC,KAAK,CAAC;AAAA,IAAA,CACrB;AAAA,IACD,WAAW;AAAA,MACT;AAAA,QACE,OAAO,UAAU,YAAY;AAAA,UAC3B,YAAY,CAAC,GAAG,CAAC;AAAA,UACjB,aAAa,CAAC,KAAK,GAAG;AAAA,QAAA,CACvB;AAAA,MAAA;AAAA,IACH;AAAA,EACF;AAGF,SACEI,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW,GAAG,8BAA8B,WAAW,IAAI,GAAG,SAAS;AAAA,MAEvE,UAAA;AAAA,QAAAF,sCAACH,YAAAA,SAAS,MAAT,EAAc,WAAW,UAAU,OAAO,iBAAiB,QAAQ,GAAG;AAAA,QACvEG,sCAACH,YAAAA,SAAS,MAAT,EAAc,WAAW,UAAU,OAAO,iBAAiB,QAAQ,GAAG;AAAA,QACvEG,sCAACH,YAAAA,SAAS,MAAT,EAAc,WAAW,UAAU,OAAO,iBAAiB,QAAQ,EAAA,CAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG7E;AC1EO,MAAM,WAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AACF,MAAM;AACJ,MAAI,CAAC,OAAQ,QAAO;AAGpB,QAAM,iBAAiB;AAAA,IACrB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAGR,MAAI,UAAU;AACZ,WACEG,kCAAAA;AAAAA,MAACI,YAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA,WAAW,GAAG,oBAAoB,eAAe,OAAO,GAAG,SAAS;AAAA,QACpE,mBAAkB;AAAA,QAElB,UAAAJ,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,2BAA2B,MAAM;AAAA,YACjC,oBAAoB,CAAA,MAAK,EAAE,gBAAA;AAAA,YAE1B;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAGN;AAEA,SACEF,kCAAAA;AAAAA,IAACI,YAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,WAAW,GAAG,oBAAoB,eAAe,OAAO,GAAG,SAAS;AAAA,MACpE,mBAAkB;AAAA,IAAA;AAAA,EAAA;AAGxB;ACtEA,MAAM,EAAE,QAAQ,eAAe,OAAOQ,mBAAiBC,YAAAA,WAAW,IAAI,QAAQ;AA8CvE,MAAM,QAA8B,CAAC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,OAAO;AAAA,EACP,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB;AACF,MAAM;AACJ,QAAM,YAAYjB,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,CAAC,CAAC,EAAE;AAChD,QAAM,OAAOD,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,CAAC,CAAC,EAAE;AAG3C,QAAM,aAAa;AAAA,IACjB,QAAQ;AAAA,MACN,IAAI,gBAAgB;AAAA,MACpB,IAAI,gBAAgB;AAAA,MACpB,IAAI,gBAAgB;AAAA,MACpB,MAAM;AAAA,IAAA;AAAA,IAER,KAAK;AAAA,MACH,IAAI,gBAAgB;AAAA,MACpB,IAAI,gBAAgB;AAAA,MACpB,IAAI,gBAAgB;AAAA,MACpB,MAAM;AAAA,IAAA;AAAA,IAER,MAAM;AAAA,MACJ,IAAIe,iBAAe;AAAA,MACnB,IAAIA,iBAAe;AAAA,MACnB,IAAIA,iBAAe;AAAA,MACnB,MAAMA;AAAAA,IAAA;AAAA,IAER,OAAO;AAAA,MACL,IAAIA,iBAAe;AAAA,MACnB,IAAIA,iBAAe;AAAA,MACnB,IAAIA,iBAAe;AAAA,MACnB,MAAMA;AAAAA,IAAA;AAAA,EACR;AAGF,QAAM,YAAY,WAAW,IAAI,EAAE,IAAI;AACvC,QAAM,aAAa,SAAS,YAAY,SAAS;AAEjDb,QAAAA,UAAU,MAAM;AACd,QAAI,QAAQ;AACV,WAAK,SAAS,CAAC;AACfF,kBAAAA,SAAS,OAAO,WAAW;AAAA,QACzB,SAAS;AAAA,QACT,iBAAiB;AAAA,QACjB,UAAU;AAAA,MAAA,CACX,EAAE,MAAA;AAAA,IACL,OAAO;AACLA,kBAAAA,SAAS,OAAO,WAAW;AAAA,QACzB,SAAS;AAAA,QACT,UAAU;AAAA,QACV,iBAAiB;AAAA,MAAA,CAClB,EAAE,MAAA;AAAA,IACL;AAAA,EACF,GAAG,CAAC,QAAQ,WAAW,IAAI,CAAC;AAG5B,QAAM,eAAeD,MAAAA;AAAAA,IACnBiC,YAAAA,aAAa,OAAO;AAAA,MAClB,8BAA8B,MAAM,SAAS;AAAA,MAC7C,6BAA6B,CAAC,GAAG,iBAC/B,SAAS,YAAY,aAAa,KAAK;AAAA,MACzC,oBAAoB,CAAC,GAAG,iBAAiB;AACvC,YAAI,aAAa,KAAK,GAAG;AACvB,eAAK,SAAS,aAAa,EAAE;AAAA,QAC/B;AAAA,MACF;AAAA,MACA,uBAAuB,CAAC,GAAG,iBAAiB;AAC1C,YAAI,aAAa,KAAK,OAAO,aAAa,KAAK,KAAK;AAClD,kBAAA;AAAA,QACF,OAAO;AACLhC,sBAAAA,SAAS,OAAO,MAAM;AAAA,YACpB,SAAS;AAAA,YACT,iBAAiB;AAAA,UAAA,CAClB,EAAE,MAAA;AAAA,QACL;AAAA,MACF;AAAA,IAAA,CACD;AAAA,EAAA,EACD;AAGF,QAAM,eAAe,MAAM;AACzB,UAAM,gBAAgB,UAAU,YAAY;AAAA,MAC1C,YAAY,CAAC,GAAG,CAAC;AAAA,MACjB,aAAa,CAAC,WAAW,CAAC;AAAA,IAAA,CAC3B;AAED,YAAQ,MAAA;AAAA,MACN,KAAK;AACH,eAAO;AAAA,UACL,WAAW;AAAA,YACT;AAAA,cACE,YAAYA,YAAAA,SAAS;AAAA,gBACnB,UAAU,YAAY;AAAA,kBACpB,YAAY,CAAC,GAAG,CAAC;AAAA,kBACjB,aAAa,CAAC,WAAW,CAAC;AAAA,gBAAA,CAC3B;AAAA,gBACD;AAAA,cAAA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MAEJ,KAAK;AACH,eAAO;AAAA,UACL,WAAW;AAAA,YACT;AAAA,cACE,YAAY,UAAU,YAAY;AAAA,gBAChC,YAAY,CAAC,GAAG,CAAC;AAAA,gBACjB,aAAa,CAAC,CAAC,WAAW,CAAC;AAAA,cAAA,CAC5B;AAAA,YAAA;AAAA,UACH;AAAA,QACF;AAAA,MAEJ,KAAK;AACH,eAAO;AAAA,UACL,WAAW;AAAA,YACT;AAAA,cACE,YAAY,UAAU,YAAY;AAAA,gBAChC,YAAY,CAAC,GAAG,CAAC;AAAA,gBACjB,aAAa,CAAC,CAAC,WAAW,CAAC;AAAA,cAAA,CAC5B;AAAA,YAAA;AAAA,UACH;AAAA,QACF;AAAA,MAEJ,KAAK;AACH,eAAO;AAAA,UACL,WAAW;AAAA,YACT;AAAA,cACE,YAAY;AAAA,YAAA;AAAA,UACd;AAAA,QACF;AAAA,MAEJ;AACE,eAAO,CAAA;AAAA,IAAC;AAAA,EAEd;AAGA,QAAM,iBAAiB;AAAA,IACrB,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,EAAA;AAAA,IACrC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,EAAA;AAAA,IAC/B,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,EAAA;AAAA,IACjC,OAAO,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,EAAA;AAAA,EAAE;AAIvC,QAAM,gBAAgB;AAAA,IACpB,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAGT,SACEI,kCAAAA;AAAAA,IAACgB,YAAAA;AAAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,eAAc;AAAA,MACd,aAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,sBAAoB;AAAA,MAGpB,UAAA;AAAA,QAAAjB,kCAAAA,IAACI,YAAAA,WAAA,EAAU,SAAS,SAAS,WAAU,gCAA+B;AAAA,QAGtEJ,kCAAAA;AAAAA,UAACH,YAAAA,SAAS;AAAA,UAAT;AAAA,YACC,OAAO;AAAA,cACL;AAAA,gBACE,UAAU;AAAA,gBACV,GAAG,eAAe,IAAI;AAAA,gBACtB,GAAI,aAAa,EAAE,QAAQ,cAAc,EAAE,OAAO,UAAA;AAAA,cAAU;AAAA,cAE9D,aAAA;AAAA,YAAa;AAAA,YAEd,GAAI,SAAS,WAAW,aAAa,cAAc,CAAA;AAAA,YAEpD,UAAAI,kCAAAA;AAAAA,cAACC,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,cAAc,IAAI;AAAA,kBAClB;AAAA,gBAAA;AAAA,gBAID,UAAA;AAAA,kBAAA,eAAe,SAAS,YAAY,SAAS,UAC5CF,kCAAAA;AAAAA,oBAACE,YAAAA;AAAAA,oBAAA;AAAA,sBACC,WAAW;AAAA,wBACT;AAAA,wBACA,SAAS,WAAW,cAAc;AAAA,sBAAA;AAAA,sBAGpC,UAAAF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,uDAAA,CAAuD;AAAA,oBAAA;AAAA,kBAAA;AAAA,mBAKzE,SAAS,eAAe,oBACxBF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,2DACd,UAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,6CACd,UAAA;AAAA,oBAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,UACb,UAAA;AAAA,sBAAA,SACCF,kCAAAA,IAACG,kBAAA,EAAK,WAAU,uDACb,UAAA,OACH;AAAA,sBAED,eACCH,kCAAAA,IAACG,kBAAA,EAAK,WAAU,iDACb,UAAA,YAAA,CACH;AAAA,oBAAA,GAEJ;AAAA,oBACC,mBACCH,kCAAAA;AAAAA,sBAACI,YAAAA;AAAAA,sBAAA;AAAA,wBACC,SAAS;AAAA,wBACT,WAAU;AAAA,wBACV,mBAAkB;AAAA,wBAClB,oBAAmB;AAAA,wBAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,yBAAwB,UAAA,IAAA,CAAC;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAC3C,EAAA,CAEJ,EAAA,CACF;AAAA,wDAIDuB,YAAAA,YAAA,EAAW,WAAU,oBAAmB,SAAS,OAC/C,UACH;AAAA,kBAGC,UACC1B,kCAAAA,IAACE,kBAAA,EAAK,WAAU,2DACb,UAAA,OAAA,CACH;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAEJ;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAGN;AC1QO,MAAM,UAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ;AAAA,EACA,WAAW;AAAA,EACX,UAAU;AACZ,MAAM;AACJ,QAAM,CAAC,WAAW,YAAY,IAAIP,MAAAA,SAAS,KAAK;AAChD,QAAM,CAAC,UAAU,WAAW,IAAIA,MAAAA,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,QAAQ,GAAG;AAC5E,QAAM,aAAaC,MAAAA,OAAa,IAAI;AACpC,QAAM,WAAWA,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,CAAC,CAAC,EAAE;AAC/C,QAAM,aAAaD,MAAAA,OAAA;AAEnBG,QAAAA,UAAU,MAAM;AACd,QAAI,WAAW;AACbF,kBAAAA,SAAS,OAAO,UAAU;AAAA,QACxB,SAAS;AAAA,QACT,UAAU;AAAA,QACV,iBAAiB;AAAA,MAAA,CAClB,EAAE,MAAA;AAAA,IACL,OAAO;AACL,eAAS,SAAS,CAAC;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,WAAW,QAAQ,CAAC;AAExBE,QAAAA,UAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,WAAW,SAAS;AACtB,qBAAa,WAAW,OAAO;AAAA,MACjC;AAAA,IACF;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,QAAM,cAAc,MAAM;;AACxB,QAAI,SAAU;AAEd,qBAAW,YAAX,mBAAoB,gBAAgB,CAAC,GAAG,GAAG,OAAO,WAAW;AAC3D,kBAAY,EAAE,GAAG,GAAG,OAAO,QAAQ;AAEnC,UAAI,YAAY,GAAG;AACjB,mBAAW,UAAU,WAAW,MAAM;AACpC,uBAAa,IAAI;AAAA,QACnB,GAAG,SAAS;AAAA,MACd,OAAO;AACL,qBAAa,IAAI;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAc,MAAM;AACxB,QAAI,WAAW,SAAS;AACtB,mBAAa,WAAW,OAAO;AAAA,IACjC;AACA,iBAAa,KAAK;AAAA,EACpB;AAGA,QAAM,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO;AAAA,EAAA;AAIT,QAAM,qBAAqB,MAAM;AAC/B,UAAM,iBAAiB;AACvB,UAAM,iBAAiB;AACvB,UAAM,gBAAgB,QAAQ,SAAS;AAEvC,YAAQ,WAAA;AAAA,MACN,KAAK;AACH,eAAO;AAAA,UACL,KAAK,SAAS,IAAI,iBAAiB;AAAA,UACnC,MAAM,SAAS,IAAI,SAAS,QAAQ,IAAI,gBAAgB;AAAA,QAAA;AAAA,MAE5D,KAAK;AACH,eAAO;AAAA,UACL,KAAK,SAAS,IAAI,SAAS,SAAS;AAAA,UACpC,MAAM,SAAS,IAAI,SAAS,QAAQ,IAAI,gBAAgB;AAAA,QAAA;AAAA,MAE5D,KAAK;AACH,eAAO;AAAA,UACL,KAAK,SAAS,IAAI,SAAS,SAAS,IAAI,iBAAiB;AAAA,UACzD,MAAM,SAAS,IAAI,gBAAgB;AAAA,QAAA;AAAA,MAEvC,KAAK;AACH,eAAO;AAAA,UACL,KAAK,SAAS,IAAI,SAAS,SAAS,IAAI,iBAAiB;AAAA,UACzD,MAAM,SAAS,IAAI,SAAS,QAAQ;AAAA,QAAA;AAAA,MAExC;AACE,eAAO,EAAE,KAAK,GAAG,MAAM,EAAA;AAAA,IAAE;AAAA,EAE/B;AAEA,SACEE,kCAAAA,KAAAe,4BAAA,EACE,UAAA;AAAA,IAAAhB,kCAAAA;AAAAA,MAACI,YAAAA;AAAAA,MAAA;AAAA,QACC,KAAK;AAAA,QACL,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAEf;AAAA,MAAA;AAAA,IAAA;AAAA,IAGHJ,kCAAAA;AAAAA,MAACiB,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,aAAW;AAAA,QACX,eAAc;AAAA,QACd,gBAAgB;AAAA,QAEhB,UAAAjB,kCAAAA,IAACI,YAAAA,WAAA,EAAU,WAAU,UAAS,SAAS,aACrC,UAAAJ,kCAAAA;AAAAA,UAACH,YAAAA,SAAS;AAAA,UAAT;AAAA,YACC,OAAO;AAAA,cACL;AAAA,gBACE,UAAU;AAAA,gBACV,GAAG,mBAAA;AAAA,gBACH,SAAS;AAAA,cAAA;AAAA,YACX;AAAA,YAGF,UAAAG,kCAAAA;AAAAA,cAACE,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,eAAe,OAAO;AAAA,kBACtB;AAAA,gBAAA;AAAA,gBAGF,UAAAF,kCAAAA,IAACG,kBAAA,EAAK,WAAU,kCAAkC,UAAA,QAAA,CAAQ;AAAA,cAAA;AAAA,YAAA;AAAA,UAC5D;AAAA,QAAA,EACF,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;ACzKA,MAAM,EAAE,OAAO,aAAA,IAAiBU,YAAAA,WAAW,IAAI,QAAQ;AAmChD,MAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,kBAAkB;AAAA,EAClB,sBAAsB;AAAA,EACtB;AACF,MAAM;AACJ,QAAM,YAAYjB,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,GAAG,CAAC,EAAE;AAClD,QAAM,cAAcD,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,CAAC,CAAC,EAAE;AAElDE,QAAAA,UAAU,MAAM;AACd,QAAI,QAAQ;AACVF,kBAAAA,SAAS,SAAS;AAAA,QAChBA,YAAAA,SAAS,OAAO,WAAW;AAAA,UACzB,SAAS;AAAA,UACT,iBAAiB;AAAA,UACjB,UAAU;AAAA,QAAA,CACX;AAAA,QACDA,YAAAA,SAAS,OAAO,aAAa;AAAA,UAC3B,SAAS;AAAA,UACT,UAAU;AAAA,UACV,iBAAiB;AAAA,QAAA,CAClB;AAAA,MAAA,CACF,EAAE,MAAA;AAAA,IACL,OAAO;AACL,gBAAU,SAAS,GAAG;AACtB,kBAAY,SAAS,CAAC;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,QAAQ,WAAW,WAAW,CAAC;AAGnC,QAAM,aAAa;AAAA,IACjB,IAAI,eAAe;AAAA,IACnB,IAAI,eAAe;AAAA,IACnB,IAAI,eAAe;AAAA,IACnB,IAAI,eAAe;AAAA,IACnB,MAAM,eAAe;AAAA,EAAA;AAGvB,QAAM,qBAAqB,MAAM;AAC/B,QAAI,uBAAuB,SAAS;AAClC,cAAA;AAAA,IACF;AAAA,EACF;AAEA,SACEG,kCAAAA;AAAAA,IAACiB,YAAAA;AAAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,eAAc;AAAA,MACd,aAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,sBAAoB;AAAA,MAGpB,UAAAjB,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,WAAU;AAAA,UAGV,UAAAJ,kCAAAA;AAAAA,YAACH,YAAAA,SAAS;AAAA,YAAT;AAAA,cACC,OAAO;AAAA,gBACL,SAAS;AAAA,gBACT,WAAW,CAAC,EAAE,OAAO,WAAW;AAAA,gBAChC,OAAO,WAAW,IAAI;AAAA,gBACtB,WAAW;AAAA,cAAA;AAAA,cAGb,gDAACO,YAAAA,WAAA,EAAU,SAAS,CAAA,MAAK,EAAE,mBACzB,UAAAH,kCAAAA;AAAAA,gBAACC,YAAAA;AAAAA,gBAAA;AAAA,kBACC,WAAW;AAAA,oBACT;AAAA,oBACA;AAAA,kBAAA;AAAA,kBAID,UAAA;AAAA,oBAAA,mBAAmB,WAClBF,kCAAAA;AAAAA,sBAACI,YAAAA;AAAAA,sBAAA;AAAA,wBACC,SAAS;AAAA,wBACT,WAAU;AAAA,wBACV,mBAAkB;AAAA,wBAClB,oBAAmB;AAAA,wBAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,yBAAwB,UAAA,IAAA,CAAC;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAK7CH,kCAAAA,IAAC0B,YAAAA,YAAA,EAAW,SAAS,OAAQ,SAAA,CAAS;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA,EACxC,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;AC7GO,MAAM,UAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,gBAAgB,iBAAiB,IAAI/B,MAAAA,SAAS,KAAK;AAC1D,QAAM,CAAC,UAAU,WAAW,IAAIA,MAAAA,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,QAAQ,GAAG;AAC5E,QAAM,aAAaC,MAAAA,OAAa,IAAI;AACpC,QAAM,WAAWA,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,CAAC,CAAC,EAAE;AAE/C,QAAM,SACJ,qBAAqB,SAAY,mBAAmB;AAEtD,QAAM,YAAYC,MAAAA;AAAAA,IAChB,CAAC,SAAkB;AACjB,UAAI,qBAAqB,QAAW;AAClC,0BAAkB,IAAI;AAAA,MACxB;AACA,mDAAe;AAAA,IACjB;AAAA,IACA,CAAC,kBAAkB,YAAY;AAAA,EAAA;AAGjCC,QAAAA,UAAU,MAAM;AACd,QAAI,QAAQ;AACVF,kBAAAA,SAAS,OAAO,UAAU;AAAA,QACxB,SAAS;AAAA,QACT,UAAU;AAAA,QACV,iBAAiB;AAAA,MAAA,CAClB,EAAE,MAAA;AAAA,IACL,OAAO;AACL,eAAS,SAAS,CAAC;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,QAAQ,QAAQ,CAAC;AAErB,QAAM,qBAAqB,MAAM;;AAC/B,qBAAW,YAAX,mBAAoB,gBAAgB,CAAC,GAAG,GAAG,OAAO,WAAW;AAC3D,kBAAY,EAAE,GAAG,GAAG,OAAO,QAAQ;AACnC,gBAAU,CAAC,MAAM;AAAA,IACnB;AAAA,EACF;AAGA,QAAM,qBAAqB,MAAM;AAC/B,UAAM,SAAS;AAEf,YAAQ,WAAA;AAAA,MACN,KAAK;AACH,eAAO;AAAA,UACL,QAAQ,SAAS,IAAI,IAAI,SAAY;AAAA,UACrC,KAAK,SAAS,IAAI;AAAA,UAClB,MAAM,SAAS;AAAA,UACf,OAAO,SAAS;AAAA,UAChB,WAAW,CAAC,EAAE,YAAY,MAAM;AAAA,QAAA;AAAA,MAEpC,KAAK;AACH,eAAO;AAAA,UACL,KAAK,SAAS,IAAI,SAAS,SAAS;AAAA,UACpC,MAAM,SAAS;AAAA,UACf,OAAO,SAAS;AAAA,QAAA;AAAA,MAEpB,KAAK;AACH,eAAO;AAAA,UACL,KAAK,SAAS;AAAA,UACd,OAAO,SAAS,IAAI,IAAI,SAAY;AAAA,UACpC,WAAW,CAAC,EAAE,YAAY,IAAI;AAAA,QAAA;AAAA,MAElC,KAAK;AACH,eAAO;AAAA,UACL,KAAK,SAAS;AAAA,UACd,MAAM,SAAS,IAAI,SAAS,QAAQ;AAAA,QAAA;AAAA,MAExC;AACE,eAAO,CAAA;AAAA,IAAC;AAAA,EAEd;AAEA,SACEI,kCAAAA,KAAAe,4BAAA,EACE,UAAA;AAAA,IAAAhB,sCAACI,YAAAA,WAAA,EAAU,KAAK,YAAY,SAAS,oBAClC,UAAA,SACH;AAAA,IAEAJ,kCAAAA;AAAAA,MAACiB,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,aAAW;AAAA,QACX,eAAc;AAAA,QACd,gBAAgB,MAAM,UAAU,KAAK;AAAA,QAErC,UAAAjB,kCAAAA,IAACI,yBAAU,WAAU,UAAS,SAAS,MAAM,UAAU,KAAK,GAC1D,UAAAJ,kCAAAA;AAAAA,UAACH,YAAAA,SAAS;AAAA,UAAT;AAAA,YACC,OAAO;AAAA,cACL;AAAA,gBACE,UAAU;AAAA,gBACV,GAAG,mBAAA;AAAA,gBACH,SAAS;AAAA,cAAA;AAAA,YACX;AAAA,YAGF,gDAACO,YAAAA,WAAA,EAAU,SAAS,CAAA,MAAK,EAAE,mBACzB,UAAAJ,kCAAAA;AAAAA,cAACE,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBAAA;AAAA,gBAGD;AAAA,cAAA;AAAA,YAAA,EACH,CACF;AAAA,UAAA;AAAA,QAAA,EACF,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AC/IA,MAAM,cAAcyB,MAAAA,cAA4C,MAAS;AAEzE,MAAM,iBAAiB,MAAM;AAC3B,QAAM,UAAUC,MAAAA,WAAW,WAAW;AACtC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AACA,SAAO;AACT;AAoCO,MAAM,OAA4B,CAAC;AAAA,EACxC,OAAO;AAAA,EACP,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,CAAC,eAAe,gBAAgB,IAAIjC,MAAAA,SAAS,YAAY;AAE/D,QAAM,eAAe,oBAAoB;AACzC,QAAM,QAAQ,eAAe,kBAAkB;AAE/C,QAAM,oBAAoBG,MAAAA;AAAAA,IACxB,CAAC,aAAqB;AACpB,UAAI,CAAC,cAAc;AACjB,yBAAiB,QAAQ;AAAA,MAC3B;AACA,qDAAgB;AAAA,IAClB;AAAA,IACA,CAAC,cAAc,aAAa;AAAA,EAAA;AAG9B,SACEE,kCAAAA,IAAC,YAAY,UAAZ,EAAqB,OAAO,EAAE,OAAO,eAAe,kBAAA,GACnD,gDAACE,kBAAA,EAAK,WAAW,GAAG,UAAU,SAAS,GAAI,GAAG,WAC3C,UACH,GACF;AAEJ;AAYO,MAAM,WAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA,GAAG;AACL,MACEF,kCAAAA;AAAAA,EAAC0B,YAAAA;AAAAA,EAAA;AAAA,IACC,YAAU;AAAA,IACV,gCAAgC;AAAA,IAChC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,uBAAuB,EAAE,UAAU,EAAA;AAAA,IAClC,GAAG;AAAA,IAEH;AAAA,EAAA;AACH;AAiBK,MAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,EAAE,OAAO,eAAe,cAAA,IAAkB,eAAA;AAChD,QAAM,aAAa,kBAAkB;AAErC,SACE1B,kCAAAA;AAAAA,IAACI,YAAAA;AAAAA,IAAA;AAAA,MACC,SAAS,MAAM,CAAC,YAAY,cAAc,KAAK;AAAA,MAC/C;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA,aAAa,wCAAwC;AAAA,QACrD,YAAY;AAAA,QACZ;AAAA,MAAA;AAAA,MAEF,mBAAkB;AAAA,MAClB,oBAAoB,EAAE,UAAU,YAAY,SAAA;AAAA,MAE5C,UAAAJ,kCAAAA;AAAAA,QAACG,YAAAA;AAAAA,QAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA,aACI,kCACA;AAAA,UAAA;AAAA,UAGL;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN;AAcO,MAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,EAAE,OAAO,cAAA,IAAkB,eAAA;AAEjC,MAAI,kBAAkB,OAAO;AAC3B,WAAO;AAAA,EACT;AAEA,SACEH,sCAACE,YAAAA,QAAK,WAAW,GAAG,QAAQ,SAAS,GAAI,GAAG,WACzC,UACH;AAEJ;ACxJO,MAAM,OAA4B,CAAC;AAAA,EACxC;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,mBAAmB;AAAA,EACnB,WAAW;AAAA,EACX;AAAA,EACA;AACF,MAAM;AAEJ,QAAM,aAAa,KAAK,WAAW,SAAS,KAAK,KAAK,WAAW,UAAU;AAG3E,QAAM,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,WAAW;AAAA,IACX,OAAO;AAAA,IACP,WAAW;AAAA,EAAA;AAGb,QAAM,cAAc,YAAY;AAC9B,QAAI,SAAU;AAEd,QAAI,SAAS;AACX,cAAA;AACA;AAAA,IACF;AAEA,QAAI;AACF,YAAM,YAAY,MAAM4B,oBAAQ,WAAW,IAAI;AAC/C,UAAI,WAAW;AACb,cAAMA,YAAAA,QAAQ,QAAQ,IAAI;AAAA,MAC5B;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,uBAAuB,KAAK;AAAA,IAC5C;AAAA,EACF;AAEA,MAAI,UAAU;AACZ,WACE7B,uCAACE,YAAAA,QAAK,WAAW,GAAG,cAAc,eAAe,OAAO,GAAG,SAAS,GACjE,UAAA;AAAA,MAAA;AAAA,MACA,oBAAoB,cAAcH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,WAAU,UAAA,KAAA,CAAE;AAAA,IAAA,GACjE;AAAA,EAEJ;AAEA,SACEH,kCAAAA;AAAAA,IAACI,YAAAA;AAAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,mBAAkB;AAAA,MAClB,oBAAoB,OAAO,aAAa,WAAW,WAAW;AAAA,MAE9D,UAAAH,kCAAAA,KAACE,oBAAK,WAAW,GAAG,eAAe,OAAO,GAAG,SAAS,GACnD,UAAA;AAAA,QAAA;AAAA,QACA,oBAAoB,cAAcH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,WAAU,UAAA,KAAA,CAAE;AAAA,MAAA,EAAA,CACjE;AAAA,IAAA;AAAA,EAAA;AAGN;AChDO,MAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA,YAAY;AAAA,EACZ,OAAO;AAAA,EACP;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,YAAY,aAAa,IAAIR,MAAAA,SAAS,KAAK;AAGlD,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAIN,QAAM,kBAAkB,MAAiD;AACvE,QAAI,CAAC,YAAY,MAAM,UAAU,YAAY,YAAY;AACvD,aAAO;AAAA,IACT;AAGA,UAAM,aAAa,MAAM,MAAM,GAAG,CAAC;AACnC,UAAM,YAAY,MAAM,MAAM,EAAE,WAAW,EAAE;AAC7C,WAAO,CAAC,GAAG,YAAY,EAAE,MAAM,WAAA,GAAuB,GAAG,SAAS;AAAA,EACpE;AAEA,QAAM,eAAe,gBAAA;AAErB,QAAM,uBAAuB,CAC3B,MACA,QACA,WACG;AACH,UAAM,YAAY,KAAK,aAAa;AAGpC,QAAI,QAAQ;AACV,aACEM,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,iCACb,UAAA;AAAA,QAAA,KAAK,QAAQF,kCAAAA,IAACE,kBAAA,EAAK,WAAU,iBAAiB,eAAK,MAAK;AAAA,QACzDF,kCAAAA;AAAAA,UAACG,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT,YAAY,IAAI;AAAA,cAChB;AAAA,YAAA;AAAA,YAEF,mBAAkB;AAAA,YAEjB,UAAA,KAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MACR,GACF;AAAA,IAEJ;AAGA,QAAI,KAAK,SAAS;AAChB,aACEF,kCAAAA;AAAAA,QAACG,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS,KAAK;AAAA,UACd,WAAU;AAAA,UACV,mBAAkB;AAAA,UAEjB,UAAA;AAAA,YAAA,KAAK,QAAQJ,kCAAAA,IAACE,kBAAA,EAAK,WAAU,iBAAiB,eAAK,MAAK;AAAA,YACzDF,kCAAAA;AAAAA,cAACG,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAW;AAAA,kBACT,YAAY,IAAI;AAAA,kBAChB;AAAA,gBAAA;AAAA,gBAGD,UAAA,KAAK;AAAA,cAAA;AAAA,YAAA;AAAA,UACR;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAEA,WACEF,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,iCACb,UAAA;AAAA,MAAA,KAAK,QAAQF,kCAAAA,IAACE,kBAAA,EAAK,WAAU,iBAAiB,eAAK,MAAK;AAAA,MACzDF,kCAAAA;AAAAA,QAACG,YAAAA;AAAAA,QAAA;AAAA,UACC,WAAW;AAAA,YACT,YAAY,IAAI;AAAA,YAChB,YACI,8CACA;AAAA,UAAA;AAAA,UAGL,UAAA,KAAK;AAAA,QAAA;AAAA,MAAA;AAAA,IACR,GACF;AAAA,EAEJ;AAEA,QAAM,kBAAkB,MAAM;AAC5B,QAAI,OAAO,cAAc,UAAU;AACjC,aACEH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,yCACb,UAAA,WACH;AAAA,IAEJ;AACA,WAAOH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,QAAQ,UAAA,WAAU;AAAA,EAC3C;AAEA,SACEF,kCAAAA;AAAAA,IAAC0B,YAAAA;AAAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,gCAAgC;AAAA,MAChC,WAAW,GAAG,YAAY,SAAS;AAAA,MACnC,uBAAuB,EAAE,YAAY,SAAA;AAAA,MACrC,mBAAkB;AAAA,MAClB,oBAAmB;AAAA,MAElB,UAAA,aAAa,IAAI,CAAC,MAAM,UAAU;AAEjC,YAAI,UAAU,QAAQ,KAAK,SAAS,YAAY;AAC9C,iBACEzB,kCAAAA,KAACC,YAAAA,MAAA,EAAoB,WAAU,yBAC7B,UAAA;AAAA,YAAAF,kCAAAA;AAAAA,cAACI,YAAAA;AAAAA,cAAA;AAAA,gBACC,SAAS,MAAM,cAAc,IAAI;AAAA,gBACjC,WAAU;AAAA,gBACV,mBAAkB;AAAA,gBAClB,oBAAmB;AAAA,gBAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,oCAAmC,UAAA,MAAA,CAAG;AAAA,cAAA;AAAA,YAAA;AAAA,YAEvD,gBAAA;AAAA,UAAgB,EAAA,GATT,UAUV;AAAA,QAEJ;AAEA,cAAM,SAAS,UAAU,aAAa,SAAS;AAC/C,cAAM,iBAAiB;AAEvB,eACEF,kCAAAA,KAACC,YAAAA,MAAA,EAAiB,WAAU,yBACzB,UAAA;AAAA,UAAA,qBAAqB,gBAAgB,OAAO,MAAM;AAAA,UAClD,CAAC,UAAU,gBAAA;AAAA,QAAgB,EAAA,GAFnB,KAGX;AAAA,MAEJ,CAAC;AAAA,IAAA;AAAA,EAAA;AAGP;AClJO,MAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AACF,MAAM;AAEJ,QAAMY,cAAa;AAAA,IACjB,IAAI;AAAA,MACF,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,IAER,IAAI;AAAA,MACF,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,IAER,IAAI;AAAA,MACF,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,EACR;AAGF,QAAM,SAASA,YAAW,IAAI;AAG9B,QAAM,sBAAsB,MAA+B;AACzD,UAAMiB,SAAiC,CAAA;AAGvCA,WAAM,KAAK,CAAC;AAGZ,UAAM,mBAAmB,KAAK,IAAI,cAAc,cAAc,CAAC;AAC/D,UAAM,oBAAoB,KAAK;AAAA,MAC7B,cAAc;AAAA,MACd,aAAa;AAAA,IAAA;AAIf,QAAI,mBAAmB,GAAG;AACxBA,aAAM,KAAK,UAAU;AAAA,IACvB;AAGA,aAAS,IAAI,kBAAkB,KAAK,mBAAmB,KAAK;AAC1DA,aAAM,KAAK,CAAC;AAAA,IACd;AAGA,QAAI,oBAAoB,aAAa,GAAG;AACtCA,aAAM,KAAK,UAAU;AAAA,IACvB;AAGA,QAAI,aAAa,GAAG;AAClBA,aAAM,KAAK,UAAU;AAAA,IACvB;AAEA,WAAOA;AAAAA,EACT;AAEA,QAAM,QAAQ,oBAAA;AAEd,QAAM,iBAAiB,MAAM;AAC3B,QAAI,cAAc,GAAG;AACnB,mBAAa,cAAc,CAAC;AAAA,IAC9B;AAAA,EACF;AAEA,QAAM,aAAa,MAAM;AACvB,QAAI,cAAc,YAAY;AAC5B,mBAAa,cAAc,CAAC;AAAA,IAC9B;AAAA,EACF;AAEA,QAAM,cAAc,MAAM;AACxB,iBAAa,CAAC;AAAA,EAChB;AAEA,QAAM,aAAa,MAAM;AACvB,iBAAa,UAAU;AAAA,EACzB;AAEA,QAAM,oBAAoB;AAAA,IACxB;AAAA,EAAA;AAGF,QAAM,oBAAoB,CAAC,aACzB;AAAA,IACE;AAAA,IACA,OAAO;AAAA,IACP,WACI,sEACA;AAAA,EAAA;AAGR,QAAM,mBAAmB,CAAC,aACxB;AAAA,IACE;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,YAAY;AAAA,EAAA;AAGhB,SACE9B,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW,GAAG,+BAA+B,SAAS;AAAA,MACtD,mBAAkB;AAAA,MAClB,oBAAmB;AAAA,MAGlB,UAAA;AAAA,QAAA,iBACCF,kCAAAA;AAAAA,UAACI,YAAAA;AAAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,UAAU,gBAAgB;AAAA,YAC1B,WAAW,iBAAiB,gBAAgB,CAAC;AAAA,YAC7C,mBAAkB;AAAA,YAClB,oBAAmB;AAAA,YACnB,oBAAoB,EAAE,UAAU,gBAAgB,EAAA;AAAA,YAEhD,UAAAJ,kCAAAA,IAACG,oBAAK,WAAW,GAAG,OAAO,MAAM,kCAAkC,GAAG,UAAA,QAAA,CAEtE;AAAA,UAAA;AAAA,QAAA;AAAA,QAKJH,kCAAAA;AAAAA,UAACI,YAAAA;AAAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,UAAU,gBAAgB;AAAA,YAC1B,WAAW,iBAAiB,gBAAgB,CAAC;AAAA,YAC7C,mBAAkB;AAAA,YAClB,oBAAmB;AAAA,YACnB,oBAAoB,EAAE,UAAU,gBAAgB,EAAA;AAAA,YAE/C,UAAA,kDACED,YAAAA,MAAA,EAAK,WAAW,GAAG,OAAO,MAAM,kCAAkC,GAAG,UAAA,IAAA,CAEtE;AAAA,UAAA;AAAA,QAAA;AAAA,QAKH,MAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,cAAI,SAAS,YAAY;AACvB,mBACEH,kCAAAA;AAAAA,cAACE,YAAAA;AAAAA,cAAA;AAAA,gBAEC,WAAW,GAAG,+BAA+B,OAAO,MAAM;AAAA,gBAE1D,UAAAF,kCAAAA,IAACG,kBAAA,EAAK,WAAU,oCAAmC,UAAA,MAAA,CAAG;AAAA,cAAA;AAAA,cAHjD,YAAY,KAAK;AAAA,YAAA;AAAA,UAM5B;AAEA,gBAAM,WAAW,SAAS;AAC1B,iBACEH,kCAAAA;AAAAA,YAACI,YAAAA;AAAAA,YAAA;AAAA,cAEC,SAAS,MAAM,aAAa,IAAI;AAAA,cAChC,WAAW,kBAAkB,QAAQ;AAAA,cACrC,mBAAkB;AAAA,cAClB,oBAAoB,cAAc,IAAI;AAAA,cACtC,oBAAoB,EAAE,UAAU,SAAA;AAAA,cAEhC,UAAAJ,kCAAAA;AAAAA,gBAACG,YAAAA;AAAAA,gBAAA;AAAA,kBACC,WAAW;AAAA,oBACT,OAAO;AAAA,oBACP,WAAW,eAAe;AAAA,kBAAA;AAAA,kBAG3B,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACH;AAAA,YAdK;AAAA,UAAA;AAAA,QAiBX,CAAC;AAAA,QAGDH,kCAAAA;AAAAA,UAACI,YAAAA;AAAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,UAAU,gBAAgB;AAAA,YAC1B,WAAW,iBAAiB,gBAAgB,UAAU;AAAA,YACtD,mBAAkB;AAAA,YAClB,oBAAmB;AAAA,YACnB,oBAAoB,EAAE,UAAU,gBAAgB,WAAA;AAAA,YAE/C,UAAA,kDACED,YAAAA,MAAA,EAAK,WAAW,GAAG,OAAO,MAAM,kCAAkC,GAAG,UAAA,IAAA,CAEtE;AAAA,UAAA;AAAA,QAAA;AAAA,QAKH,iBACCH,kCAAAA;AAAAA,UAACI,YAAAA;AAAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,UAAU,gBAAgB;AAAA,YAC1B,WAAW,iBAAiB,gBAAgB,UAAU;AAAA,YACtD,mBAAkB;AAAA,YAClB,oBAAmB;AAAA,YACnB,oBAAoB,EAAE,UAAU,gBAAgB,WAAA;AAAA,YAEhD,UAAAJ,kCAAAA,IAACG,oBAAK,WAAW,GAAG,OAAO,MAAM,kCAAkC,GAAG,UAAA,OAAA,CAEtE;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAIR;ACxNO,MAAM,eAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,SACEH,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW,GAAG,SAAS,SAAS;AAAA,MAChC,mBAAkB;AAAA,MAClB,oBAAmB;AAAA,MAElB,UAAA,SAAS,IAAI,CAAA,YAAW;AACvB,cAAM,aAAa,oBAAoB,QAAQ;AAE/C,eACED,kCAAAA;AAAAA,UAACG,YAAAA;AAAAA,UAAA;AAAA,YAEC,SAAS,MAAM,gBAAgB,QAAQ,EAAE;AAAA,YACzC,WAAW;AAAA,cACT;AAAA,cACA,aACI,wCACA;AAAA,YAAA;AAAA,YAEN,mBAAkB;AAAA,YAClB,oBAAoB,EAAE,UAAU,WAAA;AAAA,YAChC,oBAAoB,QAAQ;AAAA,YAC5B,mBAAmB,QAAQ;AAAA,YAE1B,UAAA;AAAA,cAAA,QAAQ,QACPJ,kCAAAA,IAACE,kBAAA,EAAK,WAAU,8BAA8B,kBAAQ,MAAK;AAAA,cAE7DF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,kBACd,UAAAF,kCAAAA;AAAAA,gBAACG,YAAAA;AAAAA,gBAAA;AAAA,kBACC,WAAW;AAAA,oBACT;AAAA,oBACA,aACI,yCACA;AAAA,kBAAA;AAAA,kBAEN,eAAe;AAAA,kBAEd,UAAA,QAAQ;AAAA,gBAAA;AAAA,cAAA,EACX,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,UA5BK,QAAQ;AAAA,QAAA;AAAA,MA+BnB,CAAC;AAAA,IAAA;AAAA,EAAA;AAGP;AC7CO,MAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AACF,MAAM;AACJ,QAAM,iBAAiB,YAAY,YAAY,UAAU;AAEzD,SACEH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAW,GAAG,gBAAgB,SAAS,GAAG,mBAAkB,QAC/D,UAAA,MAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,UAAM,aAAa,iBAAiB,KAAK;AACzC,UAAM,aAAa,KAAK;AACxB,UAAM,SAAS,UAAU,MAAM,SAAS;AAExC,WACED,kCAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QAEC,SAAS,MAAM,CAAC,cAAc,SAAS,KAAK,IAAI;AAAA,QAChD,UAAU;AAAA,QACV,WAAW;AAAA,UACT;AAAA,UACA,YAAY,YACR,mBACA;AAAA,YACE;AAAA,YACA,CAAC,UAAU;AAAA,UAAA;AAAA,UAEjB,cAAc;AAAA,UACd,CAAC,eACE,aACG,mCACA;AAAA,QAAA;AAAA,QAER,mBAAkB;AAAA,QAClB,oBAAoB;AAAA,UAClB,UAAU;AAAA,UACV,UAAU;AAAA,QAAA;AAAA,QAEZ,oBAAoB,KAAK;AAAA,QACzB,mBAAmB,KAAK;AAAA,QAExB,UAAA;AAAA,UAAAJ,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,qCACb,UAAA,KAAK,MACR;AAAA,UACAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,kBACd,UAAA;AAAA,YAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,yBACd,UAAA;AAAA,cAAAF,kCAAAA;AAAAA,gBAACG,YAAAA;AAAAA,gBAAA;AAAA,kBACC,WAAW;AAAA,oBACT;AAAA,oBACA,aACI,qCACA;AAAA,kBAAA;AAAA,kBAGL,UAAA,KAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEP,KAAK,UAAU,UAAa,KAAK,QAAQ,KACxCH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,8DACd,gDAACC,YAAAA,MAAA,EAAK,WAAU,wDACb,UAAA,KAAK,OACR,EAAA,CACF;AAAA,YAAA,GAEJ;AAAA,YACC,KAAK,eACJH,kCAAAA,IAACG,oBAAK,WAAU,mDACb,eAAK,YAAA,CACR;AAAA,UAAA,EAAA,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,MArDK,KAAK;AAAA,IAAA;AAAA,EAwDhB,CAAC,EAAA,CACH;AAEJ;ACjFO,MAAM,WAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,UAAU;AACZ,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAIR,MAAAA,SAAS,KAAK;AAC1C,QAAM,CAAC,eAAe,gBAAgB,IAAIA,eAAS;AAAA,IACjD,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA,CACT;AACD,QAAM,aAAaC,MAAAA,OAAa,IAAI;AAEpC,QAAM,aAAaE,MAAAA,YAAY,MAAM;;AACnC,qBAAW,YAAX,mBAAoB,gBAAgB,CAAC,GAAG,GAAG,OAAO,WAAW;AAC3D,uBAAiB,EAAE,GAAG,GAAG,OAAO,QAAQ;AACxC,gBAAU,IAAI;AAAA,IAChB;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,QAAM,cAAcA,MAAAA,YAAY,MAAM;AACpC,cAAU,KAAK;AAAA,EACjB,GAAG,CAAA,CAAE;AAEL,QAAM,kBAAkBA,kBAAY,CAAC,SAAuB;AAC1D,QAAI,CAAC,KAAK,UAAU;AAClB,WAAK,QAAA;AACL,gBAAU,KAAK;AAAA,IACjB;AAAA,EACF,GAAG,CAAA,CAAE;AAGL,QAAM,YAAY;AAAA,IAChB,UAAU;AAAA,IACV,KAAK,cAAc,IAAI,cAAc,SAAS;AAAA,IAC9C,GAAI,UAAU,SACV,EAAE,MAAM,cAAc,MACtB;AAAA,MACE,OAAO,cAAc,IAAI,IAAI,SAAY;AAAA,MACzC,MACE,UAAU,UACN,cAAc,IAAI,cAAc,QAAQ,MACxC,cAAc;AAAA,IAAA;AAAA,IAE1B,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAGZ,SACEG,uCAACC,YAAAA,QAAK,WAAW,GAAG,YAAY,SAAS,GAAG,KAAK,YAC/C,UAAA;AAAA,IAAAF,kCAAAA;AAAAA,MAACI,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,WAAW;AAAA,UACT,YAAY,cACV;AAAA,QAAA;AAAA,QAEJ,mBAAkB;AAAA,QAClB,oBAAmB;AAAA,QACnB,oBAAoB,EAAE,UAAU,OAAA;AAAA,QAE/B,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGHJ,kCAAAA;AAAAA,MAACiB,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,aAAW;AAAA,QACX,eAAc;AAAA,QACd,gBAAgB;AAAA,QAEhB,gDAACe,YAAAA,0BAAA,EAAyB,SAAS,aACjC,UAAAhC,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,UACd,UAAAF,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YACC,OAAO;AAAA,YACP,WAAU;AAAA,YAET,UAAA,MAAM;AAAA,cAAI,CAAA,SACT,KAAK,YACHF,kCAAAA;AAAAA,gBAACE,YAAAA;AAAAA,gBAAA;AAAA,kBAEC,WAAU;AAAA,kBACV,mBAAkB;AAAA,gBAAA;AAAA,gBAFb,KAAK;AAAA,cAAA,IAKZD,kCAAAA;AAAAA,gBAACG,YAAAA;AAAAA,gBAAA;AAAA,kBAEC,SAAS,MAAM,gBAAgB,IAAI;AAAA,kBACnC,UAAU,KAAK;AAAA,kBACf,WAAW;AAAA,oBACT;AAAA,oBACA,KAAK,WACD,eACA;AAAA,kBAAA;AAAA,kBAEN,mBAAkB;AAAA,kBAClB,oBAAoB,EAAE,UAAU,KAAK,SAAA;AAAA,kBAEpC,UAAA;AAAA,oBAAA,KAAK,QAAQJ,kCAAAA,IAACE,kBAAA,EAAK,WAAU,WAAW,eAAK,MAAK;AAAA,oBACnDF,kCAAAA;AAAAA,sBAACG,YAAAA;AAAAA,sBAAA;AAAA,wBACC,WAAW;AAAA,0BACT;AAAA,0BACA,KAAK,WACD,qCACA;AAAA,wBAAA;AAAA,wBAGL,UAAA,KAAK;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACR;AAAA,gBAAA;AAAA,gBAtBK,KAAK;AAAA,cAAA;AAAA,YAuBZ;AAAA,UAEJ;AAAA,QAAA,GAEJ,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AC5IO,MAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,QAAQ;AACV,MAAM;AACJ,QAAM,EAAE,OAAO,YAAA,IAAgB8B,gCAAA;AAG/B,QAAM,WAAmC;AAAA,IACvC,QAAQ,KAAK;AAAA,IACb,OAAO,IAAI;AAAA,IACX,OAAO;AAAA,IACP,QAAQ,KAAK;AAAA,IACb,OAAO,IAAI;AAAA,EAAA;AAGb,QAAM,eAAe,OAAO,UAAU,WAAW,SAAS,KAAK,IAAI;AAGnE,QAAM,iBAAiB,UAAU,SAAS,cAAc;AAExD,SACEjC,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW,GAAG,4BAA4B,SAAS;AAAA,MACnD,OAAO;AAAA,QACL,OAAO,UAAU,SAAS,SAAS;AAAA,QACnC,aAAa;AAAA,MAAA;AAAA,MAGf,UAAAF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,oBAAoB,SAAA,CAAS;AAAA,IAAA;AAAA,EAAA;AAGnD;ACtCO,MAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,MAAM,OAAO,IAAIjF,iBAAM,SAGpB,IAAI;AAEd,QAAM,WAAWA,iBAAM,YAAY,CAAC,UAA6B;AAC/D,UAAM,EAAE,OAAO,OAAA,IAAW,MAAM,YAAY;AAC5C,YAAQ,EAAE,OAAO,QAAQ;AAAA,EAC3B,GAAG,CAAA,CAAE;AAGL,MAAI,aAAa;AACjB,MAAI,cAAc;AAClB,MAAI,MAAM;AACR,UAAM,cAAc,KAAK,QAAQ,KAAK;AACtC,QAAI,cAAc,aAAa;AAE7B,mBAAa,KAAK;AAClB,oBAAc,KAAK,QAAQ;AAAA,IAC7B,OAAO;AAEL,oBAAc,KAAK;AACnB,mBAAa,KAAK,SAAS;AAAA,IAC7B;AAAA,EACF;AAEA,SACE+E,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAW,GAAG,UAAU,SAAS,GAAG,UACvC,UAAA,QACCF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAW,GAAG,gBAAgB,cAAc,GAChD,UAAAF,kCAAAA,IAAC0B,YAAAA,YAAA,EAAW,OAAO,EAAE,OAAO,YAAY,QAAQ,YAAA,GAC7C,SAAA,CACH,EAAA,CACF,EAAA,CAEJ;AAEJ;ACxBO,MAAM,eAA4C,CAAC;AAAA,EACxD;AAAA,EACA,cAAc;AAAA,EACd,UAAU;AAAA,EACV;AACF,MAAM;AACJ,QAAM,gBAAgB;AAAA,IACpB,SAAS;AAAA,MACP,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,IAER,SAAS;AAAA,MACP,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,IAER,SAAS;AAAA,MACP,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,IAER,SAAS;AAAA,MACP,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,IAER,QAAQ;AAAA,MACN,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,EACR;AAGF,QAAM,gBAAgB;AAAA,IACpB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAIR,QAAM,cAAc,MAAM;AACxB,QAAI,gBAAgB,OAAQ,QAAO;AACnC,WAAO,IAAI;AAAA,EACb;AAEA,SACE1B,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAW,GAAG,cAAc,WAAW,GAAG,SAAS,GACtD,UAAA,QAAQ,IAAI,CAAA,WAAU;AACrB,UAAM,UAAU,OAAO,WAAW;AAClC,UAAMgC,UAAS,cAAc,OAAO;AAEpC,WACEjC,kCAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QAEC,SAAS,OAAO;AAAA,QAChB,UAAU,OAAO;AAAA,QACjB,WAAW;AAAA,UACT;AAAA,UACA8B,QAAO;AAAA,UACP,CAAC,OAAO,YAAYA,QAAO;AAAA,UAC3B,OAAO,YAAY;AAAA,UACnB,gBAAgB,cAAc;AAAA,QAAA;AAAA,QAEhC,OACE,gBAAgB,SACZ,EAAE,MAAM,eAAe,UAAU,IAAA,IACjC;AAAA,QAEN,mBAAkB;AAAA,QAClB,oBAAoB,OAAO;AAAA,QAC3B,oBAAoB,EAAE,UAAU,OAAO,SAAA;AAAA,QAEtC,UAAA;AAAA,UAAA,OAAO,QAAQlC,kCAAAA,IAACE,kBAAA,EAAK,WAAU,WAAW,iBAAO,MAAK;AAAA,UACvDF,kCAAAA,IAACG,YAAAA,QAAK,WAAW,GAAG,eAAe+B,QAAO,IAAI,GAC3C,UAAA,OAAO,MAAA,CACV;AAAA,QAAA;AAAA,MAAA;AAAA,MAtBK,OAAO;AAAA,IAAA;AAAA,EAyBlB,CAAC,EAAA,CACH;AAEJ;ACtFO,MAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AACF,MAAM;AAEJ,QAAMpB,cAAa;AAAA,IACjB,IAAI;AAAA,MACF,WAAW;AAAA,MACX,eAAe;AAAA,MACf,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,IAAI;AAAA,MACF,WAAW;AAAA,MACX,eAAe;AAAA,MACf,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,IAAI;AAAA,MACF,WAAW;AAAA,MACX,eAAe;AAAA,MACf,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,EACf;AAGF,QAAM,SAASA,YAAW,IAAI;AAE9B,SACEb,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW,GAAG,+BAA+B,OAAO,WAAW,SAAS;AAAA,MACxE,mBAAkB;AAAA,MAEjB,UAAA;AAAA,QAAA,QACCF,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,OAAO;AAAA,cACP;AAAA,YAAA;AAAA,YAGD,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAILF,kCAAAA;AAAAA,UAACG,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,OAAO;AAAA,YAAA;AAAA,YAGR,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGF,eACCH,kCAAAA;AAAAA,UAACG,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,OAAO;AAAA,YAAA;AAAA,YAGR,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAIJ,UAAUH,kCAAAA,IAACE,kBAAA,EAAK,WAAU,QAAQ,UAAA,OAAA,CAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGhD;AChFO,MAAM,WAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB,CAAA;AAAA,EAChB,kBAAkB;AAAA,EAClB;AACF,MAAM;AACJ,QAAM,CAAC,cAAc,eAAe,IAAIP,MAAAA,SAAS,SAAS,oBAAI,MAAM;AAGpE,QAAM,iBAAiB,CAAChC,UAAe;AACrC,UAAM,OAAOA,MAAK,YAAA;AAClB,UAAM,QAAQA,MAAK,SAAA;AACnB,WAAO,IAAI,KAAK,MAAM,QAAQ,GAAG,CAAC,EAAE,QAAA;AAAA,EACtC;AAGA,QAAM,qBAAqB,CAACA,UAAe;AACzC,UAAM,OAAOA,MAAK,YAAA;AAClB,UAAM,QAAQA,MAAK,SAAA;AACnB,WAAO,IAAI,KAAK,MAAM,OAAO,CAAC,EAAE,OAAA;AAAA,EAClC;AAGA,QAAM,YAAY,CAAC,OAAa,UAAgB;AAC9C,WACE,MAAM,YAAA,MAAkB,MAAM,YAAA,KAC9B,MAAM,SAAA,MAAe,MAAM,cAC3B,MAAM,QAAA,MAAc,MAAM,QAAA;AAAA,EAE9B;AAGA,QAAM,iBAAiB,CAACA,UAAe;AACrC,QAAI,WAAWA,QAAO,QAAS,QAAO;AACtC,QAAI,WAAWA,QAAO,QAAS,QAAO;AACtC,WAAO,cAAc,KAAK,CAAA,iBAAgB,UAAUA,OAAM,YAAY,CAAC;AAAA,EACzE;AAGA,QAAM,oBAAoB,MAAM;AAC9B;AAAA,MACE,IAAI,KAAK,aAAa,YAAA,GAAe,aAAa,SAAA,IAAa,CAAC;AAAA,IAAA;AAAA,EAEpE;AAEA,QAAM,gBAAgB,MAAM;AAC1B;AAAA,MACE,IAAI,KAAK,aAAa,YAAA,GAAe,aAAa,SAAA,IAAa,CAAC;AAAA,IAAA;AAAA,EAEpE;AAGA,QAAM,uBAAuB,MAAM;AACjC,UAAM,OAAO,aAAa,YAAA;AAC1B,UAAM,QAAQ,aAAa,SAAA;AAC3B,UAAM,cAAc,eAAe,YAAY;AAC/C,UAAM,WAAW,mBAAmB,YAAY;AAChD,UAAM,OAAwB,CAAA;AAG9B,QAAI,iBAAiB;AACnB,YAAM,gBAAgB,eAAe,IAAI,KAAK,MAAM,QAAQ,CAAC,CAAC;AAC9D,eAAS,IAAI,WAAW,GAAG,KAAK,GAAG,KAAK;AACtC,aAAK,KAAK,IAAI,KAAK,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC;AAAA,MACxD;AAAA,IACF,OAAO;AACL,eAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AACjC,aAAK,KAAK,IAAI;AAAA,MAChB;AAAA,IACF;AAGA,aAAS,MAAM,GAAG,OAAO,aAAa,OAAO;AAC3C,WAAK,KAAK,IAAI,KAAK,MAAM,OAAO,GAAG,CAAC;AAAA,IACtC;AAGA,QAAI,iBAAiB;AACnB,YAAM,gBAAgB,KAAK,KAAK;AAChC,eAAS,MAAM,GAAG,OAAO,eAAe,OAAO;AAC7C,aAAK,KAAK,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG,CAAC;AAAA,MAC1C;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,qBAAA;AACrB,QAAM,WAAW,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAEjE,QAAM,iBAAiB,CAACA,UAAsB;AAC5C,QAAI,CAACA,SAAQ,eAAeA,KAAI,EAAG;AACnC,aAASA,KAAI;AAAA,EACf;AAEA,QAAM,YAAY,aAAa,mBAAmB,SAAS;AAAA,IACzD,OAAO;AAAA,IACP,MAAM;AAAA,EAAA,CACP;AAGD,QAAM,QAA2B,CAAA;AACjC,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK,GAAG;AAC/C,UAAM,KAAK,aAAa,MAAM,GAAG,IAAI,CAAC,CAAC;AAAA,EACzC;AAEA,gDACGuC,YAAAA,MAAA,EAAK,WAAW,GAAG,4CAA4C,SAAS,GAEvE,UAAA;AAAA,IAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,8CACd,UAAA;AAAA,MAAAF,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,WAAU;AAAA,UACV,mBAAkB;AAAA,UAClB,oBAAmB;AAAA,UAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,4CAA2C,UAAA,IAAA,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,MAG9DH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,yDACb,UAAA,WACH;AAAA,MAEAH,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,WAAU;AAAA,UACV,mBAAkB;AAAA,UAClB,oBAAmB;AAAA,UAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,4CAA2C,UAAA,IAAA,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IAC9D,GACF;AAAA,0CAGCD,YAAAA,MAAA,EAAK,WAAU,iBACb,UAAA,SAAS,IAAI,SACZF,kCAAAA,IAACE,YAAAA,MAAA,EAAe,WAAU,4BACxB,UAAAF,kCAAAA,IAACG,YAAAA,QAAK,WAAU,wDACb,eACH,EAAA,GAHS,GAIX,CACD,EAAA,CACH;AAAA,IAGC,MAAM,IAAI,CAAC,MAAM,cAChBH,kCAAAA,IAACE,YAAAA,MAAA,EAAqB,WAAU,YAC7B,UAAA,KAAK,IAAI,CAACvC,OAAM,aAAa;AAC5B,UAAI,CAACA,OAAM;AACT,eACEqC,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YAEC,WAAU;AAAA,UAAA;AAAA,UADL,SAAS,QAAQ;AAAA,QAAA;AAAA,MAI5B;AAEA,YAAM,iBAAiBvC,MAAK,SAAA,MAAe,aAAa,SAAA;AACxD,YAAM,aAAa,SAAS,UAAUA,OAAM,KAAK;AACjD,YAAM,UAAU,UAAUA,OAAM,oBAAI,MAAM;AAC1C,YAAM,aAAa,eAAeA,KAAI;AAEtC,aACEqC,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UAEC,SAAS,MAAM,eAAezC,KAAI;AAAA,UAClC,UAAU;AAAA,UACV,WAAW;AAAA,YACT;AAAA,YACA,CAAC,cAAc;AAAA,YACf,cAAc;AAAA,YACd,cAAc;AAAA,YACd,WACE,CAAC,cACD;AAAA,UAAA;AAAA,UAEJ,mBAAkB;AAAA,UAClB,oBAAoBA,MAAK,mBAAA;AAAA,UACzB,oBAAoB;AAAA,YAClB,UAAU;AAAA,YACV,UAAU;AAAA,UAAA;AAAA,UAGZ,UAAAqC,kCAAAA;AAAAA,YAACG,YAAAA;AAAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,iBACI,kCACA;AAAA,gBACJ,cAAc;AAAA,cAAA;AAAA,cAGf,gBAAK,QAAA;AAAA,YAAQ;AAAA,UAAA;AAAA,QAChB;AAAA,QA7BK,GAAGxC,MAAK,SAAS,IAAI,QAAQ;AAAA,MAAA;AAAA,IAgCxC,CAAC,EAAA,GAlDQ,SAmDX,CACD;AAAA,EAAA,GACH;AAEJ;ACzLO,SAAS,SAA4C;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,aAAa;AAAA,EACb,eAAe;AAAA,EACf;AACF,GAAqB;AACnB,QAAM,eAAe;AAAA,IACnB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAGT,QAAM,eAAe,MAAM;AACzB,QAAI,CAAC,WAAY,QAAO;AAExB,iDACGuC,kBAAA,EAAK,WAAU,sFACb,UAAA,QAAQ,IAAI,CAAA,WACXF,kCAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QAEC,WAAW;AAAA,UACT,UAAU,cAAc;AAAA,UACxB,aAAa,OAAO,SAAS,MAAM;AAAA,QAAA;AAAA,QAErC,OAAO,EAAE,MAAM,OAAO,QAAQ,EAAA;AAAA,QAE9B,UAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,iFACb,iBAAO,MAAA,CACV;AAAA,MAAA;AAAA,MATK,OAAO;AAAA,IAAA,CAWf,GACH;AAAA,EAEJ;AAEA,QAAM,YAAY,CAAC,EAAE,MAAM,YAAwC;AACjE,UAAM,QAAQ,QAAQ,MAAM;AAE5B,WACEH,kCAAAA;AAAAA,MAACI,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS,MAAM,yCAAa,MAAM;AAAA,QAClC,WAAW;AAAA,UACT;AAAA,UACA,SAAS;AAAA,UACT,cAAc;AAAA,QAAA;AAAA,QAEhB,UAAU,CAAC;AAAA,QACX,mBAAmB,aAAa,WAAW;AAAA,QAE1C,UAAA,QAAQ,IAAI,CAAA,WACXJ,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YAEC,WAAW;AAAA,cACT,UAAU,cAAc;AAAA,cACxB,aAAa,OAAO,SAAS,MAAM;AAAA,cACnC;AAAA,YAAA;AAAA,YAEF,OAAO,EAAE,MAAM,OAAO,QAAQ,EAAA;AAAA,YAE7B,iBAAO,SACN,OAAO,OAAO,MAAM,KAAK,IAEzBF,kCAAAA;AAAAA,cAACG,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,eAAe;AAAA,gBAEd,UAAA,OAAO,KAAK,OAAO,GAAG,KAAK,EAAE;AAAA,cAAA;AAAA,YAAA;AAAA,UAChC;AAAA,UAhBG,OAAO;AAAA,QAAA,CAmBf;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AAEA,QAAM,cAAc,MAClBH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,qBACd,UAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,4CACb,UAAA,aAAA,CACH,GACF;AAGF,gDACGD,YAAAA,MAAA,EAAK,WAAW,GAAG,6BAA6B,SAAS,GACvD,UAAA;AAAA,IAAA,aAAA;AAAA,IACDF,kCAAAA;AAAAA,MAACmB,YAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,oBAAoB;AAAA,QACpB,8BAA8B;AAAA,MAAA;AAAA,IAAA;AAAA,EAChC,GACF;AAEJ;AC/FO,MAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAIxB,MAAAA,SAAS,KAAK;AAC1C,QAAM,CAAC,aAAa,cAAc,IAAIA,MAAAA,SAAS,EAAE;AAGjD,QAAM,kBAAkB,aACpB,QAAQ;AAAA,IAAO,CAAA,QACb,IAAI,MAAM,YAAA,EAAc,SAAS,YAAY,aAAa;AAAA,EAAA,IAE5D;AAGJ,QAAM,kBAAkB,QAAQ,OAAO,CAAA,QAAO,MAAM,SAAS,IAAI,KAAK,CAAC;AAGvE,QAAM,eAAeG,MAAAA;AAAAA,IACnB,CAAC,gBAAwB;AACvB,UAAI,MAAM,SAAS,WAAW,GAAG;AAC/B,iBAAS,MAAM,OAAO,CAAA,MAAK,MAAM,WAAW,CAAC;AAAA,MAC/C,OAAO;AACL,iBAAS,CAAC,GAAG,OAAO,WAAW,CAAC;AAAA,MAClC;AAAA,IACF;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,EAAA;AAIlB,QAAM,aAAaA,MAAAA;AAAAA,IACjB,CAAC,gBAAwB;AACvB,eAAS,MAAM,OAAO,CAAA,MAAK,MAAM,WAAW,CAAC;AAAA,IAC/C;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,EAAA;AAGlB,QAAM,cAAcA,MAAAA,YAAY,MAAM;AACpC,cAAU,KAAK;AACf,mBAAe,EAAE;AAAA,EACnB,GAAG,CAAA,CAAE;AAEL,QAAM,iBAAiB,gBAAgB;AACvC,QAAM,cACJ,iBAAiB,aAAa,iBAAiB,aAAa;AAE9D,gDACGI,YAAAA,MAAA,EAAK,WAAW,GAAG,UAAU,SAAS,GAErC,UAAA;AAAA,IAAAF,kCAAAA;AAAAA,MAACI,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS,MAAM,CAAC,YAAY,UAAU,IAAI;AAAA,QAC1C;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,YAAY;AAAA,QAAA;AAAA,QAEd,mBAAkB;AAAA,QAClB,oBAAoB;AAAA,QACpB,oBAAoB,EAAE,UAAU,UAAU,OAAA;AAAA,QAE1C,UAAAJ,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,8BACb,UAAA,gBAAgB,WAAW,IAC1BF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,mDACb,UAAA,YAAA,CACH,IAEAF,kCAAAA,KAAAe,4BAAA,EACG,UAAA;AAAA,UAAA,gBAAgB,MAAM,GAAG,UAAU,EAAE,IAAI,CAAA,QACxCf,kCAAAA;AAAAA,YAACC,YAAAA;AAAAA,YAAA;AAAA,cAEC,WAAU;AAAA,cAEV,UAAA;AAAA,gBAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,wDACb,UAAA,IAAI,OACP;AAAA,gBACAH,kCAAAA;AAAAA,kBAACI,YAAAA;AAAAA,kBAAA;AAAA,oBACC,SAAS,MAAM,WAAW,IAAI,KAAK;AAAA,oBACnC,SAAS;AAAA,oBACT,mBAAkB;AAAA,oBAClB,oBAAoB,UAAU,IAAI,KAAK;AAAA,oBAEvC,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,oCAAmC,UAAA,IAAA,CAAC;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACtD;AAAA,YAAA;AAAA,YAbK,IAAI;AAAA,UAAA,CAeZ;AAAA,UACA,cAAc,KACbH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,oDACd,UAAAD,kCAAAA,KAACE,YAAAA,MAAA,EAAK,WAAU,wDAAuD,UAAA;AAAA,YAAA;AAAA,YACnE;AAAA,YAAY;AAAA,UAAA,EAAA,CAChB,EAAA,CACF;AAAA,QAAA,EAAA,CAEJ,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,IAIFH,kCAAAA;AAAAA,MAACiB,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,aAAW;AAAA,QACX,eAAc;AAAA,QACd,gBAAgB;AAAA,QAEhB,UAAAjB,kCAAAA,IAACgC,YAAAA,0BAAA,EAAyB,SAAS,aACjC,UAAAhC,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,kCACd,UAAAF,kCAAAA,IAACgC,YAAAA,0BAAA,EACC,UAAA/B,uCAACC,YAAAA,MAAA,EAAK,WAAU,sDAEb,UAAA;AAAA,UAAA,cACCF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,qDACd,UAAAF,kCAAAA;AAAAA,YAACW,YAAAA;AAAAA,YAAA;AAAA,cACC,OAAO;AAAA,cACP,cAAc;AAAA,cACd,aAAa;AAAA,cACb,sBAAqB;AAAA,cACrB,WAAU;AAAA,YAAA;AAAA,UAAA,GAEd;AAAA,UAIFX,kCAAAA,IAAC0B,YAAAA,cAAW,WAAU,YACnB,0BAAgB,WAAW,0CACzBxB,YAAAA,MAAA,EAAK,WAAU,0BACd,UAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,4CAA2C,UAAA,mBAAA,CAE3D,GACF,IAEA,gBAAgB,IAAI,CAAA,WAAU;AAC5B,kBAAM,aAAa,MAAM,SAAS,OAAO,KAAK;AAE9C,mBACEF,kCAAAA;AAAAA,cAACG,YAAAA;AAAAA,cAAA;AAAA,gBAEC,SAAS,MACP,CAAC,OAAO,YAAY,aAAa,OAAO,KAAK;AAAA,gBAE/C,UAAU,OAAO;AAAA,gBACjB,WAAW;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA,OAAO,YAAY;AAAA,gBAAA;AAAA,gBAErB,mBAAkB;AAAA,gBAClB,oBAAoB;AAAA,kBAClB,SAAS;AAAA,kBACT,UAAU,OAAO;AAAA,gBAAA;AAAA,gBAInB,UAAA;AAAA,kBAAAJ,kCAAAA;AAAAA,oBAACE,YAAAA;AAAAA,oBAAA;AAAA,sBACC,WAAW;AAAA,wBACT;AAAA,wBACA,aACI,sEACA;AAAA,sBAAA;AAAA,sBAGL,UAAA,cACCF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,gCAA+B,UAAA,IAAA,CAE/C;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAKJH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,gDACb,iBAAO,MAAA,CACV;AAAA,gBAAA;AAAA,cAAA;AAAA,cAnCK,OAAO;AAAA,YAAA;AAAA,UAsClB,CAAC,EAAA,CAEL;AAAA,UAGAF,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,2FACd,UAAA;AAAA,YAAAD,kCAAAA,KAACE,YAAAA,MAAA,EAAK,WAAU,4CACb,UAAA;AAAA,cAAA,MAAM;AAAA,cAAO;AAAA,YAAA,GAChB;AAAA,YACAF,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,kBACb,UAAA;AAAA,cAAA,MAAM,SAAS,KACdF,kCAAAA;AAAAA,gBAACI,YAAAA;AAAAA,gBAAA;AAAA,kBACC,SAAS,MAAM,SAAS,EAAE;AAAA,kBAC1B,mBAAkB;AAAA,kBAClB,oBAAmB;AAAA,kBAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,4CAA2C,UAAA,YAAA,CAE3D;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGJH,kCAAAA;AAAAA,gBAACI,YAAAA;AAAAA,gBAAA;AAAA,kBACC,SAAS;AAAA,kBACT,mBAAkB;AAAA,kBAClB,oBAAmB;AAAA,kBAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,wDAAuD,UAAA,OAAA,CAEvE;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF,EAAA,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,GACF,EAAA,CACF,GACF,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AChPO,MAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA,OAAO;AAAA,EACP,cAAc;AAAA,EACd,YAAY;AAAA,EACZ;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,aAAa;AAAA,EACb;AACF,MAAM;AAEJ,QAAM,WAAW,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC;AAGjD,QAAM,gBAAgB;AAAA,IACpB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,EAAA;AAGV,QAAM,gBAAgB,SAAS,cAAc,OAAO;AACpD,QAAM,YAAY,OAAO,cAAc;AAEvC,SACEF,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW,GAAG,+BAA+B,SAAS;AAAA,MACtD,OAAO,EAAE,OAAO,MAAM,QAAQ,KAAA;AAAA,MAG9B,UAAA;AAAA,QAAAF,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,cAAc,OAAO;AAAA,cACrB,aAAa;AAAA,cACb,aAAa;AAAA,cACb,UAAU;AAAA,YAAA;AAAA,UACZ;AAAA,QAAA;AAAA,QAIFF,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,cAAc,OAAO;AAAA,cACrB,aAAa;AAAA,cACb,aAAa;AAAA,cACb,gBAAgB;AAAA,cAChB,kBAAkB,WAAW,KAAK,gBAAgB;AAAA,cAClD,mBAAmB,WAAW,KAAK,gBAAgB;AAAA,cACnD,iBAAiB,WAAW,KAAK,gBAAgB;AAAA,cACjD,UAAU;AAAA,cACV,WAAW,CAAC,EAAE,QAAQ,UAAU;AAAA,YAAA;AAAA,UAClC;AAAA,QAAA;AAAA,QAIFF,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,cAAc,YAAY;AAAA,cAC1B,iBAAiB;AAAA,cACjB,YAAY;AAAA,cACZ,gBAAgB;AAAA,YAAA;AAAA,YAGhB,WAAA,aAAa,UACbD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,+BACb,UAAA;AAAA,cAAA,aAAa,CAAC,SACbD,kCAAAA;AAAAA,gBAACE,YAAAA;AAAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO,EAAE,UAAU,OAAO,IAAA;AAAA,kBAEzB,UAAA;AAAA,oBAAA,KAAK,MAAM,QAAQ;AAAA,oBAAE;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGzB,SACCH,kCAAAA;AAAAA,gBAACG,YAAAA;AAAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO,EAAE,UAAU,OAAO,KAAA;AAAA,kBAEzB,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACH,EAAA,CAEJ;AAAA,UAAA;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,EAAA;AAGN;AC7FO,MAAM,UAAkC,CAAC,EAAE,OAAO,gBAAgB;AACvE,SACEH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAW,GAAG,SAAS,SAAS,GAAG,mBAAkB,QACxD,UAAA,MAAM,IAAI,CAAA,SACTD,kCAAAA;AAAAA,IAACG,YAAAA;AAAAA,IAAA;AAAA,MAEC,SAAS,KAAK;AAAA,MACd,WAAW;AAAA,QACT;AAAA,QACA,KAAK,SACD,mCACA;AAAA,MAAA;AAAA,MAEN,mBAAkB;AAAA,MAClB,oBAAoB,EAAE,UAAU,KAAK,OAAA;AAAA,MACrC,oBAAoB,KAAK;AAAA,MAExB,UAAA;AAAA,QAAA,KAAK,QAAQJ,kCAAAA,IAACE,kBAAA,EAAK,WAAU,WAAW,eAAK,MAAK;AAAA,QACnDF,kCAAAA;AAAAA,UAACG,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,KAAK,SACD,qCACA;AAAA,YAAA;AAAA,YAGL,UAAA,KAAK;AAAA,UAAA;AAAA,QAAA;AAAA,QAEP,KAAK,UAAU,UACdH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,oDACd,UAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,4CACb,UAAA,KAAK,OACR,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,IA5BG,KAAK;AAAA,EAAA,CA+Bb,GACH;AAEJ;AC9CO,MAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,SACEH,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAGF,UAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,yCACd,UAAA;AAAA,QAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,0DACb,UAAA,OACH;AAAA,QACAF,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,+BACb,UAAA;AAAA,UAAA,WAAWF,kCAAAA,IAACQ,+BAAA,EAAkB,MAAK,SAAQ,OAAM,WAAU;AAAA,UAC3D;AAAA,UACA,SACCR,kCAAAA;AAAAA,YAACI,YAAAA;AAAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,WAAU;AAAA,cACV,mBAAkB;AAAA,cAClB,oBAAoB;AAAA,cAEpB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,4CAA2C,UAAA,IAAA,CAE3D;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,CAEJ;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AC5BO,MAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AAAA,EACV;AACF,MAAM;AACJ,QAAM,oBAAoB;AAAA,IACxB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,aAAa;AAAA,EAAA;AAGf,QAAM,iBAAiB;AAAA,IACrB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA,kBAAkB,UAAU;AAAA,IAC5B,eAAe,OAAO;AAAA,IACtB;AAAA,EAAA;AAGF,QAAM,UAAU,aACdH,kCAAAA;AAAAA,IAAC0B,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,MACX,uBAAuB,EAAE,UAAU,EAAA;AAAA,MACnC,8BAA8B;AAAA,MAE7B;AAAA,IAAA;AAAA,EAAA,IAGH1B,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAW,kBAAmB,SAAA,CAAS;AAG/C,MAAI,UAAU;AACZ,WACEF,sCAACkB,YAAAA,gBAAa,WAAW,GAAG,UAAU,kBAAkB,UAAU,CAAC,GAChE,UAAA,QAAA,CACH;AAAA,EAEJ;AAEA,SAAO;AACT;ACrDO,MAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,YAAY;AAAA,EACZ;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,aAAa,cAAc,IAAIvB,MAAAA,SAAS,gBAAgB;AAE/D,QAAM,iBAAiB;AAAA,IACrB,gBAAgB,EAAE,QAAQ,IAAI,OAAO,GAAA;AAAA,IACrC,eAAe,EAAE,QAAQ,IAAI,MAAM,GAAA;AAAA,IACnC,aAAa,EAAE,KAAK,IAAI,OAAO,GAAA;AAAA,IAC/B,YAAY,EAAE,KAAK,IAAI,MAAM,GAAA;AAAA,EAAG;AAGlC,SACEM,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,OAAO,CAACgC,SAAO,WAAW,eAAe,QAAQ,CAAC;AAAA,MAClD,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAIA,UAAA;AAAA,SAAA,SAAS,eAAe,cACxBjC,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,2FACb,UAAA;AAAA,UAAA,SACCF,kCAAAA,IAACG,kBAAA,EAAK,WAAU,+CACb,UAAA,OACH;AAAA,UAGFF,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,+BACb,UAAA;AAAA,YAAA,eACCF,kCAAAA;AAAAA,cAACI,YAAAA;AAAAA,cAAA;AAAA,gBACC,SAAS,MAAM,eAAe,CAAC,WAAW;AAAA,gBAC1C,WAAU;AAAA,gBACV,mBAAkB;AAAA,gBAClB,oBAAoB,cAAc,WAAW;AAAA,gBAE7C,UAAAJ,kCAAAA;AAAAA,kBAACG,YAAAA;AAAAA,kBAAA;AAAA,oBACC,WAAW;AAAA,sBACT;AAAA,sBACA,eAAe;AAAA,oBAAA;AAAA,oBAElB,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAED;AAAA,YAAA;AAAA,YAIH,aACCH,kCAAAA;AAAAA,cAACI,YAAAA;AAAAA,cAAA;AAAA,gBACC,SAAS;AAAA,gBACT,WAAU;AAAA,gBACV,mBAAkB;AAAA,gBAClB,oBAAmB;AAAA,gBAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,oCAAmC,UAAA,IAAA,CAAC;AAAA,cAAA;AAAA,YAAA;AAAA,UACtD,EAAA,CAEJ;AAAA,QAAA,GACF;AAAA,QAID,CAAC,eAAeH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,OAAO,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGvD;AAEA,MAAMgC,WAASC,YAAAA,WAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,EAAA;AAEZ,CAAC;AC7ED,MAAM,oBAA+B;AAAA,EACnC,EAAE,MAAM,MAAM,MAAM,iBAAiB,UAAU,MAAM,MAAM,OAAA;AAAA,EAC3D,EAAE,MAAM,MAAM,MAAM,kBAAkB,UAAU,OAAO,MAAM,OAAA;AAAA,EAC7D,EAAE,MAAM,MAAM,MAAM,UAAU,UAAU,MAAM,MAAM,OAAA;AAAA,EACpD,EAAE,MAAM,MAAM,MAAM,aAAa,UAAU,OAAO,MAAM,OAAA;AAAA,EACxD,EAAE,MAAM,MAAM,MAAM,WAAW,UAAU,OAAO,MAAM,OAAA;AAAA,EACtD,EAAE,MAAM,MAAM,MAAM,UAAU,UAAU,OAAO,MAAM,OAAA;AAAA,EACrD,EAAE,MAAM,MAAM,MAAM,SAAS,UAAU,OAAO,MAAM,OAAA;AAAA,EACpD,EAAE,MAAM,MAAM,MAAM,SAAS,UAAU,OAAO,MAAM,OAAA;AAAA,EACpD,EAAE,MAAM,MAAM,MAAM,UAAU,UAAU,OAAO,MAAM,OAAA;AAAA,EACrD,EAAE,MAAM,MAAM,MAAM,UAAU,UAAU,OAAO,MAAM,OAAA;AAAA,EACrD,EAAE,MAAM,MAAM,MAAM,SAAS,UAAU,OAAO,MAAM,OAAA;AAAA,EACpD,EAAE,MAAM,MAAM,MAAM,SAAS,UAAU,OAAO,MAAM,OAAA;AAAA,EACpD,EAAE,MAAM,MAAM,MAAM,SAAS,UAAU,OAAO,MAAM,OAAA;AAAA,EACpD,EAAE,MAAM,MAAM,MAAM,eAAe,UAAU,OAAO,MAAM,OAAA;AAAA,EAC1D,EAAE,MAAM,MAAM,MAAM,aAAa,UAAU,OAAO,MAAM,OAAA;AAC1D;AAkBO,MAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,WAAW;AAAA,EACX;AACF,MAAM;;AACJ,QAAM,CAAC,iBAAiB,kBAAkB,IAAIxC,MAAAA;AAAAA,MAC5C,eAAU,CAAC,MAAX,mBAAc,SAAQ;AAAA,EAAA;AAExB,QAAM,CAAC,QAAQ,SAAS,IAAIA,MAAAA,SAAS,KAAK;AAC1C,QAAM,CAAC,aAAa,cAAc,IAAIA,MAAAA,SAAS,EAAE;AAEjD,QAAM,sBACJ,sBAAsB,SAAY,oBAAoB;AAExD,QAAM,kBAAkB,UAAU,KAAK,CAAA,MAAK,EAAE,SAAS,mBAAmB;AAG1E,QAAM,sBAAsBG,MAAAA;AAAAA,IAC1B,CAAC,gBAAwB;AACvB,UAAI,sBAAsB,UAAa,iBAAiB;AACtD,wBAAgB,WAAW;AAAA,MAC7B,OAAO;AACL,2BAAmB,WAAW;AAAA,MAChC;AACA,gBAAU,KAAK;AACf,qBAAe,EAAE;AAAA,IACnB;AAAA,IACA,CAAC,mBAAmB,eAAe;AAAA,EAAA;AAIrC,QAAM,oBAAoB,CAAC,UAA0B;AAEnD,UAAM,UAAU,MAAM,QAAQ,OAAO,EAAE;AAGvC,SAAI,mDAAiB,cAAa,MAAM;AACtC,UAAI,QAAQ,UAAU,EAAG,QAAO;AAChC,UAAI,QAAQ,UAAU;AACpB,eAAO,IAAI,QAAQ,MAAM,GAAG,CAAC,CAAC,KAAK,QAAQ,MAAM,CAAC,CAAC;AACrD,aAAO,IAAI,QAAQ,MAAM,GAAG,CAAC,CAAC,KAAK,QAAQ,MAAM,GAAG,CAAC,CAAC,IAAI,QAAQ,MAAM,GAAG,EAAE,CAAC;AAAA,IAChF;AAEA,WAAO;AAAA,EACT;AAGA,QAAM,oBAAoB,CAAC,SAAiB;AAC1C,UAAM,YAAY,kBAAkB,IAAI;AACxC,aAAS,SAAS;AAAA,EACpB;AAGA,QAAM,oBAAoB,UAAU;AAAA,IAClC,CAAA,YACE,QAAQ,KAAK,YAAA,EAAc,SAAS,YAAY,YAAA,CAAa,KAC7D,QAAQ,SAAS,SAAS,WAAW,KACrC,QAAQ,KAAK,cAAc,SAAS,YAAY,YAAA,CAAa;AAAA,EAAA;AAGjE,gDACGI,YAAAA,MAAA,EAAK,WAAW,GAAG,UAAU,SAAS,GACrC,UAAA;AAAA,IAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,kBAEd,UAAA;AAAA,MAAAD,kCAAAA;AAAAA,QAACG,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS,MAAM,CAAC,YAAY,UAAU,IAAI;AAAA,UAC1C;AAAA,UACA,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,YAAY;AAAA,UAAA;AAAA,UAEd,mBAAkB;AAAA,UAClB,oBAAmB;AAAA,UAEnB,UAAA;AAAA,YAAAJ,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,WAAW,UAAA,mDAAiB,MAAK;AAAA,YACjDH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,qDACb,6DAAiB,UACpB;AAAA,YACAH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,oCAAmC,UAAA,IAAA,CAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAItDH,kCAAAA;AAAAA,QAACW,YAAAA;AAAAA,QAAA;AAAA,UACC;AAAA,UACA,cAAc;AAAA,UACd;AAAA,UACA,sBAAqB;AAAA,UACrB,cAAa;AAAA,UACb,UAAU,CAAC;AAAA,UACX,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,YAAY;AAAA,UAAA;AAAA,QACd;AAAA,MAAA;AAAA,IACF,GACF;AAAA,IAGC,SAAS,mBACRV,uCAACE,YAAAA,MAAA,EAAK,WAAU,mDAAkD,UAAA;AAAA,MAAA;AAAA,MAClD,gBAAgB;AAAA,MAAS;AAAA,MAAE;AAAA,IAAA,GAC3C;AAAA,IAIFH,kCAAAA;AAAAA,MAACiB,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,aAAW;AAAA,QACX,eAAc;AAAA,QACd,gBAAgB,MAAM,UAAU,KAAK;AAAA,QAErC,gDAACe,sCAAA,EAAyB,SAAS,MAAM,UAAU,KAAK,GACtD,UAAAhC,kCAAAA,IAACE,kBAAA,EAAK,WAAU,kCACd,UAAAF,sCAACgC,YAAAA,0BAAA,EACC,UAAA/B,kCAAAA,KAACC,kBAAA,EAAK,WAAU,sDAEd,UAAA;AAAA,UAAAF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,qDACd,UAAAF,kCAAAA;AAAAA,YAACW,YAAAA;AAAAA,YAAA;AAAA,cACC,OAAO;AAAA,cACP,cAAc;AAAA,cACd,aAAY;AAAA,cACZ,sBAAqB;AAAA,cACrB,WAAU;AAAA,YAAA;AAAA,UAAA,GAEd;AAAA,UAGAX,kCAAAA,IAAC0B,YAAAA,cAAW,WAAU,YACnB,4BAAkB,WAAW,0CAC3BxB,kBAAA,EAAK,WAAU,0BACd,UAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,4CAA2C,UAAA,sBAE3D,GACF,IAEA,kBAAkB,IAAI,CAAA,YACpBF,kCAAAA;AAAAA,YAACG,YAAAA;AAAAA,YAAA;AAAA,cAEC,SAAS,MAAM,oBAAoB,QAAQ,IAAI;AAAA,cAC/C,WAAW;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA,QAAQ,SAAS,uBACf;AAAA,cAAA;AAAA,cAEJ,mBAAkB;AAAA,cAElB,UAAA;AAAA,gBAAAJ,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,WAAW,UAAA,QAAQ,MAAK;AAAA,gBACxCH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,gDACb,kBAAQ,MACX;AAAA,gBACAH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,4CACb,kBAAQ,SAAA,CACX;AAAA,cAAA;AAAA,YAAA;AAAA,YAhBK,QAAQ;AAAA,UAAA,CAkBhB,GAEL;AAAA,UAGAH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,qDACd,UAAAF,kCAAAA;AAAAA,YAACI,YAAAA;AAAAA,YAAA;AAAA,cACC,SAAS,MAAM,UAAU,KAAK;AAAA,cAC9B,WAAU;AAAA,cACV,mBAAkB;AAAA,cAElB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,wDAAuD,UAAA,OAAA,CAEvE;AAAA,YAAA;AAAA,UAAA,EACF,CACF;AAAA,QAAA,GACF,EAAA,CACF,GACF,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AC/NO,MAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAIR,MAAAA,SAAS,KAAK;AAC1C,QAAM,CAAC,cAAc,eAAe,IAAIA,MAAAA,SAAS,IAAI;AACrD,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,MAAAA,SAAS,IAAI;AACzD,QAAM,CAACyC,SAAQ,SAAS,IAAIzC,MAAAA,SAAsB,IAAI;AAGtDI,QAAAA,UAAU,MAAM;AACd,QAAI,OAAO;AACT,YAAM,CAAC,OAAO,OAAO,IAAI,MAAM,MAAM,GAAG;AACxC,YAAM,OAAO,SAAS,OAAO,EAAE;AAE/B,UAAI,WAAW;AACb,cAAM,OAAO,QAAQ;AACrB,cAAM,SAAS,SAAS,IAAI,KAAK,OAAO,KAAK,OAAO,KAAK;AACzD,wBAAgB,OAAO,SAAA,EAAW,SAAS,GAAG,GAAG,CAAC;AAClD,kBAAU,OAAO,OAAO,IAAI;AAAA,MAC9B,OAAO;AACL,wBAAgB,KAAK;AAAA,MACvB;AAEA,wBAAkB,OAAO;AAAA,IAC3B;AAAA,EACF,GAAG,CAAC,OAAO,SAAS,CAAC;AAGrB,QAAM,gBAAgB,MAAc;AAClC,QAAI,CAAC,MAAO,QAAO;AAEnB,UAAM,CAAC,OAAO,OAAO,IAAI,MAAM,MAAM,GAAG;AACxC,UAAM,OAAO,SAAS,OAAO,EAAE;AAE/B,QAAI,WAAW;AACb,YAAM,SAAS,SAAS,IAAI,KAAK,OAAO,KAAK,OAAO,KAAK;AACzD,YAAM,gBAAgB,QAAQ,KAAK,OAAO;AAC1C,aAAO,GAAG,MAAM,IAAI,OAAO,IAAI,aAAa;AAAA,IAC9C;AAEA,WAAO,GAAG,KAAK,IAAI,OAAO;AAAA,EAC5B;AAGA,QAAM,mBAAmB,CACvB,SACA,WACA,cACG;AACH,QAAI,OAAO,SAAS,SAAS,EAAE;AAC/B,UAAM,SAAS,SAAS,WAAW,EAAE;AAErC,QAAI,aAAa,WAAW;AAC1B,UAAI,cAAc,QAAQ,SAAS,IAAI;AACrC,gBAAQ;AAAA,MACV,WAAW,cAAc,QAAQ,SAAS,IAAI;AAC5C,eAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAM,gBAAgB,GAAG,KAAK,SAAA,EAAW,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,SAAA,EAAW,SAAS,GAAG,GAAG,CAAC;AAC/F,aAAS,aAAa;AAAA,EACxB;AAGA,QAAM,cAAc,YAChB,MAAM,KAAK,EAAE,QAAQ,GAAA,GAAM,CAAC,GAAG,OAAO,IAAI,GAAG,SAAA,EAAW,SAAS,GAAG,GAAG,CAAC,IACxE,MAAM,KAAK,EAAE,QAAQ,MAAM,CAAC,GAAG,MAAM,EAAE,SAAA,EAAW,SAAS,GAAG,GAAG,CAAC;AAGtE,QAAM,gBAAgB,MAAM;AAAA,IAC1B,EAAE,QAAQ,KAAK,KAAK,KAAK,UAAU,EAAA;AAAA,IACnC,CAAC,GAAG,OAAO,IAAI,YAAY,SAAA,EAAW,SAAS,GAAG,GAAG;AAAA,EAAA;AAGvD,gDACGG,YAAAA,MAAA,EAAK,WAAW,GAAG,UAAU,SAAS,GAErC,UAAA;AAAA,IAAAD,kCAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS,MAAM,CAAC,YAAY,UAAU,IAAI;AAAA,QAC1C;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,YAAY;AAAA,QAAA;AAAA,QAEd,mBAAkB;AAAA,QAClB,oBAAmB;AAAA,QAEnB,UAAA;AAAA,UAAAJ,kCAAAA;AAAAA,YAACG,YAAAA;AAAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,QACI,kCACA;AAAA,cAAA;AAAA,cAGL,UAAA,cAAA;AAAA,YAAc;AAAA,UAAA;AAAA,UAEjBH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,oCAAmC,UAAA,KAAA,CAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAIvDH,kCAAAA;AAAAA,MAACiB,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,aAAW;AAAA,QACX,eAAc;AAAA,QACd,gBAAgB,MAAM,UAAU,KAAK;AAAA,QAErC,gDAACe,sCAAA,EAAyB,SAAS,MAAM,UAAU,KAAK,GACtD,UAAAhC,kCAAAA,IAACE,kBAAA,EAAK,WAAU,kCACd,UAAAF,sCAACgC,YAAAA,0BAAA,EACC,UAAA/B,kCAAAA,KAACC,kBAAA,EAAK,WAAU,0CACd,UAAA;AAAA,UAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,sBAEd,UAAA;AAAA,YAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,UACd,UAAA;AAAA,cAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,yEAAwE,UAAA,QAExF;AAAA,oDACCuB,YAAAA,YAAA,EAAW,WAAU,4DACnB,UAAA,YAAY,IAAI,CAAA,SACf1B,kCAAAA;AAAAA,gBAACI,YAAAA;AAAAA,gBAAA;AAAA,kBAEC,SAAS,MAAM;AACb,oCAAgB,IAAI;AACpB;AAAA,sBACE;AAAA,sBACA;AAAA,sBACA,YAAYgC,UAAS;AAAA,oBAAA;AAAA,kBAEzB;AAAA,kBACA,WAAW;AAAA,oBACT;AAAA,oBACA;AAAA,oBACA,SAAS,gBACP;AAAA,kBAAA;AAAA,kBAGJ,UAAApC,kCAAAA;AAAAA,oBAACG,YAAAA;AAAAA,oBAAA;AAAA,sBACC,WAAW;AAAA,wBACT;AAAA,wBACA,SAAS,eACL,iDACA;AAAA,sBAAA;AAAA,sBAGL,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACH;AAAA,gBAzBK;AAAA,cAAA,CA2BR,EAAA,CACH;AAAA,YAAA,GACF;AAAA,YAGAF,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,UACd,UAAA;AAAA,cAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,yEAAwE,UAAA,OAExF;AAAA,oDACCuB,YAAAA,YAAA,EAAW,WAAU,4DACnB,UAAA,cAAc,IAAI,CAAA,WACjB1B,kCAAAA;AAAAA,gBAACI,YAAAA;AAAAA,gBAAA;AAAA,kBAEC,SAAS,MAAM;AACb,sCAAkB,MAAM;AACxB;AAAA,sBACE;AAAA,sBACA;AAAA,sBACA,YAAYgC,UAAS;AAAA,oBAAA;AAAA,kBAEzB;AAAA,kBACA,WAAW;AAAA,oBACT;AAAA,oBACA;AAAA,oBACA,WAAW,kBACT;AAAA,kBAAA;AAAA,kBAGJ,UAAApC,kCAAAA;AAAAA,oBAACG,YAAAA;AAAAA,oBAAA;AAAA,sBACC,WAAW;AAAA,wBACT;AAAA,wBACA,WAAW,iBACP,iDACA;AAAA,sBAAA;AAAA,sBAGL,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACH;AAAA,gBAzBK;AAAA,cAAA,CA2BR,EAAA,CACH;AAAA,YAAA,GACF;AAAA,YAGC,aACCF,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,QACd,UAAA;AAAA,cAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,yEACb,UAAA,KACH;AAAA,cACAF,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,6BACd,UAAA;AAAA,gBAAAF,kCAAAA;AAAAA,kBAACI,YAAAA;AAAAA,kBAAA;AAAA,oBACC,SAAS,MAAM;AACb,gCAAU,IAAI;AACd;AAAA,wBACE;AAAA,wBACA;AAAA,wBACA;AAAA,sBAAA;AAAA,oBAEJ;AAAA,oBACA,WAAW;AAAA,sBACT;AAAA,sBACA;AAAA,sBACAgC,YAAW,QAAQ;AAAA,oBAAA;AAAA,oBAGrB,UAAApC,kCAAAA;AAAAA,sBAACG,YAAAA;AAAAA,sBAAA;AAAA,wBACC,WAAW;AAAA,0BACT;AAAA,0BACAiC,YAAW,OACP,iDACA;AAAA,wBAAA;AAAA,wBAEP,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAED;AAAA,gBAAA;AAAA,gBAEFpC,kCAAAA;AAAAA,kBAACI,YAAAA;AAAAA,kBAAA;AAAA,oBACC,SAAS,MAAM;AACb,gCAAU,IAAI;AACd;AAAA,wBACE;AAAA,wBACA;AAAA,wBACA;AAAA,sBAAA;AAAA,oBAEJ;AAAA,oBACA,WAAW;AAAA,sBACT;AAAA,sBACA;AAAA,sBACAgC,YAAW,QAAQ;AAAA,oBAAA;AAAA,oBAGrB,UAAApC,kCAAAA;AAAAA,sBAACG,YAAAA;AAAAA,sBAAA;AAAA,wBACC,WAAW;AAAA,0BACT;AAAA,0BACAiC,YAAW,OACP,iDACA;AAAA,wBAAA;AAAA,wBAEP,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAED;AAAA,gBAAA;AAAA,cACF,EAAA,CACF;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,GAEJ;AAAA,UAGApC,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,qDACd,UAAAF,kCAAAA;AAAAA,YAACI,YAAAA;AAAAA,YAAA;AAAA,cACC,SAAS,MAAM,UAAU,KAAK;AAAA,cAC9B,WAAU;AAAA,cAEV,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,wDAAuD,UAAA,OAAA,CAEvE;AAAA,YAAA;AAAA,UAAA,EACF,CACF;AAAA,QAAA,GACF,EAAA,CACF,GACF,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;ACvQO,MAAM,WAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,eAAe;AAAA,EACf,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAIR,MAAAA,SAAS,KAAK;AAC1C,QAAM,CAAC,aAAa,cAAc,IAAIA,MAAAA,SAAS,EAAE;AAGjD,QAAM,kBAAkB,QAAQ;AAAA,IAAO,CAAA,WACrC,OAAO,MAAM,YAAA,EAAc,SAAS,YAAY,aAAa;AAAA,EAAA;AAI/D,QAAM,iBAAiB,QAAQ,KAAK,CAAA,QAAO,IAAI,UAAU,KAAK;AAE9D,QAAM,eAAeG,MAAAA;AAAAA,IACnB,CAAC,aAAqB,mBAA6B;AACjD,UAAI,eAAgB;AACpB,eAAS,WAAW;AACpB,gBAAU,KAAK;AACf,qBAAe,EAAE;AAAA,IACnB;AAAA,IACA,CAAC,QAAQ;AAAA,EAAA;AAGX,QAAM,cAAcA,MAAAA,YAAY,MAAM;AACpC,cAAU,KAAK;AACf,mBAAe,EAAE;AAAA,EACnB,GAAG,CAAA,CAAE;AAEL,gDACGI,YAAAA,MAAA,EAAK,WAAW,GAAG,UAAU,SAAS,GAErC,UAAA;AAAA,IAAAD,kCAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS,MAAM,CAAC,YAAY,UAAU,IAAI;AAAA,QAC1C;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,YAAY;AAAA,QAAA;AAAA,QAEd,mBAAkB;AAAA,QAClB,oBAAoB;AAAA,QACpB,oBAAoB,EAAE,UAAU,UAAU,OAAA;AAAA,QAE1C,UAAA;AAAA,UAAAJ,kCAAAA;AAAAA,YAACG,YAAAA;AAAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,iBACI,kCACA;AAAA,cAAA;AAAA,cAEN,eAAe;AAAA,cAEd,UAAA,iBAAiB,eAAe,QAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,UAE3CH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,yCAAwC,UAAA,IAAA,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAI3DH,kCAAAA;AAAAA,MAACiB,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,aAAW;AAAA,QACX,eAAc;AAAA,QACd,gBAAgB;AAAA,QAEhB,UAAAjB,kCAAAA,IAACgC,YAAAA,0BAAA,EAAyB,SAAS,aACjC,UAAAhC,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,0CACd,UAAAF,kCAAAA,IAACgC,YAAAA,0BAAA,EACC,UAAA/B,uCAACC,YAAAA,MAAA,EAAK,WAAU,8DAEd,UAAA;AAAA,UAAAF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,qDACd,UAAAF,kCAAAA;AAAAA,YAACW,YAAAA;AAAAA,YAAA;AAAA,cACC,OAAO;AAAA,cACP,cAAc;AAAA,cACd,aAAa;AAAA,cACb,sBAAqB;AAAA,cACrB,WAAS;AAAA,cACT,WAAU;AAAA,YAAA;AAAA,UAAA,GAEd;AAAA,UAGAX,kCAAAA,IAAC0B,YAAAA,cAAW,WAAU,YACnB,0BAAgB,WAAW,0CACzBxB,kBAAA,EAAK,WAAU,0BACd,UAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,4CACb,UAAA,cACH,GACF,IAEA,gBAAgB,IAAI,CAAA,WAClBH,kCAAAA;AAAAA,YAACI,YAAAA;AAAAA,YAAA;AAAA,cAEC,SAAS,MACP,aAAa,OAAO,OAAO,OAAO,QAAQ;AAAA,cAE5C,UAAU,OAAO;AAAA,cACjB,WAAW;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA,OAAO,YAAY;AAAA,gBACnB,OAAO,UAAU,SACf;AAAA,cAAA;AAAA,cAEJ,mBAAkB;AAAA,cAClB,oBAAoB;AAAA,gBAClB,UAAU,OAAO,UAAU;AAAA,gBAC3B,UAAU,OAAO;AAAA,cAAA;AAAA,cAGnB,UAAAJ,kCAAAA;AAAAA,gBAACG,YAAAA;AAAAA,gBAAA;AAAA,kBACC,WAAW;AAAA,oBACT;AAAA,oBACA,OAAO,UAAU,QACb,iDACA;AAAA,kBAAA;AAAA,kBAGL,UAAA,OAAO;AAAA,gBAAA;AAAA,cAAA;AAAA,YACV;AAAA,YA3BK,OAAO;AAAA,UAAA,CA6Bf,GAEL;AAAA,UAGAH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,qDACd,UAAAF,kCAAAA;AAAAA,YAACI,YAAAA;AAAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,WAAU;AAAA,cACV,mBAAkB;AAAA,cAClB,oBAAmB;AAAA,cAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,wDAAuD,UAAA,SAAA,CAEvE;AAAA,YAAA;AAAA,UAAA,EACF,CACF;AAAA,QAAA,GACF,EAAA,CACF,GACF,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AClKO,MAAM,WAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ;AACF,MAAM;AACJ,QAAM,CAAC,qBAAqB,sBAAsB,IAAIR,MAAAA;AAAAA,IACpD,IAAI,IAAI,kBAAkB,KAAK,IAAI,UAAQ,KAAK,EAAE,IAAI,CAAA,CAAE;AAAA,EAAA;AAG1D,QAAM,cACJ,0BAA0B,SACtB,IAAI,IAAI,qBAAqB,IAC7B;AAEN,QAAM,eAAeG,MAAAA;AAAAA,IACnB,CAAC,WAAmB;AAClB,UAAI,0BAA0B,UAAa,UAAU;AACnD,iBAAS,MAAM;AAAA,MACjB,OAAO;AACL,+BAAuB,CAAA,SAAQ;AAC7B,gBAAM,SAAS,IAAI,IAAI,IAAI;AAC3B,cAAI,OAAO,IAAI,MAAM,GAAG;AACtB,mBAAO,OAAO,MAAM;AAAA,UACtB,OAAO;AACL,mBAAO,IAAI,MAAM;AAAA,UACnB;AACA,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,CAAC,uBAAuB,QAAQ;AAAA,EAAA;AAGlC,QAAM,eAAeA,MAAAA;AAAAA,IACnB,CAAC,SAAmB;AAClB,UAAI,CAAC,KAAK,YAAY,UAAU;AAC9B,iBAAS,IAAI;AAAA,MACf;AAAA,IACF;AAAA,IACA,CAAC,QAAQ;AAAA,EAAA;AAGX,QAAM,aAAa,CAAC,MAAgB,QAAgB,MAAM;AACxD,UAAM,cAAc,KAAK,YAAY,KAAK,SAAS,SAAS;AAC5D,UAAM,aAAa,YAAY,IAAI,KAAK,EAAE;AAC1C,UAAM,aAAa,eAAe,KAAK;AAEvC,kDACGI,kBAAA,EAEC,UAAA;AAAA,MAAAD,kCAAAA;AAAAA,QAACG,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS,MAAM,aAAa,IAAI;AAAA,UAChC,UAAU,KAAK;AAAA,UACf,WAAW;AAAA,YACT;AAAA,YACA,CAAC,KAAK,YAAY;AAAA,YAClB,cAAc;AAAA,YACd,KAAK,YAAY;AAAA,UAAA;AAAA,UAEnB,OAAO,EAAE,aAAa,QAAQ,KAAK,EAAA;AAAA,UACnC,mBAAkB;AAAA,UAClB,oBAAoB,EAAE,UAAU,YAAY,UAAU,KAAK,SAAA;AAAA,UAG1D,UAAA;AAAA,YAAA,cACCJ,kCAAAA;AAAAA,cAACI,YAAAA;AAAAA,cAAA;AAAA,gBACC,SAAS,MAAM,aAAa,KAAK,EAAE;AAAA,gBACnC,WAAU;AAAA,gBACV,SAAS;AAAA,gBACT,mBAAkB;AAAA,gBAClB,oBAAoB,aAAa,aAAa;AAAA,gBAE9C,UAAAJ,kCAAAA;AAAAA,kBAACG,YAAAA;AAAAA,kBAAA;AAAA,oBACC,WAAW;AAAA,sBACT;AAAA,sBACA,cAAc;AAAA,oBAAA;AAAA,oBAEjB,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAED;AAAA,YAAA,IAGFH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,UAAA,CAAU;AAAA,YAI3B,KAAK,QACJF,kCAAAA,IAACE,oBAAK,WAAU,yBAAyB,eAAK,MAAK;AAAA,YAIrDF,kCAAAA;AAAAA,cAACG,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,aACI,iDACA;AAAA,gBAAA;AAAA,gBAGL,UAAA,KAAK;AAAA,cAAA;AAAA,YAAA;AAAA,UACR;AAAA,QAAA;AAAA,MAAA;AAAA,MAID,eAAe,cACdH,kCAAAA;AAAAA,QAACE,YAAAA;AAAAA,QAAA;AAAA,UACC,WAAW;AAAA,YACT,aACE;AAAA,UAAA;AAAA,UAGH,UAAA,KAAK,SAAU,IAAI,CAAA,UAAS,WAAW,OAAO,QAAQ,CAAC,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IAC3D,EAAA,GAhEO,KAAK,EAkEhB;AAAA,EAEJ;AAEA,SACEF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAW,GAAG,UAAU,SAAS,GACpC,UAAA,KAAK,IAAI,CAAA,SAAQ,WAAW,MAAM,CAAC,CAAC,GACvC;AAEJ;ACxJA,MAAM,iBAAiB,CACrBnD,UACA,SACA,gBACkB;AAClB,MAAI,aAAa;AACf,WAAO,GAAG,WAAW,YAAYA,QAAO;AAAA,EAC1C;AAEA,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAGA,MAAI,UAAU,GAAG;AACf,UAAM,UACJ,YAAY,OACR,KACA,YAAY,OACV,oBACA;AACR,WAAO,uCAAuCA,QAAO,GAAG,OAAO;AAAA,EACjE;AAGA,QAAM,cAAsC;AAAA,IAC1C,GAAG;AAAA,IACH,UAAU;AAAA,IACV,GAAG;AAAA,IACH,KAAK;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAGT,QAAM,UAAU,YAAY,OAAO;AACnC,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,SAAO,GAAG,OAAO,YAAYA,QAAO;AACtC;AAKA,MAAM,gBAAgB,CACpBA,UACA,WACW;AACX,MAAI,WAAW,QAAQ;AACrB,WAAOA;AAAA,EACT;AAEA,MAAI,WAAW,UAAU;AACvB,WAAO,GAAGA,SAAQ,UAAU,GAAG,EAAE,CAAC,MAAMA,SAAQ,UAAUA,SAAQ,SAAS,CAAC,CAAC;AAAA,EAC/E;AAEA,SAAO,GAAGA,SAAQ,UAAU,GAAG,CAAC,CAAC,MAAMA,SAAQ,UAAUA,SAAQ,SAAS,CAAC,CAAC;AAC9E;AAkBO,MAAM,cAA0C,CAAC;AAAA,EACtD,SAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,WAAW;AAAA,EACX,eAAe;AAAA,EACf;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAI4C,MAAAA,SAAS,KAAK;AAE1C,QAAM,mBAAmB,cAAc5C,UAAS,MAAM;AACtD,QAAM,eAAe,eAAeA,UAAS,SAAS,WAAW;AAEjE,QAAM,aAAa+C,MAAAA,YAAY,YAAY;AACzC,QAAI,CAAC,OAAQ;AACb,QAAI;AACF,YAAM,OAAO/C,QAAO;AACpB,gBAAU,IAAI;AACd,iBAAW,MAAM,UAAU,KAAK,GAAG,GAAI;AAAA,IACzC,QAAQ;AAAA,IAER;AAAA,EACF,GAAG,CAACA,UAAS,MAAM,CAAC;AAEpB,QAAM,qBAAqB+C,MAAAA,YAAY,MAAM;AAC3C,QAAI,cAAc;AAChBgC,kBAAAA,QAAQ,QAAQ,YAAY;AAAA,IAC9B;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAEjB,gDACG5B,YAAAA,MAAA,EAAK,WAAW,GAAG,+BAA+B,SAAS,GACzD,UAAA;AAAA,IAAA,SACCD,kCAAAA,KAACE,YAAAA,MAAA,EAAK,WAAU,4CACb,UAAA;AAAA,MAAA;AAAA,MAAM;AAAA,IAAA,GACT;AAAA,IAGFH,kCAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,WAAW,UAAU;AAAA,QAAA;AAAA,QAEvB,eAAe,WAAW,SAAS,SAAY;AAAA,QAE9C,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGHF,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,+BACb,UAAA;AAAA,MAAA,YAAY,UACXF,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,WAAU;AAAA,UACV,mBAAkB;AAAA,UAClB,oBAAoB,SAAS,YAAY;AAAA,UAEzC,gDAACD,YAAAA,MAAA,EAAK,WAAU,4CACb,UAAA,SAAS,MAAM,KAAA,CAClB;AAAA,QAAA;AAAA,MAAA;AAAA,MAIH,gBAAgB,gBACfH,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,WAAU;AAAA,UACV,mBAAkB;AAAA,UAClB,oBAAmB;AAAA,UAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,4CAA2C,UAAA,IAAA,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IAC9D,EAAA,CAEJ;AAAA,EAAA,GACF;AAEJ;AClJO,MAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AACF,MAAM;AAEJ,QAAM,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,WACE;AAAA,IACF,SACE;AAAA,IACF,SACE;AAAA,IACF,SAAS;AAAA,EAAA;AAIX,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,MACF,MAAM;AAAA,MACN,SAAS,SAAS,kBAAkB;AAAA,IAAA;AAAA,IAEtC,IAAI;AAAA,MACF,MAAM;AAAA,MACN,SAAS,SAAS,gBAAgB;AAAA,IAAA;AAAA,IAEpC,IAAI;AAAA,MACF,MAAM;AAAA,MACN,SAAS,SAAS,gBAAgB;AAAA,IAAA;AAAA,IAEpC,IAAI;AAAA,MACF,MAAM;AAAA,MACN,SAAS,SAAS,cAAc;AAAA,IAAA;AAAA,EAClC;AAIF,QAAM,eAAe;AAAA,IACnB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAGT,QAAMW,cAAa,YAAY,IAAI;AAGnC,QAAM,CAAC,gBAAgB,OAAO,IAAI,eAAe,OAAO,EAAE,MAAM,GAAG;AAEnE,MAAI,QAAQ;AACV,WACEd,kCAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACAW,YAAW;AAAA,UACXA,YAAW;AAAA,UACX;AAAA,QAAA;AAAA,QAGD;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AAEA,QAAM,UACJd,kCAAAA;AAAAA,IAACG,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACAW,YAAW;AAAA,QACX,CAAC,UAAU,aAAa,KAAK;AAAA,QAC7B,OAAO,cAAc;AAAA,MAAA;AAAA,MAEvB,eAAe,OAAO,SAAY;AAAA,MAEjC;AAAA,IAAA;AAAA,EAAA;AAIL,MAAI,MAAM;AACR,WACEd,kCAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW,GAAG,cAAc,SAASY,YAAW,SAAS,SAAS;AAAA,QAEjE,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AAEA,SACEd,kCAAAA;AAAAA,IAAC0B,YAAAA;AAAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,gCAAgC;AAAA,MAChC,WAAW,GAAG,cAAc,SAAS,SAAS;AAAA,MAC9C,uBAAuB,EAAE,SAAS,EAAA;AAAA,MAElC,UAAA1B,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAWY,YAAW,SAAU,UAAA,QAAA,CAAQ;AAAA,IAAA;AAAA,EAAA;AAGpD;AC5FO,MAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,cAAc;AAAA,EACd,OAAO;AAAA,EACP;AACF,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAInB,MAAAA,SAAS,KAAK;AAG1C,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAIN,QAAM,YACJ,iBAAiB,OAAO,QAAQ,QAAQ,IAAI,KAAK,KAAK,IAAI;AAG5D,QAAM,gBAAgB,CAAChC,UAA8B;AACnD,QAAI,CAACA,MAAM,QAAO;AAClB,WAAOA,MAAK,mBAAmB,SAAS;AAAA,MACtC,OAAO;AAAA,MACP,KAAK;AAAA,MACL,MAAM;AAAA,IAAA,CACP;AAAA,EACH;AAGA,QAAM,mBAAmBmC,MAAAA;AAAAA,IACvB,CAACnC,UAAe;AACd,YAAM,OAAOA,MAAK,YAAA;AAClB,YAAM,QAAQ,OAAOA,MAAK,SAAA,IAAa,CAAC,EAAE,SAAS,GAAG,GAAG;AACzD,YAAM,MAAM,OAAOA,MAAK,QAAA,CAAS,EAAE,SAAS,GAAG,GAAG;AAClD,eAAS,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE;AAClC,gBAAU,KAAK;AAAA,IACjB;AAAA,IACA,CAAC,QAAQ;AAAA,EAAA;AAGX,QAAM,cAAcmC,MAAAA,YAAY,MAAM;AACpC,cAAU,KAAK;AAAA,EACjB,GAAG,CAAA,CAAE;AAEL,gDACGI,YAAAA,MAAA,EAAK,WAAW,GAAG,UAAU,SAAS,GAErC,UAAA;AAAA,IAAAD,kCAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS,MAAM,CAAC,YAAY,UAAU,IAAI;AAAA,QAC1C;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,YAAY,IAAI;AAAA,UAChB,YAAY;AAAA,QAAA;AAAA,QAEd,mBAAkB;AAAA,QAClB,oBAAoB;AAAA,QACpB,oBAAoB,EAAE,SAAA;AAAA,QAEtB,UAAA;AAAA,UAAAJ,kCAAAA;AAAAA,YAACG,YAAAA;AAAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,YACI,qCACA;AAAA,cAAA;AAAA,cAGL,UAAA,YAAY,cAAc,SAAS,IAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAE1CH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,yCAAwC,UAAA,KAAA,CAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAI5DH,kCAAAA;AAAAA,MAACiB,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,aAAW;AAAA,QACX,eAAc;AAAA,QACd,gBAAgB;AAAA,QAEhB,UAAAjB,kCAAAA,IAACgC,YAAAA,0BAAA,EAAyB,SAAS,aACjC,UAAAhC,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,0CACd,UAAAF,kCAAAA,IAACgC,YAAAA,0BAAA,EACC,UAAA/B,uCAACC,YAAAA,MAAA,EAAK,WAAU,sDACd,UAAA;AAAA,UAAAF,kCAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO,aAAa,oBAAI,KAAA;AAAA,cACxB,UAAU;AAAA,cACV;AAAA,cACA;AAAA,YAAA;AAAA,UAAA;AAAA,UAIFA,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,2DACd,UAAAF,kCAAAA;AAAAA,YAACI,YAAAA;AAAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,WAAU;AAAA,cACV,mBAAkB;AAAA,cAClB,oBAAmB;AAAA,cAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,wDAAuD,UAAA,SAAA,CAEvE;AAAA,YAAA;AAAA,UAAA,EACF,CACF;AAAA,QAAA,GACF,EAAA,CACF,GACF,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AC3HO,MAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,cAAc;AAAA,EACd;AACF,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAIR,MAAAA,SAAS,KAAK;AAC1C,QAAM,CAAC,cAAc,eAAe,IAAIA,MAAAA,SAAe,KAAK;AAG5D,QAAM,gBAAgB,CAAChC,UAAuB;AAC5C,UAAM,UAAUA,MAAK,mBAAmB,SAAS;AAAA,MAC/C,OAAO;AAAA,MACP,KAAK;AAAA,MACL,MAAM;AAAA,IAAA,CACP;AAED,UAAM,QAAQA,MAAK,SAAA;AACnB,UAAM,UAAUA,MAAK,WAAA;AAErB,QAAI,WAAW;AACb,YAAM,SAAS,UAAU,IAAI,KAAK,QAAQ,KAAK,QAAQ,KAAK;AAC5D,YAAMyE,UAAS,SAAS,KAAK,OAAO;AACpC,aAAO,GAAG,OAAO,KAAK,MAAM,IAAI,QAAQ,SAAA,EAAW,SAAS,GAAG,GAAG,CAAC,IAAIA,OAAM;AAAA,IAC/E;AAEA,WAAO,GAAG,OAAO,KAAK,MAAM,SAAA,EAAW,SAAS,GAAG,GAAG,CAAC,IAAI,QAAQ,SAAA,EAAW,SAAS,GAAG,GAAG,CAAC;AAAA,EAChG;AAGA,QAAM,mBAAmBtC,MAAAA;AAAAA,IACvB,CAACnC,UAAe;AACd,YAAM,cAAc,IAAI,KAAKA,KAAI;AACjC,kBAAY,SAAS,aAAa,UAAU;AAC5C,kBAAY,WAAW,aAAa,YAAY;AAChD,sBAAgB,WAAW;AAAA,IAC7B;AAAA,IACA,CAAC,YAAY;AAAA,EAAA;AAIf,QAAM,mBAAmBmC,MAAAA;AAAAA,IACvB,CAAC,YAAoB;AACnB,YAAM,CAAC,OAAO,OAAO,IAAI,QAAQ,MAAM,GAAG,EAAE,IAAI,MAAM;AACtD,YAAM,cAAc,IAAI,KAAK,YAAY;AACzC,kBAAY,SAAS,KAAK;AAC1B,kBAAY,WAAW,OAAO;AAC9B,sBAAgB,WAAW;AAAA,IAC7B;AAAA,IACA,CAAC,YAAY;AAAA,EAAA;AAIf,QAAM,gBAAgB,CAACnC,UAAuB;AAC5C,UAAM,QAAQA,MAAK,SAAA;AACnB,UAAM,UAAUA,MAAK,WAAA;AACrB,WAAO,GAAG,MAAM,SAAA,EAAW,SAAS,GAAG,GAAG,CAAC,IAAI,QAAQ,SAAA,EAAW,SAAS,GAAG,GAAG,CAAC;AAAA,EACpF;AAEA,QAAM,cAAcmC,MAAAA,YAAY,MAAM;AACpC,cAAU,KAAK;AACf,oBAAgB,KAAK;AAAA,EACvB,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,gBAAgBA,MAAAA,YAAY,MAAM;AACtC,aAAS,YAAY;AACrB,cAAU,KAAK;AAAA,EACjB,GAAG,CAAC,cAAc,QAAQ,CAAC;AAE3B,QAAM,aAAaA,MAAAA,YAAY,MAAM;AACnC,oBAAgB,KAAK;AACrB,cAAU,IAAI;AAAA,EAChB,GAAG,CAAC,KAAK,CAAC;AAEV,gDACGI,YAAAA,MAAA,EAAK,WAAW,GAAG,UAAU,SAAS,GAErC,UAAA;AAAA,IAAAD,kCAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS,MAAM,CAAC,YAAY,WAAA;AAAA,QAC5B;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,YAAY;AAAA,QAAA;AAAA,QAEd,mBAAkB;AAAA,QAClB,oBAAoB;AAAA,QACpB,oBAAoB,EAAE,SAAA;AAAA,QAEtB,UAAA;AAAA,UAAAJ,sCAACG,YAAAA,MAAA,EAAK,WAAU,yCACb,UAAA,cAAc,KAAK,GACtB;AAAA,UACAH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,oCAAmC,UAAA,KAAA,CAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAIvDH,kCAAAA;AAAAA,MAACiB,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,aAAW;AAAA,QACX,eAAc;AAAA,QACd,gBAAgB;AAAA,QAEhB,UAAAjB,kCAAAA,IAACgC,YAAAA,0BAAA,EAAyB,SAAS,aACjC,UAAAhC,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,0CACd,UAAAF,kCAAAA,IAACgC,YAAAA,0BAAA,EACC,UAAA/B,uCAACC,YAAAA,MAAA,EAAK,WAAU,sDAEd,UAAA;AAAA,UAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,QACd,UAAA;AAAA,YAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,6DAA4D,UAAA,eAE5E;AAAA,YACAH,kCAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,gBACP,UAAU;AAAA,gBACV;AAAA,gBACA;AAAA,cAAA;AAAA,YAAA;AAAA,UACF,GACF;AAAA,UAGAA,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,yCAAA,CAAyC;AAAA,iDAGxDA,YAAAA,MAAA,EACC,UAAA;AAAA,YAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,6DAA4D,UAAA,eAE5E;AAAA,YACAH,kCAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO,cAAc,YAAY;AAAA,gBACjC,UAAU;AAAA,gBACV;AAAA,gBACA;AAAA,cAAA;AAAA,YAAA;AAAA,UACF,GACF;AAAA,UAGAC,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,0EACd,UAAA;AAAA,YAAAF,kCAAAA;AAAAA,cAACI,YAAAA;AAAAA,cAAA;AAAA,gBACC,SAAS;AAAA,gBACT,WAAW;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBAAA;AAAA,gBAEF,mBAAkB;AAAA,gBAClB,oBAAmB;AAAA,gBAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,4CAA2C,UAAA,SAAA,CAE3D;AAAA,cAAA;AAAA,YAAA;AAAA,YAEFH,kCAAAA;AAAAA,cAACI,YAAAA;AAAAA,cAAA;AAAA,gBACC,SAAS;AAAA,gBACT,WAAW;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBAAA;AAAA,gBAEF,mBAAkB;AAAA,gBAClB,oBAAmB;AAAA,gBAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,kCAAiC,UAAA,KAAA,CAAE;AAAA,cAAA;AAAA,YAAA;AAAA,UACrD,EAAA,CACF;AAAA,QAAA,GACF,EAAA,CACF,GACF,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;ACrKO,SAAS,eAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,UAAU;AAAA,EACV;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB;AACF,GAA2B;AACzB,QAAM,cAAclF,iBAAM,OAAiB,IAAI;AAC/C,QAAM,CAAC,qBAAqB,sBAAsB,IAAIA,iBAAM,SAAS,KAAK;AAG1E,QAAM,mBAAmB6E,MAAAA,YAAY,MAAM;AACzC,QAAI,CAAC,WAAW,SAAS;AACvB,iBAAA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,SAAS,SAAS,UAAU,CAAC;AAGjC,QAAM,eAAeA,MAAAA;AAAAA,IACnB,CAAC,UAA6D;AAC5D,UAAI,iBAAiB,CAAC,YAAY;AAChC,+BAAuB,MAAM,YAAY,cAAc,IAAI,GAAG;AAAA,MAChE;AAAA,IACF;AAAA,IACA,CAAC,eAAe,UAAU;AAAA,EAAA;AAI5B,QAAM,cAAcA,MAAAA,YAAY,MAAM;;AACpC,sBAAY,YAAZ,mBAAqB,eAAe,EAAE,QAAQ,GAAG,UAAU;EAC7D,GAAG,CAAA,CAAE;AAGL,QAAM,wBACJE,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,2CACd,gDAACC,YAAAA,MAAA,EAAK,WAAU,oCAAmC,UAAA,iBAAA,CAAc,GACnE;AAIF,QAAM,sBAAsBL,MAAAA,YAAY,MAAM;AAC5C,UAAM,eACJG,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,6CACd,UAAA;AAAA,MAAAF,kCAAAA,IAACQ,YAAAA,mBAAA,EAAkB,MAAK,SAAQ,OAAM,WAAU;AAAA,MAChDR,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,iDAAgD,UAAA,aAAA,CAEhE;AAAA,IAAA,GACF;AAGF,UAAM,mBACJH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,6CACd,gDAACC,YAAAA,MAAA,EAAK,WAAU,4CAA2C,UAAA,wBAAA,CAE3D,GACF;AAGF,QAAI,SAAS;AACX,aAAOH,kCAAAA,IAAAgB,kBAAAA,UAAA,EAAG,oBAAU,aAAA,CAAa;AAAA,IACnC;AACA,QAAI,CAAC,WAAW,KAAK,SAAS,GAAG;AAC/B,aAAOhB,kCAAAA,IAAAgB,kBAAAA,UAAA,EAAG,wBAAc,iBAAA,CAAiB;AAAA,IAC3C;AACA,WAAO;AAAA,EACT,GAAG,CAAC,SAAS,SAAS,KAAK,QAAQ,QAAQ,UAAU,CAAC;AAEtD,gDACGd,YAAAA,MAAA,EAAK,WAAW,GAAG,UAAU,SAAS,GACrC,UAAA;AAAA,IAAAF,kCAAAA;AAAAA,MAACmB,YAAAA;AAAAA,MAAA;AAAA,QACC,KAAK;AAAA,QACL;AAAA,QACA,YAAY,CAAC,EAAE,MAAM,MAAA,MACnBnB,kCAAAA,IAAAgB,4BAAA,EAAG,UAAA,WAAW,MAAM,KAAK,EAAA,CAAE;AAAA,QAE7B;AAAA,QACA,cAAc;AAAA,QACd,uBAAuB;AAAA,QACvB;AAAA,QACA,8BAA8B,CAAC;AAAA,QAC/B,gCAAgC;AAAA,QAChC,qBAAqB,kBAAkBhB,sCAAAgB,kBAAAA,UAAA,EAAG,UAAA,gBAAA,CAAgB,IAAM;AAAA,QAChE;AAAA,QACA,oBACE,CAAC,UAAUhB,kCAAAA,IAAAgB,kBAAAA,UAAA,EAAG,UAAA,kBAAkB,uBAAsB,IAAM;AAAA,QAE9D,UAAU,gBAAgB,eAAe;AAAA,QACzC,qBAAqB,gBAAgB,KAAK;AAAA,QAC1C,gBACE,YACEhB,sCAACqC,YAAAA,gBAAA,EAAe,YAAwB,WAAsB,IAC5D;AAAA,MAAA;AAAA,IAAA;AAAA,IAKP,iBAAiB,uBAChBrC,kCAAAA;AAAAA,MAACI,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,mBAAkB;AAAA,QAClB,oBAAmB;AAAA,QAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,sBAAqB,UAAA,IAAA,CAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EACxC,GAEJ;AAEJ;AC/IO,MAAM,eAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,eAAe;AAAA,EACf,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AAAA,EACA;AACF,MAAM;AAEJ,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAIN,QAAM,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO;AAAA,EAAA;AAGT,QAAM,cAAcL,MAAAA,YAAY,YAAY;AAC1C;AACA,QAAI;AACF,YAAM,UAAU,MAAMgC,oBAAQ,WAAW,IAAI;AAC7C,UAAI,SAAS;AACX,cAAMA,YAAAA,QAAQ,QAAQ,IAAI;AAAA,MAC5B;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF,GAAG,CAAC,MAAM,OAAO,CAAC;AAElB,SACE7B,kCAAAA;AAAAA,IAACG,YAAAA;AAAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,WAAW,GAAG,+BAA+B,SAAS;AAAA,MACtD,mBAAkB;AAAA,MAClB,oBACE,OAAO,aAAa,WAAW,WAAW;AAAA,MAE5C,mBAAkB;AAAA,MAEjB,UAAA;AAAA,QAAA,YAAY,iBAAiB,UAC5BJ,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAW,GAAG,YAAY,IAAI,GAAG,eAAe,OAAO,CAAC,GAAG,UAAA,KAEjE;AAAA,QAEFH,kCAAAA;AAAAA,UAACG,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW,GAAG,YAAY,IAAI,GAAG,eAAe,OAAO,GAAG,WAAW;AAAA,YAEpE;AAAA,UAAA;AAAA,QAAA;AAAA,QAEF,YAAY,iBAAiB,WAC5BH,kCAAAA,IAACG,YAAAA,QAAK,WAAW,GAAG,YAAY,IAAI,GAAG,eAAe,OAAO,CAAC,GAAG,UAAA,IAAA,CAEjE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AC/CO,MAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,eAAe;AAAA,EACf,aAAa;AAAA,EACb,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,cAAc;AAAA,EACd;AAAA,EACA,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,CAAC,OAAO,QAAQ,IAAIR,MAAAA,SAAS,YAAY;AAC/C,QAAM,CAAC,OAAO,QAAQ,IAAIA,MAAAA,SAAwB,IAAI;AAGtDI,QAAAA,UAAU,MAAM;AACd,QAAI,QAAQ;AACV,eAAS,YAAY;AACrB,eAAS,IAAI;AAAA,IACf;AAAA,EACF,GAAG,CAAC,QAAQ,YAAY,CAAC;AAEzB,QAAM,eAAeD,MAAAA,YAAY,YAAY;AAE3C,aAAS,IAAI;AAGb,QAAI,YAAY,CAAC,MAAM,QAAQ;AAC7B,eAAS,wBAAwB;AACjC;AAAA,IACF;AAGA,QAAI,UAAU;AACZ,YAAM,kBAAkB,SAAS,KAAK;AACtC,UAAI,iBAAiB;AACnB,iBAAS,eAAe;AACxB;AAAA,MACF;AAAA,IACF;AAGA,QAAI;AACF,YAAM,SAAS,MAAM,MAAM;AAAA,IAC7B,SAAS,KAAK;AACZ,eAAS,eAAe,QAAQ,IAAI,UAAU,mBAAmB;AAAA,IACnE;AAAA,EACF,GAAG,CAAC,OAAO,UAAU,UAAU,QAAQ,CAAC;AAExC,QAAM,eAAeA,MAAAA,YAAY,MAAM;AACrC,aAAS,YAAY;AACrB,aAAS,IAAI;AACb,YAAA;AAAA,EACF,GAAG,CAAC,cAAc,OAAO,CAAC;AAE1B,QAAM,YAAY,WAAW,MAAM,KAAA,EAAO,SAAS,IAAI;AAEvD,SACEE,kCAAAA;AAAAA,IAACiB,YAAAA;AAAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,aAAW;AAAA,MACX,eAAc;AAAA,MACd,gBAAgB,YAAY,SAAY;AAAA,MAExC,UAAAjB,kCAAAA,IAACgC,YAAAA,4BAAyB,SAAS,YAAY,SAAY,cACzD,UAAAhC,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,0CACd,UAAAF,kCAAAA;AAAAA,QAACwB,YAAAA;AAAAA,QAAA;AAAA,UACC,UAAUC,YAAAA,SAAS,OAAO,QAAQ,YAAY;AAAA,UAE9C,UAAAzB,kCAAAA,IAACgC,YAAAA,0BAAA,EACC,UAAA/B,uCAACC,YAAAA,MAAA,EAAK,WAAU,kDAEd,UAAA;AAAA,YAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,OACd,UAAA;AAAA,cAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,uDACb,UAAA,OACH;AAAA,cACAH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,sDACb,UAAA,aACH;AAAA,cAEAH,kCAAAA;AAAAA,gBAACW,YAAAA;AAAAA,gBAAA;AAAA,kBACC;AAAA,kBACA,cAAc;AAAA,kBACd;AAAA,kBACA,sBAAqB;AAAA,kBACrB;AAAA,kBACA,UAAU,CAAC;AAAA,kBACX,WAAS;AAAA,kBACT,WAAW;AAAA,oBACT;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA,QACI,uCACA;AAAA,kBAAA;AAAA,kBAEN,oBAAoB,eAAe;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGpC,SACCX,kCAAAA;AAAAA,gBAACG,YAAAA;AAAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,mBAAkB;AAAA,kBAEjB,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACH,GAEJ;AAAA,YAGAF,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,oEACd,UAAA;AAAA,cAAAF,kCAAAA;AAAAA,gBAACI,YAAAA;AAAAA,gBAAA;AAAA,kBACC,SAAS;AAAA,kBACT,UAAU;AAAA,kBACV,WAAW;AAAA,oBACT;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA,aAAa;AAAA,kBAAA;AAAA,kBAEf,mBAAkB;AAAA,kBAClB,oBAAoB;AAAA,kBAEpB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,4CACb,UAAA,WAAA,CACH;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGFH,kCAAAA;AAAAA,gBAACI,YAAAA;AAAAA,gBAAA;AAAA,kBACC,SAAS;AAAA,kBACT,UAAU,CAAC,aAAa;AAAA,kBACxB,WAAW;AAAA,oBACT;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,qBACC,CAAC,aAAa,cAAc;AAAA,kBAAA;AAAA,kBAE/B,mBAAkB;AAAA,kBAClB,oBAAoB;AAAA,kBAEpB,gDAACD,YAAAA,MAAA,EAAK,WAAU,kCACb,UAAA,YAAY,cAAc,YAAA,CAC7B;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF,EAAA,CACF;AAAA,UAAA,EAAA,CACF,EAAA,CACF;AAAA,QAAA;AAAA,MAAA,GAEJ,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;ACtLO,MAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB;AAAA,EACA;AACF,MAAM;AAEJJ,QAAAA,UAAU,MAAM;AACd,QAAI,kBAAkB,mBAAmB,KAAK,kBAAkB;AAC9D,YAAM,QAAQ,WAAW,MAAM;AAC7B,yBAAA;AAAA,MACF,GAAG,gBAAgB;AAEnB,aAAO,MAAM,aAAa,KAAK;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,gBAAgB,kBAAkB,gBAAgB,CAAC;AAEvD,MAAI,CAAC,kBAAkB,CAAC,cAAc;AACpC,WAAO;AAAA,EACT;AAEA,gDACGG,YAAAA,MAAA,EAAK,WAAW,GAAG,SAAS,SAAS,GACnC,UAAA;AAAA,IAAA,sDACE,OAAA,EAAM,SAAQ,SAAQ,OAAO,YAAY,aAAa,cAAc;AAAA,IAEtE,kBACCF,kCAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,OAAO;AAAA,QACP,aAAa;AAAA,MAAA;AAAA,IAAA;AAAA,EACf,GAEJ;AAEJ;ACvCO,MAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB;AAAA,EACA;AACF,MAAM;AACJ,QAAM,aAAa,cAAc,cAAc,cAAc;AAC7D,QAAM,eAAe,cAAc,gBAAgB,cAAc;AAEjE,SACEA,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW,GAAG,YAAY,SAAS;AAAA,MACnC,OAAO,YAAY,EAAE,UAAA,IAAc;AAAA,MAEnC,UAAAF,kCAAAA;AAAAA,QAAC0B,YAAAA;AAAAA,QAAA;AAAA,UACC,YAAY,cAAc;AAAA,UAC1B,8BACE,cAAc,kBAAkB,CAAC;AAAA,UAEnC,gCACE,gBAAgB,kBAAkB,CAAC;AAAA,UAErC,eAAa;AAAA,UACb,qBAAmB;AAAA,UACnB,uBACE,cAAc,eAAe,EAAE,eAAe,UAAU;AAAA,UAG1D,UAAA1B,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAW,kBAAmB,SAAA,CAAS;AAAA,QAAA;AAAA,MAAA;AAAA,IAC/C;AAAA,EAAA;AAGN;AC5CO,MAAM,eAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AACF,MAAM;AAEJ,QAAM,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OACE;AAAA,EAAA;AAGJ,QAAM,mBAAmB;AAAA,IACvB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO;AAAA,EAAA;AAGT,QAAM,mBAAmB;AAAA,IACvB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO;AAAA,EAAA;AAIT,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,MACF,WAAW;AAAA,MACX,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,IAER,IAAI;AAAA,MACF,WAAW;AAAA,MACX,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,IAER,IAAI;AAAA,MACF,WAAW;AAAA,MACX,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,EACR;AAGF,QAAMY,cAAa,YAAY,IAAI;AAEnC,SACEb,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,eAAe,OAAO;AAAA,QACtBY,YAAW;AAAA,QACX;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAAd,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAW,GAAG,QAAQ,iBAAiB,OAAO,CAAC,GAAI,UAAA,KAAA,CAAK;AAAA,QAC9DF,kCAAAA;AAAAA,UAACG,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACAW,YAAW;AAAA,cACX,iBAAiB,OAAO;AAAA,YAAA;AAAA,YAGzB,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAGN;AC5FA,MAAM,cAGF;AAAA,EACF,KAAK;AAAA,IACH,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SACE;AAAA,IACF,WAAW;AAAA,EAAA;AAAA,EAEb,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SACE;AAAA,IACF,WAAW;AAAA,EAAA;AAAA,EAEb,SAAS;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SACE;AAAA,IACF,WAAW;AAAA,EAAA;AAAA,EAEb,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SACE;AAAA,IACF,WAAW;AAAA,EAAA;AAEf;AAEA,MAAM,aAAa;AAAA,EACjB,IAAI,EAAE,SAAS,iBAAiB,MAAM,WAAW,KAAK,UAAA;AAAA,EACtD,IAAI,EAAE,SAAS,aAAa,MAAM,WAAW,KAAK,QAAA;AAAA,EAClD,IAAI,EAAE,SAAS,iBAAiB,MAAM,aAAa,KAAK,UAAA;AAC1D;AAEO,MAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA,OAAO;AAAA,EACP,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,QAAQ,YAAY,SAAS;AACnC,QAAM,aAAa,WAAW,IAAI;AAElC,SACEb,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,MAAM;AAAA,QACN,WAAW;AAAA,QACX,WAAW;AAAA,QACX;AAAA,MAAA;AAAA,MAEF,oBAAoB,GAAG,MAAM,KAAK;AAAA,MACjC,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAW,GAAG,WAAW,MAAM,MAAM,SAAS,GACjD,UAAA,MAAM,MAAA,CACT;AAAA,QACC,aACCH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAW,GAAG,eAAe,WAAW,MAAM,MAAM,SAAS,GAChE,UAAA,MAAM,MAAA,CACT;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AC3CO,MAAM,qBAAwD,CAAC;AAAA,EACpE;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA,cAAc;AAAA,EACd,eAAe;AAAA,EACf,UAAU;AAAA,EACV;AACF,MAAM;AACJ,QAAM,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UACE;AAAA,EAAA;AAGJ,SACEF,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,eAAe,OAAO;AAAA,QACtB;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAAF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,eACb,UAAA,OAAO,aAAa,WACnBF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,yCACb,SAAA,CACH,IAEA,UAEJ;AAAA,QAEAH,kCAAAA;AAAAA,UAACI,YAAAA;AAAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,UAAU;AAAA,YACV,WAAW;AAAA,cACT;AAAA,cACA,cACI,+CACA;AAAA,cACJ,gBAAgB;AAAA,YAAA;AAAA,YAElB,mBAAkB;AAAA,YAClB,oBAAoB;AAAA,YACpB,oBAAoB,EAAE,UAAU,aAAA;AAAA,YAE/B,UAAA,eACCJ,kCAAAA;AAAAA,cAACQ,YAAAA;AAAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,OAAO,cAAc,YAAY;AAAA,cAAA;AAAA,YAAA,IAGnCP,kCAAAA,KAAAe,4BAAA,EACG,UAAA;AAAA,cAAA,cAAchB,kCAAAA,IAACE,kBAAA,EAAK,WAAU,QAAQ,UAAA,YAAW;AAAA,cAClDF,kCAAAA;AAAAA,gBAACG,YAAAA;AAAAA,gBAAA;AAAA,kBACC,WAAW;AAAA,oBACT;AAAA,oBACA,cACI,mCACA;AAAA,kBAAA;AAAA,kBAGL,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACH,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,EAAA;AAGN;AC9EO,MAAM,UAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AACF,MAAM;AACJ,MAAI,CAAC,OAAQ,QAAO;AAGpB,QAAM,iBAAiB;AAAA,IACrB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAGR,SACEH,kCAAAA;AAAAA,IAACiB,YAAAA;AAAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,aAAW;AAAA,MACX,eAAc;AAAA,MACd,gBAAgB;AAAA,MAEhB,UAAAhB,kCAAAA,KAACC,kBAAA,EAAK,OAAOgC,SAAO,WAClB,UAAA;AAAA,QAAAlC,kCAAAA;AAAAA,UAACI,YAAAA;AAAAA,UAAA;AAAA,YACC,OAAO+B,YAAAA,WAAW;AAAA,YAClB,WAAW,GAAG,eAAe,OAAO,GAAG,SAAS;AAAA,YAChD,SAAS;AAAA,YACT,mBAAkB;AAAA,YAClB,oBAAmB;AAAA,UAAA;AAAA,QAAA;AAAA,QAEpB,kDACEjC,YAAAA,MAAA,EAAK,OAAOgC,SAAO,SAAS,eAAc,YACxC,SAAA,CACH;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,MAAMA,WAASC,YAAAA,WAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,EAAA;AAAA,EAER,SAAS;AAAA,IACP,GAAGA,YAAAA,WAAW;AAAA,IACd,gBAAgB;AAAA,IAChB,YAAY;AAAA,EAAA;AAEhB,CAAC;ACvBM,MAAM,eAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,cAAc;AAAA,EACd,aAAa;AAAA,EACb,0BAA0B;AAAA,EAC1B,0BAA0B;AAAA,EAC1B,SAAS;AAAA,EACT,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,CAAC,cAAc,eAAe,IAAIxC,MAAAA,SAAS,EAAE;AACnD,QAAM,CAAC,cAAc,eAAe,IAAIA,MAAAA,SAAS,EAAE;AACnD,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,MAAAA,SAAsB,oBAAI,KAAK;AAC3E,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,MAAAA,SAAsB,oBAAI,KAAK;AAG3E,QAAM,iBAAiB,aACnB,OAAO;AAAA,IAAO,CAAA,SACZ,KAAK,MAAM,YAAA,EAAc,SAAS,aAAa,aAAa;AAAA,EAAA,IAE9D;AAEJ,QAAM,iBAAiB,aACnB,OAAO;AAAA,IAAO,CAAA,SACZ,KAAK,MAAM,YAAA,EAAc,SAAS,aAAa,aAAa;AAAA,EAAA,IAE9D;AAGJ,QAAM,wBAAwBG,kBAAY,CAAC,OAAe;AACxD,sBAAkB,CAAA,SAAQ;AACxB,YAAM,SAAS,IAAI,IAAI,IAAI;AAC3B,UAAI,OAAO,IAAI,EAAE,GAAG;AAClB,eAAO,OAAO,EAAE;AAAA,MAClB,OAAO;AACL,eAAO,IAAI,EAAE;AAAA,MACf;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAA,CAAE;AAEL,QAAM,wBAAwBA,kBAAY,CAAC,OAAe;AACxD,sBAAkB,CAAA,SAAQ;AACxB,YAAM,SAAS,IAAI,IAAI,IAAI;AAC3B,UAAI,OAAO,IAAI,EAAE,GAAG;AAClB,eAAO,OAAO,EAAE;AAAA,MAClB,OAAO;AACL,eAAO,IAAI,EAAE;AAAA,MACf;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAA,CAAE;AAGL,QAAM,eAAeA,MAAAA,YAAY,MAAM;AACrC,UAAM,cAAc,OAAO,OAAO,CAAA,SAAQ,eAAe,IAAI,KAAK,EAAE,CAAC;AACrE,UAAM,YAAY,OAAO,OAAO,CAAA,SAAQ,CAAC,eAAe,IAAI,KAAK,EAAE,CAAC;AACpE,UAAM,YAAY,CAAC,GAAG,QAAQ,GAAG,WAAW;AAC5C,aAAS,WAAW,SAAS;AAC7B,sBAAkB,oBAAI,KAAK;AAAA,EAC7B,GAAG,CAAC,QAAQ,QAAQ,gBAAgB,QAAQ,CAAC;AAG7C,QAAM,eAAeA,MAAAA,YAAY,MAAM;AACrC,UAAM,cAAc,OAAO,OAAO,CAAA,SAAQ,eAAe,IAAI,KAAK,EAAE,CAAC;AACrE,UAAM,YAAY,OAAO,OAAO,CAAA,SAAQ,CAAC,eAAe,IAAI,KAAK,EAAE,CAAC;AACpE,UAAM,YAAY,CAAC,GAAG,QAAQ,GAAG,WAAW;AAC5C,aAAS,WAAW,SAAS;AAC7B,sBAAkB,oBAAI,KAAK;AAAA,EAC7B,GAAG,CAAC,QAAQ,QAAQ,gBAAgB,QAAQ,CAAC;AAG7C,QAAM,kBAAkBA,MAAAA,YAAY,MAAM;AACxC,aAAS,CAAA,GAAI,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC;AACnC,sBAAkB,oBAAI,KAAK;AAAA,EAC7B,GAAG,CAAC,QAAQ,QAAQ,QAAQ,CAAC;AAE7B,QAAM,kBAAkBA,MAAAA,YAAY,MAAM;AACxC,aAAS,CAAC,GAAG,QAAQ,GAAG,MAAM,GAAG,CAAA,CAAE;AACnC,sBAAkB,oBAAI,KAAK;AAAA,EAC7B,GAAG,CAAC,QAAQ,QAAQ,QAAQ,CAAC;AAG7B,QAAM,aAAa,CACjB,OACA,OACA,UACA,UACA,aACA,gBACA,sBAEAG,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,2FAEd,UAAA;AAAA,IAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,uFACd,UAAA;AAAA,MAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,uDACb,UAAA,OACH;AAAA,MACAF,kCAAAA,KAACE,YAAAA,MAAA,EAAK,WAAU,4CACb,UAAA;AAAA,QAAA,MAAM;AAAA,QAAO;AAAA,QAAM,MAAM,WAAW,IAAI,MAAM;AAAA,MAAA,EAAA,CACjD;AAAA,IAAA,GACF;AAAA,IAGC,cACCH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,qDACd,UAAAF,kCAAAA;AAAAA,MAACW,YAAAA;AAAAA,MAAA;AAAA,QACC,OAAO;AAAA,QACP,cAAc;AAAA,QACd,aAAa;AAAA,QACb,sBAAqB;AAAA,QACrB,WAAU;AAAA,MAAA;AAAA,IAAA,GAEd;AAAA,IAIFX,kCAAAA,IAAC0B,YAAAA,YAAA,EAAW,OAAO,EAAE,QAAQ,aAAa,SAAS,MAAM,SAAS,GAAA,GAC/D,UAAA,MAAM,WAAW,IAChB1B,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,2CACd,UAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,4CAA2C,UAAA,WAAA,CAE3D,EAAA,CACF,IAEA,MAAM,IAAI,CAAA,SAAQ;AAChB,YAAM,aAAa,SAAS,IAAI,KAAK,EAAE;AAEvC,aACEH,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UAEC,SAAS,MAAM,CAAC,KAAK,YAAY,CAAC,YAAY,SAAS,KAAK,EAAE;AAAA,UAC9D,UAAU,KAAK,YAAY;AAAA,UAC3B,WAAW;AAAA,YACT;AAAA,YACA;AAAA,aACC,KAAK,YAAY,aAAa;AAAA,YAC/B,cACE;AAAA,UAAA;AAAA,UAEJ,mBAAkB;AAAA,UAClB,oBAAoB;AAAA,YAClB,SAAS;AAAA,YACT,UAAU,KAAK,YAAY;AAAA,UAAA;AAAA,UAG7B,UAAAH,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,8BAEd,UAAA;AAAA,YAAAF,kCAAAA;AAAAA,cAACE,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,aACI,sEACA;AAAA,gBAAA;AAAA,gBAGL,UAAA,cACCF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,sBAAqB,UAAA,IAAA,CAAC;AAAA,cAAA;AAAA,YAAA;AAAA,YAK1CF,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,UACd,UAAA;AAAA,cAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,qDACb,UAAA,KAAK,OACR;AAAA,cACC,KAAK,eACJH,kCAAAA,IAACG,oBAAK,WAAU,4CACb,eAAK,YAAA,CACR;AAAA,YAAA,EAAA,CAEJ;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,QA1CK,KAAK;AAAA,MAAA;AAAA,IA6ChB,CAAC,EAAA,CAEL;AAAA,EAAA,GACF;AAGF,gDACGD,YAAAA,MAAA,EAAK,WAAW,GAAG,kBAAkB,SAAS,GAE5C,UAAA;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAIFD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,wBACd,UAAA;AAAA,MAAAF,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,UAAU,YAAY,OAAO,WAAW;AAAA,UACxC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,aACC,YAAY,OAAO,WAAW,MAAM;AAAA,UAAA;AAAA,UAEvC,mBAAkB;AAAA,UAClB,oBAAmB;AAAA,UAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,oCAAmC,UAAA,IAAA,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,MAGtDH,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,UAAU,YAAY,eAAe,SAAS;AAAA,UAC9C,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,aACC,YAAY,eAAe,SAAS,MAAM;AAAA,UAAA;AAAA,UAE7C,mBAAkB;AAAA,UAClB,oBAAmB;AAAA,UAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,oCAAmC,UAAA,IAAA,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,MAGtDH,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,UAAU,YAAY,eAAe,SAAS;AAAA,UAC9C,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,aACC,YAAY,eAAe,SAAS,MAAM;AAAA,UAAA;AAAA,UAE7C,mBAAkB;AAAA,UAClB,oBAAmB;AAAA,UAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,oCAAmC,UAAA,IAAA,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,MAGtDH,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,UAAU,YAAY,OAAO,WAAW;AAAA,UACxC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,aACC,YAAY,OAAO,WAAW,MAAM;AAAA,UAAA;AAAA,UAEvC,mBAAkB;AAAA,UAClB,oBAAmB;AAAA,UAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,oCAAmC,UAAA,IAAA,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IACtD,GACF;AAAA,IAGC;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;ACzRO,MAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA,QAAQ,CAAA;AAAA,EACR;AAAA,EACA,WAAW;AAAA,EACX,eAAe;AAAA,EACf,eAAe;AAAA,EACf;AAAA,EACA,aAAa;AAAA,EACb,eAAe;AAAA,EACf;AAAA,EACA;AACF,MAAM;AAEJ,QAAM,iBAAiB,CAAC,UAA0B;AAChD,QAAI,UAAU,EAAG,QAAO;AAExB,UAAM,IAAI;AACV,UAAM,QAAQ,CAAC,SAAS,MAAM,MAAM,IAAI;AACxC,UAAM,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC;AAElD,WAAO,KAAK,MAAO,QAAQ,KAAK,IAAI,GAAG,CAAC,IAAK,GAAG,IAAI,MAAM,MAAM,MAAM,CAAC;AAAA,EACzE;AAGA,MAAI,cAAc;AAChB,kDACGD,YAAAA,MAAA,EAAK,WAAW,GAAG,UAAU,SAAS,GACrC,UAAA;AAAA,MAAAF,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT;AAAA,UACA,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA,YAAY;AAAA,UAAA;AAAA,UAEd,mBAAkB;AAAA,UAClB,oBAAoB;AAAA,UACpB,oBAAoB,EAAE,SAAA;AAAA,UAEtB,UAAAH,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,qCACd,UAAA;AAAA,YAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,6CAA4C,UAAA,MAE5D;AAAA,YACAH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,wDACb,UAAA,cACH;AAAA,YACC,WACCF,kCAAAA,KAACE,YAAAA,MAAA,EAAK,WAAU,4CAA2C,UAAA;AAAA,cAAA;AAAA,cACzC,eAAe,OAAO;AAAA,YAAA,EAAA,CACxC;AAAA,UAAA,EAAA,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,MAGD,SACCH,kCAAAA,IAACG,kBAAA,EAAK,WAAU,+CACb,UAAA,OACH;AAAA,MAGD,gBAAgB,MAAM,SAAS,KAC9BH,kCAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GAEJ;AAAA,EAEJ;AAGA,gDACGE,YAAAA,MAAA,EAAK,WAAW,GAAG,UAAU,SAAS,GACrC,UAAA;AAAA,IAAAD,kCAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,YAAY;AAAA,QAAA;AAAA,QAEd,mBAAkB;AAAA,QAClB,oBAAoB;AAAA,QACpB,oBAAoB,EAAE,SAAA;AAAA,QAEtB,UAAA;AAAA,UAAAJ,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,gBAAe,UAAA,MAAE;AAAA,UACjCH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,wDACb,UAAA,WAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGD,SACCH,kCAAAA,IAACG,kBAAA,EAAK,WAAU,+CACb,UAAA,OACH;AAAA,IAGD,gBAAgB,MAAM,SAAS,KAC9BH,kCAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GAEJ;AAEJ;AAKA,MAAM,WAID,CAAC,EAAE,OAAO,UAAU,qBAAqB;AAC5C,SACEA,sCAAC0B,YAAAA,cAAW,WAAU,iBACnB,gBAAM,IAAI,CAAC,MAAM,UAChBzB,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MAEC,WAAU;AAAA,MAEV,UAAA;AAAA,QAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,qCACd,UAAA;AAAA,UAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,gBAAe,UAAA,MAAE;AAAA,UACjCF,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,UACd,UAAA;AAAA,YAAAF,kCAAAA;AAAAA,cAACG,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,eAAe;AAAA,gBAEd,UAAA,KAAK;AAAA,cAAA;AAAA,YAAA;AAAA,kDAEPA,YAAAA,MAAA,EAAK,WAAU,4CACb,UAAA,eAAe,KAAK,IAAI,EAAA,CAC3B;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,GACF;AAAA,QAEC,YACCH,kCAAAA;AAAAA,UAACI,YAAAA;AAAAA,UAAA;AAAA,YACC,SAAS,MAAM,SAAS,KAAK;AAAA,YAC7B,WAAU;AAAA,YACV,mBAAkB;AAAA,YAClB,oBAAmB;AAAA,YAEnB,UAAAJ,kCAAAA,IAACG,kBAAA,EAAK,WAAU,kCAAiC,UAAA,IAAA,CAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MACpD;AAAA,IAAA;AAAA,IA1BG,GAAG,KAAK,IAAI,IAAI,KAAK;AAAA,EAAA,CA6B7B,GACH;AAEJ;AC5KO,MAAM,OAA4B,CAAC;AAAA,EACxC,OAAO;AAAA,EACP;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AACF,MAAM;AAEJ,QAAMW,cAAa;AAAA,IACjB,IAAI;AAAA,MACF,WAAW;AAAA,MACX,OAAO,EAAE,OAAO,IAAI,QAAQ,GAAA;AAAA,MAC5B,MAAM;AAAA,IAAA;AAAA,IAER,IAAI;AAAA,MACF,WAAW;AAAA,MACX,OAAO,EAAE,OAAO,IAAI,QAAQ,GAAA;AAAA,MAC5B,MAAM;AAAA,IAAA;AAAA,IAER,IAAI;AAAA,MACF,WAAW;AAAA,MACX,OAAO,EAAE,OAAO,IAAI,QAAQ,GAAA;AAAA,MAC5B,MAAM;AAAA,IAAA;AAAA,IAER,IAAI;AAAA,MACF,WAAW;AAAA,MACX,OAAO,EAAE,OAAO,IAAI,QAAQ,GAAA;AAAA,MAC5B,MAAM;AAAA,IAAA;AAAA,EACR;AAGF,QAAM,SAASA,YAAW,IAAI;AAE9B,QAAM,cACJb,kCAAAA,KAAAe,kBAAAA,UAAA,EACG,UAAA;AAAA,IAAA,cACChB,kCAAAA;AAAAA,MAACsB,YAAAA;AAAAA,MAAA;AAAA,QACC,QAAQ;AAAA,QACR,OAAO,OAAO;AAAA,QACd,oBAAoB;AAAA,QACpB,YAAW;AAAA,MAAA;AAAA,IAAA;AAAA,IAGd,YACCtB,kCAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,OAAO;AAAA,QAAA;AAAA,QAGR,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GAEJ;AAGF,MAAI,SAAS;AACX,WACEH,kCAAAA;AAAAA,MAACI,YAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA,OAAO;AAAA,UACP;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,mBAAkB;AAAA,QAClB,oBAAoB,GAAG,QAAQ;AAAA,QAE9B,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AAEA,SACEJ,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW,GAAG,yBAAyB,OAAO,WAAW,SAAS;AAAA,MAClE,mBAAkB;AAAA,MAClB,oBAAoB,GAAG,QAAQ;AAAA,MAE9B,UAAA;AAAA,IAAA;AAAA,EAAA;AAGP;AC/EO,MAAM,kBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT,mBAAmB;AAAA,EACnB;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,cAAc,eAAe,IAAIP,MAAAA,SAAS,CAAC;AAClD,QAAM,gBAAgBC,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,CAAC,CAAC,EAAE;AACpD,QAAM,gBAAgBD,MAAAA,OAAO,CAAC;AAE9BG,QAAAA,UAAU,MAAM;AAEd,UAAM,aAAa,cAAc,YAAY,CAAC,EAAE,OAAO,gBAAgB;AACrE,sBAAgB,SAAS;AAAA,IAC3B,CAAC;AAGDF,gBAAAA,SAAS,OAAO,eAAe;AAAA,MAC7B,SAAS;AAAA,MACT;AAAA,MACA,iBAAiB;AAAA,IAAA,CAClB,EAAE,MAAA;AAEH,kBAAc,UAAU;AAExB,WAAO,MAAM;AACX,oBAAc,eAAe,UAAU;AAAA,IACzC;AAAA,EACF,GAAG,CAAC,OAAO,UAAU,aAAa,CAAC;AAGnC,QAAM,cAAc,CAAC,QAAwB;AAC3C,UAAM,QAAQ,IAAI,QAAQ,QAAQ;AAElC,QAAI,kBAAkB;AACpB,YAAM,QAAQ,MAAM,MAAM,GAAG;AAC7B,YAAM,CAAC,IAAI,MAAM,CAAC,EAAE,QAAQ,yBAAyB,GAAG;AACxD,aAAO,MAAM,KAAK,GAAG;AAAA,IACvB;AAEA,WAAO;AAAA,EACT;AAEA,SACEI,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA;AAAA,QACA,YAAY,YAAY;AAAA,QACxB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;ACpEO,MAAM,kBAAkD,CAAC;AAAA,EAC9D,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,UAAUP,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,CAAC,CAAC,EAAE;AAC9C,QAAM,aAAaD,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,CAAC,CAAC,EAAE;AACjD,QAAM,aAAaD,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,CAAC,CAAC,EAAE;AACjD,QAAM,QAAQD,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,CAAC,CAAC,EAAE;AAE5CE,QAAAA,UAAU,MAAM;AAEd,YAAQ,WAAA;AAAA,MACN,KAAK;AACH,gBAAQ,SAAS,CAAC;AAClB;AAAA,MACF,KAAK;AACH,gBAAQ,SAAS,CAAC;AAClB,mBAAW,SAAS,EAAE;AACtB;AAAA,MACF,KAAK;AACH,gBAAQ,SAAS,CAAC;AAClB,mBAAW,SAAS,GAAG;AACvB;AAAA,MACF,KAAK;AACH,gBAAQ,SAAS,CAAC;AAClB,mBAAW,SAAS,GAAG;AACvB;AAAA,MACF,KAAK;AACH,gBAAQ,SAAS,CAAC;AAClB,mBAAW,SAAS,EAAE;AACtB;AAAA,MACF,KAAK;AACH,gBAAQ,SAAS,CAAC;AAClB,cAAM,SAAS,GAAG;AAClB;AAAA,IAAA;AAIJ,UAAM,aAA4C,CAAA;AAElD,eAAW;AAAA,MACTF,YAAAA,SAAS,OAAO,SAAS;AAAA,QACvB,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,iBAAiB;AAAA,MAAA,CAClB;AAAA,IAAA;AAGH,QAAI,cAAc,gBAAgB,cAAc,gBAAgB;AAC9D,iBAAW;AAAA,QACTA,YAAAA,SAAS,OAAO,YAAY;AAAA,UAC1B,SAAS;AAAA,UACT;AAAA,UACA;AAAA,UACA,iBAAiB;AAAA,QAAA,CAClB;AAAA,MAAA;AAAA,IAEL;AAEA,QAAI,cAAc,kBAAkB,cAAc,iBAAiB;AACjE,iBAAW;AAAA,QACTA,YAAAA,SAAS,OAAO,YAAY;AAAA,UAC1B,SAAS;AAAA,UACT;AAAA,UACA;AAAA,UACA,iBAAiB;AAAA,QAAA,CAClB;AAAA,MAAA;AAAA,IAEL;AAEA,QAAI,cAAc,YAAY;AAC5B,iBAAW;AAAA,QACTA,YAAAA,SAAS,OAAO,OAAO;AAAA,UACrB,SAAS;AAAA,UACT;AAAA,UACA;AAAA,UACA,iBAAiB;AAAA,QAAA,CAClB;AAAA,MAAA;AAAA,IAEL;AAEAA,gBAAAA,SAAS,SAAS,UAAU,EAAE,MAAA;AAAA,EAChC,GAAG,CAAC,WAAW,OAAO,UAAU,SAAS,YAAY,YAAY,KAAK,CAAC;AAEvE,SACEG,kCAAAA;AAAAA,IAACH,YAAAA,SAAS;AAAA,IAAT;AAAA,MACC,WAAW,GAAG,SAAS;AAAA,MACvB,OAAO;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UACA,WAAW,CAAC,EAAE,WAAA,GAAc,EAAE,WAAA,GAAc,EAAE,MAAA,CAAO;AAAA,QAAA;AAAA,MACvD;AAAA,MAGD;AAAA,IAAA;AAAA,EAAA;AAGP;AAGO,MAAM,SAIR,CAAC,EAAE,UAAU,QAAQ,GAAG,UAAA,MAC3BG,kCAAAA,IAAC,iBAAA,EAAgB,WAAU,WAAU,OAAc,WAChD,SAAA,CACH;AAGK,MAAM,WAIR,CAAC,EAAE,UAAU,QAAQ,GAAG,UAAA,MAC3BA,kCAAAA,IAAC,iBAAA,EAAgB,WAAU,cAAa,OAAc,WACnD,SAAA,CACH;AAGK,MAAM,cAIR,CAAC,EAAE,UAAU,QAAQ,GAAG,UAAA,MAC3BA,kCAAAA,IAAC,iBAAA,EAAgB,WAAU,YAAW,OAAc,WACjD,SAAA,CACH;AClJK,MAAM,UAAkC,CAAC;AAAA,EAC9C;AAAA,EACA,UAAU;AAAA,EACV,MAAM;AAAA,EACN;AACF,MAAM;AAEJ,QAAM,aAAa/E,iBAAM,SAAS,QAAQ,QAAQ;AAClD,QAAM,eAAoC,MAAM;AAAA,IAC9C,EAAE,QAAQ,QAAA;AAAA,IACV,MAAM,CAAA;AAAA,EAAC;AAGT,aAAW,QAAQ,CAAC,OAAO,UAAU;AACnC,iBAAa,QAAQ,OAAO,EAAE,KAAK,KAAK;AAAA,EAC1C,CAAC;AAED,+CACGiF,YAAAA,MAAA,EAAK,WAAW,GAAG,YAAY,SAAS,GAAG,OAAO,EAAE,IAAA,GAClD,UAAA,aAAa,IAAI,CAAC,QAAQ,gBACzBF,kCAAAA,IAACE,YAAAA,MAAA,EAAuB,WAAU,UAAS,OAAO,EAAE,OACjD,UAAA,OAAO,IAAI,CAAC,MAAM,cACjBF,kCAAAA,IAACE,oBAAsB,UAAA,KAAA,GAAZ,SAAiB,CAC7B,EAAA,GAHQ,WAIX,CACD,GACH;AAEJ;ACpBO,MAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,EACR;AACF,MAAM;AAEJ,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAIN,QAAM,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,EAAA;AAIX,QAAM,eAAe;AAAA,IACnB,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,EAAA;AAGV,SACEF,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,YAAY,IAAI;AAAA,QAChB,eAAe,OAAO;AAAA,QACtB,aAAa,KAAK;AAAA,QAClB;AAAA,MAAA;AAAA,MAGD;AAAA,IAAA;AAAA,EAAA;AAGP;ACnDO,MAAM,wBAA8D,CAAC;AAAA,EAC1E;AAAA,EACA,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV;AACF,MAAM;AAEJ,QAAMY,cAAa;AAAA,IACjB,IAAI,EAAE,WAAW,aAAa,MAAMoB,SAAO,OAAA;AAAA,IAC3C,IAAI,EAAE,WAAW,aAAa,MAAMA,SAAO,OAAA;AAAA,IAC3C,IAAI,EAAE,WAAW,aAAa,MAAMA,SAAO,OAAA;AAAA,IAC3C,IAAI,EAAE,WAAW,aAAa,MAAMA,SAAO,OAAA;AAAA,EAAO;AAIpD,QAAM,eAAe;AAAA,IACnB,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,EAAA;AAIV,QAAM,iBAAiB;AAAA,IACrB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAGR,QAAM,SAASpB,YAAW,IAAI;AAE9B,SACEd,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,OAAO;AAAA,QACP,aAAa,KAAK;AAAA,QAClB,eAAe,OAAO;AAAA,QACtB;AAAA,MAAA;AAAA,MAGF,UAAAF,kCAAAA,IAACE,kBAAA,EAAK,OAAO,OAAO,MAAO,SAAA,CAAS;AAAA,IAAA;AAAA,EAAA;AAG1C;AAEA,MAAMgC,WAASC,YAAAA,WAAW,OAAO;AAAA,EAC/B,QAAQ,EAAE,OAAO,IAAI,QAAQ,GAAA;AAAA,EAC7B,QAAQ,EAAE,OAAO,IAAI,QAAQ,GAAA;AAAA,EAC7B,QAAQ,EAAE,OAAO,IAAI,QAAQ,GAAA;AAAA,EAC7B,QAAQ,EAAE,OAAO,IAAI,QAAQ,GAAA;AAC/B,CAAC;AChCM,MAAM,oBAAsD,CAAC;AAAA,EAClE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,cAAc;AAAA,EACd,OAAO;AAAA,EACP;AACF,MAAM;AAEJ,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,MACF,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO;AAAA,IAAA;AAAA,IAET,IAAI;AAAA,MACF,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO;AAAA,IAAA;AAAA,IAET,IAAI;AAAA,MACF,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO;AAAA,IAAA;AAAA,EACT;AAGF,QAAMrB,cAAa,YAAY,IAAI;AAEnC,SACEb,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW,GAAG,8CAA8C,SAAS;AAAA,MAErE,UAAA;AAAA,QAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,UACd,UAAA;AAAA,UAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,yCACd,UAAA;AAAA,YAAAF,kCAAAA;AAAAA,cAACG,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAW,GAAGW,YAAW,OAAO,kCAAkC;AAAA,gBAEjE,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGF,UAAU,UACTb,kCAAAA;AAAAA,cAACE,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAW;AAAA,kBACTW,YAAW;AAAA,kBACX;AAAA,gBAAA;AAAA,gBAEH,UAAA;AAAA,kBAAA;AAAA,kBACG;AAAA,kBACD,cAAc,IAAI,UAAU;AAAA,kBAAG;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAInC,WACCb,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,+BACd,UAAA;AAAA,cAAAF,kCAAAA,IAACQ,YAAAA,mBAAA,EAAkB,MAAK,SAAQ,OAAM,WAAU;AAAA,cAChDR,kCAAAA;AAAAA,gBAACG,YAAAA;AAAAA,gBAAA;AAAA,kBACC,WAAW;AAAA,oBACTW,YAAW;AAAA,oBACX;AAAA,kBAAA;AAAA,kBAGD,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACH,EAAA,CACF;AAAA,UAAA,GAEJ;AAAA,UAEC,eACCd,kCAAAA;AAAAA,YAACG,YAAAA;AAAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACTW,YAAW;AAAA,gBACX;AAAA,cAAA;AAAA,cAGD,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACH,GAEJ;AAAA,QAEC,UAAUd,kCAAAA,IAACE,YAAAA,MAAA,EAAM,UAAA,OAAA,CAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG/B;ACnHO,MAAM,iBAAgD,CAAC,EAAE,eAAe;AAC7E,SACEF,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,OAAO,OAAO;AAAA,MACd,6BAA6B;AAAA,MAC7B,2BAA0B;AAAA,MAEzB,UAAA,OAAO,aAAa,WACnBF,kCAAAA,IAACG,oBAAK,mBAAkB,QAAQ,UAAS,IAEzC;AAAA,IAAA;AAAA,EAAA;AAIR;AAEA,MAAM,SAASgC,YAAAA,WAAW,OAAO;AAAA,EAC/B,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA;AAAA;AAAA,EAAA;AAId,CAAC;ACZM,MAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA,YAAY;AAAA,EACZ;AACF,MAAM;AACJ,SACEnC,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW,GAAG,+BAA+B,SAAS;AAAA,MACtD,mBAAkB;AAAA,MAClB,oBAAmB;AAAA,MAElB,UAAA,MAAM,IAAI,CAAC,MAAM,UAChBD,kCAAAA,KAAChF,iBAAM,UAAN,EACE,UAAA;AAAA,QAAA,QAAQ,2CACNkF,YAAAA,MAAA,EAAK,WAAU,4CACb,UAAA,OAAO,cAAc,WAAW,YAAY,UAAA,CAC/C;AAAA,QAED,UAAU,MAAM,SAAS,IACxBH,kCAAAA,IAACG,YAAAA,QAAK,WAAU,qDACb,UAAA,KAAK,MAAA,CACR,IAEAH,kCAAAA;AAAAA,UAACI,YAAAA;AAAAA,UAAA;AAAA,YACC,SAAS,KAAK;AAAA,YACd,mBAAkB;AAAA,YAClB,oBAAoB,KAAK;AAAA,YAEzB,UAAAJ,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,4CACb,eAAK,MAAA,CACR;AAAA,UAAA;AAAA,QAAA;AAAA,MACF,EAAA,GAnBiB,KAqBrB,CACD;AAAA,IAAA;AAAA,EAAA;AAGP;ACzCO,MAAM,MAA0B,CAAC;AAAA,EACtC;AAAA,EACA,OAAO;AAAA,EACP;AACF,MAAM;AAEJ,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,SACEH,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY,IAAI;AAAA,QAChB;AAAA,MAAA;AAAA,MAEF,mBAAkB;AAAA,MAElB,UAAAF,kCAAAA;AAAAA,QAACG,YAAAA;AAAAA,QAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA,SAAS,QAAQ;AAAA,YACjB,SAAS,QAAQ;AAAA,YACjB,SAAS,QAAQ;AAAA,UAAA;AAAA,UAGlB;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN;ACDO,SAAS,MAAyC;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AAAA,EACX,eAAe;AAAA,EACf;AACF,GAAkB;AAChB,QAAM,aAAa,CAAC,WAA2B;AAC7C,QAAI,OAAO,YAAY,QAAQ;AAC7B,aAAO,OAAO,GAAG;AAAA,IACnB;AAAA,EACF;AAEA,QAAM,eAAe;AAAA,IACnB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAGT,SACEH,kCAAAA;AAAAA,IAAC0B,YAAAA;AAAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,gCAAgC;AAAA,MAChC,WAAW,GAAG,UAAU,SAAS;AAAA,MAEjC,UAAAzB,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,UAEd,UAAA;AAAA,QAAAF,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,YAAA;AAAA,YAGD,UAAA,QAAQ,IAAI,CAAA,WACXF,kCAAAA;AAAAA,cAACI,YAAAA;AAAAA,cAAA;AAAA,gBAEC,SAAS,MAAM,OAAO,YAAY,WAAW,MAAM;AAAA,gBACnD,UAAU,CAAC,OAAO;AAAA,gBAClB,WAAW;AAAA,kBACT,UAAU,cAAc;AAAA,kBACxB,YACE;AAAA,gBAAA;AAAA,gBAEJ,OAAO,EAAE,OAAO,OAAO,MAAA;AAAA,gBACvB,mBAAkB;AAAA,gBAClB,oBAAoB,WAAW,OAAO,KAAK;AAAA,gBAE3C,UAAAH,kCAAAA;AAAAA,kBAACC,YAAAA;AAAAA,kBAAA;AAAA,oBACC,WAAW;AAAA,sBACT;AAAA,sBACA,aAAa,OAAO,SAAS,MAAM;AAAA,oBAAA;AAAA,oBAGrC,UAAA;AAAA,sBAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,iFACb,UAAA,OAAO,OACV;AAAA,sBACC,OAAO,aAAY,6BAAM,YAAW,OAAO,OAC1CH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,yBACb,UAAA,KAAK,cAAc,QAAQ,MAAM,IAAA,CACpC;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAEJ;AAAA,cA1BK,OAAO;AAAA,YAAA,CA4Bf;AAAA,UAAA;AAAA,QAAA;AAAA,QAIHH,kCAAAA,IAACE,YAAAA,QAAK,WAAU,6BACb,eAAK,WAAW,IACfF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,aACd,gDAACC,YAAAA,MAAA,EAAK,WAAU,wDACb,UAAA,aAAA,CACH,EAAA,CACF,IAEA,KAAK,IAAI,CAAC,KAAK,aACbH,kCAAAA;AAAAA,UAACI,YAAAA;AAAAA,UAAA;AAAA,YAEC,SAAS,MAAM,yCAAa,KAAK;AAAA,YACjC,UAAU,CAAC;AAAA,YACX,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA,WACE,WAAW,MAAM,KACjB;AAAA,YAAA;AAAA,YAEJ,mBAAkB;AAAA,YAEjB,UAAA,QAAQ,IAAI,CAAA,WACXJ,kCAAAA;AAAAA,cAACE,YAAAA;AAAAA,cAAA;AAAA,gBAEC,WAAW;AAAA,kBACT,UAAU,cAAc;AAAA,kBACxB,aAAa,OAAO,SAAS,MAAM;AAAA,kBACnC,YACE;AAAA,gBAAA;AAAA,gBAEJ,OAAO,EAAE,OAAO,OAAO,MAAA;AAAA,gBAEtB,iBAAO,SACN,OAAO,OAAO,KAAK,QAAQ,IAE3BF,sCAACG,YAAAA,MAAA,EAAK,WAAU,yCACb,UAAA,OAAO,IAAI,OAAO,GAAG,KAAK,EAAE,EAAA,CAC/B;AAAA,cAAA;AAAA,cAdG,OAAO;AAAA,YAAA,CAiBf;AAAA,UAAA;AAAA,UA/BI,aAAa,KAAK,QAAQ;AAAA,QAAA,CAiClC,EAAA,CAEL;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AC9HO,MAAM,UAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,eAAe;AAAA,EACf;AACF,MAAM;AACJ,QAAM,CAAC,aAAa,cAAc,IAAIR,MAAAA,SAAS,EAAE;AACjD,QAAM,CAAC,eAAe,gBAAgB,IAAIA,MAAAA,SAAS,CAAC;AACpD,QAAM,WAAWC,MAAAA,OAAkB,IAAI;AAGvC,QAAM,gBAAgB,MAAM,OAAO,CAAA,SAAQ;;AACzC,UAAM,QAAQ,YAAY,YAAA;AAC1B,WACE,KAAK,MAAM,cAAc,SAAS,KAAK,OACvC,UAAK,aAAL,mBAAe,KAAK,CAAA,YAAW,QAAQ,YAAA,EAAc,SAAS,KAAK,SACnE,UAAK,UAAL,mBAAY,cAAc,SAAS;AAAA,EAEvC,CAAC;AAGD,QAAM,eAAe,cAAc;AAAA,IACjC,CAAC,QAAQ,SAAS;AAChB,YAAM,QAAQ,KAAK,SAAS;AAC5B,UAAI,CAAC,OAAO,KAAK,GAAG;AAClB,eAAO,KAAK,IAAI,CAAA;AAAA,MAClB;AACA,aAAO,KAAK,EAAE,KAAK,IAAI;AACvB,aAAO;AAAA,IACT;AAAA,IACA,CAAA;AAAA,EAAC;AAIHG,QAAAA,UAAU,MAAM;AACd,QAAI,CAAC,QAAQ;AACX,qBAAe,EAAE;AACjB,uBAAiB,CAAC;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAGXA,QAAAA,UAAU,MAAM;AACd,QAAI,UAAU,SAAS,SAAS;AAC9B,iBAAW,MAAA;;AAAM,8BAAS,YAAT,mBAAkB;AAAA,SAAS,GAAG;AAAA,IACjD;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAGXA,QAAAA,UAAU,MAAM;AACd,qBAAiB,CAAC;AAAA,EACpB,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,eAAe,CAAC,SAAsB;AAC1C,SAAK,SAAA;AACL,YAAA;AAAA,EACF;AAEA,SACEC,kCAAAA;AAAAA,IAACiB,YAAAA;AAAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,aAAW;AAAA,MACX,eAAc;AAAA,MACd,gBAAgB;AAAA,MAEhB,UAAAjB,kCAAAA;AAAAA,QAACwB,YAAAA;AAAAA,QAAA;AAAA,UACC,UAAUC,YAAAA,SAAS,OAAO,QAAQ,YAAY;AAAA,UAC9C,WAAU;AAAA,UAGV,UAAAzB,kCAAAA;AAAAA,YAACI,YAAAA;AAAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS;AAAA,cAGT,UAAAH,kCAAAA;AAAAA,gBAACG,YAAAA;AAAAA,gBAAA;AAAA,kBACC,WAAW;AAAA,oBACT;AAAA,oBACA;AAAA,oBACA;AAAA,kBAAA;AAAA,kBAEF,SAAS,CAAA,MAAK,EAAE,gBAAA;AAAA,kBAGhB,UAAA;AAAA,oBAAAJ,kCAAAA,IAACE,YAAAA,QAAK,WAAU,qDACd,UAAAD,kCAAAA,KAACC,kBAAA,EAAK,WAAU,+BACd,UAAA;AAAA,sBAAAF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,uCACd,UAAAF,kCAAAA,IAACG,oBAAK,WAAU,iBAAgB,gBAAE,EAAA,CACpC;AAAA,sBACAH,kCAAAA;AAAAA,wBAACW,YAAAA;AAAAA,wBAAA;AAAA,0BACC,KAAK;AAAA,0BACL,OAAO;AAAA,0BACP,cAAc;AAAA,0BACd;AAAA,0BACA,sBAAqB;AAAA,0BACrB,WAAU;AAAA,0BACV,gBAAe;AAAA,0BACf,aAAa;AAAA,0BACb,eAAc;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAChB,EAAA,CACF,EAAA,CACF;AAAA,oBAGAX,kCAAAA;AAAAA,sBAAC0B,YAAAA;AAAAA,sBAAA;AAAA,wBACC,WAAU;AAAA,wBACV,2BAA0B;AAAA,wBAE1B,UAAA1B,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,OACb,UAAA,OAAO,KAAK,YAAY,EAAE,WAAW,IACpCF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,aACd,UAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,wDACb,UAAA,aAAA,CACH,GACF,IAEA,OAAO,QAAQ,YAAY,EAAE;AAAA,0BAC3B,CAAC,CAAC,WAAW,UAAU,MACrBF,kCAAAA,KAACC,YAAAA,MAAA,EAAqB,WAAU,QAE9B,UAAA;AAAA,4BAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,6FACb,UAAA,WACH;AAAA,kEAGCD,YAAAA,MAAA,EAAK,WAAU,SACb,UAAA,WAAW,IAAI,CAAA,SAAQ;AACtB,oCAAM,cAAc,cAAc,QAAQ,IAAI;AAC9C,oCAAM,aAAa,gBAAgB;AAEnC,qCACED,kCAAAA;AAAAA,gCAACG,YAAAA;AAAAA,gCAAA;AAAA,kCAEC,SAAS,MAAM,aAAa,IAAI;AAAA,kCAChC,WAAW;AAAA,oCACT;AAAA,oCACA,aACI,mCACA;AAAA,kCAAA;AAAA,kCAEN,mBAAkB;AAAA,kCAClB,oBAAoB,KAAK;AAAA,kCAExB,UAAA;AAAA,oCAAA,KAAK,QACJJ,kCAAAA,IAACE,kBAAA,EAAK,WAAU,WAAW,eAAK,MAAK;AAAA,oCAEvCF,kCAAAA;AAAAA,sCAACG,YAAAA;AAAAA,sCAAA;AAAA,wCACC,WAAW;AAAA,0CACT;AAAA,0CACA,aACI,qCACA;AAAA,wCAAA;AAAA,wCAEN,eAAe;AAAA,wCAEd,UAAA,KAAK;AAAA,sCAAA;AAAA,oCAAA;AAAA,oCAEP,KAAK,YACJH,kCAAAA,IAACG,oBAAK,WAAU,sDACb,eAAK,SAAA,CACR;AAAA,kCAAA;AAAA,gCAAA;AAAA,gCA5BG,KAAK;AAAA,8BAAA;AAAA,4BAgChB,CAAC,EAAA,CACH;AAAA,0BAAA,EAAA,GA/CS,SAgDX;AAAA,wBAAA,EAEJ,CAEJ;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAIFH,kCAAAA,IAACE,YAAAA,QAAK,WAAU,2DACd,gDAACC,YAAAA,MAAA,EAAK,WAAU,wDAAuD,UAAA,wBAAA,CAEvE,EAAA,CACF;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;AC/NO,MAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,SACEF,kCAAAA;AAAAA,IAACG,YAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,mBAAkB;AAAA,MAClB,oBAAoB,EAAE,UAAU,WAAA;AAAA,MAG/B,UAAA;AAAA,QAAA,cACCJ,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,iEAAA,CAAiE;AAAA,QAInFD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,iCACb,UAAA;AAAA,UAAA,QACCF,kCAAAA;AAAAA,YAACE,YAAAA;AAAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,aACI,qCACA;AAAA,cAAA;AAAA,cAGL,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGLD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,UACd,UAAA;AAAA,YAAAF,kCAAAA;AAAAA,cAACG,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,aACI,qCACA;AAAA,gBAAA;AAAA,gBAGL,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAEF,eACCH,kCAAAA;AAAAA,cAACG,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,aACI,qCACA;AAAA,gBAAA;AAAA,gBAGL,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACH,EAAA,CAEJ;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AA+CO,MAAM,qBAAwD,CAAC;AAAA,EACpE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,mBAAmB;AACrB,MAAM;AACJ,QAAM,EAAE,MAAA,IAAU8B,gCAAA;AAClB,QAAM,WAAW,SAAS;AAG1B,QAAM,mBAAmB,CAAC,SAA6B;AACrD,QAAI,CAAC,KAAM,QAAO;AAClB,WAAO,KAAK,MAAM,GAAG,EAAE,CAAC,EAAE,KAAA;AAAA,EAC5B;AAEA,QAAM,aAAa,iBACf,iBAAiB,cAAc,IAC/B,cACE,iBAAiB,WAAW,IAC5B;AAGN,MAAI,UAAU;AACZ,WACEhC,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,6BAEd,UAAA;AAAA,MAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,OAAO,EAAE,OAAO,eACnB,UAAA;AAAA,QAAA,eACCF,kCAAAA,IAACG,kBAAA,EAAK,WAAU,4DACb,UAAA,aACH;AAAA,QAED,kBACCH,kCAAAA,IAACG,kBAAA,EAAK,WAAU,iDACb,UAAA,gBACH;AAAA,QAEFH,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,YAAA;AAAA,YAGF,UAAAF,kCAAAA,IAAC0B,YAAAA,cAAY,UAAA,cAAA,CAAc;AAAA,UAAA;AAAA,QAAA;AAAA,MAC7B,GACF;AAAA,MAGA1B,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,UACd,UAAAD,kCAAAA;AAAAA,QAACC,YAAAA;AAAAA,QAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UAAA;AAAA,UAGD,UAAA;AAAA,YAAA,eACCF,kCAAAA,IAACG,kBAAA,EAAK,WAAU,yDACb,UAAA,aACH;AAAA,YAEFH,kCAAAA,IAAC0B,YAAAA,cAAY,UAAA,cAAA,CAAc;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA,EAC7B,CACF;AAAA,IAAA,GACF;AAAA,EAEJ;AAGA,SACEzB,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,UAEb,UAAA;AAAA,IAAA,eAAe,gBACdD,uCAACC,YAAAA,MAAA,EAAK,WAAU,wCACb,UAAA;AAAA,MAAA,eACCF,kCAAAA,IAACG,kBAAA,EAAK,WAAU,4DACb,UAAA,aACH;AAAA,MAED,kBACCH,kCAAAA,IAACG,kBAAA,EAAK,WAAU,iDACb,UAAA,gBACH;AAAA,4CAEDD,YAAAA,MAAA,EAAK,WAAW,iBACf,UAAAF,kCAAAA,IAAC0B,wBAAA,EAAY,yBAAc,EAAA,CAC7B;AAAA,IAAA,GACF;AAAA,IAID,eAAe,aACdzB,uCAACC,YAAAA,MAAA,EAAK,WAAU,cAEb,UAAA;AAAA,MAAA,sBACCF,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,WAAU;AAAA,UACV,mBAAkB;AAAA,UAClB,oBAAoB,WAAW,UAAU;AAAA,UAEzC,UAAAH,kCAAAA,KAACE,YAAAA,MAAA,EAAK,WAAU,wDAAuD,UAAA;AAAA,YAAA;AAAA,YAClE;AAAA,UAAA,EAAA,CACL;AAAA,QAAA;AAAA,MAAA;AAAA,MAKJF,kCAAAA;AAAAA,QAACC,YAAAA;AAAAA,QAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UAAA;AAAA,UAGD,UAAA;AAAA,YAAA,eACCF,kCAAAA,IAACG,kBAAA,EAAK,WAAU,yDACb,UAAA,aACH;AAAA,YAEFH,kCAAAA,IAAC0B,YAAAA,cAAY,UAAA,cAAA,CAAc;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAC7B,EAAA,CACF;AAAA,EAAA,GAEJ;AAEJ;ACrPO,MAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,gDACGxB,YAAAA,MAAA,EAAK,WAAW,GAAG,QAAQ,SAAS,GAClC,UAAA;AAAA,IAAA,SACCF,kCAAAA,IAACG,kBAAA,EAAK,WAAU,oDACb,UAAA,OACH;AAAA,IAED,eACCH,kCAAAA,IAACG,kBAAA,EAAK,WAAU,yCACb,UAAA,YAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;AChBO,MAAM,qBAAwD,CAAC;AAAA,EACpE;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,SACEH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAW,GAAG,UAAU,mBAAmB,GAC/C,UAAAF,kCAAAA,IAACE,kBAAA,EAAK,WAAW,GAAG,UAAU,gBAAgB,GAAI,UAAS,GAC7D;AAEJ;ACIO,MAAM,WAAoC,CAAC;AAAA,EAChD;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AAAA,EACA;AACF,MAAM;AACJ,QAAM,mBAAmB,CAAC,UAAkB;AAC1C,QAAI,SAAS,WAAW;AACtB,UAAI,YAAY,YAAY;AAC1B,eACEF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,qEACd,UAAAF,kCAAAA,IAACG,YAAAA,QAAK,WAAU,kCAAkC,UAAA,QAAQ,EAAA,CAAE,GAC9D;AAAA,MAEJ;AACA,UAAI,YAAY,WAAW;AACzB,eACEH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,yFACd,UAAAF,kCAAAA,IAACG,YAAAA,QAAK,WAAU,wDACb,UAAA,QAAQ,EAAA,CACX,GACF;AAAA,MAEJ;AACA,aACEF,kCAAAA,KAACE,YAAAA,MAAA,EAAK,WAAU,yCACb,UAAA;AAAA,QAAA,QAAQ;AAAA,QAAE;AAAA,MAAA,GACb;AAAA,IAEJ;AAGA,QAAI,YAAY,WAAW;AACzB,aAAOH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,6CAAA,CAA6C;AAAA,IACtE;AACA,WAAOF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,yCAAwC,UAAA,KAAC;AAAA,EAClE;AAEA,QAAM,aAAa,CAAC,MAA6B,UAAkB;AACjE,UAAM,aAAa,OAAO,SAAS;AACnC,UAAM,UAAU,aAAa,KAAK,UAAU;AAC5C,UAAM,WAAW,aAAa,KAAK,WAAW;AAE9C,WACEF,kCAAAA;AAAAA,MAACC,YAAAA;AAAAA,MAAA;AAAA,QAEC,WAAW;AAAA,UACT;AAAA,UACA,YAAY,cAAc;AAAA,UAC1B,YAAY,cACV,QAAQ,MAAM,SAAS,KACvB;AAAA,UACF;AAAA,QAAA;AAAA,QAID,UAAA;AAAA,UAAA,YAAY,cAAc,SAAS,cAClC,iBAAiB,KAAK,IAEtBF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,oBAAoB,UAAA,iBAAiB,KAAK,GAAE;AAAA,UAI9DD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,UACb,UAAA;AAAA,YAAA,OAAO,YAAY,WAClBF,kCAAAA,IAACG,oBAAK,WAAU,oCAAoC,mBAAQ,IAE5D;AAAA,YAID,YAAY,SAAS,SAAS,KAC7BH,kCAAAA,IAACE,oBAAK,WAAU,mBACb,UAAA,SAAS,IAAI,CAAC,SAAS,aACtBD,kCAAAA,KAACC,YAAAA,MAAA,EAAoB,WAAU,YAC7B,UAAA;AAAA,cAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,yCAAwC,UAAA,KAExD;AAAA,cACC,OAAO,YAAY,WAClBH,kCAAAA,IAACG,YAAAA,QAAK,WAAU,mDACb,mBACH,IAEA;AAAA,YAAA,EAAA,GATO,QAWX,CACD,EAAA,CACH;AAAA,UAAA,EAAA,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,MA5CK;AAAA,IAAA;AAAA,EA+CX;AAEA,SACEH,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT,YAAY,aAAa;AAAA,QACzB,YAAY,cAAc;AAAA,QAC1B,YAAY,aAAa;AAAA,QACzB;AAAA,MAAA;AAAA,MAGD,UAAA,MAAM,IAAI,UAAU;AAAA,IAAA;AAAA,EAAA;AAG3B;AC5FO,MAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AACF,MAAM;AAEJ,QAAM,eAAiD;AAAA,IACrD,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAGX,QAAM,qBAAuD;AAAA,IAC3D,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EAAA;AAGR,QAAM,wBAA0D;AAAA,IAC9D,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EAAA;AAGR,QAAM,qBAAuD;AAAA,IAC3D,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EAAA;AAGR,QAAMoC,eAAc,MAClBrC,kCAAAA,KAAAe,kBAAAA,UAAA,EAEG,UAAA;AAAA,IAAA,cACChB,kCAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,sBAAsB,KAAK;AAAA,QAAA;AAAA,QAG7B,gDAACA,YAAAA,MAAA,EAAK,WAAW,aAAa,KAAK,GAAI,UAAA,KAAA,CAAK;AAAA,MAAA;AAAA,IAAA,IAG9CF,sCAACE,YAAAA,MAAA,EAAK,WAAW,GAAG,QAAQ,aAAa,KAAK,CAAC,GAAI,UAAA,KAAA,CAAK;AAAA,IAI1DF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,4DACb,UAAA,OACH;AAAA,IAGAH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,yDACb,UAAA,aACH;AAAA,IAGC,OAAOH,kCAAAA,IAACE,kBAAA,EAAK,WAAU,aAAa,UAAA,KAAI;AAAA,IAGxC,YAAY,SAAS,SAAS,KAC7BF,kCAAAA,IAACE,oBAAK,WAAU,cACb,UAAA,SAAS,IAAI,CAAC,SAAS,UACtBD,kCAAAA,KAACC,YAAAA,MAAA,EAAiB,WAAU,wBAC1B,UAAA;AAAA,MAAAF,kCAAAA;AAAAA,QAACE,YAAAA;AAAAA,QAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA,mBAAmB,KAAK;AAAA,UAAA;AAAA,QAC1B;AAAA,MAAA;AAAA,MAEFF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,mDACb,UAAA,QAAA,CACH;AAAA,IAAA,KATS,KAUX,CACD,GACH;AAAA,IAID,WAAW,OAAO,KAAK,OAAO,EAAE,SAAS,2CACvCD,kBAAA,EAAK,WAAU,iCACb,UAAA,OAAO,QAAQ,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,UAC1CD,kCAAAA;AAAAA,MAACC,YAAAA;AAAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QAEV,UAAA;AAAA,UAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAW,GAAG,qBAAqB,aAAa,KAAK,CAAC,GACzD,UAAA,MAAA,CACH;AAAA,UACAH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,iDACb,UAAA,IAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,MARK;AAAA,IAAA,CAUR,EAAA,CACH;AAAA,EAAA,GAEJ;AAGF,QAAM,cAAc;AAAA,IAClB;AAAA,IACA,eAAe,mBAAmB,KAAK;AAAA,IACvC,cACI,+EACA;AAAA,IACJ;AAAA,EAAA;AAGF,MAAI,SAAS;AACX,WACEH,kCAAAA;AAAAA,MAACI,YAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,QACX,mBAAkB;AAAA,QAClB,oBAAoB;AAAA,QAEpB,gDAACkC,cAAA,CAAA,CAAY;AAAA,MAAA;AAAA,IAAA;AAAA,EAGnB;AAEA,+CACGpC,kBAAA,EAAK,WAAW,aACf,UAAAF,sCAACsC,gBAAY,GACf;AAEJ;ACvKO,MAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA,UAAU;AAAA,EACV,MAAM;AAAA,EACN,cAAc;AAAA,EACd,WAAW;AAAA,EACX;AAAA,EACA;AACF,MAAM;AACJ,QAAM,aAAa;AAAA,IACjB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,QAAM,kBAAkB;AAAA,IACtB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,QAAM,gBAAgB;AAAA,IACpB,SACE;AAAA,IACF,MAAM;AAAA,IACN,SACE;AAAA,IACF,SAAS;AAAA,EAAA;AAGX,QAAM,gBAAgB,CAAC,SAAkB,UAAkB;AACzD,UAAM,UACJrC,kCAAAA;AAAAA,MAACC,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,gBAAgB,UACd;AAAA,UACF,gBAAgB,aAAa;AAAA,QAAA;AAAA,QAI9B,UAAA;AAAA,UAAA,QAAQ,SACPF,sCAACE,YAAAA,MAAA,EAAK,WAAU,QACd,UAAAF,kCAAAA;AAAAA,YAACE,YAAAA;AAAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,cAAc,QAAQ,MAAM,WAAW,SAAS;AAAA,cAAA;AAAA,cAGlD,gDAACC,YAAAA,MAAA,EAAK,WAAU,uBAAuB,UAAA,QAAQ,MAAM,KAAA,CAAK;AAAA,YAAA;AAAA,UAAA,GAE9D;AAAA,UAIFH,kCAAAA;AAAAA,YAACE,YAAAA;AAAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA,gBAAgB,QAAQ;AAAA,cAAA;AAAA,cAG1B,UAAAF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,oCACb,kBAAQ,KAAA,CACX;AAAA,YAAA;AAAA,UAAA;AAAA,UAIFF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,oEACb,kBAAQ,OACX;AAAA,UAGC,OAAO,QAAQ,gBAAgB,WAC9BH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,gEACb,UAAA,QAAQ,YAAA,CACX,IAEA,QAAQ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAKd,QAAI,gBAAgB;AAClB,aACEH,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UAEC,SAAS,MAAM,eAAe,OAAO;AAAA,UACrC,WAAU;AAAA,UACV,OAAO,EAAE,UAAU,GAAG,MAAM,UAAU,CAAC,IAAA;AAAA,UACvC,mBAAkB;AAAA,UAClB,oBAAoB,QAAQ;AAAA,UAE3B,UAAA;AAAA,QAAA;AAAA,QAPI,QAAQ,MAAM;AAAA,MAAA;AAAA,IAUzB;AAEA,WACEJ,kCAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QACV,OAAO,EAAE,UAAU,GAAG,MAAM,UAAU,CAAC,IAAA;AAAA,QAEtC,UAAA;AAAA,MAAA;AAAA,MAJI,QAAQ,MAAM;AAAA,IAAA;AAAA,EAOzB;AAEA,SACEF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAW,GAAG,sBAAsB,WAAW,GAAG,GAAG,SAAS,GACjE,UAAA,SAAS,IAAI,aAAa,GAC7B;AAEJ;AAGO,MAAM,gBAAgB,CAC3B,MACA,OACA,aACA,aACa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;ACrIO,MAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,OAAO;AAAA,EACP;AACF,MAAM;AACJ,QAAM,kBAAkB;AAAA,IACtB,eAAe;AAAA,IACf,cAAc;AAAA,IACd,cAAc;AAAA,IACd,eAAe;AAAA,EAAA;AAGjB,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,QAAM,mBAAmB;AAAA,IACvB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,QAAM,yBAAyB;AAAA,IAC7B,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,QAAM,iBAAiB,cAAc,UAAU,eAAe;AAE9D,QAAM,eAAe,CAAC,QAAmB,cACvCF,kCAAAA;AAAAA,IAACI,YAAAA;AAAAA,IAAA;AAAA,MACC,SAAS,OAAO;AAAA,MAChB,WAAW;AAAA,QACT;AAAA,QACA,YAAY,aAAa;AAAA,MAAA;AAAA,MAE3B,mBAAkB;AAAA,MAClB,oBAAoB,OAAO;AAAA,MAE3B,UAAAJ,kCAAAA;AAAAA,QAACG,YAAAA;AAAAA,QAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA,YAAY,kBAAkB;AAAA,UAAA;AAAA,UAG/B,UAAA,OAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IACV;AAAA,EAAA;AAIJ,SACEH,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,gBAAgB,QAAQ;AAAA,QACxB,YAAY,IAAI;AAAA,QAChB;AAAA,MAAA;AAAA,MAGF,UAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,gBAEd,UAAA;AAAA,QAAAF,kCAAAA;AAAAA,UAACG,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,iBAAiB,IAAI;AAAA,cACrB;AAAA,YAAA;AAAA,YAGD,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAIHH,kCAAAA;AAAAA,UAACG,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,uBAAuB,IAAI;AAAA,cAC3B;AAAA,YAAA;AAAA,YAGD,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAIHF,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,kBACb,UAAA;AAAA,UAAA,aAAa,eAAe,IAAI;AAAA,UAChC,mBAAmB,aAAa,iBAAiB,KAAK;AAAA,QAAA,EAAA,CACzD;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AC1GO,MAAM,oBAAsD,CAAC;AAAA,EAClE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,EACZ;AAAA,EACA;AACF,MAAM;AACJ,QAAM,cAAc,YAAY;AAEhC,SACEF,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA,eAAe;AAAA,QACf;AAAA,MAAA;AAAA,MAGF,gDAACA,kBAAA,EAAK,WAAU,aACd,UAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,yDAEd,UAAA;AAAA,QAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,gCAEd,UAAA;AAAA,UAAAF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,4CACd,UAAAF,kCAAAA,IAACG,oBAAK,WAAU,gCAAgC,qBAAU,EAAA,CAC5D;AAAA,UAGAF,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,UACd,UAAA;AAAA,YAAAF,kCAAAA;AAAAA,cAACG,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,eAAe;AAAA,gBAAA;AAAA,gBAGhB,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAEF,YACCH,kCAAAA,IAACG,kBAAA,EAAK,WAAU,8CACb,UAAA,SAAA,CACH;AAAA,UAAA,EAAA,CAEJ;AAAA,QAAA,GACF;AAAA,QAGAF,kCAAAA;AAAAA,UAACG,YAAAA;AAAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA,cAAc,cAAc;AAAA,YAAA;AAAA,YAE9B,mBAAkB;AAAA,YAClB,oBAAoB;AAAA,YAEnB,UAAA;AAAA,cAAA,QAAQJ,kCAAAA,IAACE,kBAAA,EAAK,WAAU,QAAQ,UAAA,MAAK;AAAA,cACtCF,kCAAAA;AAAAA,gBAACG,YAAAA;AAAAA,gBAAA;AAAA,kBACC,WAAW;AAAA,oBACT;AAAA,oBACA,cAAc,cAAc;AAAA,kBAAA;AAAA,kBAG7B,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACH;AAAA,UAAA;AAAA,QAAA;AAAA,MACF,EAAA,CACF,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AClGA,IACEsB,YAAAA,SAAS,OAAO,aAChBc,YAAAA,UAAU,uCACV;AACAA,cAAAA,UAAU,sCAAsC,IAAI;AACtD;AAqDO,MAAM,qBAAwD,CAAC;AAAA,EACpE;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,qBAAqB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,YAAY,aAAa,IAAI5C,MAAAA,SAAS,KAAK;AAClD,QAAM,aAAaC,MAAAA,OAAO,IAAIC,YAAAA,SAAS,MAAM,CAAC,CAAC,EAAE;AAEjD,QAAM,iBAAiB,eAAe,YAAY,SAAS;AAE3DE,QAAAA,UAAU,MAAM;AACdF,gBAAAA,SAAS,OAAO,YAAY;AAAA,MAC1B,SAAS,aAAa,IAAI;AAAA,MAC1B,UAAU;AAAA,MACV,iBAAiB;AAAA,IAAA,CAClB,EAAE,MAAA;AAAA,EACL,GAAG,CAAC,YAAY,UAAU,CAAC;AAE3B,QAAM,eAAe,MAAM;AACzB2C,gBAAAA,gBAAgB,cAAcA,4BAAgB,QAAQ,aAAa;AACnE,kBAAc,CAAC,UAAU;AAAA,EAC3B;AAEA,QAAM,qBAAqB,MAAM;AAC/B,uDAAkB;AAAA,EACpB;AAEA,QAAM,WAAW,WAAW,YAAY;AAAA,IACtC,YAAY,CAAC,GAAG,CAAC;AAAA,IACjB,aAAa,CAAC,QAAQ,OAAO;AAAA,EAAA,CAC9B;AAED,SACEvC,uCAACC,YAAAA,QAAK,WAEJ,UAAA;AAAA,IAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,yBAEb,UAAA;AAAA,MAAA,cAAc,CAAC,sBACdF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,yFAAwF;AAAA,MAI1GF,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,WAAU;AAAA,UACV,mBAAkB;AAAA,UAClB,oBAAoB;AAAA,UACpB,oBAAoB,EAAE,UAAU,cAAc,CAAC,mBAAA;AAAA,UAE/C,UAAAJ,kCAAAA;AAAAA,YAACG,YAAAA;AAAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,cAAc,CAAC,qBACX,qCACA;AAAA,cAAA;AAAA,cAGL,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,MAID,kBACCH,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,WAAU;AAAA,UACV,mBAAkB;AAAA,UAClB,oBAAoB,aAAa,aAAa;AAAA,UAE9C,gDAACP,YAAAA,SAAS,MAAT,EAAc,OAAO,EAAE,WAAW,CAAC,EAAE,QAAQ,SAAA,CAAU,KACtD,UAAAG,kCAAAA,IAACG,oBAAK,WAAU,yBAAwB,eAAC,EAAA,CAC3C;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GAEJ;AAAA,IAGC,kBAAkB,cACjBH,sCAACE,YAAAA,MAAA,EAAK,WAAU,aACb,UAAA,YAAY,IAAI,CAAA,eACfD,uCAACC,YAAAA,MAAA,EAAyB,WAAU,YAEjC,UAAA;AAAA,MAAA,uBAAuB,WAAW,MACjCF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,4FAA2F;AAAA,MAG7GF,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS,MAAM,yDAAqB,WAAW,IAAI;AAAA,UACnD,WAAU;AAAA,UACV,mBAAkB;AAAA,UAClB,oBAAoB,WAAW;AAAA,UAC/B,oBAAoB;AAAA,YAClB,UAAU,uBAAuB,WAAW;AAAA,UAAA;AAAA,UAG9C,UAAAJ,kCAAAA;AAAAA,YAACG,YAAAA;AAAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,uBAAuB,WAAW,KAC9B,qCACA;AAAA,cAAA;AAAA,cAGL,UAAA,WAAW;AAAA,YAAA;AAAA,UAAA;AAAA,QACd;AAAA,MAAA;AAAA,IACF,KAzBS,WAAW,EA0BtB,CACD,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;ACvJO,MAAM,oBAAsD,CAAC;AAAA,EAClE;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA,UAAU;AAAA,EACV;AACF,MAAM;AACJ,QAAM,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,EAAA;AAGV,QAAM,aAAa,WAAW,UAAa,UAAU;AAErD,SACEF,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,eAAe,OAAO;AAAA,QACtB;AAAA,MAAA;AAAA,MAIF,UAAA;AAAA,QAAAD,kCAAAA,KAACC,YAAAA,MAAA,EAAK,WAAU,6CACd,UAAA;AAAA,UAAAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,wDACb,UAAA,OACH;AAAA,UACC,QACCH,kCAAAA,IAACE,kBAAA,EAAK,WAAU,oCAAoC,UAAA,KAAA,CAAK;AAAA,QAAA,GAE7D;AAAA,QAGAF,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,oDACb,UAAA,OACH;AAAA,QAGC,WAAW,UACVF,uCAACC,YAAAA,MAAA,EAAK,WAAU,oCACd,UAAA;AAAA,UAAAD,kCAAAA;AAAAA,YAACE,YAAAA;AAAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,aACI,uCACA;AAAA,cAAA;AAAA,cAGL,UAAA;AAAA,gBAAA,aAAa,MAAM;AAAA,gBAAI;AAAA,gBAAE,KAAK,IAAI,MAAM;AAAA,gBAAE;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAE7CH,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAU,4CACb,UAAA,aAAA,CACH;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;ACjEO,MAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AAAA,EACR;AAAA,EACA,eAAe;AAAA,EACf;AACF,MAAM;AACJ,QAAM,iBAAiB;AAAA,IACrB,SAAS;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IAAA;AAAA,IAET,SAAS;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IAAA;AAAA,IAET,SAAS;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IAAA;AAAA,IAET,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,IAAA;AAAA,IAET,SAAS;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IAAA;AAAA,IAET,OAAO;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,IAAA;AAAA,EACT;AAGF,QAAM,cAAc;AAAA,IAClB,IAAI,EAAE,OAAO,WAAW,OAAO,UAAA;AAAA,IAC/B,IAAI,EAAE,OAAO,YAAY,OAAO,UAAA;AAAA,IAChC,IAAI,EAAE,OAAO,YAAY,OAAO,YAAA;AAAA,IAChC,IAAI,EAAE,OAAO,YAAY,OAAO,UAAA;AAAA,EAAU;AAG5C,QAAM,eAAe;AAAA,IACnB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAGT,QAAMY,iBAAgB,eAAe,OAAO;AAC5C,QAAMD,cAAa,YAAY,IAAI;AAEnC,MAAI,iBAAiB,UAAU,MAAM;AACnC,WACEb,kCAAAA;AAAAA,MAACC,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,UAAU,YAAY;AAAA,UACtB;AAAA,QAAA;AAAA,QAGF,UAAA;AAAA,UAAAF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAWa,eAAc,OAAQ,UAAA,MAAK;AAAA,iDAC3Cb,YAAAA,MAAA,EACC,UAAA;AAAA,YAAAF,kCAAAA;AAAAA,cAACG,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAW,GAAG,aAAaW,YAAW,OAAOC,eAAc,KAAK;AAAA,gBAE/D,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAEHf,kCAAAA,IAACG,YAAAA,QAAK,WAAW,GAAGW,YAAW,OAAOC,eAAc,KAAK,GACtD,UAAA,MAAA,CACH;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAEA,SACEd,kCAAAA,KAACC,oBAAK,WAAW,GAAG,aAAa,KAAK,GAAG,SAAS,GAC/C,UAAA;AAAA,IAAA,QAAQ,iBAAiB,SACxBF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAW,GAAG,QAAQa,eAAc,KAAK,GAAI,UAAA,KAAA,CAAK;AAAA,IAE1Df,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAW,GAAG,aAAaW,YAAW,OAAOC,eAAc,KAAK,GACnE,UAAA,MAAA,CACH;AAAA,IACAf,kCAAAA,IAACG,YAAAA,QAAK,WAAW,GAAGW,YAAW,OAAOC,eAAc,KAAK,GAAI,UAAA,MAAA,CAAM;AAAA,EAAA,GACrE;AAEJ;AC/EO,MAAM,eAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,eAAe;AAAA,EACf;AACF,MAAM;AACJ,QAAM,cAAc;AAAA,IAClB,IAAI,EAAE,OAAO,WAAW,OAAO,WAAW,KAAK,QAAA;AAAA,IAC/C,IAAI,EAAE,OAAO,aAAa,OAAO,aAAa,KAAK,QAAA;AAAA,IACnD,IAAI,EAAE,OAAO,WAAW,OAAO,WAAW,KAAK,QAAA;AAAA,EAAQ;AAGzD,QAAM,mBAAmB;AAAA,IACvB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,QAAM,eAAe;AAAA,IACnB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,EAAA;AAGX,QAAM,sBAAsB;AAAA,IAC1B,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAGV,QAAM,sBAAsB;AAAA,IAC1B,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,EAAA;AAGX,QAAMD,cAAa,YAAY,IAAI;AAEnC,SACEb,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT,gBAAgB,eAAe,0BAA0B;AAAA,QACzD,gBAAgB,gBAAgB,aAAa,KAAK;AAAA,QAClDY,YAAW;AAAA,QACX,aAAa;AAAA,QACb;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAAd,kCAAAA;AAAAA,UAACG,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW,GAAGW,YAAW,OAAO,oBAAoB,YAAY,CAAC;AAAA,YACjE,OACE,gBAAgB,gBAAgB,eAAe,SAC3C,EAAE,OAAO,iBAAiB,UAAU,EAAA,IACpC;AAAA,YAGL,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAEF,OAAO,UAAU,YAAY,OAAO,UAAU,WAC7Cd,kCAAAA;AAAAA,UAACG,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACTW,YAAW;AAAA,cACX,oBAAoB,YAAY;AAAA,cAChC,gBAAgB,gBAAgB;AAAA,YAAA;AAAA,YAGjC,UAAA;AAAA,UAAA;AAAA,QAAA,0CAGFZ,YAAAA,MAAA,EAAK,WAAW,GAAG,gBAAgB,gBAAgB,QAAQ,GACzD,UAAA,MAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;ACtFO,MAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,cAAc,MAAM;AAE1B,QAAM,iBAAiB;AAAA,IACrB,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,IACV,SAAS;AAAA,EAAA;AAGX,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,IAAI;AAAA,EAAA;AAGN,QAAM,cAAc,YAAY;AAC9B,QAAI,YAAY,CAAC,YAAa;AAG9B,UAAMuC,cACJ,YACA,YAAY,WAAW,MAAM,KAC7B,YAAY,WAAW,SAAS,KAChC,YAAY,WAAW,MAAM;AAE/B,QAAIA,aAAY;AAEd,UAAI;AACF,cAAM,UAAU,MAAMX,oBAAQ,WAAW,WAAW;AACpD,YAAI,SAAS;AACX,gBAAMA,YAAAA,QAAQ,QAAQ,WAAW;AAAA,QACnC,OAAO;AACLY,4BAAM,MAAM,SAAS,uBAAuB;AAAA,QAC9C;AAAA,MACF,QAAQ;AACNA,0BAAM,MAAM,SAAS,qBAAqB;AAAA,MAC5C;AAAA,IACF,OAAO;AAEL,UAAI,YAAY;AACd,mBAAW,WAAW;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAGA,MAAI,CAAC,aAAa;AAChB,WACE1C,kCAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT,eAAe,OAAO;AAAA,UACtB,YAAY,IAAI;AAAA,UAChB,YAAY;AAAA,UACZ;AAAA,QAAA;AAAA,QAGD;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AAGA,QAAM,aACJ,YACA,YAAY,WAAW,MAAM,KAC7B,YAAY,WAAW,SAAS,KAChC,YAAY,WAAW,MAAM;AAE/B,QAAM,iBACJ,cAAc,YAAY,WAAW,aAAa;AAEpD,SACEH,kCAAAA;AAAAA,IAACI,YAAAA;AAAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT;AAAA,MACA,mBAAkB;AAAA,MAClB,oBAAoB,OAAO,aAAa,WAAW,WAAW;AAAA,MAC9D,oBAAoB,EAAE,SAAA;AAAA,MAErB,UAAA,CAAC,EAAE,QAAA,MACFH,kCAAAA;AAAAA,QAACE,YAAAA;AAAAA,QAAA;AAAA,UACC,WAAW;AAAA,YACT,eAAe,cAAc;AAAA,YAC7B,YAAY,IAAI;AAAA,YAChB,WAAW;AAAA,YACX,YAAY;AAAA,YACZ;AAAA,UAAA;AAAA,UAGD,UAAA;AAAA,YAAA;AAAA,YACA,cAAc,mBAAmB,cAAc;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAClD;AAAA,EAAA;AAIR;AA8BO,MAAM,eAA4C,CAAC;AAAA,EACxD;AAAA,EACA,WAAW,CAAA;AAAA,EACX;AAAA,EACA,UAAU;AAAA,EACV;AACF,MAAM;AACJ,QAAM,mBAAmBlF,iBAAM,QAAQ,MAAM;AAC3C,QAAI,CAAC,YAAY,OAAO,aAAa,UAAU;AAC7C,aAAO;AAAA,QACL,OAAO,CAAC,YAAY,EAAE;AAAA,QACtB,OAAO,CAAA;AAAA,MAAC;AAAA,IAEZ;AAEA,QAAI,UAAU;AACd,UAAM0H,SAAyD,CAAA;AAG/D,UAAM,iBAAiB,OAAO,QAAQ,QAAQ,EAAE;AAAA,MAC9C,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE;AAAA,IAAA;AAG7B,QAAI,mBAAmB;AACvB,mBAAe,QAAQ,CAAC,CAAC,MAAM,IAAI,MAAM;AACvC,UAAI,QAAQ,MAAM;AAChB,cAAM,QAAQ,IAAI;AAAA,UAChB,MAAM,KAAK,QAAQ,uBAAuB,MAAM,CAAC;AAAA,UACjD;AAAA,QAAA;AAEF,kBAAU,QAAQ,QAAQ,OAAO,CAAA,UAAS;AACxCA,iBAAM,KAAK,EAAE,MAAM,OAAO,MAAM,OAAO,kBAAkB;AACzD,iBAAO,UAAU,kBAAkB;AAAA,QACrC,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAGD,UAAMC,SAAQ,QAAQ,MAAM,gBAAgB;AAE5C,WAAO,EAAE,OAAAA,QAAO,OAAAD,OAAAA;AAAAA,EAClB,GAAG,CAAC,UAAU,QAAQ,CAAC;AAEvB,QAAM,EAAE,OAAO,MAAA,IAAU;AAEzB,SACE3C,kCAAAA,IAACG,YAAAA,MAAA,EAAK,WAAW,GAAG,oCAAoC,SAAS,GAC9D,UAAA,MAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,UAAM,YAAY,KAAK,MAAM,gBAAgB;AAC7C,QAAI,WAAW;AACb,YAAM,YAAY,SAAS,UAAU,CAAC,GAAG,EAAE;AAC3C,YAAM,OAAO,MAAM,KAAK,CAAA,MAAK,EAAE,UAAU,SAAS;AAClD,UAAI,MAAM;AACR,eACEH,kCAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YAEC,IAAI,KAAK;AAAA,YACT;AAAA,YACA;AAAA,YAEC,UAAA,KAAK;AAAA,UAAA;AAAA,UALD;AAAA,QAAA;AAAA,MAQX;AAAA,IACF;AACA,WAAOA,kCAAAA,IAACG,YAAAA,MAAA,EAAkB,UAAA,KAAA,GAAR,KAAa;AAAA,EACjC,CAAC,EAAA,CACH;AAEJ;ACjMO,MAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB;AACF,MAAM;AACJ,QAAM,cAAc,CAAC,OAAe;AAClC,QAAI,gBAAgB;AAClB,qBAAe,EAAE;AAAA,IACnB;AACA,QAAI,gBAAgB;AAClB,qBAAe,EAAE;AAAA,IACnB;AAAA,EACF;AAGA,QAAM,gBAAgB,CAAC,SAA2B,QAAgB,MAAM;;AACtE,UAAM,WAAW,aAAa,QAAQ;AACtC,UAAM,mBACJ,aAAQ,gBAAR,mBAAqB,KAAK,SAAO,aAAa,IAAI,QAAO;AAE3D,kDACGD,kBAAA,EACC,UAAA;AAAA,MAAAF,kCAAAA;AAAAA,QAACI,YAAAA;AAAAA,QAAA;AAAA,UACC,SAAS,MAAM,YAAY,QAAQ,EAAE;AAAA,UACrC,WAAW;AAAA,YACT;AAAA,YACA,WACI,mCACA;AAAA,UAAA;AAAA,UAEN,OAAO,EAAE,aAAa,QAAQ,KAAK,GAAA;AAAA,UACnC,mBAAkB;AAAA,UAClB,oBAAoB,QAAQ;AAAA,UAC5B,oBAAoB,EAAE,UAAU,SAAA;AAAA,UAEhC,UAAAJ,kCAAAA;AAAAA,YAACG,YAAAA;AAAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,UAAU,IAAI,gBAAgB;AAAA,gBAC9B,WACI,qCACA,iBACE,qCACA;AAAA,cAAA;AAAA,cAGP,UAAA,QAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,QACX;AAAA,MAAA;AAAA,MAID,mBACC,QAAQ,eACR,QAAQ,YAAY,SAAS,KAC3BH,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,wDACb,UAAA,QAAQ,YAAY;AAAA,QAAI,CAAA,eACvB,cAAc,YAAY,QAAQ,CAAC;AAAA,MAAA,EACrC,CACF;AAAA,IAAA,EAAA,GArCK,QAAQ,EAuCnB;AAAA,EAEJ;AAEA,SACEF,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAW,GAAG,SAAS,SAAS,GACnC,UAAA,SAAS,IAAI,CAAA,YAAW,cAAc,SAAS,CAAC,CAAC,GACpD;AAEJ;AA0CO,MAAM,qBAAwD,CAAC;AAAA,EACpE;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AACF,MAAM;AACJ,QAAM,gBAAgBjF,iBAAM,OAAmB,IAAI;AACnD,QAAM,mBAAmBA,iBAAM;AAAA,wBACzB,IAAA;AAAA,EAAI;AAIV,QAAM,eAAe,CAAC,UAAmD;AACvE,UAAM,IAAI,MAAM,YAAY,cAAc;AAG1C,UAAM,YAAY,CAAC,SAAuC;AACxD,aAAO,KAAK,QAAQ,CAAA,YAAW;AAAA,QAC7B,QAAQ;AAAA,QACR,GAAI,QAAQ,cAAc,UAAU,QAAQ,WAAW,IAAI,CAAA;AAAA,MAAC,CAC7D;AAAA,IACH;AAEA,UAAM,SAAS,UAAU,QAAQ;AACjC,QAAI,WAAW,OAAO,CAAC;AAEvB,eAAW,MAAM,QAAQ;AACvB,YAAM,WAAW,iBAAiB,QAAQ,IAAI,EAAE;AAChD,UAAI,YAAY,SAAS,KAAK,IAAI,QAAQ;AACxC,mBAAW;AAAA,MACb;AAAA,IACF;AAEA,QAAI,gBAAgB;AAClB,qBAAe,QAAQ;AAAA,IACzB;AAAA,EACF;AAGA,QAAM,kBAAkBA,iBAAM;AAAA,IAC5B,CAAC,OAAe;AACd,YAAM,WAAW,iBAAiB,QAAQ,IAAI,EAAE;AAChD,UAAI,YAAY,cAAc,SAAS;AACrC,sBAAc,QAAQ,SAAS;AAAA,UAC7B,GAAG,KAAK,IAAI,GAAG,SAAS,IAAI,SAAS,CAAC;AAAA,UACtC,UAAU;AAAA,QAAA,CACX;AAAA,MACH;AAAA,IACF;AAAA,IACA,CAAC,MAAM;AAAA,EAAA;AAIT,QAAM,eAAeA,iBAAM;AAAA,IACzB,OAAO;AAAA,MACL,iBAAiB,CAAC,IAAY,GAAW,WAAmB;AAC1D,yBAAiB,QAAQ,IAAI,IAAI,EAAE,IAAI,GAAG,QAAQ;AAAA,MACpD;AAAA,MACA,mBAAmB,CAAC,OAAe;AACjC,yBAAiB,QAAQ,OAAO,EAAE;AAAA,MACpC;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,CAAC,eAAe;AAAA,EAAA;AAGlB,SACE+E,kCAAAA,IAAC,iBAAiB,UAAjB,EAA0B,OAAO,cAChC,UAAAA,kCAAAA;AAAAA,IAAC0B,YAAAA;AAAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,UAAU;AAAA,MACV,qBAAqB;AAAA,MACrB,WAAW,GAAG,UAAU,SAAS;AAAA,MAEhC;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;AASA,MAAM,mBAAmBzG,iBAAM,cAA2C,IAAI;AAEvE,MAAM,eAAe,MAAM;AAChC,QAAM,UAAUA,iBAAM,WAAW,gBAAgB;AACjD,SAAO;AACT;AAuBO,MAAM,0BAET,CAAC,EAAE,IAAI,UAAU,gBAAgB;AACnC,QAAM,UAAUA,iBAAM,WAAW,gBAAgB;AAEjD,QAAM,eAAeA,iBAAM;AAAA,IACzB,CAAC,UAAsE;AACrE,UAAI,SAAS;AACX,cAAM,EAAE,GAAG,OAAA,IAAW,MAAM,YAAY;AACxC,gBAAQ,gBAAgB,IAAI,GAAG,MAAM;AAAA,MACvC;AAAA,IACF;AAAA,IACA,CAAC,SAAS,EAAE;AAAA,EAAA;AAGdA,mBAAM,UAAU,MAAM;AACpB,WAAO,MAAM;AACX,UAAI,SAAS;AACX,gBAAQ,kBAAkB,EAAE;AAAA,MAC9B;AAAA,IACF;AAAA,EACF,GAAG,CAAC,SAAS,EAAE,CAAC;AAEhB,SACE+E,kCAAAA,IAACE,YAAAA,MAAA,EAAK,UAAU,cAAc,WAC3B,UACH;AAEJ;ACnQO,MAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,OAAO;AAAA,EACP;AAAA,EACA,cAAc;AAAA,EACd,eAAe;AAAA,EACf,cAAc;AAAA,EACd,YAAY;AAAA,EACZ;AACF,MAAM;AACJ,QAAM,CAAC,eAAe,gBAAgB,IAAIjF,iBAAM,SAAS,YAAY;AACrE,QAAM,CAAC,YAAY,aAAa,IAAIA,iBAAM,SAAS,KAAK;AACxD,QAAM,CAAC,eAAe,gBAAgB,IAAIA,iBAAM,SAAS;AAAA,IACvD,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA,CACT;AAED,QAAM,QAAQ,oBAAoB,SAAY,kBAAkB;AAChE,QAAM,eAAe,cAAc;AAGnC,QAAM,eAAe,CAAC,UAA6B;AACjD,UAAM,EAAE,OAAO,OAAA,IAAW,MAAM,YAAY;AAC5C,qBAAiB,EAAE,OAAO,QAAQ;AAAA,EACpC;AAGA,QAAM,iBAAiBA,iBAAM;AAAA,IAC3B,CAAC,iBAAmD;AAClD,YAAM4H,aAAY,eACd,cAAc,QACd,cAAc;AAClB,UAAIA,eAAc,EAAG,QAAO;AAE5B,YAAM,QAAQ,eAAe,aAAa,KAAK,aAAa;AAC5D,YAAM,kBAAkB,QAAQA,aAAY;AAC5C,UAAI,WAAW,kBAAkBA;AAGjC,iBAAW,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,QAAQ,CAAC;AAG5C,YAAM,eAAe,cAAcA;AACnC,YAAM,eAAe,IAAI,eAAeA;AAExC,iBAAW,KAAK,IAAI,cAAc,KAAK,IAAI,cAAc,QAAQ,CAAC;AAElE,aAAO;AAAA,IACT;AAAA,IACA,CAAC,cAAc,eAAe,OAAO,aAAa,YAAY;AAAA,EAAA;AAIhE,QAAM,eAAe5H,iBAAM;AAAA,IACzB,MACE4G,YAAAA,aAAa,OAAO;AAAA,MAClB,8BAA8B,MAAM;AAAA,MACpC,6BAA6B,MAAM;AAAA,MACnC,qBAAqB,MAAM;AACzB,sBAAc,IAAI;AAAA,MACpB;AAAA,MACA,oBAAoB,CAClB,QACA,iBACG;AACH,cAAM,WAAW,eAAe,YAAY;AAE5C,YAAI,oBAAoB,UAAa,eAAe;AAClD,wBAAc,QAAQ;AAAA,QACxB,OAAO;AACL,2BAAiB,QAAQ;AAAA,QAC3B;AAAA,MACF;AAAA,MACA,uBAAuB,MAAM;AAC3B,sBAAc,KAAK;AAAA,MACrB;AAAA,MACA,yBAAyB,MAAM;AAC7B,sBAAc,KAAK;AAAA,MACrB;AAAA,IAAA,CACD;AAAA,IACH,CAAC,WAAW,iBAAiB,eAAe,cAAc;AAAA,EAAA;AAI5D,QAAM,YAAY,eAAe,cAAc,QAAQ,cAAc;AACrE,QAAM,WAAW,KAAK,IAAI,GAAG,QAAQ,YAAY,cAAc,CAAC;AAChE,QAAM,YAAY,KAAK,IAAI,IAAI,IAAI,SAAS,YAAY,cAAc,CAAC;AAEvE,SACE5B,kCAAAA;AAAAA,IAACC,YAAAA;AAAAA,IAAA;AAAA,MACC,UAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA,eAAe,aAAa;AAAA,QAC5B;AAAA,MAAA;AAAA,MAIF,UAAA;AAAA,QAAAF,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,CAAC,eAAe,UAAU,QAAQ,GAAG;AAAA,YAAA;AAAA,YAGtC,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAIHF,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YACE,GAAI,YAAY,aAAa,cAAc,CAAA;AAAA,YAC5C,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA,cAAc;AAAA,cACd,aAAa;AAAA,YAAA;AAAA,YAEf,OAAO;AAAA,cACL,CAAC,eAAe,UAAU,QAAQ,GAAG;AAAA,YAAA;AAAA,YAItC,UAAA,aACCF,kCAAAA;AAAAA,cAACE,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA,cAAc;AAAA,gBAAA;AAAA,gBAEhB,OAAO;AAAA,kBACL,CAAC,eAAe,UAAU,QAAQ,GAAG;AAAA,kBACrC,CAAC,eAAe,WAAW,OAAO,GAAG;AAAA,gBAAA;AAAA,cACvC;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,QAKJF,kCAAAA;AAAAA,UAACE,YAAAA;AAAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,CAAC,eAAe,UAAU,QAAQ,GAAG;AAAA,YAAA;AAAA,YAGtC,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAGN;AC5HO,SAAS,YAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA,wBAAwB;AAAA,EACxB,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AACF,GAAwB;AAEtB,QAAM,oBAAoBjF,iBAAM;AAAA,IAC9B,CAAC,EAAE,MAAM,YAAmC;AAC1C,aAAO+E,kCAAAA,IAACE,YAAAA,MAAA,EAAM,UAAA,WAAW,MAAM,KAAK,GAAE;AAAA,IACxC;AAAA,IACA,CAAC,UAAU;AAAA,EAAA;AAIb,QAAM,gBAAgBjF,iBAAM,YAAY,MAAM;AAC5C,QAAI,CAAC,cAAe,QAAO;AAC3B,WACE+E,kCAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT,aAAa,gBAAgB;AAAA,UAC7B;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAGN,GAAG,CAAC,eAAe,YAAY,kBAAkB,CAAC;AAGlD,QAAM,YAAYjF,iBAAM,YAAY,MAAM;AACxC,QAAI,QAAS,QAAO;AACpB,QAAI,cAAc;AAChB,aACE+E,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,0CACb,UAAA,cACH;AAAA,IAEJ;AACA,WAAO;AAAA,EACT,GAAG,CAAC,SAAS,YAAY,CAAC;AAG1B,QAAM,gBAAgBjF,iBAAM,QAAQ,MAAM;AACxC,QAAI,CAAC,WAAY,QAAO;AACxB,WAAO,CAAC,OAA+B,WAAmB;AAAA,MACxD,QAAQ;AAAA,MACR,QAAQ,aAAa;AAAA,MACrB;AAAA,IAAA;AAAA,EAEJ,GAAG,CAAC,UAAU,CAAC;AAEf,SACE+E,kCAAAA;AAAAA,IAACE,YAAAA;AAAAA,IAAA;AAAA,MACC,WAAW,GAAG,UAAU,SAAS;AAAA,MACjC,OAAO,CAAC,SAAS,EAAE,OAAA,IAAW,QAAW,KAAK;AAAA,MAE9C,UAAAF,kCAAAA;AAAAA,QAACmB,YAAAA;AAAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,YAAY;AAAA,UACZ;AAAA,UACA;AAAA,UACA,8BAA8B,CAAC;AAAA,UAC/B,gCAAgC;AAAA,UAChC,wBAAwB,gBAAgB,gBAAgB;AAAA,UACxD,oBAAoB;AAAA,UACpB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,YAAY,WAAW,IAAI;AAAA,UAC3B,qBAAqB,WAAW;AAAA,UAChC,oBAAoB,WAAW;AAAA,UAC/B,uBAAuB;AAAA,UACvB,uBAAuB,mBAAmB,SAAY;AAAA,QAAA;AAAA,MAAA;AAAA,IACxD;AAAA,EAAA;AAGN;AA6CO,SAAS,YAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AACF,GAAwB;AAEtB,QAAM,oBAAoBlG,iBAAM;AAAA,IAC9B,CAAC,EAAE,MAAM,YAAmC;AAC1C,aACE+E,kCAAAA,IAACE,YAAAA,MAAA,EAAK,OAAO,EAAE,MAAM,GAAG,QAAQ,MAAM,EAAA,GACnC,UAAA,WAAW,MAAM,KAAK,GACzB;AAAA,IAEJ;AAAA,IACA,CAAC,YAAY,GAAG;AAAA,EAAA;AAIlB,QAAM,YAAYjF,iBAAM,YAAY,MAAM;AACxC,QAAI,QAAS,QAAO;AACpB,QAAI,cAAc;AAChB,aACE+E,kCAAAA,IAACE,YAAAA,MAAA,EAAK,WAAU,0CACb,UAAA,cACH;AAAA,IAEJ;AACA,WAAO;AAAA,EACT,GAAG,CAAC,SAAS,YAAY,CAAC;AAG1B,QAAM,gBAAgBjF,iBAAM,QAAQ,MAAM;AACxC,QAAI,CAAC,WAAY,QAAO;AACxB,WAAO,CAAC,OAA+B,WAAmB;AAAA,MACxD,QAAQ,aAAa;AAAA,MACrB,SAAS,aAAa,OAAO,KAAK,MAAM,QAAQ,UAAU;AAAA,MAC1D;AAAA,IAAA;AAAA,EAEJ,GAAG,CAAC,YAAY,KAAK,UAAU,CAAC;AAEhC,+CACGiF,YAAAA,MAAA,EAAK,WAAW,GAAG,UAAU,SAAS,GACrC,UAAAF,kCAAAA;AAAAA,IAACmB,YAAAA;AAAAA,IAAA;AAAA,MACC,MAAM;AAAA,MACN,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA,8BAA8B;AAAA,MAC9B,oBAAoB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA,uBAAuB;AAAA,MACvB;AAAA,MACA,uBAAuB,EAAE,SAAS,MAAM,EAAA;AAAA,MACxC,uBAAuB;AAAA,IAAA;AAAA,EAAA,GAE3B;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32]}
|