fictoan-react 1.11.14 → 2.0.0-alpha.1
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/README.md +0 -2
- package/dist/Accordion-ZNSXFjKa.js +4647 -0
- package/dist/Accordion-ZNSXFjKa.js.map +1 -0
- package/dist/components/Accordion/Accordion.d.ts +1 -1
- package/dist/components/Accordion/Accordion.d.ts.map +1 -1
- package/dist/components/Badge/Badge.d.ts +4 -3
- package/dist/components/Badge/Badge.d.ts.map +1 -1
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
- package/dist/components/Button/Button.d.ts +0 -1
- package/dist/components/Button/Button.d.ts.map +1 -1
- package/dist/components/ButtonGroup/ButtonGroup.d.ts +12 -0
- package/dist/components/ButtonGroup/ButtonGroup.d.ts.map +1 -0
- package/dist/components/ButtonGroup/index.d.ts +2 -0
- package/dist/components/ButtonGroup/index.d.ts.map +1 -0
- package/dist/components/Callout/Callout.d.ts.map +1 -1
- package/dist/components/Card/Card.d.ts.map +1 -1
- package/dist/components/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/components/Divider/Divider.d.ts.map +1 -1
- package/dist/components/Drawer/Drawer.d.ts +3 -5
- package/dist/components/Drawer/Drawer.d.ts.map +1 -1
- package/dist/components/Drawer/index.d.ts +1 -1
- package/dist/components/Drawer/index.d.ts.map +1 -1
- package/dist/components/Element/Element.d.ts.map +1 -1
- package/dist/components/Element/constants.d.ts +8 -5
- package/dist/components/Element/constants.d.ts.map +1 -1
- package/dist/components/Form/Checkbox/Checkbox.d.ts +20 -7
- package/dist/components/Form/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/Form/Checkbox/CheckboxAndSwitchGroup.d.ts +25 -10
- package/dist/components/Form/Checkbox/CheckboxAndSwitchGroup.d.ts.map +1 -1
- package/dist/components/Form/Checkbox/Switch.d.ts +20 -8
- package/dist/components/Form/Checkbox/Switch.d.ts.map +1 -1
- package/dist/components/Form/FileUpload/FileUpload.d.ts +23 -4
- package/dist/components/Form/FileUpload/FileUpload.d.ts.map +1 -1
- package/dist/components/Form/Form/Form.d.ts +1 -1
- package/dist/components/Form/Form/Form.d.ts.map +1 -1
- package/dist/components/Form/Form/FormGenerator.d.ts +8 -2
- package/dist/components/Form/Form/FormGenerator.d.ts.map +1 -1
- package/dist/components/Form/FormItem/FormItem.d.ts +11 -2
- package/dist/components/Form/FormItem/FormItem.d.ts.map +1 -1
- package/dist/components/Form/FormItemGroup/FormItemGroup.d.ts.map +1 -1
- package/dist/components/Form/InputField/InputField.d.ts +31 -12
- package/dist/components/Form/InputField/InputField.d.ts.map +1 -1
- package/dist/components/Form/InputLabel/InputLabel.d.ts.map +1 -1
- package/dist/components/Form/ListBox/ListBox.d.ts.map +1 -1
- package/dist/components/Form/ListBox/constants.d.ts +5 -8
- package/dist/components/Form/ListBox/constants.d.ts.map +1 -1
- package/dist/components/Form/RadioButton/RadioButton.d.ts +8 -2
- package/dist/components/Form/RadioButton/RadioButton.d.ts.map +1 -1
- package/dist/components/Form/RadioButton/RadioGroup.d.ts.map +1 -1
- package/dist/components/Form/RadioButton/RadioTabGroup.d.ts +1 -2
- package/dist/components/Form/RadioButton/RadioTabGroup.d.ts.map +1 -1
- package/dist/components/Form/RadioButton/constants.d.ts +18 -5
- package/dist/components/Form/RadioButton/constants.d.ts.map +1 -1
- package/dist/components/Form/Range/Range.d.ts +24 -4
- package/dist/components/Form/Range/Range.d.ts.map +1 -1
- package/dist/components/Form/Range/index.d.ts +1 -1
- package/dist/components/Form/Range/index.d.ts.map +1 -1
- package/dist/components/Form/Select/Select.d.ts.map +1 -1
- package/dist/components/Form/TextArea/TextArea.d.ts +22 -5
- package/dist/components/Form/TextArea/TextArea.d.ts.map +1 -1
- package/dist/components/Form/index.d.ts +1 -1
- package/dist/components/Form/index.d.ts.map +1 -1
- package/dist/components/Meter/Meter.d.ts +0 -2
- package/dist/components/Meter/Meter.d.ts.map +1 -1
- package/dist/components/Modal/Modal.d.ts +2 -3
- package/dist/components/Modal/Modal.d.ts.map +1 -1
- package/dist/components/Modal/index.d.ts +1 -1
- package/dist/components/Modal/index.d.ts.map +1 -1
- package/dist/components/Notification/NotificationItem/NotificationItem.d.ts.map +1 -1
- package/dist/components/Notification/NotificationsWrapper/NotificationsWrapper.d.ts.map +1 -1
- package/dist/components/OptionCard/OptionCard.d.ts.map +1 -1
- package/dist/components/Pagination/Pagination.d.ts.map +1 -1
- package/dist/components/Portion/Portion.d.ts.map +1 -1
- package/dist/components/Portion/index.d.ts +1 -0
- package/dist/components/Portion/index.d.ts.map +1 -1
- package/dist/components/ProgressBar/ProgressBar.d.ts +8 -3
- package/dist/components/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/components/Row/Row.d.ts +1 -0
- package/dist/components/Row/Row.d.ts.map +1 -1
- package/dist/components/Sidebar/ContentWrapper/ContentWrapper.d.ts.map +1 -1
- package/dist/components/Sidebar/SidebarFooter/SidebarFooter.d.ts.map +1 -1
- package/dist/components/Sidebar/SidebarHeader/SidebarHeader.d.ts.map +1 -1
- package/dist/components/Sidebar/SidebarItem/SidebarItem.d.ts.map +1 -1
- package/dist/components/Sidebar/SidebarWrapper/SidebarWrapper.d.ts.map +1 -1
- package/dist/components/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/components/Spinner/Spinner.d.ts.map +1 -1
- package/dist/components/Tabs/Tabs.d.ts +1 -1
- package/dist/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
- package/dist/components/Toast/ToastItem/ToastItem.d.ts.map +1 -1
- package/dist/components/Toast/ToastsWrapper/ToastsWrapper.d.ts.map +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +9 -8
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/Typography/Heading.d.ts.map +1 -1
- package/dist/components/Typography/Text.d.ts +1 -1
- package/dist/components/Typography/Text.d.ts.map +1 -1
- package/dist/components/index.d.ts +3 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +75 -77
- package/dist/components/index.js.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +129 -111
- package/dist/index.js.map +1 -0
- package/dist/scripts/generateColourClasses.d.ts +2 -0
- package/dist/scripts/generateColourClasses.d.ts.map +1 -0
- package/dist/styles/colours.d.ts +7 -0
- package/dist/styles/colours.d.ts.map +1 -0
- package/dist/utils/propSeparation.d.ts +22 -0
- package/dist/utils/propSeparation.d.ts.map +1 -0
- package/package.json +36 -37
- package/dist/Modal-eaK0YswF.js +0 -6089
- package/dist/components/Form/BaseInputComponent/BaseInputComponent.d.ts +0 -8
- package/dist/components/Form/BaseInputComponent/BaseInputComponent.d.ts.map +0 -1
- package/dist/components/Form/BaseInputComponent/constants.d.ts +0 -51
- package/dist/components/Form/BaseInputComponent/constants.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion-ZNSXFjKa.js","sources":["../../../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js","../src/utils/classNames.ts","../src/components/Element/Element.tsx","../src/components/Element/Tags.tsx","../src/components/Badge/Badge.tsx","../src/hooks/UseClickOutside.ts","../src/components/Drawer/Drawer.tsx","../src/components/Button/Button.tsx","../src/components/ButtonGroup/ButtonGroup.tsx","../src/components/Breadcrumbs/Breadcrumbs.tsx","../src/components/Callout/Callout.tsx","../src/components/Card/Card.tsx","../src/components/CodeBlock/CodeBlock.tsx","../src/components/Divider/Divider.tsx","../src/components/Form/InputLabel/InputLabel.tsx","../src/components/Typography/Text.tsx","../src/components/Form/FormItem/FormItem.tsx","../src/components/Form/Checkbox/Checkbox.tsx","../src/components/Form/Checkbox/Switch.tsx","../src/components/Form/Checkbox/CheckboxAndSwitchGroup.tsx","../src/components/Form/FileUpload/FileUpload.tsx","../src/components/Form/InputField/InputField.tsx","../src/components/Portion/Portion.tsx","../src/components/Form/RadioButton/RadioButton.tsx","../src/components/Form/RadioButton/RadioGroup.tsx","../src/components/Row/Row.tsx","../src/components/Form/Select/Select.tsx","../src/components/Form/TextArea/TextArea.tsx","../src/components/Form/Form/FormGenerator.tsx","../src/components/Form/Form/Form.tsx","../src/components/Form/FormItemGroup/FormItemGroup.tsx","../src/components/Form/ListBox/listBoxUtils.ts","../src/components/Form/ListBox/ListBox.tsx","../src/components/Form/PinInputField/PinInputField.tsx","../src/components/Form/RadioButton/RadioTabGroup.tsx","../src/components/Form/Range/Range.tsx","../src/components/Meter/Meter.tsx","../src/components/Modal/Modal.tsx","../src/components/Notification/NotificationsWrapper/NotificationsWrapper.tsx","../src/components/Notification/NotificationItem/NotificationItem.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Pagination/usePagination.ts","../src/components/Pagination/Pagination.tsx","../src/components/ProgressBar/ProgressBar.tsx","../src/components/OptionCard/OptionCard.tsx","../src/components/Sidebar/SidebarWrapper/SidebarWrapper.tsx","../src/components/Sidebar/ContentWrapper/ContentWrapper.tsx","../src/components/Sidebar/SidebarHeader/SidebarHeader.tsx","../src/components/Sidebar/SidebarItem/SidebarItem.tsx","../src/components/Sidebar/SidebarFooter/SidebarFooter.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Table/Table.tsx","../src/components/Tabs/Tabs.tsx","../src/components/ThemeProvider/ThemeProvider.tsx","../src/components/Toast/ToastsWrapper/ToastsWrapper.tsx","../src/components/Toast/ToastItem/ToastItem.tsx","../../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/client.js","../src/components/Tooltip/Tooltip.tsx","../src/components/Typography/Heading.tsx","../src/components/Accordion/Accordion.tsx"],"sourcesContent":["/**\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","export const createClassName = (classNames: any[]): string => {\n return classNames.filter((item) => !!item).join(\" \");\n};\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// UTILS ===============================================================================================================\nimport { createClassName } from \"$utils/classNames\";\n\n// OTHER ===============================================================================================================\nimport { ElementProps } from \"./constants\";\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Element = React.forwardRef(\n <K extends {}>(\n {\n as : Component = \"div\",\n role,\n ariaLabel,\n tabIndex,\n onKeyDown,\n ...props\n }: ElementProps<K> & {\n role ? : string;\n ariaLabel ? : string;\n tabIndex ? : number;\n onKeyDown ? : (event: React.KeyboardEvent) => void;\n }, ref: React.LegacyRef<HTMLElement>\n ) => {\n const {\n classNames = [],\n bgColor,\n bgColour,\n bgOpacity,\n borderColor,\n borderColour,\n borderOpacity,\n className,\n columns,\n fillColor,\n fillColour,\n gap,\n hideOnDesktop,\n hideOnMobile,\n hideOnTabletLandscape,\n hideOnTabletPortrait,\n horizontalMargin,\n horizontalPadding,\n horizontallyCenterThis,\n horizontallyCentreThis,\n isFullHeight,\n isFullWidth,\n layoutAsFlexbox,\n layoutAsGrid,\n stackVertically,\n stackHorizontally,\n marginLeft,\n marginBottom,\n margin,\n marginRight,\n marginTop,\n opacity,\n paddingBottom,\n paddingLeft,\n padding,\n paddingRight,\n paddingTop,\n pushItemsToEnds,\n shadow,\n shape,\n showOnlyOnDesktop,\n showOnlyOnMobile,\n showOnlyOnTabletLandscape,\n showOnlyOnTabletPortrait,\n size,\n strokeColor,\n strokeColour,\n textColor,\n textColour,\n verticalMargin,\n verticalPadding,\n verticallyCenterItems,\n verticallyCentreItems,\n weight,\n style,\n ...minimalProps\n } = props;\n\n const {className : _, classNames : __, ...sanitizedProps} = props;\n\n // Build style object with opacity CSS custom properties\n const computedStyle = {\n ...style,\n ...(bgOpacity && { \"--bg-opacity\": Number(bgOpacity) / 100 }),\n ...(borderOpacity && { \"--border-opacity\": Number(borderOpacity) / 100 }),\n } as React.CSSProperties;\n\n return (\n <Component\n ref={ref}\n role={role}\n aria-label={ariaLabel}\n tabIndex={tabIndex}\n onKeyDown={onKeyDown}\n {...minimalProps}\n style={Object.keys(computedStyle).length > 0 ? computedStyle : undefined}\n className={createClassName(\n [\n className,\n bgColor && `bg-${bgColor}`,\n bgColour && `bg-${bgColour}`,\n borderColor && `border-${borderColor}`,\n borderColour && `border-${borderColour}`,\n fillColor && `fill-${fillColor}`,\n fillColour && `fill-${fillColour}`,\n hideOnDesktop && \"hide-on-desktop\",\n hideOnMobile && \"hide-on-mobile\",\n hideOnTabletLandscape && \"hide-on-tablet-landscape\",\n hideOnTabletPortrait && \"hide-on-tablet-portrait\",\n horizontalMargin && `margin-right-${horizontalMargin} margin-left-${horizontalMargin}`,\n horizontalPadding && `padding-right-${horizontalPadding} padding-left-${horizontalPadding}`,\n horizontallyCenterThis && \"horizontally-centre-this\",\n horizontallyCentreThis && \"horizontally-centre-this\",\n isFullHeight && \"full-height\",\n isFullWidth && \"full-width\",\n layoutAsFlexbox && \"layout-flexbox\",\n layoutAsGrid && \"layout-grid\",\n stackVertically && \"stack-vertically\",\n stackHorizontally && \"stack-horizontally\",\n gap && `gap-${gap}`,\n marginLeft && `margin-left-${marginLeft}`,\n marginBottom && `margin-bottom-${marginBottom}`,\n margin && `margin-all-${margin}`,\n marginRight && `margin-right-${marginRight}`,\n marginTop && `margin-top-${marginTop}`,\n opacity && `opacity-${opacity}`,\n paddingBottom && `padding-bottom-${paddingBottom}`,\n paddingLeft && `padding-left-${paddingLeft}`,\n padding && `padding-all-${padding}`,\n paddingRight && `padding-right-${paddingRight}`,\n paddingTop && `padding-top-${paddingTop}`,\n pushItemsToEnds && \"push-to-ends\",\n shadow && `shadow-${shadow}`,\n shape && `shape-${shape}`,\n showOnlyOnDesktop && \"show-only-on-desktop\",\n showOnlyOnMobile && \"show-only-on-mobile\",\n showOnlyOnTabletLandscape && \"show-only-on-tablet-landscape\",\n showOnlyOnTabletPortrait && \"show-only-on-tablet-portrait\",\n size && `size-${size}`,\n strokeColor && `stroke-${strokeColor}`,\n strokeColour && `stroke-${strokeColour}`,\n textColor && `text-${textColor}`,\n textColour && `text-${textColour}`,\n verticalMargin && `margin-top-${verticalMargin} margin-bottom-${verticalMargin}`,\n verticalPadding && `padding-top-${verticalPadding} padding-bottom-${verticalPadding}`,\n verticallyCenterItems && \"vertically-centre-items\",\n verticallyCentreItems && \"vertically-centre-items\",\n weight && `weight-${weight}`,\n ].concat(classNames),\n )}\n />\n );\n },\n) as <K extends {}>(props : ElementProps<K> & { ref? : React.LegacyRef<HTMLElement> }) => React.ReactElement;\n(Element as any).displayName = \"Element\";\n","import React from \"react\";\nimport { Element } from \"./Element\";\nimport { ElementProps } from \"./constants\";\n\ninterface HyperlinkCustomProps {\n href : string;\n target ? : \"_blank\" | \"_self\" | \"_parent\" | \"_top\";\n rel ? : string;\n isExternal ? : boolean;\n}\n\n// Helper type for components that might have custom props\ntype CustomProps<T extends React.ElementType, P = {}> = ElementProps<{}> &\n React.HTMLAttributes<HTMLElement> & P;\n\nconst createComponentWithElement = <T extends React.ElementType, P = {}>(\n tagName: T,\n defaultProps?: Partial<P>\n) => {\n return React.forwardRef<HTMLElement, CustomProps<T, P>>(\n (props, ref) => {\n // Merge default props with provided props\n const finalProps = { ...defaultProps, ...props };\n\n // Handle external links for Hyperlink component\n if (tagName === \"a\" && \"external\" in finalProps) {\n const { external, ...restProps } = finalProps;\n if (external) {\n finalProps.target = \"_blank\";\n finalProps.rel = \"noopener noreferrer\";\n }\n }\n\n return <Element as={tagName} ref={ref} {...finalProps} />;\n }\n );\n};\n\nexport const Article = createComponentWithElement(\"article\");\nexport const Aside = createComponentWithElement(\"aside\");\nexport const Body = createComponentWithElement(\"body\");\nexport const Div = createComponentWithElement(\"div\");\nexport const Footer = createComponentWithElement(\"footer\");\nexport const Header = createComponentWithElement(\"header\");\nexport const Main = createComponentWithElement(\"main\");\nexport const Nav = createComponentWithElement(\"nav\");\nexport const Section = createComponentWithElement(\"section\");\nexport const Span = createComponentWithElement(\"span\");\nexport const Hyperlink = createComponentWithElement<\"a\", HyperlinkCustomProps>(\"a\", {\n rel: \"noopener noreferrer\" // Default props for Hyperlink\n});\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps, ShapeTypes, SpacingTypes } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./badge.css\";\n\n// TYPES ===============================================================================================================\nexport type BadgeActionIconType = \"cross\" | \"tick\" | \"plus\" | \"minus\";\n\nexport interface BadgeCustomProps {\n size ? : SpacingTypes;\n shape ? : ShapeTypes;\n actionIcon ? : BadgeActionIconType;\n onActionClick ? : (event: React.MouseEvent<HTMLButtonElement>) => void;\n actionAriaLabel ? : string;\n}\n\nexport type BadgeElementType = HTMLDivElement;\nexport type BadgeProps = Omit<CommonAndHTMLProps<BadgeElementType>, keyof BadgeCustomProps> & BadgeCustomProps;\n\n// ICONS ///////////////////////////////////////////////////////////////////////////////////////////////////////////////\nconst ActionIcons: Record<BadgeActionIconType, React.ReactNode> = {\n cross: (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n ),\n tick: (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M5 12l5 5L20 7\" />\n </svg>\n ),\n plus: (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M12 5v14M5 12h14\" />\n </svg>\n ),\n minus: (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M5 12h14\" />\n </svg>\n ),\n};\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Badge = React.forwardRef(\n ({\n children,\n size = \"medium\",\n shape,\n actionIcon,\n onActionClick,\n actionAriaLabel,\n ...props\n }: BadgeProps, ref: React.Ref<BadgeElementType>) => {\n let classNames = [];\n\n if (size) {\n classNames.push(`size-${size}`);\n }\n\n if (shape) {\n classNames.push(`shape-${shape}`);\n }\n\n const handleActionClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n onActionClick?.(e);\n };\n\n const hasAction = Boolean(actionIcon);\n\n return (\n <Element<BadgeElementType>\n data-badge\n data-has-action={hasAction || undefined}\n ref={ref}\n classNames={classNames}\n role=\"status\"\n aria-label={(typeof children === \"string\" ? children : undefined)}\n {...props}\n >\n {children}\n\n {hasAction && (\n <button\n type=\"button\"\n className=\"badge-action-button\"\n onClick={handleActionClick}\n aria-label={actionAriaLabel}\n >\n {ActionIcons[actionIcon!]}\n </button>\n )}\n </Element>\n );\n },\n);\nBadge.displayName = \"Badge\";\n","import { RefObject, useCallback, useEffect } from \"react\";\n\nexport const useClickOutside = <T extends HTMLElement = HTMLElement>(\n ref : RefObject<T>, handler : (e : Event) => void) => {\n const memoizedHandler = useCallback(handler, [handler]);\n\n useEffect(() => {\n const listener = (event : Event) => {\n // Skip processing if ref doesn't exist or handler is a no-op function\n if (!ref.current || typeof memoizedHandler !== \"function\") {\n return;\n }\n\n // Only call handler if click is outside the referenced element\n if (!ref.current.contains(event.target as Node)) {\n memoizedHandler(event);\n }\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [ref, memoizedHandler]);\n};\n","// REACT CORE ==========================================================================================================\nimport React, { useEffect, useRef } from \"react\";\n\n// HOOKS ===============================================================================================================\nimport { useClickOutside } from \"$hooks/UseClickOutside\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps, SpacingTypes } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./drawer.css\";\n\n// OTHER ===============================================================================================================\nimport { Div } from \"$tags\";\n\nexport interface DrawerCustomProps {\n id : string;\n isOpen ? : boolean;\n onClose ? : () => void;\n position ? : \"top\" | \"right\" | \"bottom\" | \"left\";\n size ? : SpacingTypes;\n isDismissible ? : boolean;\n showOverlay ? : boolean;\n blurOverlay ? : boolean;\n closeOnClickOutside ? : boolean;\n label ? : string;\n description ? : string;\n zIndex ? : number;\n}\n\nexport type DrawerElementType = HTMLDivElement;\nexport type DrawerProps = Omit<CommonAndHTMLProps<DrawerElementType>, keyof DrawerCustomProps> & DrawerCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Drawer = React.forwardRef(\n (\n {\n id,\n children,\n isOpen = false,\n onClose,\n position = \"right\",\n size = \"medium\",\n padding = \"micro\",\n bgColor,\n bgColour,\n isDismissible = true,\n showOverlay = true,\n blurOverlay = false,\n closeOnClickOutside = true,\n zIndex,\n label,\n description,\n classNames = [],\n ...props\n } : DrawerProps,\n ref : React.Ref<DrawerElementType>,\n ) => {\n const drawerId = `${id}`;\n const descriptionId = description ? `${drawerId}-description` : undefined;\n const drawerRef = useRef<HTMLDivElement>(null);\n const effectiveRef = (ref || drawerRef) as React.RefObject<HTMLDivElement>;\n\n // Build class names\n const drawerClasses : string[] = [\n \"drawer\",\n position,\n size,\n ...(isOpen ? [ \"open\" ] : []),\n ...(showOverlay ? [ \"with-overlay\" ] : []),\n ...(blurOverlay ? [ \"blur-overlay\" ] : []),\n ...classNames,\n ];\n\n // Handle open/close state declaratively\n useEffect(() => {\n const drawer = effectiveRef.current;\n const overlay = document.querySelector(`[data-drawer-overlay-for=\"${drawerId}\"]`) as HTMLElement;\n\n if (isOpen) {\n // Show drawer\n drawer?.classList.add(\"open\");\n drawer?.classList.remove(\"closing\");\n drawer?.focus();\n\n // Show overlay\n if (overlay) {\n overlay.classList.add(\"visible\");\n }\n\n // Prevent body scroll\n document.body.style.overflow = \"hidden\";\n } else {\n // Hide drawer\n if (drawer?.classList.contains(\"open\")) {\n drawer.classList.add(\"closing\");\n drawer.classList.remove(\"open\");\n\n // Hide overlay\n if (overlay) {\n overlay.classList.remove(\"visible\");\n }\n\n // Restore body scroll\n document.body.style.overflow = \"\";\n }\n }\n\n // Cleanup on unmount\n return () => {\n document.body.style.overflow = \"\";\n };\n }, [isOpen, drawerId, effectiveRef]);\n\n // Handle Escape key\n useEffect(() => {\n const handleEscape = (e : KeyboardEvent) => {\n if (e.key === \"Escape\" && isDismissible && isOpen && onClose) {\n onClose();\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [isDismissible, isOpen, onClose]);\n\n // Handle click outside\n useClickOutside(effectiveRef, () => {\n if (closeOnClickOutside && isDismissible && isOpen && onClose) {\n onClose();\n }\n });\n\n // Handle animation end\n const handleAnimationEnd = (e : React.AnimationEvent) => {\n if (e.animationName.includes(\"slide-out\") || e.animationName.includes(\"fade-out\")) {\n e.currentTarget.classList.remove(\"closing\");\n }\n };\n\n return (\n <>\n {/* OVERLAY */}\n {showOverlay && (\n <Div\n className={`drawer-overlay ${blurOverlay ? \"blur\" : \"\"} ${isOpen ? \"visible\" : \"\"}`}\n data-drawer-overlay-for={id}\n aria-hidden=\"true\"\n onClick={closeOnClickOutside && isDismissible && onClose ? onClose : undefined}\n style={{ zIndex: zIndex ?? 10000 - 1 }}\n />\n )}\n\n {/* DRAWER */}\n <Element<DrawerElementType>\n as=\"div\"\n id={drawerId}\n data-drawer\n ref={effectiveRef}\n classNames={drawerClasses}\n onAnimationEnd={handleAnimationEnd}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={label || \"Drawer\"}\n aria-describedby={descriptionId}\n tabIndex={-1}\n style={{ zIndex: zIndex ?? 10000 }}\n {...props}\n >\n {/* DISMISS BUTTON */}\n {isDismissible && onClose && (\n <button\n className=\"drawer-dismiss-button\"\n onClick={onClose}\n aria-label=\"Close drawer\"\n tabIndex={0}\n >\n ×\n </button>\n )}\n\n <Div\n className=\"drawer-content\"\n padding={padding}\n bgColor={bgColor}\n bgColour={bgColour}\n >\n\n {/* SR-ONLY DESCRIPTION */}\n {description && (\n <div id={descriptionId} className=\"sr-only\">\n {description}\n </div>\n )}\n\n {/* CONTENT */}\n <div role=\"document\">\n {children}\n </div>\n </Div>\n </Element>\n </>\n );\n },\n);\nDrawer.displayName = \"Drawer\";\n\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps, EmphasisTypes, ShapeTypes, SpacingTypes } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./Button.css\";\n\n// prettier-ignore\nexport interface ButtonCustomProps {\n kind ? : EmphasisTypes;\n size ? : SpacingTypes;\n shape ? : ShapeTypes;\n isLoading ? : boolean;\n label ? : string;\n}\n\nexport type ButtonElementType = HTMLButtonElement;\nexport type ButtonProps = Omit<CommonAndHTMLProps<ButtonElementType>, keyof ButtonCustomProps> & ButtonCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Button = React.forwardRef(\n ({ size=\"medium\", shape, kind, isLoading, label, ...props }: ButtonProps, ref: React.Ref<ButtonElementType>) => {\n let classNames = [];\n\n if (kind) {\n classNames.push(kind);\n }\n\n if (size) {\n classNames.push(`size-${size}`);\n }\n\n if (shape) {\n classNames.push(`shape-${shape}`);\n }\n\n if (isLoading) {\n classNames.push(\"is-loading\");\n }\n\n return (\n <Element<ButtonElementType>\n as=\"button\"\n data-button\n ref={ref}\n classNames={classNames}\n aria-label={label}\n aria-disabled={props.disabled || isLoading}\n aria-busy={isLoading}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps, SpacingTypes } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./button-group.css\";\n\n// prettier-ignore\nexport interface ButtonGroupCustomProps {\n isJoint ? : boolean;\n spacing ? : SpacingTypes;\n equaliseWidth ? : boolean;\n}\n\nexport type ButtonGroupElementType = HTMLDivElement;\nexport type ButtonGroupProps = Omit<CommonAndHTMLProps<ButtonGroupElementType>, keyof ButtonGroupCustomProps> &\n ButtonGroupCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const ButtonGroup = React.forwardRef(\n (\n {isJoint = true, spacing, equaliseWidth, children, ...props} : ButtonGroupProps,\n ref : React.Ref<ButtonGroupElementType>,\n ) => {\n let classNames : string[] = [];\n\n if (isJoint) {\n classNames.push(\"is-joint\");\n }\n\n if (spacing && !isJoint) {\n classNames.push(`spacing-${spacing}`);\n }\n\n if (equaliseWidth) {\n classNames.push(\"equal-width\");\n }\n\n return (\n <Element<ButtonGroupElementType>\n as=\"div\"\n data-button-group\n ref={ref}\n role=\"group\"\n classNames={classNames}\n {...props}\n >\n {children}\n </Element>\n );\n },\n);\n\nButtonGroup.displayName = \"ButtonGroup\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps, SpacingTypes } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./breadcrumbs.css\";\n\n// OTHER ===============================================================================================================\nimport { Text } from \"$/components\";\n\nexport type BreadcrumbsElementType = HTMLDivElement;\nexport interface BreadcrumbsProps extends CommonAndHTMLProps<BreadcrumbsElementType> {\n children : React.ReactNode;\n separator ? : string;\n spacing ? : SpacingTypes;\n}\n\nexport type BreadcrumbItemElementType = HTMLLIElement;\nexport interface BreadcrumbItemProps extends CommonAndHTMLProps<BreadcrumbItemElementType> {\n children : React.ReactNode;\n current ? : boolean;\n}\n\ninterface SeparatorProps {\n separator : string;\n}\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nconst BreadcrumbItem = React.forwardRef<HTMLLIElement, BreadcrumbItemProps>(\n ({ children, current, ...props }, ref) => {\n return (\n <Element\n as=\"li\"\n data-breadcrumb-item\n ref={ref}\n {...props}\n aria-current={current ? \"page\" : undefined}\n className={current ? \"current\" : undefined}\n role=\"listitem\"\n >\n <span className=\"breadcrumb-content\">\n {children}\n </span>\n </Element>\n );\n }\n);\n\nconst Separator: React.FC<SeparatorProps> = ({ separator }) => (\n <Text\n className=\"breadcrumb-separator\"\n aria-hidden=\"true\"\n role=\"presentation\"\n margin=\"none\"\n >\n {separator}\n </Text>\n);\n\nexport const Breadcrumbs = React.forwardRef<HTMLDivElement, BreadcrumbsProps>(\n ({ children, separator = \"/\", spacing = \"micro\", ...props }, ref) => {\n let classNames = [];\n\n if (spacing) {\n classNames.push(`spacing-${spacing}`);\n }\n\n const childrenArray = React.Children.toArray(children).filter(Boolean);\n\n const processedChildren = childrenArray.reduce<React.ReactNode[]>((acc, child, index) => {\n if (!React.isValidElement(child)) return acc;\n\n const isLast = index === childrenArray.length - 1;\n\n let breadcrumbItem: React.ReactNode;\n if (child.type === BreadcrumbItem) {\n breadcrumbItem = React.cloneElement(child, {\n ...child.props,\n current: isLast\n });\n } else {\n breadcrumbItem = (\n <BreadcrumbItem key={`item-${index}`} current={isLast}>\n {child}\n </BreadcrumbItem>\n );\n }\n\n acc.push(breadcrumbItem);\n\n if (!isLast) {\n acc.push(\n <Separator key={`sep-${index}`} separator={separator} />\n );\n }\n\n return acc;\n }, []);\n\n return (\n <nav aria-label=\"Breadcrumb\" ref={ref} {...props}>\n <Element\n as=\"ul\"\n data-breadcrumbs-wrapper\n role=\"list\"\n classNames={classNames}\n >\n {processedChildren}\n </Element>\n </nav>\n );\n }\n);\nBreadcrumbs.displayName = \"Breadcrumbs\";\n","// REACT CORE ==========================================================================================================\nimport React, { ReactNode } from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./callout.css\";\n\n// prettier-ignore\nexport interface CalloutCustomProps {\n kind : \"info\" | \"success\" | \"warning\" | \"error\";\n children : ReactNode;\n title ? : string;\n}\n\nexport type CalloutElementType = HTMLDivElement;\nexport type CalloutProps = Omit<CommonAndHTMLProps<CalloutElementType>, keyof CalloutCustomProps> & CalloutCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Callout = React.forwardRef(\n ({ kind, children, title, ...props }: CalloutProps, ref: React.Ref<CalloutElementType>) => {\n const roleMap = {\n info : \"status\",\n success : \"status\",\n warning : \"alert\",\n error : \"alert\"\n };\n\n return (\n <Element<CalloutElementType>\n as=\"div\"\n data-callout\n ref={ref}\n className={kind}\n role={roleMap[kind]}\n aria-live={kind === \"error\" || kind === \"warning\" ? \"assertive\" : \"polite\"}\n aria-label={title}\n {...props}\n >\n {children}\n </Element>\n );\n }\n);\nCallout.displayName = \"Callout\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./card.css\";\n\nexport type CardElementType = HTMLDivElement;\nexport interface CardCustomProps {\n heading ? : string;\n}\nexport type CardProps = CommonAndHTMLProps<CardElementType> & CardCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Card = React.forwardRef(({ shape, heading, children, ...props }: CardProps, ref: React.Ref<CardElementType>) => {\n let classNames = [];\n\n if (shape) {\n classNames.push(`shape-${shape}`);\n }\n\n return (\n <Element<CardElementType>\n as=\"div\"\n data-card\n ref={ref}\n classNames={classNames}\n role=\"region\"\n aria-label={heading}\n tabIndex={0}\n {...props}\n >\n {children}\n </Element>\n );\n});\nCard.displayName = \"Card\";\n","// REACT CORE ==========================================================================================================\nimport React, { useState, useEffect, useRef, useCallback } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./CodeBlock.css\";\n\n// OTHER ===============================================================================================================\nimport { Badge } from \"$/components\";\nimport { Button } from \"$/components\";\n\ninterface PrismType {\n languages : { [key : string] : any };\n highlight : (\n code : string,\n grammar : any,\n language : string\n ) => string;\n}\n\nexport interface CodeBlockCustomProps {\n source ? : object | string;\n language ? : string;\n showCopyButton ? : boolean;\n showLineNumbers ? : boolean;\n description ? : string;\n withSyntaxHighlighting ? : boolean;\n makeEditable ? : boolean;\n onChange ? : (content : string) => void;\n}\n\nexport type CodeBlockElementType = HTMLPreElement;\nexport type CodeBlockProps = Omit<CommonAndHTMLProps<CodeBlockElementType>,\n keyof CodeBlockCustomProps> & CodeBlockCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const CodeBlock = React.forwardRef((\n {\n children,\n source,\n language = \"json\",\n showCopyButton,\n showLineNumbers,\n description,\n withSyntaxHighlighting = false,\n makeEditable = false,\n onChange,\n shadow,\n ...props\n } : CodeBlockProps,\n ref : React.Ref<CodeBlockElementType>,\n) => {\n const [ isCodeCopied, setIsCodeCopied ] = useState(false);\n const [ prismModule, setPrismModule ] = useState<PrismType | null>(null);\n const [ isLoading, setIsLoading ] = useState(withSyntaxHighlighting);\n const [ codeElement, setCodeElement ] = useState<HTMLElement | null>(null);\n\n const preRef = useRef<HTMLPreElement>(null);\n\n // Determine the code content from either children or source prop\n let initialCode = typeof children === \"string\"\n ? children\n : React.Children.toArray(children).join(\"\");\n\n if (!children) {\n initialCode = typeof source === \"object\"\n ? JSON.stringify(source, null, 2)\n : source ?? \"\";\n }\n\n // Dynamically load Prism and language support when syntax highlighting is enabled\n useEffect(() => {\n if (!withSyntaxHighlighting) return;\n\n const loadPrismWithLanguage = async () => {\n setIsLoading(true);\n try {\n // Load Prism core FIRST and ensure it's globally available\n const prism = await import(\"prismjs\");\n const Prism = prism.default;\n\n // Ensure Prism is available globally for language plugins\n if (typeof window !== \"undefined\" && !(window as any).Prism) {\n (window as any).Prism = Prism;\n }\n\n // NOW load the language module - it needs Prism to be global\n if (language !== \"plain\" && !Prism.languages[language]) {\n try {\n await import(`prismjs/components/prism-${language}`);\n } catch (langError) {\n console.warn(`Language \"${language}\" not available, falling back to plain text`);\n }\n }\n\n setPrismModule(Prism);\n } catch (error : any) {\n // Check if it's a \"module not found\" error (prismjs not installed)\n if (error?.code === \"ERR_MODULE_NOT_FOUND\" || error?.message?.includes(\"Cannot find module\")) {\n console.warn(\n \"PrismJS is not installed. To enable syntax highlighting, run: npm install prismjs\",\n );\n } else {\n console.warn(`Failed to load syntax highlighting for ${language}:`, error);\n }\n } finally {\n setIsLoading(false);\n }\n };\n\n loadPrismWithLanguage();\n }, [ withSyntaxHighlighting, language ]);\n\n // Get the current cursor position in the editable content\n const getCursorPosition = useCallback(() => {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return null;\n\n const range = selection.getRangeAt(0);\n const currentNode = range.startContainer;\n const cursorOffset = range.startOffset;\n\n // Calculate absolute cursor position by walking the DOM tree\n let absoluteOffset = cursorOffset;\n if (currentNode && currentNode !== codeElement && codeElement) {\n const treeWalker = document.createTreeWalker(\n codeElement,\n NodeFilter.SHOW_TEXT,\n null,\n );\n let node;\n while ((node = treeWalker.nextNode())) {\n if (node === currentNode) break;\n absoluteOffset += node.textContent?.length || 0;\n }\n }\n\n return absoluteOffset;\n }, [ codeElement ]);\n\n // Apply syntax highlighting while preserving cursor position in editable mode\n const highlightCode = useCallback((content : string) => {\n if (!codeElement || !withSyntaxHighlighting || !prismModule) return;\n\n try {\n // Store cursor position before modifying content\n const cursorPosition = makeEditable ? getCursorPosition() : null;\n\n // Apply Prism highlighting\n const highlighted = prismModule.highlight(\n content,\n prismModule.languages[language] || prismModule.languages.plain,\n language,\n );\n codeElement.innerHTML = highlighted;\n\n // Restore cursor position for editable content\n if (makeEditable && cursorPosition !== null) {\n const selection = window.getSelection();\n const newRange = document.createRange();\n const treeWalker = document.createTreeWalker(\n codeElement,\n NodeFilter.SHOW_TEXT,\n null,\n );\n\n // Walk through text nodes to find correct cursor position\n let currentOffset = 0;\n let node;\n while ((node = treeWalker.nextNode())) {\n const length = node.textContent?.length || 0;\n if (currentOffset + length >= cursorPosition) {\n newRange.setStart(node, cursorPosition - currentOffset);\n newRange.setEnd(node, cursorPosition - currentOffset);\n selection?.removeAllRanges();\n selection?.addRange(newRange);\n break;\n }\n currentOffset += length;\n }\n }\n } catch (error) {\n console.warn(\"Error highlighting code:\", error);\n if (codeElement) {\n codeElement.textContent = content;\n }\n }\n }, [ language, withSyntaxHighlighting, makeEditable, prismModule, getCursorPosition, codeElement ]);\n\n // Handle content changes in editable mode\n const handleInput = useCallback((event : Event) => {\n if (!codeElement) return;\n\n const content = codeElement.textContent || \"\";\n onChange?.(content);\n\n // Defer highlighting to next frame to ensure content is updated\n requestAnimationFrame(() => {\n highlightCode(content);\n });\n }, [ highlightCode, onChange, codeElement ]);\n\n // Setup input handler for editable content\n useEffect(() => {\n const element = codeElement;\n if (!element || !makeEditable) return;\n\n element.addEventListener(\"input\", handleInput);\n return () => {\n element.removeEventListener(\"input\", handleInput);\n };\n }, [ makeEditable, handleInput, codeElement ]);\n\n // Initial highlighting when component loads\n useEffect(() => {\n if (!codeElement || !prismModule) return;\n highlightCode(initialCode);\n }, [ highlightCode, initialCode, prismModule, codeElement ]);\n\n const copyToClipboard = async () => {\n try {\n const textToCopy = codeElement ? codeElement.textContent || \"\" : initialCode;\n await navigator.clipboard.writeText(textToCopy);\n setIsCodeCopied(true);\n setTimeout(() => setIsCodeCopied(false), 3000);\n } catch (err) {\n console.error(\"Could not copy text: \", err);\n }\n };\n\n // Keyboard shortcuts for copy button ------------------------------------------------------------------------------\n const handleKeyDown = async (e : React.KeyboardEvent) => {\n if ((e.key === \"Enter\" || e.key === \" \") && e.target === preRef.current) {\n e.preventDefault();\n await copyToClipboard();\n }\n };\n\n let classNames = [];\n\n if (showLineNumbers) {\n classNames.push(\"show-line-numbers\");\n }\n\n // Split code into lines for line numbers --------------------------------------------------------------------------\n const lines = initialCode.split(/\\r\\n|\\r|\\n/gm);\n\n return (\n <Element<CodeBlockElementType>\n data-code-block\n as=\"div\"\n classNames={classNames}\n role=\"region\"\n aria-label={description || `Code block in ${language}`}\n {...props}\n >\n {/* Copy Button or Copied Badge */}\n {showCopyButton ? (\n isCodeCopied ? (\n <Badge\n className=\"code-block-copied-badge\"\n size=\"tiny\"\n shape=\"rounded\"\n aria-live=\"polite\"\n >\n Copied!\n </Badge>\n ) : (\n <Button\n type=\"button\"\n className=\"code-block-copy-button\"\n size=\"tiny\"\n shape=\"rounded\"\n onClick={copyToClipboard}\n onKeyDown={handleKeyDown}\n aria-label=\"Copy code to clipboard\"\n >\n Copy\n </Button>\n )\n ) : null}\n\n {/* MAIN CODE DISPLAY ////////////////////////////////////////////////////////////////////////////////// */}\n <pre\n ref={preRef}\n className={`language-${language}${shadow ? ` shadow-${shadow}` : \"\"}`}\n tabIndex={0}\n aria-label={`Code in ${language}`}\n >\n {/* Line Numbers */}\n {showLineNumbers &&\n Array.from(Array(lines.length).keys()).map((index) => (\n <span\n key={index}\n className=\"line-numbers\"\n aria-hidden=\"true\"\n >\n {index + 1}\n </span>\n ))}\n\n {/* Code Content */}\n <code\n ref={setCodeElement}\n contentEditable={makeEditable}\n suppressContentEditableWarning={true}\n spellCheck=\"false\"\n className={`language-${language} ${isLoading ? \"is-loading\" : \"\"}`}\n >\n {initialCode}\n </code>\n </pre>\n </Element>\n );\n});\nCodeBlock.displayName = \"CodeBlock\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./divider.css\";\n\n// prettier-ignore\nexport interface DividerCustomProps {\n kind ? : \"primary\" | \"secondary\" | \"tertiary\";\n height ? : string;\n label ? : string;\n}\n\nexport type DividerElementType = HTMLHRElement;\nexport type DividerProps = Omit<CommonAndHTMLProps<DividerElementType>, keyof DividerCustomProps> & DividerCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Divider = React.forwardRef(\n (\n { kind, height, label, ...props }: DividerProps, ref: React.Ref<DividerElementType>) => {\n let classNames = [];\n\n if (kind) {\n classNames.push(kind);\n }\n\n return (\n <Element<DividerElementType>\n as=\"hr\"\n data-hrule\n ref={ref}\n classNames={classNames}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n aria-label={label}\n {...props}\n style={{ height : height }}\n />\n );\n },\n);\nDivider.displayName = \"Divider\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps } from \"../../Element/constants\";\n\n// OTHER ===============================================================================================================\nimport { Element } from \"$element\";\n\n// prettier-ignore\nexport interface InputLabelCustomProps {\n label ? : string;\n htmlFor ? : string;\n hideLabel ? : boolean;\n}\n\nexport type InputLabelElementType = HTMLLabelElement;\nexport type InputLabelProps = Omit<CommonAndHTMLProps<InputLabelElementType>, keyof InputLabelCustomProps> &\n InputLabelCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const InputLabel = React.forwardRef(\n (\n {\n label,\n hideLabel,\n htmlFor,\n ...props\n }: InputLabelProps,\n ref: React.Ref<InputLabelElementType>\n ) => {\n let classNames = [];\n\n if (hideLabel) {\n classNames.push(\"visually-hidden\");\n }\n\n return (\n <Element<InputLabelElementType>\n as=\"label\"\n ref={ref}\n htmlFor={htmlFor}\n classNames={classNames}\n {...props}\n >\n {label}\n </Element>\n );\n }\n);\nInputLabel.displayName = \"InputLabel\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps, SpacingTypes, WeightTypes } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// prettier-ignore\nexport interface TextCustomProps {\n fontStyle ? : \"sans-serif\" | \"serif\" | \"monospace\";\n weight ? : WeightTypes;\n size ? : SpacingTypes;\n align ? : \"left\" | \"centre\" | \"center\" | \"right\";\n isSubtext ? : boolean;\n}\n\nexport type TextElementType = HTMLParagraphElement;\nexport type TextProps = Omit<CommonAndHTMLProps<TextElementType>, keyof TextCustomProps> & TextCustomProps;\n\nexport const Text = React.forwardRef(\n (\n {weight, size, fontStyle = \"sans-serif\", align, isSubtext, ...props} : TextProps,\n ref : React.Ref<TextElementType>,\n ) => {\n let classNames = [];\n\n if (weight) {\n classNames.push(`weight-${weight}`);\n }\n\n if (size) {\n classNames.push(`text-${size}`);\n }\n\n if (fontStyle) {\n classNames.push(`font-${fontStyle}`);\n }\n\n if (isSubtext) {\n classNames.push(\"sub-text\");\n }\n\n if (align) {\n classNames.push(`text-${align}`);\n }\n\n return <Element<TextElementType> as=\"p\" ref={ref} classNames={classNames} {...props} />;\n },\n);\nText.displayName = \"Text\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { Div } from \"$tags\";\nimport { Element } from \"$element\";\nimport { CommonAndHTMLProps, SpacingTypes } from \"../../Element/constants\";\nimport { InputLabel } from \"../InputLabel/InputLabel\";\nimport { Text } from \"../../Typography/Text\";\n\n// STYLES ==============================================================================================================\nimport \"./form-item.css\";\n\n// TYPES ///////////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport type FormItemElementType = HTMLDivElement;\n\nexport interface FormItemProps extends CommonAndHTMLProps<FormItemElementType> {\n // Label\n label?: string;\n customLabel?: React.ReactNode;\n htmlFor?: string;\n // Info section\n helpText?: string | React.ReactNode;\n errorText?: string;\n // Validation\n validationState?: \"valid\" | \"invalid\" | null;\n // Form semantics\n required?: boolean;\n size?: Exclude<SpacingTypes, \"nano\" | \"huge\">;\n}\n\n// VALIDATION ICON /////////////////////////////////////////////////////////////////////////////////////////////////////\nconst ValidationIcon = ({ state }: { state: \"valid\" | \"invalid\" }) => {\n if (state === \"valid\") {\n return (\n <svg\n data-validation-icon=\"valid\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n width=\"20\"\n height=\"20\"\n >\n <polyline\n points=\"3.5 12.5 8.5 17.5 20.5 5.5\"\n fill=\"none\"\n stroke=\"#0ec05c\"\n strokeMiterlimit=\"10\"\n strokeWidth=\"2\"\n />\n </svg>\n );\n }\n\n return (\n <svg\n data-validation-icon=\"invalid\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n width=\"20\"\n height=\"20\"\n >\n <line\n x1=\"6.5\"\n y1=\"17.5\"\n x2=\"18.5\"\n y2=\"5.5\"\n fill=\"none\"\n stroke=\"#ef4343\"\n strokeMiterlimit=\"10\"\n strokeWidth=\"2\"\n />\n <line\n x1=\"6.5\"\n y1=\"5.5\"\n x2=\"18.5\"\n y2=\"17.5\"\n fill=\"none\"\n stroke=\"#ef4343\"\n strokeMiterlimit=\"10\"\n strokeWidth=\"2\"\n />\n </svg>\n );\n};\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const FormItem = React.forwardRef(\n (\n {\n label,\n customLabel,\n htmlFor,\n helpText,\n errorText,\n validationState,\n required,\n size,\n children,\n ...props\n }: FormItemProps,\n ref: React.Ref<FormItemElementType>\n ) => {\n const hasLabel = label || customLabel;\n const hasInfoSection = helpText || errorText;\n\n return (\n <Element<FormItemElementType>\n as=\"div\"\n data-form-item\n ref={ref}\n role=\"group\"\n required={required}\n className={size ? `size-${size}` : undefined}\n {...props}\n >\n {/* LABEL ////////////////////////////////////////////////////////////////////////////////////// */}\n {hasLabel && (\n <Div data-label-wrapper data-has-validation={validationState ? \"true\" : undefined}>\n {customLabel || (label && <InputLabel label={label} htmlFor={htmlFor} />)}\n {validationState && <ValidationIcon state={validationState} />}\n </Div>\n )}\n\n {/* INPUT ////////////////////////////////////////////////////////////////////////////////////// */}\n <Div data-input-wrapper>\n {children}\n </Div>\n\n {/* INFO SECTION /////////////////////////////////////////////////////////////////////////////// */}\n {hasInfoSection && (\n <Div className=\"info-section vertically-center-items\">\n {helpText && (\n <Text className=\"help-text\">\n {helpText}\n </Text>\n )}\n {errorText && (\n <Text className=\"error-text\">\n {errorText}\n </Text>\n )}\n </Div>\n )}\n </Element>\n );\n }\n);\nFormItem.displayName = \"FormItem\";\n","// REACT CORE ==========================================================================================================\nimport React, { useMemo } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { Element } from \"$element\";\nimport { SpacingTypes } from \"../../Element/constants\";\n\n// STYLES ==============================================================================================================\nimport \"./checkbox.css\";\n\n// OTHER ===============================================================================================================\nimport { FormItem } from \"../FormItem/FormItem\";\nimport { InputLabelCustomProps } from \"../InputLabel/InputLabel\";\n\nexport type CheckboxElementType = HTMLInputElement;\nexport type CheckboxProps = InputLabelCustomProps & {\n id ? : string;\n name ? : string;\n checked ? : boolean;\n defaultChecked ? : boolean;\n disabled ? : boolean;\n required ? : boolean;\n onChange ? : (checked : boolean) => void;\n size ? : Exclude<SpacingTypes, \"nano\" | \"huge\">;\n helpText ? : string;\n errorText ? : string;\n};\n\n// TODO: Fix required indicator that clashes with tick because both use the same `label::after` setup.\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Checkbox = React.forwardRef(\n (\n {\n id,\n name,\n label,\n hideLabel,\n helpText,\n errorText,\n onChange,\n checked,\n defaultChecked,\n disabled,\n required,\n size = \"medium\",\n ...props\n } : CheckboxProps,\n ref : React.Ref<CheckboxElementType>,\n ) => {\n const derivedName = useMemo(() => name || id, [ name, id ]);\n\n const handleChange = (e : React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.checked);\n };\n\n return (\n <FormItem\n label={label}\n htmlFor={id}\n helpText={helpText}\n errorText={errorText}\n required={required}\n size={size}\n >\n <Element<CheckboxElementType>\n as=\"input\"\n type=\"checkbox\"\n ref={ref}\n id={id}\n name={derivedName}\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n required={required}\n onChange={handleChange}\n {...props}\n />\n <Element\n as=\"div\"\n data-checkbox\n className={`size-${size}`}\n />\n </FormItem>\n );\n },\n);\nCheckbox.displayName = \"Checkbox\";\n","// REACT CORE ==========================================================================================================\nimport React, { useMemo } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { Element } from \"$element\";\nimport { FormItem } from \"../FormItem/FormItem\";\nimport { SpacingTypes } from \"../../Element/constants\";\n\n// STYLES ==============================================================================================================\nimport \"./switch.css\";\n\n// TYPES ===============================================================================================================\nimport { InputLabelCustomProps } from \"../InputLabel/InputLabel\";\n\nexport type SwitchElementType = HTMLInputElement;\nexport type SwitchProps = InputLabelCustomProps & {\n id?: string;\n name?: string;\n checked?: boolean;\n defaultChecked?: boolean;\n disabled?: boolean;\n required?: boolean;\n onChange?: (checked: boolean) => void;\n size?: Exclude<SpacingTypes, \"nano\" | \"huge\">;\n helpText?: string;\n errorText?: string;\n};\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Switch = React.forwardRef(\n (\n {\n id,\n name,\n label,\n hideLabel,\n helpText,\n errorText,\n onChange,\n checked,\n defaultChecked,\n disabled,\n required,\n size = \"medium\",\n ...props\n }: SwitchProps,\n ref: React.Ref<SwitchElementType>\n ) => {\n const derivedName = useMemo(() => name || id, [name, id]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.checked);\n };\n\n return (\n <FormItem\n label={label}\n htmlFor={id}\n helpText={helpText}\n errorText={errorText}\n required={required}\n size={size}\n >\n <Element<SwitchElementType>\n as=\"input\"\n type=\"checkbox\"\n ref={ref}\n id={id}\n name={derivedName}\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n required={required}\n onChange={handleChange}\n {...props}\n />\n <Element\n as=\"div\"\n data-switch\n className={`size-${size}`}\n />\n </FormItem>\n );\n }\n);\nSwitch.displayName = \"Switch\";\n","// REACT CORE ==========================================================================================================\nimport React, { useMemo } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { Element } from \"$element\";\nimport { FormItem } from \"../FormItem/FormItem\";\nimport { Checkbox, CheckboxProps } from \"./Checkbox\";\nimport { Switch, SwitchProps } from \"./Switch\";\nimport { SpacingTypes } from \"../../Element/constants\";\n\n// STYLES ==============================================================================================================\nimport \"./checkbox-and-switch-group.css\";\n\n// TYPES ===============================================================================================================\nimport { InputLabelCustomProps } from \"../InputLabel/InputLabel\";\n\n// COMMON GROUP OPTIONS ////////////////////////////////////////////////////////////////////////////////////////////////\ninterface BaseGroupOptionProps {\n id: string;\n label: string;\n value: string;\n disabled?: boolean;\n}\n\n// Props specific to the group functionality\ninterface GroupCustomProps {\n id?: string;\n name: string;\n options: BaseGroupOptionProps[];\n value?: string[];\n defaultValue?: string[];\n onChange?: (values: string[]) => void;\n align?: \"horizontal\" | \"vertical\";\n equaliseWidth?: boolean;\n equalizeWidth?: boolean;\n size?: Exclude<SpacingTypes, \"nano\" | \"huge\">;\n}\n\n// Combined props for the group component\nexport type InputGroupProps = InputLabelCustomProps & GroupCustomProps & {\n helpText?: string;\n errorText?: string;\n required?: boolean;\n disabled?: boolean;\n};\n\n// CHECKBOX GROUP //////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const CheckboxGroup = React.forwardRef<HTMLDivElement, InputGroupProps>(\n (\n {\n id,\n name,\n label,\n helpText,\n errorText,\n options,\n value,\n defaultValue,\n onChange,\n align,\n equaliseWidth,\n equalizeWidth,\n required,\n disabled,\n size,\n ...props\n },\n ref\n ) => {\n const derivedName = useMemo(() => name || id, [name, id]);\n\n const [selectedValues, setSelectedValues] = React.useState<string[]>(\n value || defaultValue || []\n );\n\n React.useEffect(() => {\n if (value !== undefined) {\n setSelectedValues(value);\n }\n }, [value]);\n\n const handleChange = (optionValue: string, checked: boolean) => {\n let newValues: string[];\n\n if (checked) {\n newValues = [...selectedValues, optionValue];\n } else {\n newValues = selectedValues.filter(v => v !== optionValue);\n }\n\n // Update internal state if uncontrolled\n if (value === undefined) {\n setSelectedValues(newValues);\n }\n\n onChange?.(newValues);\n };\n\n let classNames: string[] = [];\n\n if (align) {\n classNames.push(`align-${align}`);\n }\n\n if (equaliseWidth || equalizeWidth) {\n classNames.push(`equalise-width`);\n }\n\n return (\n <FormItem\n label={label}\n htmlFor={id}\n helpText={helpText}\n errorText={errorText}\n required={required}\n >\n <Element\n as=\"div\"\n data-checkbox-group\n ref={ref}\n classNames={classNames}\n role=\"group\"\n aria-label={label}\n {...props}\n >\n {options.map((option, index) => {\n const { id: optionId, value: optionValue, label: optionLabel, ...optionProps } = option;\n const finalId = optionId || `${id}-option-${index}`;\n const isChecked = selectedValues.includes(optionValue);\n\n return (\n <Checkbox\n key={finalId}\n id={finalId}\n name={derivedName}\n label={optionLabel}\n checked={isChecked}\n disabled={disabled || option.disabled}\n size={size}\n onChange={(checked: boolean) => handleChange(optionValue, checked)}\n {...optionProps}\n />\n );\n })}\n </Element>\n </FormItem>\n );\n }\n);\nCheckboxGroup.displayName = \"CheckboxGroup\";\n\n// SWITCH GROUP ////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const SwitchGroup = React.forwardRef<HTMLDivElement, InputGroupProps>(\n (\n {\n id,\n name,\n label,\n helpText,\n errorText,\n options,\n value,\n defaultValue,\n onChange,\n align,\n equaliseWidth,\n equalizeWidth,\n required,\n disabled,\n size,\n ...props\n },\n ref\n ) => {\n const derivedName = useMemo(() => name || id, [name, id]);\n\n const [selectedValues, setSelectedValues] = React.useState<string[]>(\n value || defaultValue || []\n );\n\n React.useEffect(() => {\n if (value !== undefined) {\n setSelectedValues(value);\n }\n }, [value]);\n\n const handleChange = (optionValue: string, checked: boolean) => {\n let newValues: string[];\n\n if (checked) {\n newValues = [...selectedValues, optionValue];\n } else {\n newValues = selectedValues.filter(v => v !== optionValue);\n }\n\n // Update internal state if uncontrolled\n if (value === undefined) {\n setSelectedValues(newValues);\n }\n\n onChange?.(newValues);\n };\n\n let classNames: string[] = [];\n\n if (align) {\n classNames.push(`align-${align}`);\n }\n\n if (equaliseWidth || equalizeWidth) {\n classNames.push(`equalise-width`);\n }\n\n return (\n <FormItem\n label={label}\n htmlFor={id}\n helpText={helpText}\n errorText={errorText}\n required={required}\n >\n <Element\n as=\"div\"\n data-switch-group\n ref={ref}\n classNames={classNames}\n role=\"group\"\n aria-label={label}\n {...props}\n >\n {options.map((option, index) => {\n const { id: optionId, value: optionValue, label: optionLabel, ...optionProps } = option;\n const finalId = optionId || `${id}-option-${index}`;\n const isChecked = selectedValues.includes(optionValue);\n\n return (\n <Switch\n key={finalId}\n id={finalId}\n name={derivedName}\n label={optionLabel}\n checked={isChecked}\n disabled={disabled || option.disabled}\n size={size}\n onChange={(checked: boolean) => handleChange(optionValue, checked)}\n {...optionProps}\n />\n );\n })}\n </Element>\n </FormItem>\n );\n }\n);\nSwitchGroup.displayName = \"SwitchGroup\";\n","// REACT CORE ==========================================================================================================\nimport React, { useRef, useState } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { ColourPropTypes } from \"$components/Element/constants\";\nimport { Div } from \"../../Element/Tags\";\nimport { FormItem } from \"../FormItem/FormItem\";\nimport { Badge } from \"../../Badge/Badge\";\nimport { Text } from \"../../Typography/Text\";\n\n// STYLES ==============================================================================================================\nimport \"./file-upload.css\";\n\n// TYPES ===============================================================================================================\nimport { InputLabelCustomProps } from \"../InputLabel/InputLabel\";\n\nexport type FileUploadElementType = HTMLInputElement;\nexport type FileUploadProps = InputLabelCustomProps & {\n id?: string;\n name?: string;\n accept?: string;\n allowMultipleFiles?: boolean;\n capture?: \"user\" | \"environment\";\n height?: string;\n onChange?: (files: File[]) => void;\n instructionMainText?: string;\n instructionSubText?: string;\n badgeBgColour?: ColourPropTypes;\n badgeBgColor?: ColourPropTypes;\n badgeTextColour?: ColourPropTypes;\n badgeTextColor?: ColourPropTypes;\n helpText?: string;\n errorText?: string;\n required?: boolean;\n disabled?: boolean;\n invalid?: boolean;\n className?: string;\n \"aria-label\"?: string;\n \"aria-invalid\"?: boolean;\n};\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const FileUpload = React.forwardRef(\n (\n {\n \"aria-label\": ariaLabel,\n \"aria-invalid\": ariaInvalid,\n label,\n helpText,\n errorText,\n required,\n accept,\n allowMultipleFiles = false,\n capture,\n height = \"120px\",\n onChange,\n className = \"\",\n instructionMainText = \"Drag and drop or click to upload\",\n instructionSubText = \"You can add multiple files\",\n invalid,\n id,\n name,\n badgeBgColour,\n badgeTextColour,\n ...props\n }: FileUploadProps,\n ref: React.Ref<FileUploadElementType>\n ) => {\n const [files, setFiles] = useState<File[]>([]);\n const [isDragging, setIsDragging] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n };\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n\n const droppedFiles = Array.from(e.dataTransfer.files);\n handleFiles(droppedFiles);\n };\n\n const handleFiles = (newFiles: File[]) => {\n if (!allowMultipleFiles) {\n const fileToAdd = newFiles[0];\n setFiles([fileToAdd]);\n onChange?.([fileToAdd]);\n } else {\n setFiles(prevFiles => [...prevFiles, ...newFiles]);\n onChange?.([...files, ...newFiles]);\n }\n };\n\n const handleFileInput = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files) {\n const selectedFiles = Array.from(e.target.files);\n handleFiles(selectedFiles);\n }\n };\n\n const removeFile = (indexToRemove: number) => {\n const updatedFiles = files.filter((_, index) => index !== indexToRemove);\n setFiles(updatedFiles);\n onChange?.(updatedFiles);\n };\n\n const openFileDialog = () => {\n fileInputRef.current?.click();\n };\n\n return (\n <FormItem\n label={label}\n htmlFor={id}\n helpText={helpText}\n errorText={errorText}\n required={required}\n >\n <Div\n data-file-upload-area\n ref={ref as React.Ref<HTMLDivElement>}\n className={[\n \"file-upload-wrapper\",\n isDragging ? \"dragging\" : \"\",\n className\n ].filter(Boolean).join(\" \")}\n aria-label={ariaLabel || label}\n aria-invalid={ariaInvalid || invalid || undefined}\n aria-required={required}\n >\n <Div\n className=\"file-upload-area\"\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={openFileDialog}\n style={{ height }}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n id={id}\n name={name}\n onChange={handleFileInput}\n multiple={allowMultipleFiles}\n accept={accept}\n capture={capture}\n className=\"file-input\"\n />\n\n {instructionMainText &&\n <Div className=\"file-upload-content\">\n <Text>{instructionMainText}</Text>\n {instructionSubText && (\n <Text isSubtext>{instructionSubText}</Text>\n )}\n </Div>\n }\n </Div>\n\n {files.length > 0 && (\n <Div className=\"uploaded-files\">\n {files.map((file, index) => (\n <Badge\n key={`${file.name}-${index}`}\n size=\"small\"\n shape=\"rounded\"\n actionIcon=\"cross\"\n onActionClick={() => removeFile(index)}\n actionAriaLabel={`Remove ${file.name}`}\n bgColour={badgeBgColour}\n textColour={badgeTextColour}\n >\n {file.name}\n </Badge>\n ))}\n </Div>\n )}\n </Div>\n </FormItem>\n );\n }\n);\nFileUpload.displayName = \"FileUpload\";\n","// REACT CORE ==========================================================================================================\nimport React, { useEffect, useRef, useState } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { Div } from \"$tags\";\nimport { Element } from \"$element\";\nimport { SpacingTypes } from \"../../Element/constants\";\n\n// STYLES ==============================================================================================================\nimport \"./input-field.css\";\n\n// OTHER ===============================================================================================================\nimport { FormItem } from \"../FormItem/FormItem\";\nimport { InputLabelCustomProps } from \"../InputLabel/InputLabel\";\n\n// TODO: Add full-width support for standalone input fields\n\nexport type ValueChangeHandler<T = string> = (value: T) => void;\nexport type InputFocusHandler = (e: React.FocusEvent<HTMLInputElement>) => void;\nexport interface InputCommonProps {\n label ? : string;\n helpText ? : string | React.ReactNode;\n errorText ? : string;\n validateThis ? : boolean;\n valid ? : boolean;\n invalid ? : boolean;\n validationState ? : \"valid\" | \"invalid\" | null;\n required ? : boolean;\n disabled ? : boolean;\n}\n\nexport interface InputSideElementProps {\n innerIconLeft ? : React.ReactNode;\n innerIconRight ? : React.ReactNode;\n innerTextLeft ? : string;\n innerTextRight ? : string;\n}\n\nexport type InputFieldElementType = HTMLInputElement;\n\nexport type InputFieldProps =\n Omit<React.InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"onBlur\" | \"onFocus\" | \"size\"> &\n InputLabelCustomProps &\n InputCommonProps &\n InputSideElementProps & {\n type ? : \"text\" | \"password\" | \"email\" | \"number\" | \"tel\" | \"url\" | \"search\" | \"file\";\n size ? : Exclude<SpacingTypes, \"nano\" | \"huge\">;\n onFocus ? : InputFocusHandler;\n onBlur ? : InputFocusHandler;\n onChange ? : ValueChangeHandler<string>;\n};\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const InputField = React.forwardRef(\n (\n {\n // FormItem props\n label,\n hideLabel,\n helpText,\n errorText,\n size,\n required,\n // Side elements\n innerIconLeft,\n innerIconRight,\n innerTextLeft,\n innerTextRight,\n // Validation\n validateThis,\n valid,\n invalid,\n validationState: externalValidationState,\n // Handlers\n onChange,\n onBlur,\n onFocus,\n // Aria\n \"aria-label\": ariaLabel,\n \"aria-invalid\": ariaInvalid,\n // Input props\n id,\n name,\n value,\n defaultValue,\n type = \"text\",\n placeholder,\n autoComplete,\n maxLength,\n minLength,\n pattern,\n readOnly,\n disabled,\n className,\n ...props\n }: InputFieldProps,\n ref: React.Ref<InputFieldElementType>\n ) => {\n const leftElementRef = useRef<HTMLDivElement>(null);\n const rightElementRef = useRef<HTMLDivElement>(null);\n const internalInputRef = useRef<HTMLInputElement>(null);\n\n const [touched, setTouched] = useState(false);\n const [internalValidationState, setInternalValidationState] = useState<\"valid\" | \"invalid\" | null>(null);\n\n // Use external validation state if provided, otherwise use internal\n const validationState = externalValidationState ?? (validateThis ? internalValidationState : null);\n\n // Merge refs\n const mergeRefs = React.useCallback(\n (el: HTMLInputElement | null) => {\n (internalInputRef as React.MutableRefObject<HTMLInputElement | null>).current = el;\n if (typeof ref === \"function\") {\n ref(el);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = el;\n }\n },\n [ref]\n );\n\n const updateValidationState = () => {\n const input = internalInputRef.current;\n if (!input || input.value === \"\") {\n setInternalValidationState(null);\n return;\n }\n setInternalValidationState(input.validity.valid ? \"valid\" : \"invalid\");\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n if (touched && validateThis) {\n updateValidationState();\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true);\n if (validateThis) {\n updateValidationState();\n }\n onBlur?.(e);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n onFocus?.(e);\n };\n\n // Side element width calculation\n useEffect(() => {\n const updateWidth = (el: HTMLDivElement | null, pos: \"left\" | \"right\") => {\n if (!el) return;\n const formItem = el.closest(\"[data-form-item]\") as HTMLElement;\n formItem?.style.setProperty(\n `--side-element-${pos}-width`,\n `${el.getBoundingClientRect().width}px`\n );\n };\n\n if (innerTextLeft || innerIconLeft) {\n updateWidth(leftElementRef.current, \"left\");\n }\n if (innerTextRight || innerIconRight) {\n updateWidth(rightElementRef.current, \"right\");\n }\n }, [innerTextLeft, innerTextRight, innerIconLeft, innerIconRight]);\n\n const renderSideElement = (\n content: React.ReactNode,\n position: \"left\" | \"right\",\n elRef: React.RefObject<HTMLDivElement>\n ) => {\n if (!content) return null;\n\n const isText = typeof content === \"string\";\n const isInteractive =\n !isText &&\n React.isValidElement(content) &&\n (content.props.onClick ||\n content.props.onKeyDown ||\n content.type === \"button\" ||\n content.type === \"a\");\n\n return (\n <Div\n ref={elRef}\n data-input-side-element\n className={`${position} ${isText ? \"is-text\" : \"is-icon\"} ${isInteractive ? \"is-interactive\" : \"\"}`}\n aria-hidden=\"true\"\n >\n {content}\n </Div>\n );\n };\n\n const hasLeftElement = Boolean(innerIconLeft || innerTextLeft);\n const hasRightElement = Boolean(innerIconRight || innerTextRight);\n\n return (\n <FormItem\n label={label}\n htmlFor={id}\n helpText={helpText}\n errorText={errorText}\n validationState={validationState}\n required={required}\n size={size}\n >\n <Element<InputFieldElementType>\n as=\"input\"\n ref={mergeRefs}\n data-input-field\n id={id}\n name={name}\n type={type}\n value={value}\n defaultValue={defaultValue}\n placeholder={placeholder || \" \"}\n autoComplete={autoComplete}\n maxLength={maxLength}\n minLength={minLength}\n pattern={pattern}\n readOnly={readOnly}\n disabled={disabled}\n required={required}\n className={[\n className,\n hasLeftElement && \"with-left-element\",\n hasRightElement && \"with-right-element\",\n ]\n .filter(Boolean)\n .join(\" \")}\n aria-label={ariaLabel || label}\n aria-invalid={ariaInvalid || invalid}\n aria-required={required}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n {...props}\n />\n {(hasLeftElement || hasRightElement) && (\n <Div data-input-helper aria-hidden=\"true\">\n {renderSideElement(innerIconLeft || innerTextLeft, \"left\", leftElementRef)}\n {renderSideElement(innerIconRight || innerTextRight, \"right\", rightElementRef)}\n </Div>\n )}\n </FormItem>\n );\n }\n);\nInputField.displayName = \"InputField\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./portion.css\";\n\n// OTHER ===============================================================================================================\nimport { SpanTypes } from \"./types\";\n\n// prettier-ignore\nexport interface PortionCustomProps {\n desktopSpan ? : SpanTypes;\n tabletLandscapeSpan ? : SpanTypes;\n tabletPortraitSpan ? : SpanTypes;\n mobileSpan ? : SpanTypes;\n isHorizontal ? : boolean;\n role ? : string;\n}\n\nexport type PortionElementType = HTMLDivElement;\nexport type PortionProps = Omit<CommonAndHTMLProps<PortionElementType>, keyof PortionCustomProps> & PortionCustomProps;\n\n// COMPONENT //////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Portion = React.forwardRef(\n (\n {\n desktopSpan,\n mobileSpan,\n tabletLandscapeSpan,\n tabletPortraitSpan,\n isHorizontal,\n role,\n ...props\n }: PortionProps,\n ref: React.Ref<PortionElementType>\n ) => {\n // CLASS NAMES -------------------------------------------------------------------------------------------------\n let classNames = [];\n\n if (desktopSpan || tabletLandscapeSpan || tabletPortraitSpan || mobileSpan) {\n if (desktopSpan) {\n classNames.push(`${desktopSpan}`);\n }\n\n if (tabletLandscapeSpan) {\n classNames.push(`${tabletLandscapeSpan}-on-tablet-landscape`);\n }\n\n if (tabletPortraitSpan) {\n classNames.push(`${tabletPortraitSpan}-on-tablet-portrait`);\n }\n\n if (mobileSpan) {\n classNames.push(`${mobileSpan}-on-mobile`);\n }\n } else {\n classNames.push(\"whole\");\n }\n\n if (isHorizontal) {\n classNames.push(\"horizontal\");\n }\n\n // RENDER ---------------------------------------------------------------------------------------------------\n return (\n <Element<PortionElementType>\n as=\"div\"\n data-portion\n ref={ref}\n classNames={classNames}\n role={role}\n {...props}\n />\n );\n }\n);\nPortion.displayName = \"Portion\";\n","// REACT CORE ==========================================================================================================\nimport React, { useMemo } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { Element } from \"$element\";\nimport { FormItem } from \"../FormItem/FormItem\";\n\n// STYLES ==============================================================================================================\nimport \"./radio-button.css\";\n\n// OTHER ===============================================================================================================\nimport { RadioButtonProps, RadioButtonElementType } from \"./constants\";\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const RadioButton = React.forwardRef(\n (\n {\n id,\n name,\n value,\n label,\n helpText,\n errorText,\n onChange,\n checked,\n disabled,\n required,\n ...props\n }: RadioButtonProps,\n ref: React.Ref<RadioButtonElementType>\n ) => {\n const derivedName = useMemo(() => name || id, [name, id]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.checked && onChange) {\n onChange(value);\n }\n };\n\n return (\n <Element<RadioButtonElementType>\n as=\"div\"\n data-radio-button\n ref={ref}\n role=\"radio\"\n aria-checked={checked}\n aria-disabled={disabled}\n >\n <FormItem\n label={label}\n htmlFor={id}\n helpText={helpText}\n errorText={errorText}\n required={required}\n >\n <Element\n as=\"input\"\n type=\"radio\"\n id={id}\n name={derivedName}\n value={value}\n checked={checked}\n disabled={disabled}\n required={required}\n onChange={handleChange}\n {...props}\n />\n </FormItem>\n </Element>\n );\n }\n);\nRadioButton.displayName = \"RadioButton\";\n","// REACT CORE ==========================================================================================================\nimport React, { useMemo } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { Div } from \"../../Element/Tags\";\nimport { Element } from \"$element\";\nimport { FormItem } from \"../FormItem/FormItem\";\n\n// STYLES ==============================================================================================================\nimport \"./radio-group.css\";\n\n// TYPES ===============================================================================================================\nimport { RadioGroupProps } from \"./constants\";\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const RadioGroup = React.forwardRef(\n (\n {\n id,\n name,\n label,\n helpText,\n errorText,\n options,\n value,\n defaultValue,\n onChange,\n align,\n equaliseWidth,\n equalizeWidth,\n required,\n disabled,\n ...props\n }: RadioGroupProps,\n ref: React.Ref<HTMLDivElement>\n ) => {\n const derivedName = useMemo(() => name || id, [name, id]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n };\n\n let classNames: string[] = [];\n\n if (align) {\n classNames.push(`align-${align}`);\n }\n\n if (equaliseWidth || equalizeWidth) {\n classNames.push(`equalise-width`);\n }\n\n return (\n <FormItem\n label={label}\n htmlFor={id}\n helpText={helpText}\n errorText={errorText}\n required={required}\n >\n <Element\n as=\"div\"\n data-radio-group\n ref={ref}\n classNames={classNames}\n role=\"radiogroup\"\n aria-label={label}\n {...props}\n >\n {options.map((option, index) => {\n const { id: optionId, value: optionValue, label: optionLabel, ...optionProps } = option;\n const finalId = optionId || `${id}-option-${index}`;\n const isChecked = value ? value === optionValue : defaultValue === optionValue;\n\n return (\n <Div\n key={finalId}\n data-radio-button\n role=\"radio\"\n aria-checked={isChecked}\n >\n <input\n type=\"radio\"\n id={finalId}\n name={derivedName}\n value={optionValue}\n checked={isChecked}\n disabled={disabled}\n onChange={handleChange}\n {...optionProps}\n />\n <label htmlFor={finalId}>{optionLabel}</label>\n </Div>\n );\n })}\n </Element>\n </FormItem>\n );\n }\n);\nRadioGroup.displayName = \"RadioGroup\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps, SpacingTypes } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./row.css\";\n\ninterface RowCustomProps {\n layout ? : \"grid\" | \"flexbox\";\n gutters ? : SpacingTypes;\n retainLayoutOnTabletLandscape ? : boolean;\n retainLayoutOnTabletPortrait ? : boolean;\n retainLayoutOnMobile ? : boolean;\n retainLayoutAlways ? : boolean;\n allowUltraWide ? : boolean;\n groupLabel ? : string;\n}\n\nexport type RowElementType = HTMLDivElement;\nexport type RowProps = Omit<CommonAndHTMLProps<RowElementType>, keyof RowCustomProps> & RowCustomProps;\n\n// TODO: Fix fixed gutter widths\n\n// COMPONENT //////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Row = React.forwardRef(\n (\n {\n layout = \"grid\",\n gutters = \"medium\",\n retainLayoutOnTabletLandscape,\n retainLayoutOnTabletPortrait,\n retainLayoutOnMobile,\n retainLayoutAlways,\n allowUltraWide,\n groupLabel,\n ...props\n } : RowProps,\n ref : React.Ref<RowElementType>,\n ) => {\n // CLASS NAMES -------------------------------------------------------------------------------------------------\n let classNames = [];\n\n if (layout) {\n classNames.push(`layout-${layout}`);\n }\n\n if (gutters) {\n classNames.push(gutters === \"none\" ? \"no-gutters\" : `${gutters}-gutters`);\n }\n\n // Add medium gutters by default for grid layouts only, remove them for flexbox layouts\n //\n // if (conditionalGutters) {\n // }\n\n // if (equaliseChildren || equalizeChildren) {\n // classNames.push(\"equalise-children\");\n // }\n\n if (retainLayoutOnTabletLandscape) {\n classNames.push(\"retain-layout-on-tablet-landscape\");\n }\n\n if (retainLayoutOnTabletPortrait) {\n classNames.push(\"retain-layout-on-tablet-portrait\");\n }\n\n if (retainLayoutOnMobile) {\n classNames.push(\"retain-layout-on-mobile\");\n }\n\n if (retainLayoutAlways) {\n classNames.push(\n \"retain-layout-on-tablet-landscape retain-layout-on-tablet-portrait retain-layout-on-mobile\",\n );\n }\n\n if (allowUltraWide) {\n classNames.push(\"allow-ultra-wide\");\n }\n\n // RENDER -----------------------------------------------------------------------------------------------------\n return (\n <Element<RowElementType>\n as=\"div\"\n data-row\n ref={ref}\n classNames={[ classNames.join(\" \") ]}\n marginBottom=\"tiny\"\n role=\"grid\"\n aria-label={groupLabel}\n {...props}\n />\n );\n },\n);\nRow.displayName = \"Row\";\n","// REACT CORE ==========================================================================================================\nimport React, { useMemo } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { Div } from \"$tags\";\nimport { Element } from \"$element\";\nimport { FormItem } from \"../FormItem/FormItem\";\n\n// STYLES ==============================================================================================================\nimport \"./select.css\";\n\n// OTHER ===============================================================================================================\nimport { OptionProps, OptGroupProps, SelectProps, OptionElementType, SelectElementType } from \"./constants\";\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Select = React.forwardRef(\n (\n {\n // FormItem props\n label,\n helpText,\n errorText,\n required,\n // Select props\n id,\n name,\n options,\n onChange,\n disabled,\n className,\n ...props\n }: SelectProps,\n ref: React.Ref<SelectElementType>\n ) => {\n const derivedName = useMemo(() => name || id, [name, id]);\n\n const renderOption = (option: OptionProps) => (\n <Element<OptionElementType>\n as=\"option\"\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {option.label}\n </Element>\n );\n\n const renderOptGroup = (group: OptGroupProps) => (\n <Element<HTMLOptGroupElement>\n as=\"optgroup\"\n key={group.label}\n label={group.label}\n >\n {group.options.map(renderOption)}\n </Element>\n );\n\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n onChange?.(e.target.value);\n };\n\n return (\n <FormItem\n label={label}\n htmlFor={id}\n helpText={helpText}\n errorText={errorText}\n required={required}\n >\n <Div data-select className={className} disabled={disabled}>\n <Element<SelectElementType>\n as=\"select\"\n ref={ref}\n id={id}\n name={derivedName}\n disabled={disabled}\n required={required}\n onChange={handleChange}\n {...props}\n >\n {options.map((option) =>\n \"options\" in option ? renderOptGroup(option) : renderOption(option)\n )}\n </Element>\n </Div>\n </FormItem>\n );\n }\n);\nSelect.displayName = \"Select\";\n","// REACT CORE ==========================================================================================================\nimport React, { useRef } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { Element } from \"$element\";\nimport { FormItem } from \"../FormItem/FormItem\";\n\n// STYLES ==============================================================================================================\nimport \"./textarea.css\";\n\n// TYPES ===============================================================================================================\nimport { CommonAndHTMLProps, SpacingTypes } from \"../../Element/constants\";\nimport { InputLabelCustomProps } from \"../InputLabel/InputLabel\";\n\n// Common input types\nexport interface InputCommonProps {\n label?: string;\n helpText?: string | React.ReactNode;\n errorText?: string;\n validateThis?: boolean;\n valid?: boolean;\n invalid?: boolean;\n required?: boolean;\n disabled?: boolean;\n}\n\nexport type TextareaElementType = HTMLTextAreaElement;\nexport type TextareaProps =\n Omit<CommonAndHTMLProps<TextareaElementType>, \"onChange\" | \"size\"> &\n InputLabelCustomProps &\n Omit<InputCommonProps, \"validationState\"> & {\n id?: string;\n name?: string;\n onChange?: (value: string) => void;\n value?: string;\n rows?: number;\n cols?: number;\n minLength?: number;\n maxLength?: number;\n placeholder?: string;\n readOnly?: boolean;\n required?: boolean;\n disabled?: boolean;\n autoComplete?: string;\n characterLimit?: number;\n wordLimit?: number;\n size?: Exclude<SpacingTypes, \"nano\" | \"huge\">;\n };\n\n// Helper functions to determine limit states\nconst getLimitState = (current: number, limit: number): \"normal\" | \"warning\" | \"exceeded\" => {\n if (current > limit) return \"exceeded\";\n if (current >= limit * 0.9) return \"warning\";\n return \"normal\";\n};\n\nconst pluralise = (count: number, singular: string, plural: string): string => {\n return Math.abs(count) === 1 ? singular : plural;\n};\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const TextArea = React.forwardRef(\n (\n {\n // FormItem props\n label,\n hideLabel,\n helpText,\n errorText,\n size,\n required,\n // TextArea-specific\n onChange,\n value = \"\",\n characterLimit,\n wordLimit,\n // Input props\n id,\n name,\n rows,\n cols,\n minLength,\n maxLength,\n placeholder,\n readOnly,\n disabled,\n autoComplete,\n // Validation (unused but destructured to not pass to DOM)\n validateThis,\n valid,\n invalid,\n ...props\n }: TextareaProps,\n ref: React.Ref<TextareaElementType>\n ) => {\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange?.(e.target.value);\n };\n\n const constructHelpText = (): React.ReactNode => {\n const limitsMessages: React.ReactNode[] = [];\n\n if (characterLimit) {\n const currentChars = value.length;\n const limitState = getLimitState(currentChars, characterLimit);\n const excessChars = Math.max(0, currentChars - characterLimit);\n const remaining = characterLimit - currentChars;\n\n limitsMessages.push(\n <span key=\"char-limit\" className={`limit-${limitState}`}>\n {excessChars > 0\n ? `${excessChars} ${pluralise(excessChars, \"char\", \"chars\")} over limit`\n : `${remaining} ${pluralise(remaining, \"char\", \"chars\")} left`}\n </span>\n );\n }\n\n if (wordLimit) {\n const currentWords = value.trim().split(/\\s+/).filter(Boolean).length;\n const limitState = getLimitState(currentWords, wordLimit);\n const excessWords = Math.max(0, currentWords - wordLimit);\n const remaining = wordLimit - currentWords;\n\n limitsMessages.push(\n <span key=\"word-limit\" className={`limit-${limitState}`}>\n {excessWords > 0\n ? `${excessWords} ${pluralise(excessWords, \"word\", \"words\")} over limit`\n : `${remaining} ${pluralise(remaining, \"word\", \"words\")} left`}\n </span>\n );\n }\n\n if (!limitsMessages.length && !helpText) return undefined;\n\n return (\n <>\n {helpText}\n {helpText && limitsMessages.length > 0 && <span className=\"separator\"> • </span>}\n {limitsMessages.map((msg, i) => (\n <React.Fragment key={i}>\n {i > 0 && <span className=\"separator\"> • </span>}\n {msg}\n </React.Fragment>\n ))}\n </>\n );\n };\n\n const setRefs = (element: HTMLTextAreaElement | null) => {\n textareaRef.current = element;\n if (typeof ref === \"function\") {\n ref(element);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLTextAreaElement | null>).current = element;\n }\n };\n\n return (\n <FormItem\n label={label}\n htmlFor={id}\n helpText={constructHelpText()}\n errorText={errorText}\n required={required}\n size={size}\n >\n <Element<TextareaElementType>\n as=\"textarea\"\n ref={setRefs}\n data-textarea\n id={id}\n name={name}\n value={value}\n rows={rows}\n cols={cols}\n minLength={minLength}\n maxLength={maxLength}\n placeholder={placeholder}\n readOnly={readOnly}\n disabled={disabled}\n required={required}\n autoComplete={autoComplete}\n onChange={handleChange}\n {...props}\n />\n </FormItem>\n );\n }\n);\nTextArea.displayName = \"TextArea\";\n","// REACT CORE ==========================================================================================================\nimport React, { ElementType, ReactNode } from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { ElementProps, SpacingTypes } from \"../../Element/constants\";\n\n// INPUT ===============================================================================================================\n// Common props shared by form inputs\nexport interface InputCommonProps {\n label?: string;\n helpText?: string;\n errorText?: string;\n required?: boolean;\n disabled?: boolean;\n}\n\n// OTHER ===============================================================================================================\nimport { Checkbox } from \"../Checkbox/Checkbox\";\nimport { Element } from \"$element\";\nimport { FileUpload } from \"../FileUpload/FileUpload\";\nimport { InputField } from \"../InputField/InputField\";\nimport { InputLabel, InputLabelCustomProps } from \"../InputLabel/InputLabel\";\nimport { PortionProps, Portion } from \"../../Portion/Portion\";\nimport { RadioButton } from \"../RadioButton/RadioButton\";\nimport { RadioGroup } from \"../RadioButton/RadioGroup\";\nimport { RadioGroupOptionProps } from \"../RadioButton/constants\";\nimport { Row } from \"../../Row/Row\";\nimport { Select } from \"../Select/Select\";\nimport { Switch } from \"../Checkbox/Switch\";\nimport { TextArea } from \"../TextArea/TextArea\";\n\n// Types\nexport type FormFieldsType = ElementProps<HTMLInputElement> &\n ElementProps<HTMLSelectElement> &\n ElementProps<HTMLTextAreaElement> &\n InputLabelCustomProps &\n InputCommonProps;\n\nexport type FormFieldsConfigBase = PortionProps & FormFieldsType;\n\ninterface FormFieldOptionsType extends RadioGroupOptionProps {\n id : string;\n label : string;\n value : string;\n}\n\nexport interface FormFieldsConfig extends FormFieldsConfigBase {\n as : ElementType;\n options ? : FormFieldOptionsType[];\n name : string;\n // Making name required for field identification\n}\n\n// Supported Form elements for \"as\" prop in config\nconst FormElements: Record<string, ElementType> = {\n Checkbox,\n Switch,\n InputField,\n FileUpload,\n InputLabel,\n RadioButton,\n RadioGroup,\n Select,\n TextArea,\n Empty: \"div\",\n};\n\nconst getFormItem = (\n formField: Omit<FormFieldsConfig, \"mobileSpan\" | \"tabletLandscapeSpan\" | \"isHorizontal\" | \"desktopSpan\" | \"tabletPortraitSpan\">,\n onFieldChange: (fieldName: string, value: any) => void\n): React.ReactNode => {\n const { as: elementName, name, ...formFieldProps } = formField;\n\n // Create an onChange handler specific to this field\n const handleChange = (value: any) => {\n onFieldChange(name, value);\n };\n\n const ElementComponent = FormElements[elementName as keyof typeof FormElements] || InputField;\n\n return (\n <Element\n as={ElementComponent}\n {...formFieldProps}\n name={name}\n isFullWidth\n onChange={handleChange}\n />\n );\n};\n\nexport const generateFormThroughConfig = (\n fields: FormFieldsConfig[],\n onFieldChange: (fieldName: string, value: any) => void,\n spacing: SpacingTypes | undefined,\n): React.ReactNode => {\n const formChildren: ReactNode[] = fields.map((field, index) => {\n const {\n desktopSpan,\n tabletLandscapeSpan,\n tabletPortraitSpan,\n mobileSpan,\n isHorizontal,\n ...formField\n } = field;\n\n const portionProps = {\n desktopSpan,\n tabletLandscapeSpan,\n tabletPortraitSpan,\n mobileSpan,\n isHorizontal,\n };\n\n return (\n <Portion {...portionProps} key={`${field.name}-${index}`}>\n {getFormItem(formField, onFieldChange)}\n </Portion>\n );\n });\n\n return <Row gutters={spacing}>{formChildren}</Row>;\n};\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps, SpacingTypes } from \"../../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./form.css\";\n\n// OTHER ===============================================================================================================\nimport { Callout } from \"$/components\";\nimport { FormFieldsConfig, generateFormThroughConfig } from \"./FormGenerator\";\n\n// prettier-ignore\nexport interface FormCustomProps {\n spacing ? : SpacingTypes;\n fields ? : FormFieldsConfig[];\n onFieldsChange ? : (values: Record<string, any>) => void;\n errorText ? : string;\n}\n\nexport type FormElementType = HTMLFormElement;\nexport type FormProps = Omit<CommonAndHTMLProps<FormElementType>, keyof FormCustomProps> &\n FormCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Form = React.forwardRef(\n (\n { spacing = \"small\", fields, onFieldsChange, children, errorText, ...props }: FormProps,\n ref: React.Ref<FormElementType>\n ) => {\n let classNames = [];\n\n if (spacing) {\n classNames.push(`spacing-${spacing}`);\n }\n\n // Handle form field changes to provide direct values\n const handleFieldChange = (fieldName: string, value: any) => {\n if (onFieldsChange) {\n onFieldsChange({\n [fieldName]: value\n });\n }\n };\n\n // Generate form fields if config is provided\n const formContent = fields?.length ? generateFormThroughConfig(fields, handleFieldChange, spacing) : children;\n\n return (\n <Element<FormElementType>\n as=\"form\"\n data-form\n ref={ref}\n classNames={classNames}\n {...props}\n >\n {formContent}\n {errorText && <Callout kind=\"error\">{errorText}</Callout>}\n </Element>\n );\n }\n);\nForm.displayName = \"Form\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps } from \"../../Element/constants\";\n\n// STYLES ==============================================================================================================\nimport \"./form-item-group.css\";\n\n// OTHER ===============================================================================================================\nimport { Element } from \"$element\";\n\n// prettier-ignore\nexport interface FormItemGroupCustomProps {\n isJoint ? : boolean;\n equalWidthForChildren ? : React.ReactNode;\n retainLayout ? : boolean;\n legend ? : string;\n}\n\nexport type FormItemGroupElementType = HTMLDivElement;\nexport type FormItemGroupProps = Omit<CommonAndHTMLProps<FormItemGroupElementType>, keyof FormItemGroupCustomProps> &\n FormItemGroupCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const FormItemGroup = React.forwardRef(\n (\n {\n isJoint,\n equalWidthForChildren,\n retainLayout,\n children,\n legend,\n id,\n ...props\n }: FormItemGroupProps,\n ref: React.Ref<FormItemGroupElementType>\n ) => {\n const groupId = id || `form-group-${Math.random().toString(36).substring(2, 9)}`;\n let classNames = [];\n\n if (isJoint) {\n classNames.push(\"is-joint\");\n }\n\n if (equalWidthForChildren) {\n classNames.push(\"equal-width-for-children\");\n }\n\n if (retainLayout) {\n classNames.push(\"retain-layout\");\n }\n\n return (\n <Element<FormItemGroupElementType>\n as=\"div\"\n data-form-item-group\n ref={ref}\n id={groupId}\n role=\"group\"\n aria-label={legend}\n classNames={classNames}\n {...props}\n >\n {children}\n </Element>\n );\n }\n);\nFormItemGroup.displayName = \"FormItemGroup\";\n","import { OptionForListBoxProps } from \"./constants\";\n\nexport const levenshteinDistance = (a: string, b: string): number => {\n const matrix = [];\n\n const aLength = a.length;\n const bLength = b.length;\n\n // Early exit if one of the strings is empty\n if (aLength === 0) return bLength;\n if (bLength === 0) return aLength;\n\n // Initialize the first row and column of the matrix\n for (let i = 0; i <= bLength; i++) {\n matrix[i] = [ i ];\n }\n for (let j = 0; j <= aLength; j++) {\n matrix[0][j] = j;\n }\n\n // Fill in the rest of the matrix\n for (let i = 1; i <= bLength; i++) {\n for (let j = 1; j <= aLength; j++) {\n if (b[i - 1] === a[j - 1]) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j] + 1, // Deletion\n matrix[i][j - 1] + 1, // Insertion\n matrix[i - 1][j - 1] + 1, // Substitution\n );\n }\n }\n }\n\n return matrix[bLength][aLength];\n};\n\nexport const isSubsequence = (search: string, target: string): boolean => {\n let searchIndex = 0;\n let targetIndex = 0;\n\n while (searchIndex < search.length && targetIndex < target.length) {\n if (search[searchIndex] === target[targetIndex]) {\n searchIndex++;\n }\n targetIndex++;\n }\n\n return searchIndex === search.length;\n};\n\nexport const generateAcronym = (label: string): string => {\n return label\n .split(/[\\s\\-_]+/)\n .map(word => word.slice(0, 2)) // Take first two letters\n .join(\"\")\n .toLowerCase();\n};\n\n// Handle partial matches and common typos =============================================================================\nexport const searchOptions = (options: OptionForListBoxProps[], searchTerm: string) => {\n if (!searchTerm) return options;\n\n const normalizedSearch = searchTerm.toLowerCase().trim();\n\n const maxDistance = Math.floor(normalizedSearch.length / 2);\n\n const matchedOptions = options\n .map(option => {\n const normalizedLabel = option.label.toLowerCase();\n\n const distance = levenshteinDistance(normalizedSearch, normalizedLabel);\n\n const words = normalizedLabel.split(/[\\s\\-_]+/);\n const searchWords = normalizedSearch.split(/[\\s\\-_]+/);\n\n const isPartialMatch =\n normalizedLabel.includes(normalizedSearch) ||\n searchWords.every(searchWord =>\n words.some(word => word.startsWith(searchWord)),\n );\n\n const acronym = generateAcronym(normalizedLabel);\n\n const isAcronymMatch = isSubsequence(normalizedSearch, acronym);\n\n return {\n option,\n distance,\n isPartialMatch,\n isAcronymMatch,\n };\n })\n .filter(({ distance, isPartialMatch, isAcronymMatch }) =>\n isPartialMatch || isAcronymMatch || distance <= maxDistance,\n )\n .sort((a, b) => {\n if (a.isPartialMatch && !b.isPartialMatch) return -1;\n if (!a.isPartialMatch && b.isPartialMatch) return 1;\n\n if (a.isAcronymMatch && !b.isAcronymMatch) return -1;\n if (!a.isAcronymMatch && b.isAcronymMatch) return 1;\n\n return a.distance - b.distance;\n })\n .map(({ option }) => option);\n\n return matchedOptions;\n};\n","// REACT CORE ==========================================================================================================\nimport React, { useState, useRef, useEffect, MutableRefObject, KeyboardEvent } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { Div } from \"$tags\";\nimport { Element } from \"$element\";\nimport { FormItem } from \"../FormItem/FormItem\";\nimport { Badge } from \"../../Badge/Badge\";\nimport { InputField } from \"../InputField/InputField\";\nimport { Text } from \"../../Typography/Text\";\n\n// HOOKS ===============================================================================================================\nimport { useClickOutside } from \"$hooks/UseClickOutside\";\n\n// STYLES ==============================================================================================================\nimport \"./list-box.css\";\n\n// OTHER ===============================================================================================================\nimport { ListBoxProps, OptionForListBoxProps, ListBoxElementType, ListBoxCustomProps } from \"./constants\";\nimport { searchOptions } from \"./listBoxUtils\";\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const ListBox = React.forwardRef<ListBoxElementType, ListBoxProps>(\n (\n {\n options = [],\n label,\n helpText,\n errorText,\n placeholder = \"Select an option\",\n id,\n defaultValue,\n onChange,\n disabled,\n selectionLimit,\n allowMultiSelect = false,\n allowCustomEntries = false,\n isLoading,\n value,\n isFullWidth,\n className,\n required,\n ...props\n },\n ref\n ) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState(\"\");\n const [activeIndex, setActiveIndex] = useState(-1);\n const [selectedOption, setSelectedOption] = useState<OptionForListBoxProps | null>(null);\n const [selectedOptions, setSelectedOptions] = useState<OptionForListBoxProps[]>([]);\n\n useEffect(() => {\n if (defaultValue && onChange) {\n onChange(defaultValue);\n }\n }, []);\n\n // Create a memoized version of the combined options\n const allOptions = React.useMemo(() => {\n return [...options];\n }, [options]);\n\n const dropdownRef = useRef() as MutableRefObject<HTMLSelectElement>;\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const listboxId = id || `listbox-${Math.random().toString(36).substring(2, 9)}`;\n const filteredOptions = searchOptions(allOptions, searchValue);\n\n const handleSelectOption = (option: OptionForListBoxProps) => {\n if (option.disabled) return;\n\n let newSelectedOptions: OptionForListBoxProps[];\n if (allowMultiSelect) {\n const isSelected = selectedOptions.some(opt => opt.value === option.value);\n if (isSelected) {\n newSelectedOptions = selectedOptions.filter(opt => opt.value !== option.value);\n } else {\n if (selectionLimit && selectedOptions.length >= selectionLimit) {\n return;\n }\n newSelectedOptions = [...selectedOptions, option];\n }\n setSelectedOptions(newSelectedOptions);\n onChange?.(newSelectedOptions.map(opt => opt.value));\n } else {\n newSelectedOptions = [option];\n setSelectedOption(option);\n setSelectedOptions(newSelectedOptions);\n onChange?.(option.value);\n setIsOpen(false);\n }\n\n setSearchValue(\"\");\n setActiveIndex(-1);\n };\n\n const handleSearchChange = (value: string) => {\n setSearchValue(value);\n };\n\n const handleCustomEntry = () => {\n if (!searchValue.trim() || !allowCustomEntries) return;\n\n const customValue = searchValue.trim();\n const customOption: OptionForListBoxProps = {\n value: customValue,\n label: customValue,\n };\n\n // If this option doesn't exist yet\n if (!allOptions.some(opt => opt.value === customValue)) {\n handleSelectOption(customOption);\n }\n };\n\n const handleDeleteOption = (valueToRemove: string) => {\n if (allowMultiSelect) {\n // Filter out the option to remove\n const newSelectedOptions = selectedOptions.filter(opt => opt.value !== valueToRemove);\n\n // Update local state\n setSelectedOptions(newSelectedOptions);\n\n // Notify parent\n onChange?.(newSelectedOptions.map(opt => opt.value));\n } else {\n // For single-select mode, just clear everything\n setSelectedOption(null);\n setSelectedOptions([]);\n onChange?.(\"\");\n }\n };\n\n const handleClearAll = () => {\n // Reset local state for both single and multi-select\n setSelectedOption(null);\n setSelectedOptions([]);\n\n // Notify parent with empty data\n onChange?.(allowMultiSelect ? [] : \"\");\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n setActiveIndex(0);\n } else {\n setActiveIndex(prev =>\n prev < filteredOptions.length - 1 ? prev + 1 : prev\n );\n }\n break;\n\n case \"ArrowUp\":\n event.preventDefault();\n setActiveIndex(prev => prev > 0 ? prev - 1 : prev);\n break;\n\n case \"Enter\":\n event.preventDefault();\n if (allowCustomEntries && searchValue.trim()) {\n const exactMatch = filteredOptions.find(opt =>\n opt.label.toLowerCase() === searchValue.trim().toLowerCase()\n );\n if (exactMatch) {\n handleSelectOption(exactMatch);\n } else {\n handleCustomEntry();\n }\n } else if (activeIndex >= 0 && filteredOptions[activeIndex]) {\n handleSelectOption(filteredOptions[activeIndex]);\n }\n break;\n\n case \"Escape\":\n event.preventDefault();\n setIsOpen(false);\n setActiveIndex(-1);\n break;\n\n case \" \": // Space key\n if (!isOpen) {\n event.preventDefault();\n setIsOpen(true);\n setActiveIndex(0);\n }\n break;\n\n case \"Home\":\n if (isOpen) {\n event.preventDefault();\n setActiveIndex(0);\n }\n break;\n\n case \"End\":\n if (isOpen) {\n event.preventDefault();\n setActiveIndex(filteredOptions.length - 1);\n }\n break;\n }\n };\n\n useClickOutside(dropdownRef, () => {\n setIsOpen(false);\n setActiveIndex(-1);\n });\n\n useEffect(() => {\n if (isOpen && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (activeIndex >= 0) {\n const activeOption = document.querySelector(`[data-index=\"${activeIndex}\"]`);\n activeOption?.scrollIntoView({ block: \"nearest\" });\n }\n }, [activeIndex]);\n\n return (\n <FormItem\n label={label}\n htmlFor={id}\n helpText={helpText}\n errorText={errorText}\n required={required}\n >\n {/* PARENT */}\n <Element\n as=\"div\"\n data-list-box\n classNames={[\"list-box-wrapper\", disabled ? \"disabled\" : \"\", className || \"\"]}\n ref={dropdownRef}\n {...props}\n >\n <Div\n className=\"list-box-input-wrapper\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={`${listboxId}-listbox`}\n aria-owns={`${listboxId}-listbox`}\n tabIndex={disabled ? -1 : 0}\n >\n {allowMultiSelect ? (\n <>\n {selectedOptions.length > 0 ? (\n <Div className=\"options-wrapper\">\n <Div className=\"options-list\">\n {selectedOptions.map(option => (\n <Badge\n key={option.value}\n actionIcon=\"cross\"\n onActionClick={() => handleDeleteOption(option.value)}\n actionAriaLabel={`Remove ${option.label}`}\n size=\"small\"\n shape=\"rounded\"\n >\n <Text>{option.label}</Text>\n </Badge>\n ))}\n </Div>\n {selectionLimit && selectedOptions.length >= selectionLimit && (\n <Text className=\"options-limit-warning\" textColour=\"red\" size=\"small\">\n You can choose only {selectionLimit} option{selectionLimit === 1 ? \"\" : \"s\"}\n </Text>\n )}\n </Div>\n ) : (\n <span className=\"placeholder\">{placeholder}</span>\n )}\n\n {/* Clear button for multi-select */}\n {selectedOptions.length > 0 && (\n <Div\n className=\"icon-wrapper clear-all\"\n title=\"Clear all options\"\n onClick={() => handleClearAll()}\n >\n <svg viewBox=\"0 0 24 24\">\n <line x1=\"5\" y1=\"5\" x2=\"19\" y2=\"19\" />\n <line x1=\"5\" y1=\"19\" x2=\"19\" y2=\"5\" />\n </svg>\n </Div>\n )}\n </>\n ) : (\n selectedOptions[0]\n ? <Text className=\"selected-option\">{selectedOptions[0].label}</Text>\n : <span className=\"placeholder\">{placeholder}</span>\n )}\n\n <Div className=\"icon-wrapper chevrons\">\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <polyline points=\"6 9 12 4 18 9\"></polyline>\n <polyline points=\"6 15 12 20 18 15\"></polyline>\n </svg>\n </Div>\n </Div>\n\n {/* DROPDOWN */}\n {isOpen && !disabled && (\n <Div className=\"list-box-dropdown\">\n <Div className=\"list-box-search-wrapper\">\n <InputField\n type=\"text\"\n ref={searchInputRef}\n className=\"list-box-search\"\n placeholder={allowCustomEntries ? \"Type to search or add new\" : \"Search\"}\n value={searchValue}\n onChange={handleSearchChange}\n onKeyDown={handleKeyDown}\n aria-controls={`${listboxId}-listbox`}\n aria-label=\"Search options\"\n />\n {allowCustomEntries && searchValue.trim() && !selectedOptions.some(opt =>\n opt.label.toLowerCase() === searchValue.trim().toLowerCase()) && (\n <kbd\n className=\"list-box-enter-key\"\n aria-label=\"Press Enter to add custom option\"\n >\n ↵\n </kbd>\n )}\n </Div>\n\n {/* OPTIONS */}\n <Element\n as=\"ul\"\n id={`${listboxId}-listbox`}\n className=\"list-box-options\"\n role=\"listbox\"\n aria-multiselectable={allowMultiSelect}\n aria-busy={isLoading}\n tabIndex={-1}\n >\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option, index) => (\n <li\n key={option.value}\n id={`${listboxId}-option-${option.value}`}\n className={`list-box-option ${option.disabled ? \"disabled\" : \"\"} ${activeIndex === index ? \"active\" : \"\"}`}\n role=\"option\"\n aria-selected={selectedOptions.some(opt => opt.value === option.value)}\n aria-disabled={option.disabled}\n onClick={() => handleSelectOption(option)}\n data-index={index}\n tabIndex={-1}\n >\n {option.customLabel || option.label}\n </li>\n ))\n ) : (\n <li\n className=\"list-box-option disabled\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {allowCustomEntries\n ? \"Type and press Enter to add new option\"\n : \"No matches found\"\n }\n </li>\n )}\n </Element>\n </Div>\n )}\n </Element>\n </FormItem>\n );\n }\n);\nListBox.displayName = \"ListBox\";\n","// FRAMEWORK ===========================================================================================================\nimport React, { createRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from \"react\";\n\n// FICTOAN =============================================================================================================\nimport { InputField } from \"../InputField/InputField\";\nimport { Div } from \"../../Element/Tags\";\n\n// STYLES ==============================================================================================================\nimport \"./pin-input-field.css\";\n\n// TYPES ===============================================================================================================\nimport { CommonAndHTMLProps } from \"../../Element/constants\";\n\ninterface PinInputFieldHandle extends HTMLDivElement {\n reset: () => void;\n}\n\n// prettier-ignore\ntype PinInputFieldCustomProps = {\n numberOfFields : number;\n onChange ? : (value: string) => void;\n type ? : \"alphanumeric\" | \"number\";\n mask ? : boolean;\n isOTP ? : boolean;\n autoFocus ? : boolean;\n pasteFromClipboard ? : \"enabled\" | \"disabled\";\n focusFirstInputOnReset ? : boolean;\n isFullWidth ? : boolean;\n ariaLabel ? : string;\n};\n\nexport type PinInputFieldElementType = HTMLDivElement & { reset: () => void };\nexport type PinInputFieldProps = Omit<CommonAndHTMLProps<PinInputFieldElementType>, keyof PinInputFieldCustomProps> &\n PinInputFieldCustomProps;\n\n// UTILITIES ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nfunction validate(value: string, type: \"alphanumeric\" | \"number\") {\n const NUMERIC_REGEX = /^[0-9]+$/;\n const ALPHA_NUMERIC_REGEX = /^[a-zA-Z0-9]+$/i;\n const regex = type === \"alphanumeric\" ? ALPHA_NUMERIC_REGEX : NUMERIC_REGEX;\n return regex.test(value);\n}\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const PinInputField = React.forwardRef(\n (\n {\n numberOfFields: length,\n onChange,\n type = \"number\",\n mask = false,\n isOTP = false,\n autoFocus = false,\n pasteFromClipboard = \"enabled\",\n focusFirstInputOnReset = true,\n isFullWidth,\n ariaLabel,\n ...props\n }: PinInputFieldProps,\n ref: React.Ref<PinInputFieldElementType>\n ) => {\n // REFS =====================================================================================================\n const pinInputFieldRef = useRef<PinInputFieldElementType>(null);\n const [inputRefs, setInputRefs] = useState<React.RefObject<HTMLInputElement>[]>([]);\n\n // STATES ===================================================================================================\n const [values, setValues] = useState<string[]>([]);\n const [moveFocus, setMoveFocus] = useState<boolean>(true);\n const [focusedIndex, setFocusedIndex] = useState<number>(-1);\n\n // CONSTANTS ================================================================================================\n const inputGroupId = props.id || `pin-input-${Math.random().toString(36).substring(2, 9)}`;\n const inputDescription = ariaLabel || 'Enter verification code';\n\n // HANDLERS =================================================================================================\n const focus = useCallback(\n (index: number) => {\n const ref = inputRefs[index];\n ref?.current?.focus();\n },\n [inputRefs]\n );\n\n const focusNext = useCallback(\n (index: number) => {\n if (!moveFocus) return;\n const next = index + 1 < length ? index + 1 : null;\n if (next) {\n focus(next);\n }\n },\n [focus, length, moveFocus]\n );\n\n const handleResetPinInput = useCallback(() => {\n setValues(Array(length).fill(\"\"));\n onChange?.(\"\"); // Clear the complete value\n if (focusFirstInputOnReset) {\n focus(0);\n setFocusedIndex(0);\n }\n }, [length, onChange, focus, focusFirstInputOnReset]);\n\n // VALUE HANDLING ==============================================================================================\n const setValue = useCallback(\n (value: string, index: number) => {\n const nextValues = [...values];\n nextValues[index] = value;\n setValues(nextValues);\n\n // Emit complete PIN value\n onChange?.(nextValues.join(\"\"));\n\n const isComplete =\n value !== \"\" &&\n nextValues.length === length &&\n nextValues.every((inputValue) => inputValue != null && inputValue !== \"\") &&\n index === length - 1;\n\n if (!isComplete) {\n setMoveFocus(true);\n focusNext(index);\n }\n },\n [focusNext, length, onChange, values]\n );\n\n // Updated input handler to work with both string values and events\n const handleInputChange = useCallback((inputValue: string | React.FormEvent<HTMLInputElement>, inputFieldIndex: number) => {\n // Extract value whether we get a string or an event\n const value = typeof inputValue === \"string\" ? inputValue : (inputValue.target as HTMLInputElement).value;\n const currentValue = values[inputFieldIndex];\n\n if (value === \"\") {\n setValue(\"\", inputFieldIndex);\n return;\n }\n\n // Rest of the logic remains the same\n if (value.length > 1 && inputFieldIndex < length - 1) {\n if (validate(value, type)) {\n let nextValue: string[] = [];\n const chars = value.split(\"\");\n\n if (currentValue === \"\") {\n nextValue = chars.filter((_, j) => inputFieldIndex + j < length);\n } else {\n const isAppending = inputRefs[inputFieldIndex].current?.selectionEnd === value.length;\n if (isAppending) {\n nextValue = chars.filter((_, j) => j > 0 && inputFieldIndex + j - 1 < length);\n } else {\n nextValue = chars.filter((_, j) => j < value.length - 1 && inputFieldIndex + j < length);\n }\n }\n\n const newValues = values.map((v, j) =>\n j >= inputFieldIndex && j < inputFieldIndex + nextValue.length\n ? nextValue[j - inputFieldIndex]\n : v\n );\n\n setValues(newValues);\n onChange?.(newValues.join(\"\"));\n\n const nextFocusIndex = Math.min(inputFieldIndex + nextValue.length, length - 1);\n focus(nextFocusIndex);\n }\n } else {\n let nextValue = value;\n if (currentValue?.length > 0) {\n nextValue = value.charAt(value.length - 1);\n }\n if (validate(nextValue, type)) {\n setValue(nextValue, inputFieldIndex);\n }\n }\n }, [length, onChange, setValue, type, values, focus, inputRefs]);\n\n const handleKeyDown = useCallback((event: React.KeyboardEvent<HTMLInputElement>, i: number) => {\n if (event.key === \"Backspace\") {\n if ((event.target as HTMLInputElement).value === \"\") {\n if (i > 0) {\n const newIndex = i - 1;\n setValue(\"\", newIndex);\n focus(newIndex);\n setMoveFocus(true);\n }\n } else {\n setMoveFocus(false);\n }\n } else if (event.key === \"Escape\") {\n inputRefs[i].current?.blur();\n handleBlur();\n } else if (event.key === \"ArrowRight\") {\n if (i < length - 1) {\n focus(i + 1);\n }\n } else if (event.key === \"ArrowLeft\") {\n if (i > 0) {\n focus(i - 1);\n }\n }\n }, [focus, setValue, inputRefs, length]);\n\n // EVENT HANDLERS ==============================================================================================\n // Updated focus handler to work with event type\n const handleFocus = useCallback((e: React.FocusEvent<HTMLInputElement> | undefined, i: number) => {\n setFocusedIndex(i);\n }, []);\n\n // When moving around the InputElements using tab key, browsers automatically select\n // the value (if it exists) in the InputElement - which we want to disable. Additionally,\n // when an existing value is selected/highlighted and pasted over, there is no way to\n // clearly distinguish between the other 2 scenarios of pasting by keeping the cursor before\n // and after the existing value. Specific example: If the existing value is 5, the event\n // when highlighting and pasting '567' is the same as placing the cursor before the existing\n // value and pasting '67'. By disabling this, we eliminate one of these cases.\n // Is this a hack? Yes. Is there a better way? IDK. Does it matter? Not unless there is a\n // valid reason for users to need selecting a single InputElement within a PinInput.\n const handleSelect = useCallback((e: React.SyntheticEvent<HTMLInputElement, Event>) => {\n const target = e.target as HTMLInputElement;\n setTimeout(() => {\n target.setSelectionRange(target.value.length, target.value.length);\n }, 0);\n }, []);\n\n const handleBlur = useCallback(() => {\n setFocusedIndex(-1);\n }, []);\n\n // EFFECTS =====================================================================================================\n useEffect(() => {\n setInputRefs((inputRefs) => {\n const refs = Array(length)\n .fill(0)\n .map((_, i) => {\n const ref = inputRefs[i] || createRef();\n if (autoFocus && i === 0) {\n ref.current?.focus();\n }\n return ref;\n });\n return refs;\n });\n }, [length, autoFocus]);\n\n useImperativeHandle(\n ref,\n () => ({\n ...(pinInputFieldRef.current as HTMLDivElement),\n reset: handleResetPinInput\n }) as PinInputFieldHandle,\n [handleResetPinInput]\n );\n\n // RENDER ==================================================================================================\n let classNames: string[] = [];\n\n if (isFullWidth) {\n classNames.push(\"full-width\");\n }\n\n return (\n <Div\n data-pin-input-field\n ref={pinInputFieldRef}\n classNames={isFullWidth ? [\"full-width\"] : []}\n role=\"group\"\n aria-label={inputDescription}\n aria-required={props.required}\n {...props}\n >\n {Array.from({ length }, (_, i) => (\n <InputField\n key={i}\n id={`${inputGroupId}-${i}`}\n ref={inputRefs[i]}\n type={mask ? \"password\" : type === \"number\" ? \"tel\" : \"text\"}\n inputMode={type === \"number\" ? \"numeric\" : \"text\"}\n onChange={(value: string | React.FormEvent<HTMLInputElement>) => handleInputChange(value, i)}\n onKeyDown={(e) => handleKeyDown(e, i)}\n onFocus={(e) => handleFocus(e as React.FocusEvent<HTMLInputElement>, i)}\n onSelect={handleSelect}\n onBlur={handleBlur}\n placeholder={focusedIndex !== i ? \"\\u2981\" : undefined}\n autoComplete={isOTP ? \"one-time-code\" : \"off\"}\n value={values[i] || \"\"}\n autoFocus={autoFocus && i === 0}\n onCopy={(e) => pasteFromClipboard === \"disabled\" && e.preventDefault()}\n onPaste={(e) => pasteFromClipboard === \"disabled\" && e.preventDefault()}\n aria-label={`Digit ${i + 1} of ${length}`}\n aria-required={props.required}\n />\n ))}\n </Div>\n );\n }\n);\nPinInputField.displayName = \"PinInputField\";\n","// REACT CORE ==========================================================================================================\nimport React, { useMemo, useRef, useEffect, useState, useCallback } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { Div } from \"$tags\";\nimport { Element } from \"$element\";\nimport { FormItem } from \"../FormItem/FormItem\";\nimport { SpacingTypes } from \"../../Element/constants\";\n\n// STYLES ==============================================================================================================\nimport \"./radio-tab-group.css\";\n\n// OTHER ===============================================================================================================\nimport { RadioTabGroupProps, RadioButtonElementType } from \"./constants\";\n\ninterface IndicatorPosition {\n width: number;\n transform: string;\n}\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const RadioTabGroup = React.forwardRef<HTMLDivElement, RadioTabGroupProps>(\n (\n {\n id,\n name,\n label,\n helpText,\n errorText,\n options,\n defaultValue,\n value,\n required,\n onChange,\n size = \"medium\",\n bgColour,\n disabled,\n ...props\n },\n ref\n ) => {\n const derivedName = useMemo(() => name || id, [name, id]);\n const optionsWrapperRef = useRef<HTMLDivElement>(null);\n\n const [indicatorPos, setIndicatorPos] = useState<IndicatorPosition>({\n width: 0,\n transform: \"translateX(0)\",\n });\n const [needsScroll, setNeedsScroll] = useState(false);\n const [scrollPosition, setScrollPosition] = useState(0);\n const [maxScroll, setMaxScroll] = useState(0);\n\n const labelsRef = useRef<(HTMLLabelElement | null)[]>([]);\n\n const measureWidths = useCallback(() => {\n if (!optionsWrapperRef.current) return;\n\n const wrapper = optionsWrapperRef.current;\n const inputWrapper = wrapper.closest(\"[data-input-wrapper]\");\n\n if (wrapper && inputWrapper) {\n const totalContentWidth = wrapper.scrollWidth;\n const availableWidth = inputWrapper.clientWidth;\n const needsToScroll = totalContentWidth > availableWidth;\n\n setNeedsScroll(needsToScroll);\n setMaxScroll(needsToScroll ? totalContentWidth - availableWidth : 0);\n }\n }, []);\n\n useEffect(() => {\n const wrapper = optionsWrapperRef.current;\n if (!wrapper) return;\n\n // Initial measurement\n measureWidths();\n\n // Set up observer for size changes\n const observer = new ResizeObserver(() => {\n measureWidths();\n });\n\n observer.observe(wrapper);\n if (wrapper.closest(\"[data-input-wrapper]\")) {\n observer.observe(wrapper.closest(\"[data-input-wrapper]\") as Element);\n }\n\n return () => observer.disconnect();\n }, [measureWidths]);\n\n // Update indicator position based on selected radio\n useEffect(() => {\n const selectedIndex = options.findIndex(option => option.value === value);\n if (selectedIndex >= 0) {\n const updateIndicator = () => {\n const label = labelsRef.current[selectedIndex];\n if (label) {\n const width = label.offsetWidth;\n let transform = \"translateX(0)\";\n\n if (selectedIndex > 0) {\n const offset = labelsRef.current\n .slice(0, selectedIndex)\n .reduce((acc, label) => acc + (label?.offsetWidth || 0), 0);\n transform = `translateX(${offset}px)`;\n }\n\n setIndicatorPos({ width, transform });\n }\n };\n\n // Wait for fonts to load before measuring to get correct widths\n if (document.fonts && document.fonts.ready) {\n document.fonts.ready.then(() => {\n requestAnimationFrame(() => {\n requestAnimationFrame(updateIndicator);\n });\n });\n } else {\n const timeoutId = setTimeout(updateIndicator, 100);\n return () => clearTimeout(timeoutId);\n }\n }\n }, [value, options]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n };\n\n const handleScroll = useCallback((direction: \"left\" | \"right\") => {\n const wrapper = optionsWrapperRef.current;\n if (!wrapper) return;\n\n const visibleWidth = wrapper.clientWidth;\n const scrollAmount = visibleWidth * 0.8;\n\n let newPosition = direction === \"right\"\n ? Math.min(scrollPosition + scrollAmount, maxScroll)\n : Math.max(scrollPosition - scrollAmount, 0);\n\n setScrollPosition(newPosition);\n\n requestAnimationFrame(() => {\n wrapper.style.transform = `translateX(-${newPosition}px)`;\n });\n }, [scrollPosition, maxScroll]);\n\n const canScrollLeft = scrollPosition > 0;\n const canScrollRight = scrollPosition < maxScroll;\n\n const classNames: string[] = [];\n if (size) {\n classNames.push(`size-${size}`);\n }\n\n return (\n <FormItem\n label={label}\n htmlFor={id}\n helpText={helpText}\n errorText={errorText}\n required={required}\n >\n <Element\n as=\"div\"\n data-radio-tab-group\n ref={ref}\n classNames={classNames}\n name={derivedName}\n {...props}\n >\n {/* LEFT SCROLL BUTTON */}\n {needsScroll && canScrollLeft && (\n <Div\n className=\"scroll-button left\"\n onClick={() => handleScroll(\"left\")}\n >\n <svg viewBox=\"0 0 24 24\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </Div>\n )}\n\n {/* RADIO OPTIONS */}\n <Div className=\"rtg-options-container\">\n <Div\n className=\"rtg-options-wrapper\"\n ref={optionsWrapperRef}\n >\n {/* INDICATOR */}\n <Div\n className=\"indicator\"\n style={{\n width: `${indicatorPos.width}px`,\n transform: indicatorPos.transform,\n }}\n />\n\n {options.map((option, index) => {\n const { id: optionId, ...optionProps } = option;\n const finalId = optionId || `${id}-option-${index}`;\n\n return (\n <React.Fragment key={finalId}>\n <input\n type=\"radio\"\n {...optionProps}\n id={finalId}\n name={derivedName}\n checked={value === option.value}\n disabled={disabled || option.disabled}\n onChange={handleChange}\n />\n <label\n ref={el => labelsRef.current[index] = el}\n htmlFor={finalId}\n >\n {option.label}\n </label>\n </React.Fragment>\n );\n })}\n </Div>\n\n {/* RIGHT SCROLL BUTTON */}\n {needsScroll && canScrollRight && (\n <Div\n className=\"scroll-button right\"\n onClick={() => handleScroll(\"right\")}\n >\n <svg viewBox=\"0 0 24 24\">\n <polyline points=\"9 6 15 12 9 18\" />\n </svg>\n </Div>\n )}\n </Div>\n </Element>\n </FormItem>\n );\n }\n);\nRadioTabGroup.displayName = \"RadioTabGroup\";\n","// REACT CORE ==========================================================================================================\nimport React, { useCallback, useRef, useState, useEffect } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps } from \"../../Element/constants\";\nimport { Div } from \"../../Element/Tags\";\nimport { FormItem } from \"../FormItem/FormItem\";\nimport { InputLabel } from \"../InputLabel/InputLabel\";\nimport { Text } from \"../../Typography/Text\";\n\n// STYLES ==============================================================================================================\nimport \"./range.css\";\n\n// Single-thumb range\nexport interface SingleRangeCustomProps {\n min?: number;\n max?: number;\n step?: number;\n suffix?: string;\n value?: number;\n onChange?: (value: number) => void;\n}\n\n// Dual-thumb range\nexport interface DualRangeCustomProps {\n min?: number;\n max?: number;\n step?: number;\n suffix?: string;\n value?: [number, number];\n onChange?: (value: [number, number]) => void;\n minLabel?: string;\n maxLabel?: string;\n}\n\nexport type RangeElementType = HTMLInputElement;\n\n// Separate prop types for each mode\nexport type SingleRangeProps = Omit<CommonAndHTMLProps<RangeElementType>, \"onChange\" | \"value\"> &\n SingleRangeCustomProps & {\n label?: string;\n helpText?: string;\n errorText?: string;\n };\n\nexport type DualRangeProps = Omit<CommonAndHTMLProps<RangeElementType>, \"onChange\" | \"value\"> &\n DualRangeCustomProps & {\n label?: string;\n helpText?: string;\n errorText?: string;\n };\n\nexport type RangeProps = SingleRangeProps | DualRangeProps;\n\n// Type guard to check if props are for dual-thumb mode\nfunction isDualRangeProps(props: RangeProps): props is DualRangeProps {\n return Array.isArray(props.value);\n}\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Range = React.forwardRef<RangeElementType, RangeProps>(\n (props, ref) => {\n if (isDualRangeProps(props)) {\n return <DualThumbRange {...props} forwardedRef={ref} />;\n }\n return <SingleThumbRange {...props} forwardedRef={ref} />;\n }\n);\nRange.displayName = \"Range\";\n\n// SINGLE THUMB COMPONENT //////////////////////////////////////////////////////////////////////////////////////////////\ninterface SingleThumbRangeInternalProps extends SingleRangeProps {\n forwardedRef?: React.Ref<RangeElementType>;\n}\n\nconst SingleThumbRange: React.FC<SingleThumbRangeInternalProps> = ({\n label,\n helpText,\n errorText,\n value = 0,\n suffix,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n id,\n disabled,\n ...props\n}) => {\n const thumbRef = useRef<HTMLButtonElement>(null);\n const trackRef = useRef<HTMLDivElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [isActive, setIsActive] = useState(false);\n\n // Clamp value to valid range\n const clampedValue = Math.max(min, Math.min(max, value));\n\n // Convert value to percentage position\n const getPercent = useCallback((val: number) => {\n if (max <= min) return 0;\n const clamped = Math.max(min, Math.min(max, val));\n return ((clamped - min) / (max - min)) * 100;\n }, [min, max]);\n\n // Convert mouse/touch position to value\n const getValueFromPosition = useCallback((clientX: number) => {\n if (!trackRef.current) return min;\n\n const rect = trackRef.current.getBoundingClientRect();\n const percent = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\n const rawValue = min + percent * (max - min);\n\n // Snap to step\n const steppedValue = Math.round(rawValue / step) * step;\n return Math.max(min, Math.min(max, steppedValue));\n }, [min, max, step]);\n\n // Handle drag\n const handleDrag = useCallback((clientX: number) => {\n const newValue = getValueFromPosition(clientX);\n onChange?.(newValue);\n }, [getValueFromPosition, onChange]);\n\n // Mouse events\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n if (disabled) return;\n e.preventDefault();\n setIsDragging(true);\n setIsActive(true);\n handleDrag(e.clientX);\n }, [disabled, handleDrag]);\n\n useEffect(() => {\n if (!isDragging) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n handleDrag(e.clientX);\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [isDragging, handleDrag]);\n\n // Touch events\n const handleTouchStart = useCallback((e: React.TouchEvent) => {\n if (disabled) return;\n setIsDragging(true);\n setIsActive(true);\n handleDrag(e.touches[0].clientX);\n }, [disabled, handleDrag]);\n\n useEffect(() => {\n if (!isDragging) return;\n\n const handleTouchMove = (e: TouchEvent) => {\n e.preventDefault();\n handleDrag(e.touches[0].clientX);\n };\n\n const handleTouchEnd = () => {\n setIsDragging(false);\n };\n\n document.addEventListener(\"touchmove\", handleTouchMove, { passive: false });\n document.addEventListener(\"touchend\", handleTouchEnd);\n\n return () => {\n document.removeEventListener(\"touchmove\", handleTouchMove);\n document.removeEventListener(\"touchend\", handleTouchEnd);\n };\n }, [isDragging, handleDrag]);\n\n // Keyboard navigation\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (disabled) return;\n\n let newValue = clampedValue;\n\n switch (e.key) {\n case \"ArrowRight\":\n case \"ArrowUp\":\n e.preventDefault();\n newValue = Math.min(clampedValue + step, max);\n break;\n case \"ArrowLeft\":\n case \"ArrowDown\":\n e.preventDefault();\n newValue = Math.max(clampedValue - step, min);\n break;\n case \"Home\":\n e.preventDefault();\n newValue = min;\n break;\n case \"End\":\n e.preventDefault();\n newValue = max;\n break;\n case \"PageUp\":\n e.preventDefault();\n newValue = Math.min(clampedValue + step * 10, max);\n break;\n case \"PageDown\":\n e.preventDefault();\n newValue = Math.max(clampedValue - step * 10, min);\n break;\n default:\n return;\n }\n\n onChange?.(newValue);\n }, [disabled, clampedValue, min, max, step, onChange]);\n\n const percent = getPercent(clampedValue);\n\n return (\n <FormItem\n customLabel={label && (\n <Div data-range-meta>\n <InputLabel\n className=\"range-label\"\n label={label}\n htmlFor={id}\n />\n <Text className=\"range-value\">\n {clampedValue}{suffix && suffix}\n </Text>\n </Div>\n )}\n helpText={helpText}\n errorText={errorText}\n >\n <Div\n ref={trackRef}\n data-range-single\n className={disabled ? \"disabled\" : \"\"}\n role=\"group\"\n aria-labelledby={label ? `${id}-label` : undefined}\n >\n {/* Track background */}\n <Div className=\"range-track\" aria-hidden=\"true\" />\n\n {/* Filled track from start to thumb */}\n <Div\n className=\"range-track-fill\"\n style={{\n left: \"0%\",\n right: `${100 - percent}%`,\n }}\n aria-hidden=\"true\"\n />\n\n {/* Thumb */}\n <button\n ref={thumbRef}\n id={id}\n type=\"button\"\n className=\"range-thumb\"\n style={{ left: `${percent}%` }}\n disabled={disabled}\n onMouseDown={handleMouseDown}\n onTouchStart={handleTouchStart}\n onKeyDown={handleKeyDown}\n onFocus={() => setIsActive(true)}\n onBlur={() => setIsActive(false)}\n data-active={isActive || isDragging}\n role=\"slider\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={clampedValue}\n aria-valuetext={`${clampedValue}${suffix ? ` ${suffix}` : \"\"}`}\n aria-orientation=\"horizontal\"\n />\n </Div>\n </FormItem>\n );\n};\n\nSingleThumbRange.displayName = \"SingleThumbRange\";\n\n// DUAL THUMB COMPONENT ////////////////////////////////////////////////////////////////////////////////////////////////\ninterface DualThumbRangeInternalProps extends DualRangeProps {\n forwardedRef?: React.Ref<RangeElementType>;\n}\n\nconst DualThumbRange: React.FC<DualThumbRangeInternalProps> = ({\n label,\n helpText,\n errorText,\n value = [0, 100],\n suffix,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n minLabel = \"Minimum value\",\n maxLabel = \"Maximum value\",\n id,\n disabled,\n ...props\n}) => {\n const [rawMinValue, rawMaxValue] = value;\n // Clamp values to valid range\n const minValue = Math.max(min, Math.min(max, rawMinValue));\n const maxValue = Math.max(min, Math.min(max, rawMaxValue));\n\n const minThumbRef = useRef<HTMLButtonElement>(null);\n const maxThumbRef = useRef<HTMLButtonElement>(null);\n const trackRef = useRef<HTMLDivElement>(null);\n const [isDragging, setIsDragging] = useState<\"min\" | \"max\" | null>(null);\n const [activeThumb, setActiveThumb] = useState<\"min\" | \"max\" | null>(null);\n\n // Convert value to percentage position\n const getPercent = useCallback((val: number) => {\n if (max <= min) return 0;\n const clamped = Math.max(min, Math.min(max, val));\n return ((clamped - min) / (max - min)) * 100;\n }, [min, max]);\n\n // Convert mouse/touch position to value\n const getValueFromPosition = useCallback((clientX: number) => {\n if (!trackRef.current) return min;\n\n const rect = trackRef.current.getBoundingClientRect();\n const percent = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\n const rawValue = min + percent * (max - min);\n\n // Snap to step\n const steppedValue = Math.round(rawValue / step) * step;\n return Math.max(min, Math.min(max, steppedValue));\n }, [min, max, step]);\n\n // Handle drag for either thumb\n const handleDrag = useCallback((clientX: number, thumb: \"min\" | \"max\") => {\n const newValue = getValueFromPosition(clientX);\n\n if (thumb === \"min\") {\n const clampedMin = Math.min(newValue, maxValue - step);\n onChange?.([clampedMin, maxValue]);\n } else {\n const clampedMax = Math.max(newValue, minValue + step);\n onChange?.([minValue, clampedMax]);\n }\n }, [getValueFromPosition, minValue, maxValue, step, onChange]);\n\n // Mouse events\n const handleMouseDown = useCallback((thumb: \"min\" | \"max\") => (e: React.MouseEvent) => {\n if (disabled) return;\n e.preventDefault();\n setIsDragging(thumb);\n setActiveThumb(thumb);\n handleDrag(e.clientX, thumb);\n }, [disabled, handleDrag]);\n\n useEffect(() => {\n if (!isDragging) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n handleDrag(e.clientX, isDragging);\n };\n\n const handleMouseUp = () => {\n setIsDragging(null);\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [isDragging, handleDrag]);\n\n // Touch events\n const handleTouchStart = useCallback((thumb: \"min\" | \"max\") => (e: React.TouchEvent) => {\n if (disabled) return;\n setIsDragging(thumb);\n setActiveThumb(thumb);\n handleDrag(e.touches[0].clientX, thumb);\n }, [disabled, handleDrag]);\n\n useEffect(() => {\n if (!isDragging) return;\n\n const handleTouchMove = (e: TouchEvent) => {\n e.preventDefault();\n handleDrag(e.touches[0].clientX, isDragging);\n };\n\n const handleTouchEnd = () => {\n setIsDragging(null);\n };\n\n document.addEventListener(\"touchmove\", handleTouchMove, { passive: false });\n document.addEventListener(\"touchend\", handleTouchEnd);\n\n return () => {\n document.removeEventListener(\"touchmove\", handleTouchMove);\n document.removeEventListener(\"touchend\", handleTouchEnd);\n };\n }, [isDragging, handleDrag]);\n\n // Keyboard navigation\n const handleKeyDown = useCallback((thumb: \"min\" | \"max\") => (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n const currentValue = thumb === \"min\" ? minValue : maxValue;\n let newValue = currentValue;\n\n switch (e.key) {\n case \"ArrowRight\":\n case \"ArrowUp\":\n e.preventDefault();\n newValue = Math.min(currentValue + step, max);\n break;\n case \"ArrowLeft\":\n case \"ArrowDown\":\n e.preventDefault();\n newValue = Math.max(currentValue - step, min);\n break;\n case \"Home\":\n e.preventDefault();\n newValue = thumb === \"min\" ? min : minValue + step;\n break;\n case \"End\":\n e.preventDefault();\n newValue = thumb === \"max\" ? max : maxValue - step;\n break;\n case \"PageUp\":\n e.preventDefault();\n newValue = Math.min(currentValue + step * 10, max);\n break;\n case \"PageDown\":\n e.preventDefault();\n newValue = Math.max(currentValue - step * 10, min);\n break;\n default:\n return;\n }\n\n if (thumb === \"min\") {\n const clampedMin = Math.min(newValue, maxValue - step);\n onChange?.([clampedMin, maxValue]);\n } else {\n const clampedMax = Math.max(newValue, minValue + step);\n onChange?.([minValue, clampedMax]);\n }\n }, [disabled, minValue, maxValue, min, max, step, onChange]);\n\n const minPercent = getPercent(minValue);\n const maxPercent = getPercent(maxValue);\n\n return (\n <FormItem\n customLabel={label && (\n <Div data-range-meta>\n <InputLabel\n className=\"range-label\"\n label={label}\n htmlFor={id}\n />\n <Text className=\"range-value\">\n {minValue}–{maxValue}{suffix && suffix}\n </Text>\n </Div>\n )}\n helpText={helpText}\n errorText={errorText}\n >\n <Div\n ref={trackRef}\n data-range-dual\n className={disabled ? \"disabled\" : \"\"}\n role=\"group\"\n aria-labelledby={label ? `${id}-label` : undefined}\n >\n {/* Track background */}\n <Div className=\"range-track\" aria-hidden=\"true\" />\n\n {/* Filled track between thumbs */}\n <Div\n className=\"range-track-fill\"\n style={{\n left: `${minPercent}%`,\n right: `${100 - maxPercent}%`,\n }}\n aria-hidden=\"true\"\n />\n\n {/* Min thumb */}\n <button\n ref={minThumbRef}\n id={`${id}-min`}\n type=\"button\"\n className=\"range-thumb range-thumb-min\"\n style={{ left: `${minPercent}%` }}\n disabled={disabled}\n onMouseDown={handleMouseDown(\"min\")}\n onTouchStart={handleTouchStart(\"min\")}\n onKeyDown={handleKeyDown(\"min\")}\n onFocus={() => setActiveThumb(\"min\")}\n onBlur={() => setActiveThumb(null)}\n data-active={activeThumb === \"min\" || isDragging === \"min\"}\n role=\"slider\"\n aria-label={minLabel}\n aria-valuemin={min}\n aria-valuemax={maxValue - step}\n aria-valuenow={minValue}\n aria-valuetext={`${minValue}${suffix ? ` ${suffix}` : \"\"}`}\n aria-orientation=\"horizontal\"\n />\n\n {/* Max thumb */}\n <button\n ref={maxThumbRef}\n id={`${id}-max`}\n type=\"button\"\n className=\"range-thumb range-thumb-max\"\n style={{ left: `${maxPercent}%` }}\n disabled={disabled}\n onMouseDown={handleMouseDown(\"max\")}\n onTouchStart={handleTouchStart(\"max\")}\n onKeyDown={handleKeyDown(\"max\")}\n onFocus={() => setActiveThumb(\"max\")}\n onBlur={() => setActiveThumb(null)}\n data-active={activeThumb === \"max\" || isDragging === \"max\"}\n role=\"slider\"\n aria-label={maxLabel}\n aria-valuemin={minValue + step}\n aria-valuemax={max}\n aria-valuenow={maxValue}\n aria-valuetext={`${maxValue}${suffix ? ` ${suffix}` : \"\"}`}\n aria-orientation=\"horizontal\"\n />\n </Div>\n </FormItem>\n );\n};\n\nDualThumbRange.displayName = \"DualThumbRange\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./meter.css\";\n\n// OTHER ===============================================================================================================\nimport { Text } from \"../Typography/Text\";\n\nexport interface MeterLabelCustomProps {\n suffix ? : string;\n}\n\n// prettier-ignore\nexport interface MeterCustomProps extends Omit<CommonAndHTMLProps<HTMLMeterElement>, \"value\"> {\n min : number;\n max : number;\n low : number;\n high : number;\n value : number;\n optimum ? : number;\n showOptimumMarker ? : boolean;\n suffix ? : string;\n height ? : string;\n ariaLabel ? : string;\n description ? : string;\n}\n\nexport type MeterElementType = HTMLMeterElement;\nexport type MeterProps = MeterCustomProps;\nexport type MeterMetaProps = Omit<CommonAndHTMLProps<HTMLDivElement>, keyof MeterLabelCustomProps> &\n MeterLabelCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Meter = React.forwardRef(\n ({\n label,\n value,\n height,\n suffix,\n showOptimumMarker,\n ariaLabel,\n description,\n min,\n max,\n low,\n high,\n optimum,\n ...props\n } : MeterProps, ref : React.Ref<MeterElementType>) => {\n const optimumPositionPercent = optimum ? (\n (optimum - min) / (max - min)\n ) * 100 : 0;\n\n const getValueDescription = () => {\n const percentage = (\n (value - min) / (max - min)\n ) * 100;\n let status : string;\n\n if (value <= low) {\n status = \"Low\";\n } else if (value >= high) {\n status = \"High\";\n } else {\n status = \"Normal\";\n }\n\n return `Current value is ${value}${suffix || \"\"} (${percentage.toFixed(1)}%). Status: ${status}`;\n };\n\n return (\n <div\n role=\"region\"\n aria-label={ariaLabel || \"Meter indicator\"}\n >\n {label && (\n <Element<HTMLDivElement>\n as=\"div\"\n data-meter-meta\n id={`meter-label-${label.toLowerCase().replace(/\\s+/g, \"-\")}`}\n >\n <Text>{label}</Text>\n <Text>\n {value}\n {suffix && suffix}\n </Text>\n </Element>\n )}\n\n <div\n className=\"meter-wrapper\"\n role=\"presentation\"\n >\n <Element<MeterElementType>\n as=\"meter\"\n data-meter\n ref={ref}\n value={value}\n min={min}\n max={max}\n low={low}\n high={high}\n optimum={optimum}\n {...props}\n style={{ height }}\n aria-label={label || ariaLabel || \"Progress meter\"}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-valuetext={getValueDescription()}\n aria-describedby={description ? `meter-description-${label?.toLowerCase()\n .replace(/\\s+/g, \"-\")}` : undefined}\n />\n\n {showOptimumMarker && optimum && (\n <div\n className=\"optimum-marker\"\n style={{ left : `calc(${optimumPositionPercent}% - var(--meter-border-width))` }}\n title={`Optimum: ${optimum}`}\n role=\"presentation\"\n aria-hidden=\"true\"\n />\n )}\n </div>\n\n {description && (\n <div\n id={`meter-description-${label?.toLowerCase().replace(/\\s+/g, \"-\")}`}\n className=\"sr-only\"\n >\n {description}\n </div>\n )}\n </div>\n );\n },\n);\nMeter.displayName = \"Meter\";","// REACT CORE ==========================================================================================================\nimport React, { useEffect } from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./modal.css\";\n\n// OTHER ===============================================================================================================\nimport { Text } from \"$/components\";\n\nexport type ModalElementType = HTMLDivElement;\n\nexport interface ModalCustomProps {\n id : string;\n isOpen ? : boolean;\n onClose ? : () => void;\n isDismissible ? : boolean;\n showBackdrop ? : boolean;\n blurBackdrop ? : boolean;\n label ? : string;\n description ? : string;\n}\n\nexport type ModalProps = Omit<CommonAndHTMLProps<ModalElementType>, keyof ModalCustomProps> & ModalCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Modal = React.forwardRef(\n (\n {\n id,\n children,\n classNames = [],\n isOpen = false,\n onClose,\n isDismissible = true,\n showBackdrop,\n blurBackdrop,\n label,\n description,\n ...props\n }: ModalProps, ref: React.Ref<ModalElementType>,\n ) => {\n const modalId = `${id}`;\n const descriptionId = description ? `${modalId}-description` : undefined;\n\n if (showBackdrop) {\n classNames.push(\"show-backdrop\");\n }\n\n if (blurBackdrop) {\n classNames.push(\"blur-backdrop\");\n }\n\n // Handle open/close state declaratively\n useEffect(() => {\n const modal = document.querySelector(`#${modalId}[data-modal]`);\n if (!modal || !(modal instanceof HTMLElement)) return;\n\n if (isOpen) {\n // Show modal\n modal.showPopover();\n\n // Focus first focusable element\n const focusableElements = modal.querySelectorAll(\n \"button, [href], input, select, textarea, [tabindex]:not([tabindex=\\\"-1\\\"])\",\n );\n if (focusableElements.length) {\n (focusableElements[0] as HTMLElement).focus();\n }\n } else {\n // Hide modal\n if (modal.matches(\":popover-open\")) {\n modal.hidePopover();\n }\n }\n }, [isOpen, modalId]);\n\n // Handle Escape key\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\" && isDismissible && isOpen && onClose) {\n onClose();\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [isDismissible, isOpen, onClose]);\n\n return (\n <Element<ModalElementType>\n as=\"dialog\"\n id={modalId}\n data-modal\n // @ts-ignore\n popover={isDismissible ? \"auto\" : \"manual\"}\n ref={ref}\n classNames={classNames}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={label || \"Modal dialog\"}\n aria-describedby={descriptionId}\n {...props}\n >\n {isDismissible && onClose && (\n <Text\n className=\"dismiss-button\"\n onClick={onClose}\n aria-label=\"Close modal\"\n tabIndex={0}\n >\n ×\n </Text>\n )}\n {description && (\n <div id={descriptionId} className=\"sr-only\">\n {description}\n </div>\n )}\n <div role=\"document\">\n {children}\n </div>\n </Element>\n );\n },\n);\nModal.displayName = \"Modal\";\n\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps } from \"../../Element/constants\";\n\n// STYLES ==============================================================================================================\nimport \"./notifications-wrapper.css\";\n\n// OTHER ===============================================================================================================\nimport { Element } from \"$element\";\n\n// prettier-ignore\nexport interface NotificationsWrapperCustomProps {\n position ? : \"left\" | \"right\";\n anchor ? : \"top\" | \"bottom\";\n order ? : \"new-on-top\" | \"new-on-bottom\";\n label ? : string;\n}\n\nexport type NotificationsWrapperElementType = HTMLDivElement;\nexport type NotificationsWrapperProps = CommonAndHTMLProps<NotificationsWrapperElementType> &\n NotificationsWrapperCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const NotificationsWrapper = React.forwardRef(\n (\n {\n position = \"right\",\n anchor = \"top\",\n order = \"new-on-top\",\n children,\n label,\n ...props\n }: NotificationsWrapperProps,\n ref: React.Ref<NotificationsWrapperElementType>\n ) => {\n let classNames = [];\n if (position) classNames.push(position);\n if (anchor) classNames.push(anchor);\n if (order) classNames.push(order);\n\n const childrenCount = React.Children.count(children);\n if (childrenCount === 0) return null;\n\n return (\n <Element<NotificationsWrapperElementType>\n as=\"section\"\n data-notifications-wrapper\n ref={ref}\n classNames={classNames}\n aria-label={label || \"Notifications\"}\n aria-relevant=\"additions removals\"\n role=\"log\"\n {...props}\n >\n {children}\n </Element>\n );\n }\n);\nNotificationsWrapper.displayName = \"NotificationsWrapper\";\n","// REACT CORE ==========================================================================================================\nimport React, { useState, useEffect, SyntheticEvent } from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps } from \"../../Element/constants\";\nimport { Div } from \"../../Element/Tags\";\n\n// STYLES ==============================================================================================================\nimport \"./notification-item.css\";\n\n// OTHER ===============================================================================================================\nimport { Element } from \"$element\";\n\n// prettier-ignore\nexport interface NotificationItemCustomProps {\n kind ? : \"info\" | \"warning\" | \"error\" | \"success\";\n showWhen : boolean;\n isDismissible ? : boolean;\n closeWhen : () => void;\n secondsToShowFor ? : number;\n title ? : string;\n description ? : string;\n}\n\nexport type NotificationItemElementType = HTMLDivElement;\nexport type NotificationItemProps =\n Omit<CommonAndHTMLProps<NotificationItemElementType>, keyof NotificationItemCustomProps>\n & NotificationItemCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const NotificationItem = React.forwardRef(\n (\n {\n showWhen,\n closeWhen,\n kind = \"info\",\n children,\n isDismissible,\n secondsToShowFor,\n title,\n description,\n ...props\n }: NotificationItemProps,\n ref: React.Ref<NotificationItemElementType>,\n ) => {\n let classNames: string[] = [];\n const [ isVisible, setIsVisible ] = useState<boolean>(showWhen);\n\n useEffect(() => {\n if (showWhen) {\n setIsVisible(true);\n }\n\n const timer = showWhen\n ? setTimeout(() => {\n closeWhen();\n }, (secondsToShowFor ?? 8) * 1000) // Default value is 8 seconds\n : undefined;\n\n return () => {\n timer && clearTimeout(timer);\n };\n }, [ showWhen, secondsToShowFor, closeWhen ]);\n\n if (kind) {\n classNames.push(kind);\n }\n\n if (isDismissible) {\n classNames.push(\"dismissible\");\n }\n\n const onDismissClick = (event: React.MouseEvent<HTMLDivElement>) => {\n event.preventDefault();\n closeWhen();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n closeWhen();\n }\n };\n\n const onTransitionEnd = () => {\n if (!showWhen) setIsVisible(false);\n };\n\n // Map notification types to ARIA roles\n const roleMap = {\n info : \"status\",\n warning : \"alert\",\n error : \"alert\",\n success : \"status\",\n };\n\n return (\n isVisible && (\n <Element<NotificationItemElementType>\n as=\"div\"\n data-notification-item\n ref={ref}\n classNames={[ ...classNames, !showWhen ? \"dismissed\" : \"\" ]}\n onTransitionEnd={onTransitionEnd}\n role={roleMap[kind]}\n aria-live={kind === \"error\" || kind === \"warning\" ? \"assertive\" : \"polite\"}\n aria-atomic=\"true\"\n aria-label={title}\n {...props}\n >\n <div id={`notification-content-${props.id}`}>\n {children}\n {description && <span className=\"sr-only\">{description}</span>}\n </div>\n\n {isDismissible && (\n <Div\n className=\"dismiss-button\"\n onClick={onDismissClick}\n onKeyDown={handleKeyDown}\n aria-label=\"Dismiss notification\"\n tabIndex={0}\n >\n <span className=\"sr-only\">Close notification</span>\n </Div>\n )}\n </Element>\n )\n );\n },\n);\nNotificationItem.displayName = \"NotificationItem\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./spinner.css\";\n\n// prettier-ignore\nexport interface SpinnerCustomProps {\n size ? : \"tiny\" | \"small\" | \"medium\" | \"large\" | \"huge\";\n loadingText ? : string;\n // Custom loading message for screen readers\n}\n\nexport type SpinnerElementType = HTMLDivElement;\nexport type SpinnerProps = Omit<CommonAndHTMLProps<SpinnerElementType>, keyof SpinnerCustomProps> & SpinnerCustomProps;\n\n// COMPONENT //////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Spinner = React.forwardRef((\n {\n size = \"medium\",\n loadingText = \"Loading...\",\n ...props\n }: SpinnerProps,\n ref: React.Ref<SpinnerElementType>,\n ) => {\n let classNames = [];\n\n if (size) {\n classNames.push(`size-${size}`);\n }\n\n return (\n <Element<SpinnerElementType>\n as=\"div\"\n data-spinner\n ref={ref}\n classNames={classNames}\n role=\"status\"\n aria-busy=\"true\"\n aria-live=\"polite\"\n aria-label={loadingText}\n {...props}\n />\n );\n },\n);\nSpinner.displayName = \"Spinner\";\n","const range = (start: number, end: number) => {\n const length = end - start + 1;\n return Array.from({ length }, (_, i) => start + i);\n};\n\ninterface UsePaginationProps {\n totalItems : number;\n currentPage : number;\n itemsToShowEachSide : number;\n}\n\ninterface UsePaginationResult {\n items: (number | string)[];\n totalPages: number;\n rangeStart: number;\n rangeEnd: number;\n hasPrevPage: boolean;\n hasNextPage: boolean;\n}\n\nexport const usePagination = (\n {\n totalItems,\n currentPage,\n itemsToShowEachSide,\n }: UsePaginationProps): UsePaginationResult => {\n const totalPages = totalItems; // Each item gets its own page\n\n const items = (() => {\n const totalNumbers = itemsToShowEachSide * 2 + 1;\n let pageNumbers: (number | string)[] = [];\n\n if (totalPages <= totalNumbers) {\n // If we have fewer pages than the desired display count, show all pages\n pageNumbers = range(1, totalPages);\n } else {\n const leftSideNumbers = Math.min(currentPage - 1, itemsToShowEachSide);\n const rightSideNumbers = Math.min(totalPages - currentPage, itemsToShowEachSide);\n\n // Always show first page\n pageNumbers.push(1);\n\n // Add ellipsis after first page if needed\n if (currentPage - itemsToShowEachSide > 2) {\n pageNumbers.push(\"...\");\n }\n\n // Add pages around current page\n const rangeStart = Math.max(2, currentPage - leftSideNumbers);\n const rangeEnd = Math.min(totalPages - 1, currentPage + rightSideNumbers);\n pageNumbers.push(...range(rangeStart, rangeEnd));\n\n // Add ellipsis before last page if needed\n if (totalPages - currentPage > itemsToShowEachSide + 1) {\n pageNumbers.push(\"...\");\n }\n\n // Always show last page if we're not already at it\n if (rangeEnd < totalPages) {\n pageNumbers.push(totalPages);\n }\n }\n\n return pageNumbers;\n })();\n\n return {\n items,\n totalPages,\n rangeStart: currentPage,\n rangeEnd: currentPage,\n hasPrevPage: currentPage > 1,\n hasNextPage: currentPage < totalPages,\n };\n};\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { Div } from \"../Element/Tags\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./pagination.css\";\n\n// OTHER ===============================================================================================================\nimport { Button } from \"../Button/Button\";\nimport { PaginationProps, PaginationElementType, RenderItemProps } from \"./constants\";\nimport { Spinner } from \"../Spinner/Spinner\";\nimport { Text } from \"../Typography/Text\";\nimport { usePagination } from \"./usePagination\";\n\nconst defaultRenderItem = (\n {\n type,\n page,\n selected,\n disabled,\n onClick,\n key,\n ...props\n }: RenderItemProps) => {\n if (type === \"ellipsis\") {\n return (\n <Text className=\"pagination-ellipsis\">...</Text>\n );\n }\n\n const paginationItemProps = {\n type : \"button\",\n className : `pagination-item ${selected ? \"selected\" : \"\"} ${disabled ? \"disabled\" : \"\"}`,\n onClick,\n disabled,\n ...props,\n };\n\n let content;\n switch (type) {\n case \"first\":\n content = content = (\n <svg viewBox=\"0 0 24 24\">\n <line x1=\"5\" y1=\"18\" x2=\"5\" y2=\"6\" />\n <polyline points=\"14 18 9 12 14 6\" />\n <line x1=\"10\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n );\n break;\n case \"previous\":\n content = (\n <svg viewBox=\"0 0 24 24\">\n <polyline points=\"12 18 7 12 12 6\" />\n <line x1=\"8\" y1=\"12\" x2=\"17\" y2=\"12\" />\n </svg>\n );\n break;\n case \"next\":\n content = content = (\n <svg viewBox=\"0 0 24 24\">\n <polyline points=\"12 6 17 12 12 18\" />\n <line x1=\"16\" y1=\"12\" x2=\"7\" y2=\"12\" />\n </svg>\n );\n break;\n case \"last\":\n content = content = (\n <svg viewBox=\"0 0 24 24\">\n <polyline points=\"10 6 15 12 10 18\" />\n <line x1=\"19\" y1=\"6\" x2=\"19\" y2=\"18\" />\n <line x1=\"14\" y1=\"12\" x2=\"5\" y2=\"12\" />\n </svg>\n );\n break;\n default:\n content = page;\n }\n\n return (\n <Button\n kind=\"custom\"\n {...paginationItemProps}\n >\n {content}\n </Button>\n );\n};\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Pagination = React.forwardRef(\n (\n {\n totalItems,\n currentPage,\n onPageChange,\n itemsToShowEachSide = 1,\n kind = \"plain\",\n showGoToFirstItemButton = true,\n showGoToLastItemButton = true,\n showPreviousButton = true,\n showNextButton = true,\n showGoToInput = false,\n disabled = false,\n hideDisabledButtons = false,\n renderItem = defaultRenderItem,\n isLoading = false,\n loadingText,\n emptyText,\n itemDisplayText = \"page\",\n ...props\n }: PaginationProps, ref: React.Ref<PaginationElementType>) => {\n const {\n items,\n totalPages,\n rangeStart,\n rangeEnd,\n hasPrevPage,\n hasNextPage,\n } = usePagination({\n totalItems,\n currentPage,\n itemsToShowEachSide,\n });\n\n const [ goToPage, setGoToPage ] = React.useState(\"\");\n\n const handlePageInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setGoToPage(e.target.value);\n };\n\n const handlePageInputKeyPress = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n const page = parseInt(goToPage);\n if (!isNaN(page) && page >= 1 && page <= totalPages) {\n onPageChange(page);\n setGoToPage(\"\");\n }\n }\n };\n\n if (totalItems === 0) {\n return <Text className=\"pagination-empty\">{emptyText || \"No items to display\"}</Text>;\n }\n\n let classNames = [ \"pagination\" ];\n\n if (kind) {\n classNames.push(kind);\n }\n\n if (disabled) {\n classNames.push(\"disabled\");\n }\n\n if (isLoading) {\n classNames.push(\"loading\");\n }\n\n return (\n <Element<PaginationElementType>\n as=\"nav\"\n data-pagination\n ref={ref}\n classNames={classNames}\n role=\"navigation\"\n aria-label=\"pagination\"\n {...props}\n >\n <Div className=\"pagination-controls\">\n {/* GO TO FIRST ITEM */}\n {showGoToFirstItemButton && (!hideDisabledButtons || hasPrevPage) && renderItem({\n type : \"first\",\n disabled : !hasPrevPage || disabled,\n selected : false,\n onClick : () => onPageChange(1),\n })}\n\n {/* GO TO PREVIOUS ITEM */}\n {showPreviousButton && (!hideDisabledButtons || hasPrevPage) && renderItem({\n type : \"previous\",\n disabled : !hasPrevPage || disabled,\n selected : false,\n onClick : () => onPageChange(currentPage - 1),\n })}\n\n {/* SHOW PAGE ITEM OR ELLIPSIS */}\n {items.map((item, index) => {\n const itemProps: RenderItemProps = item === \"...\"\n ? {\n key : `ellipsis-${index}`,\n type : \"ellipsis\",\n selected : false,\n disabled : true,\n }\n : {\n key : item.toString(),\n type : \"page\",\n page : item as number,\n selected : item === currentPage,\n disabled : disabled,\n \"aria-current\" : item === currentPage ? \"page\" : undefined,\n onClick : () => onPageChange(item as number),\n };\n\n return renderItem(itemProps);\n })}\n\n {/* GO TO NEXT ITEM */}\n {showNextButton && (!hideDisabledButtons || hasNextPage) && renderItem({\n type : \"next\",\n disabled : !hasNextPage || disabled,\n selected : false,\n onClick : () => onPageChange(currentPage + 1),\n })}\n\n {/* GO TO LAST ITEM */}\n {showGoToLastItemButton && (!hideDisabledButtons || hasNextPage) && renderItem({\n type : \"last\",\n disabled : !hasNextPage || disabled,\n selected : false,\n onClick : () => onPageChange(totalPages),\n })}\n\n {isLoading && (\n <Div className=\"pagination-loading\">\n <Spinner />\n {loadingText && <Text size=\"small\">{loadingText}</Text>}\n </Div>\n )}\n </Div>\n\n <Div className=\"pagination-info\">\n <Text size=\"small\">\n Showing {itemDisplayText} {rangeStart} of {totalItems}\n </Text>\n\n {showGoToInput && (\n <Div className=\"pagination-go-to\">\n <input\n type=\"number\"\n min={1}\n max={totalPages}\n value={goToPage}\n onChange={handlePageInputChange}\n onKeyDown={handlePageInputKeyPress}\n placeholder={`Go to ${itemDisplayText}`}\n aria-label={`Go to ${itemDisplayText}`}\n disabled={disabled}\n />\n </Div>\n )}\n </Div>\n </Element>\n );\n },\n);\nPagination.displayName = \"Pagination\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps, ColourPropTypes, ShapeTypes } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./progress-bar.css\";\n\n// OTHER ===============================================================================================================\nimport { Text } from \"../Typography/Text\";\n\nexport interface ProgressBarLabelCustomProps {\n suffix ? : string;\n}\n\nexport interface ProgressBarCustomProps {\n label ? : string;\n value ? : number;\n suffix ? : string;\n height ? : string;\n max ? : number;\n shape ? : ShapeTypes;\n bgColor ? : ColourPropTypes;\n bgColour ? : ColourPropTypes;\n fillColor ? : ColourPropTypes;\n fillColour ? : ColourPropTypes;\n}\n\nexport type ProgressBarElementType = HTMLProgressElement;\nexport type ProgressBarProps = Omit<CommonAndHTMLProps<ProgressBarElementType>, keyof ProgressBarCustomProps> &\n ProgressBarCustomProps;\nexport type ProgressBarMetaProps = Omit<CommonAndHTMLProps<HTMLDivElement>, keyof ProgressBarLabelCustomProps> &\n ProgressBarLabelCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const ProgressBar = React.forwardRef(\n (\n {\n label,\n value,\n height,\n max = 100,\n shape,\n bgColor,\n bgColour,\n fillColor,\n fillColour,\n ...props\n } : ProgressBarProps, ref : React.Ref<ProgressBarElementType>) => {\n const validValue = Math.max(0, Math.min(max, Number(value) || 0));\n const progressText = `${validValue}${props.suffix || \"\"}`;\n\n // Use UK spelling as primary, fall back to US spelling\n const backgroundColour = bgColour || bgColor;\n const progressFillColour = fillColour || fillColor;\n\n // Build CSS custom properties for styling\n const progressBarStyles : React.CSSProperties = {\n height,\n ...(backgroundColour && {\"--progress-bar-bg\" : `var(--${backgroundColour})`}),\n ...(progressFillColour && {\"--progress-bar-fill\" : `var(--${progressFillColour})`}),\n };\n\n return (\n <>\n {label && (\n <Element<HTMLDivElement>\n as=\"div\"\n data-progress-bar-meta\n aria-hidden=\"true\"\n >\n <Text>{label}</Text>\n <Text>\n {progressText}\n </Text>\n </Element>\n )}\n\n <Element<ProgressBarElementType>\n as=\"progress\"\n data-progress-bar\n ref={ref}\n value={validValue}\n max={max}\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={validValue}\n aria-valuetext={`${label ? `${label}: ` : \"\"}${progressText}`}\n shape={shape}\n {...props}\n style={progressBarStyles}\n />\n </>\n );\n },\n);\nProgressBar.displayName = \"ProgressBar\";","// FRAMEWORK ===========================================================================================================\nimport React, { createContext, useContext, useState, ReactNode, useCallback, useRef, useEffect } from \"react\";\n\n// FICTOAN =============================================================================================================\nimport { Element } from \"$element\";\nimport { Div } from \"$tags\";\nimport { Card, CardElementType, CardProps } from \"../Card/Card\";\n\n// STYLES ==============================================================================================================\nimport \"./option-card.css\";\n\n// TYPES ===============================================================================================================\nexport type TickPosition =\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"centre-left\"\n | \"center-left\"\n | \"centre-right\"\n | \"center-right\"\n | \"centre-top\"\n | \"center-top\"\n | \"center-bottom\"\n | \"centre-bottom\"\n | \"centre\"\n | \"center\";\n\nexport interface OptionCardsProviderProps {\n children : ReactNode;\n allowMultipleSelections ? : boolean;\n showTickIcon ? : boolean;\n tickPosition ? : TickPosition;\n onSelectionChange ? : (selectedIds: Set<string>) => void;\n selectionLimit ? : number;\n defaultSelectedIds ? : Set<string>;\n}\n\nexport interface OptionCardProps extends CardProps {\n id : string;\n children : ReactNode;\n disabled ? : boolean;\n}\n\nexport interface OptionCardsGroupRef {\n selectAllOptions : () => void;\n clearAllOptions : () => void;\n setSelectedOptions : (ids: string[]) => void;\n setSelectedIds : (ids: Set<string>) => void;\n}\n\ninterface OptionCardsContextType {\n isSelected : (id: string) => boolean;\n toggleSelection : (id: string) => void;\n showTickIcon ? : boolean;\n tickPosition ? : TickPosition;\n selectAllOptions ? : () => void;\n clearAllOptions ? : () => void;\n setSelectedOptions ? : (ids: string[]) => void;\n setSelectedIds ? : (ids: Set<string>) => void;\n registerOption : (id: string, disabled: boolean) => void;\n unregisterOption : (id: string) => void;\n}\n\nconst OptionCardsContext = createContext<OptionCardsContextType>({\n isSelected : () => false,\n toggleSelection : () => {},\n showTickIcon : false,\n tickPosition : \"top-right\",\n selectAllOptions : () => {},\n clearAllOptions : () => {},\n setSelectedOptions : () => {},\n setSelectedIds : () => {},\n registerOption : () => {},\n unregisterOption : () => {},\n});\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const OptionCardsGroup = React.forwardRef<OptionCardsGroupRef, OptionCardsProviderProps>(\n (\n {\n children,\n allowMultipleSelections = false,\n showTickIcon,\n onSelectionChange,\n tickPosition = \"top-right\",\n selectionLimit,\n defaultSelectedIds,\n ...props\n },\n ref\n ) => {\n // Initialize with defaultSelectedIds if provided\n const [selectedIds, setSelectedIds] = useState<Set<string>>(\n defaultSelectedIds ? new Set(defaultSelectedIds) : new Set()\n );\n const availableOptionsRef = useRef<Map<string, boolean>>(new Map()); // id -> disabled\n \n // Apply defaultSelectedIds if provided after mount or when it changes\n useEffect(() => {\n if (defaultSelectedIds && defaultSelectedIds.size > 0) {\n setSelectedIds(new Set(defaultSelectedIds));\n onSelectionChange?.(new Set(defaultSelectedIds));\n }\n }, [defaultSelectedIds, onSelectionChange]);\n\n const registerOption = useCallback((id: string, disabled: boolean) => {\n availableOptionsRef.current.set(id, disabled);\n }, []);\n\n const unregisterOption = useCallback((id: string) => {\n availableOptionsRef.current.delete(id);\n }, []);\n\n // Click to toggle an option ===================================================================================\n const toggleSelection = useCallback((id: string) => {\n setSelectedIds(prevSelectedIds => {\n const newSelectedIds = new Set(prevSelectedIds);\n if (allowMultipleSelections) {\n if (newSelectedIds.has(id)) {\n newSelectedIds.delete(id);\n } else {\n if (selectionLimit && newSelectedIds.size >= selectionLimit) {\n return prevSelectedIds;\n }\n newSelectedIds.add(id);\n }\n } else {\n if (newSelectedIds.has(id) && prevSelectedIds.size === 1) {\n newSelectedIds.clear();\n } else {\n newSelectedIds.clear();\n newSelectedIds.add(id);\n }\n }\n onSelectionChange?.(newSelectedIds);\n return newSelectedIds;\n });\n }, [allowMultipleSelections, onSelectionChange, selectionLimit]);\n\n // Select all available options ================================================================================\n const selectAllOptions = useCallback(() => {\n if (!allowMultipleSelections) return;\n\n setSelectedIds(prevSelectedIds => {\n const newSelectedIds = new Set(prevSelectedIds);\n\n // Get all enabled options\n const enabledOptions = Array.from(availableOptionsRef.current.entries())\n .filter(([_, disabled]) => !disabled)\n .map(([id]) => id);\n\n // Respect selection limit if set\n const optionsToAdd = selectionLimit\n ? enabledOptions.slice(0, selectionLimit)\n : enabledOptions;\n\n optionsToAdd.forEach(id => newSelectedIds.add(id));\n onSelectionChange?.(newSelectedIds);\n return newSelectedIds;\n });\n }, [allowMultipleSelections, selectionLimit, onSelectionChange]);\n\n // De-select all options =======================================================================================\n const clearAllOptions = useCallback(() => {\n setSelectedIds(new Set());\n onSelectionChange?.(new Set());\n }, [onSelectionChange]);\n\n // Set selected options - improved for more reliable state updates ==============================================\n const setSelectedOptions = useCallback((ids: string[]) => {\n if (ids) {\n console.log(\"Setting selected options:\", ids);\n // Use functional update to ensure we're working with latest state\n setSelectedIds(() => {\n const newSet = new Set(ids);\n onSelectionChange?.(newSet);\n return newSet;\n });\n }\n }, [onSelectionChange]);\n \n // Extra helper method to set using a Set directly\n const setSelectedIdSet = useCallback((ids: Set<string>) => {\n if (ids) {\n console.log(\"Setting selected ids:\", Array.from(ids));\n setSelectedIds(() => {\n const newSet = new Set(ids);\n onSelectionChange?.(newSet);\n return newSet;\n });\n }\n }, [onSelectionChange]);\n\n const isSelected = useCallback((id: string) => {\n return selectedIds.has(id);\n }, [selectedIds]);\n\n // Expose methods via ref\n React.useImperativeHandle(ref, () => ({\n selectAllOptions,\n clearAllOptions,\n setSelectedOptions,\n setSelectedIds: setSelectedIdSet\n }), [selectAllOptions, clearAllOptions, setSelectedOptions, setSelectedIdSet]);\n\n const contextValue = {\n isSelected,\n toggleSelection,\n showTickIcon,\n tickPosition,\n selectAllOptions,\n clearAllOptions,\n setSelectedOptions,\n setSelectedIds: setSelectedIdSet,\n registerOption,\n unregisterOption,\n };\n\n return (\n <OptionCardsContext.Provider value={contextValue}>\n <Div data-option-cards-group className={`tick-${tickPosition}`}>\n {children}\n </Div>\n </OptionCardsContext.Provider>\n );\n }\n);\nOptionCardsGroup.displayName = \"OptionCardsGroup\";\n\nexport const useOptionCard = (id: string) => {\n const context = useContext(OptionCardsContext);\n return {\n isSelected : context.isSelected(id),\n toggleSelection : () => context.toggleSelection(id),\n showTickIcon : context.showTickIcon,\n };\n};\n\nexport const useOptionCardsGroup = () => {\n const { \n selectAllOptions, \n clearAllOptions, \n setSelectedOptions,\n setSelectedIds \n } = useContext(OptionCardsContext);\n \n return { \n selectAllOptions, \n clearAllOptions, \n setSelectedOptions,\n setSelectedIds \n };\n};\n\nexport const OptionCard: React.FC<OptionCardProps> = ({ id, children, disabled = false, ...props }) => {\n const { isSelected, toggleSelection, showTickIcon, registerOption, unregisterOption } = useContext(OptionCardsContext);\n const [showDeselect, setShowDeselect] = useState(false);\n const [isInitialHover, setIsInitialHover] = useState(true);\n\n // Register/unregister this option\n React.useEffect(() => {\n registerOption(id, disabled);\n return () => unregisterOption(id);\n }, [id, disabled, registerOption, unregisterOption]);\n\n let classNames = [];\n\n if (isSelected(id)) {\n classNames.push(\"selected\");\n }\n\n if (disabled) {\n classNames.push(\"disabled\");\n }\n\n if (showDeselect) {\n classNames.push(\"show-deselect\");\n }\n\n const handleMouseEnter = () => {\n if (isSelected(id) && !isInitialHover) {\n setShowDeselect(true);\n }\n };\n\n const handleMouseLeave = () => {\n setShowDeselect(false);\n setIsInitialHover(false);\n };\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (!disabled) {\n setIsInitialHover(true);\n setShowDeselect(false);\n toggleSelection(id);\n props.onClick?.(e);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if ((e.key === \"Enter\" || e.key === \" \") && !disabled) {\n e.preventDefault();\n setIsInitialHover(true);\n setShowDeselect(false);\n toggleSelection(id);\n }\n };\n\n return (\n <Element<CardElementType>\n as={Card}\n data-option-card\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n aria-selected={isSelected(id)}\n classNames={classNames}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n >\n {showTickIcon && (\n <>\n <svg viewBox=\"0 0 24 24\" className=\"tick-icon\">\n <circle cx=\"12\" cy=\"12\" r=\"11\" />\n <path d=\"M8 13 L11 15 L16 9\" />\n </svg>\n\n <svg viewBox=\"0 0 24 24\" className=\"deselect-icon\">\n <circle cx=\"12\" cy=\"12\" r=\"11\" />\n <path d=\"M8 8 L16 16 M16 8 L8 16\" />\n </svg>\n </>\n )}\n {children}\n </Element>\n );\n};\n","// REACT CORE ==========================================================================================================\nimport React, { useRef, useImperativeHandle } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps } from \"../../Element/constants\";\nimport { Element } from \"$element\";\n\n// HOOKS ===============================================================================================================\nimport { useClickOutside } from \"../../../hooks/UseClickOutside\";\n\n// STYLES ==============================================================================================================\nimport \"./sidebar-wrapper.css\";\n\n// prettier-ignore\nexport interface SidebarWrapperCustomProps {\n collapsed ? : boolean;\n closeOnClickOutside ? : () => void;\n showMobileSidebar ? : boolean;\n}\n\nexport type SidebarWrapperElementType = HTMLDivElement;\nexport type SidebarWrapperNewProps = Omit<CommonAndHTMLProps<SidebarWrapperElementType>,\n keyof SidebarWrapperCustomProps> & SidebarWrapperCustomProps;\n\nexport const SidebarWrapper = React.forwardRef(\n (\n {\n collapsed,\n closeOnClickOutside,\n showMobileSidebar,\n ...props\n } : SidebarWrapperNewProps, forwardedRef : React.Ref<SidebarWrapperElementType>) => {\n\n const internalRef = useRef<HTMLDivElement>(null);\n\n // @ts-ignore\n useImperativeHandle(forwardedRef, () => internalRef.current);\n\n useClickOutside(internalRef, () => {\n if (typeof closeOnClickOutside === \"function\") {\n closeOnClickOutside();\n }\n });\n\n let classNames = [];\n\n if (collapsed) {\n classNames.push(\"collapsed\");\n }\n\n if (showMobileSidebar) {\n classNames.push(\"show-sidebar\");\n }\n\n return (\n <Element<SidebarWrapperElementType>\n as=\"aside\"\n data-sidebar-wrapper\n ref={internalRef}\n classNames={classNames}\n {...props}\n />\n );\n },\n);\nSidebarWrapper.displayName = \"SidebarWrapper\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps } from \"../../Element/constants\";\n\n// STYLES ==============================================================================================================\nimport \"./content-wrapper.css\";\n\n// OTHER ===============================================================================================================\nimport { Element } from \"$element\";\n\nexport type ContentWrapperElementType = HTMLDivElement;\ninterface ContentWrapperCustomProps {\n label ? : string;\n // For aria-label\n}\nexport type ContentWrapperProps = CommonAndHTMLProps<ContentWrapperElementType> & ContentWrapperCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const ContentWrapper = React.forwardRef(\n (\n { label, ...props }: ContentWrapperProps, ref: React.Ref<ContentWrapperElementType>) => {\n\n return (\n <Element<ContentWrapperElementType>\n as=\"main\"\n data-content-wrapper\n ref={ref}\n role=\"main\"\n aria-label={label || \"Main content\"}\n {...props}\n />\n );\n }\n);\nContentWrapper.displayName = \"ContentWrapper\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps } from \"../../Element/constants\";\n\n// STYLES ==============================================================================================================\nimport \"./sidebar-header.css\";\n\n// OTHER ===============================================================================================================\nimport { Element } from \"$element\";\n\n// prettier-ignore\nexport interface SidebarHeaderCustomProps {\n isSticky ? : boolean;\n}\n\nexport type SidebarHeaderElementType = HTMLDivElement;\nexport type SidebarHeaderNewProps = Omit<CommonAndHTMLProps<SidebarHeaderElementType>, keyof SidebarHeaderCustomProps>\n & SidebarHeaderCustomProps;\n\nexport const SidebarHeader = React.forwardRef(\n ({ isSticky, ...props }: SidebarHeaderNewProps, ref: React.Ref<SidebarHeaderElementType>) => {\n let classNames = [];\n\n if (isSticky) {\n classNames.push(\"is-sticky\");\n }\n\n return (\n <Element<SidebarHeaderElementType>\n as=\"header\"\n data-sidebar-header\n ref={ref}\n classNames={classNames}\n {...props}\n />\n );\n }\n);\nSidebarHeader.displayName = \"SidebarHeader\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps } from \"../../Element/constants\";\nimport { Div } from \"$tags\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./sidebar-item.css\";\n\ntype BaseItemProps = {\n hasAlert ? : boolean;\n}\n\ntype IconProps =\n | {\n hasEmptyIcon : boolean;\n hasNoIcon ? : never;\n } // If hasEmptyIcon is set, hasNoIcon can't be set\n | {\n hasEmptyIcon ? : never;\n hasNoIcon : boolean;\n } // If hasNoIcon is set, hasEmptyIcon can't be set\n | {\n hasEmptyIcon ? : never;\n hasNoIcon ? : never;\n } // Neither is set\n\nexport type SidebarItemCustomProps = BaseItemProps & IconProps;\n\nexport type SidebarItemElementType = HTMLDivElement;\nexport type SidebarItemNewProps = Omit<CommonAndHTMLProps<SidebarItemElementType>, keyof SidebarItemCustomProps> &\n SidebarItemCustomProps;\n\nexport const SidebarItem = React.forwardRef(\n (\n {hasAlert, hasEmptyIcon, hasNoIcon, children, ...props} : SidebarItemNewProps,\n ref : React.Ref<SidebarItemElementType>) => {\n let classNames = [];\n\n if (hasAlert) {\n classNames.push(\"has-alert\");\n }\n\n if (hasEmptyIcon) {\n classNames.push(\"has-empty-icon\");\n } else if (hasNoIcon) {\n classNames.push(\"has-no-icon\");\n }\n\n return (\n <Element<SidebarItemElementType>\n as=\"div\"\n data-sidebar-item\n ref={ref}\n classNames={classNames}\n {...props}\n >\n {hasEmptyIcon && <Div className=\"empty-icon-wrapper\" />}\n {children}\n </Element>\n );\n },\n);\nSidebarItem.displayName = \"SidebarItem\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps } from \"../../Element/constants\";\n\n// STYLES ==============================================================================================================\nimport \"./sidebar-footer.css\";\n\n// OTHER ===============================================================================================================\nimport { Element } from \"$element\";\n\n// prettier-ignore\nexport interface SidebarFooterCustomProps {\n isSticky ? : boolean;\n}\n\nexport type SidebarFooterElementType = HTMLDivElement;\nexport type SidebarFooterNewProps = Omit<CommonAndHTMLProps<SidebarFooterElementType>, keyof SidebarFooterCustomProps>\n & SidebarFooterCustomProps;\n\nexport const SidebarFooter = React.forwardRef(\n ({ isSticky, ...props }: SidebarFooterNewProps, ref: React.Ref<SidebarFooterElementType>) => {\n let classNames = [];\n\n if (isSticky) {\n classNames.push(\"is-sticky\");\n }\n\n return (\n <Element<SidebarFooterElementType>\n as=\"footer\"\n data-sidebar-footer\n ref={ref}\n classNames={classNames}\n {...props}\n />\n );\n });\nSidebarFooter.displayName = \"SidebarFooter\";\n","// REACT CORE ==========================================================================================================\nimport React, { createContext, useContext } from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps, ShapeTypes, SpacingTypes } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./skeleton.css\";\n\n// Common skeleton props shared between Skeleton and SkeletonGroup\ninterface CommonSkeletonProps {\n effect ? : \"pulse\" | \"wave\" | \"none\";\n animate ? : boolean;\n loadingLabel ? : string;\n // Accessible label for loading state\n}\n\n// Context to share common properties\nconst SkeletonContext = createContext<CommonSkeletonProps>({\n effect : \"wave\",\n animate : true,\n});\n\n// Props specific to individual Skeleton elements\ninterface SkeletonCustomProps extends CommonSkeletonProps {\n variant ? : \"line\" | \"circle\" | \"block\";\n width ? : string | number;\n height ? : string | number;\n shape ? : ShapeTypes;\n}\n\n// Props specific to SkeletonGroup\ninterface SkeletonGroupCustomProps extends CommonSkeletonProps {\n repeat ? : number;\n direction ? : \"vertical\" | \"horizontal\";\n spacing ? : SpacingTypes;\n}\n\nexport type SkeletonElementType = HTMLDivElement;\nexport type SkeletonProps =\n Omit<CommonAndHTMLProps<SkeletonElementType>, keyof SkeletonCustomProps>\n & SkeletonCustomProps;\nexport type SkeletonGroupProps =\n Omit<CommonAndHTMLProps<SkeletonElementType>, keyof SkeletonGroupCustomProps>\n & SkeletonGroupCustomProps;\n\n// COMPONENTS //////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Skeleton = React.forwardRef((\n {\n variant = \"line\",\n width,\n height,\n shape,\n effect: localEffect,\n loadingLabel,\n ...props\n }: SkeletonProps, ref: React.Ref<SkeletonElementType>) => {\n // Get shared properties from group context\n const groupContext = useContext(SkeletonContext);\n\n const effectiveEffect = localEffect || groupContext.effect;\n const effectiveLabel = loadingLabel || groupContext.loadingLabel || \"Loading...\";\n\n let classNames = [];\n\n if (variant) {\n classNames.push(`variant-${variant}`);\n }\n\n if (shape) {\n classNames.push(`shape-${shape}`);\n }\n\n if (effectiveEffect) {\n classNames.push(`effect-${effectiveEffect}`);\n }\n\n // Handle circle variant dimensions\n const computedWidth = width || \"100%\";\n const computedHeight = variant === \"circle\"\n ? (typeof width === \"number\" ? `${width}px` : width) || height || \"100%\"\n : height;\n\n const style = {\n width: computedWidth,\n height: computedHeight,\n aspectRatio: variant === \"circle\" ? \"1 / 1\" : \"auto\",\n ...props.style,\n };\n\n return (\n <Element\n as=\"div\"\n data-skeleton\n ref={ref}\n classNames={classNames}\n style={style}\n role=\"progressbar\"\n aria-busy=\"true\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuetext={effectiveLabel}\n aria-label={effectiveLabel}\n {...props}\n />\n );\n});\nSkeleton.displayName = \"Skeleton\";\n\nexport const SkeletonGroup = React.forwardRef((\n {\n effect = \"wave\",\n spacing = \"small\",\n animate = true,\n repeat = 1,\n direction = \"vertical\",\n children,\n classNames = [],\n loadingLabel = \"Loading content...\",\n ...props\n }: SkeletonGroupProps, ref: React.Ref<SkeletonElementType>) => {\n\n const groupClassNames = [\n `direction-${direction}`,\n effect && `effect-${effect}`,\n ...classNames,\n ];\n\n if (spacing) {\n groupClassNames.push(`spacing-${spacing}`);\n }\n\n return (\n <SkeletonContext.Provider value={{ effect, animate, loadingLabel }}>\n <Element\n as=\"div\"\n ref={ref}\n data-skeleton-group\n classNames={groupClassNames}\n role=\"alert\"\n aria-busy=\"true\"\n aria-label={loadingLabel}\n {...props}\n >\n {Array(repeat).fill(children).map((child, index) => (\n React.cloneElement(child as React.ReactElement, {\n key: index\n })\n ))}\n </Element>\n </SkeletonContext.Provider>\n );\n});\nSkeletonGroup.displayName = \"SkeletonGroup\";\n","// FRAMEWORK ===========================================================================================================\nimport React from \"react\";\n\n// FICTOAN =============================================================================================================\nimport { Element } from \"../Element\";\n\n// STYLES ==============================================================================================================\nimport \"./table.css\";\n\n// TYPES ===============================================================================================================\nimport { CommonAndHTMLProps } from \"../Element/constants\";\n\n// prettier-ignore\nexport interface TableCustomProps {\n bordersFor ? : \"rows\" | \"columns\" | \"both\";\n alignText ? : \"left\" | \"right\" | \"centre\" | \"center\";\n isStriped ? : boolean;\n highlightRowOnHover ? : boolean;\n isFullWidth ? : boolean;\n caption ? : string; // Accessible table caption\n summary ? : string; // Description of table structure for complex tables\n hasColSpan ? : boolean; // Indicates if table has colspan/rowspan for screen readers\n}\n\nexport type TableElementType = HTMLTableElement;\nexport type TableProps = Omit<CommonAndHTMLProps<TableElementType>, keyof TableCustomProps> & TableCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Table = React.forwardRef(\n (\n {\n bordersFor,\n isStriped,\n highlightRowOnHover,\n isFullWidth,\n alignText,\n caption,\n summary,\n hasColSpan,\n children,\n ...props\n }: TableProps,\n ref: React.Ref<TableElementType>\n ) => {\n let classNames = [];\n\n if (bordersFor) {\n classNames.push(`bordered-${bordersFor}`);\n }\n\n if (isStriped) {\n classNames.push(\"striped\");\n }\n\n if (highlightRowOnHover) {\n classNames.push(\"hoverable\");\n }\n\n if (isFullWidth) {\n classNames.push(\"full-width\");\n }\n\n if (alignText) {\n classNames.push(`align-text-${alignText}`);\n }\n\n // Get row count if children exist\n const rowCount = React.Children.count(children);\n\n // Get column count from first row if possible\n const getColumnCount = () => {\n if (!children || !React.isValidElement(children)) return undefined;\n\n const firstRow = React.Children.toArray(children)[0];\n if (React.isValidElement(firstRow) && firstRow.props.children) {\n return React.Children.count(firstRow.props.children);\n }\n return undefined;\n };\n\n return (\n <Element<TableElementType>\n as=\"table\"\n classNames={classNames}\n ref={ref}\n role=\"table\"\n aria-rowcount={rowCount || undefined}\n aria-colcount={hasColSpan ? undefined : getColumnCount()}\n summary={summary}\n {...props}\n >\n {caption && <caption>{caption}</caption>}\n {children}\n </Element>\n );\n }\n);\nTable.displayName = \"Table\";\n","// REACT CORE ==========================================================================================================\nimport React, { useEffect, useCallback, useRef } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps } from \"../Element/constants\";\nimport { Div, Nav } from \"../Element/Tags\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./tabs.css\";\n\n// OTHER ===============================================================================================================\nimport { Divider } from \"../Divider/Divider\";\nimport { Text } from \"../Typography/Text\";\n\ninterface TabType {\n key : string;\n label : React.ReactNode;\n content : React.ReactNode;\n hasAlert ? : boolean;\n}\n\n// prettier-ignore\nexport interface TabsCustomProps {\n tabs : TabType[];\n additionalNavContentWrapper ? : React.ReactNode;\n defaultActiveTab ? : React.ReactNode;\n align ? : \"left\" | \"centre\" | \"center\" | \"right\";\n isFullWidth ? : boolean;\n}\n\nexport type TabsElementType = HTMLDivElement;\nexport type TabsProps = Omit<CommonAndHTMLProps<TabsElementType>, keyof TabsCustomProps> & TabsCustomProps;\n\nexport const Tabs = React.forwardRef(\n (\n {tabs, additionalNavContentWrapper, defaultActiveTab, align = \"left\", isFullWidth, ...props} : TabsProps,\n ref : React.Ref<TabsElementType>) => {\n const index = tabs.findIndex((tab) => tab.key === defaultActiveTab);\n const defaultTabIndex = index > -1 ? index : 0;\n const [ activeTab, setActiveTab ] = React.useState<TabType | undefined>(\n tabs.length > 0 ? tabs[defaultTabIndex] : undefined,\n );\n const [ isExiting, setIsExiting ] = React.useState<boolean>(false);\n\n // Refs for keyboard navigation to focus the tab buttons\n const tabButtonRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n // V2's performant animation logic\n const handleTabChange = useCallback((tab : TabType) => {\n if (activeTab?.key !== tab.key) {\n setIsExiting(true);\n setTimeout(() => {\n setActiveTab(tab);\n setIsExiting(false);\n }, 150); // Animation duration\n }\n }, [ activeTab?.key ]);\n\n useEffect(() => {\n if (tabs.length > 0) {\n // If the current active tab still exists in the new tabs array, keep it.\n // This preserves the active state if the content of a tab changes.\n const currentTabStillExists = tabs.find(tab => tab.key === activeTab?.key);\n if (!currentTabStillExists) {\n // Otherwise, default to the designated default tab or the first one.\n setActiveTab(tabs[defaultTabIndex]);\n }\n } else {\n setActiveTab(undefined);\n }\n }, [ tabs, defaultTabIndex, activeTab?.key ]);\n\n\n const handleKeyDown = useCallback((event : React.KeyboardEvent, currentIndex : number) => {\n let nextIndex = currentIndex;\n\n if (event.key === \"ArrowRight\") {\n nextIndex = (currentIndex + 1) % tabs.length;\n } else if (event.key === \"ArrowLeft\") {\n nextIndex = (currentIndex - 1 + tabs.length) % tabs.length;\n } else if (event.key === \"Home\") {\n nextIndex = 0;\n } else if (event.key === \"End\") {\n nextIndex = tabs.length - 1;\n } else {\n // Exit if it's not a navigation key\n return;\n }\n\n event.preventDefault();\n const nextTab = tabs[nextIndex];\n if (nextTab) {\n handleTabChange(nextTab);\n tabButtonRefs.current[nextIndex]?.focus();\n }\n\n }, [ tabs, handleTabChange ]);\n\n if (!activeTab) {\n return null; // Render nothing if there are no tabs or no active tab\n }\n\n return (\n <Element<TabsElementType>\n as=\"div\"\n data-tabs\n ref={ref}\n data-align={align}\n data-full-width={isFullWidth}\n {...props}\n >\n <Nav data-tabs-nav role=\"tablist\" aria-label=\"Tab Navigation\">\n <ul className=\"tab-labels-list\">\n {tabs.map((tab, i) => (\n <li key={tab.key}>\n <Element<HTMLButtonElement>\n as=\"button\"\n // @ts-ignore\n ref={(el) => (tabButtonRefs.current[i] = el)}\n id={`tab-${tab.key}`}\n role=\"tab\"\n aria-selected={activeTab.key === tab.key}\n aria-controls={`tab-panel-${tab.key}`}\n tabIndex={activeTab.key === tab.key ? 0 : -1} // Roaming tabindex\n data-tab-label\n data-active={activeTab.key === tab.key}\n data-alert={tab.hasAlert}\n onClick={() => handleTabChange(tab)}\n onKeyDown={(e) => handleKeyDown(e, i)}\n className={`tab-button ${activeTab.key === tab.key ? \"is-active\" : \"\"}`}\n marginBottom=\"nano\"\n >\n <Text\n className={`tab-label ${activeTab.key === tab.key ? \"is-active\" : \"\"} ${tab.hasAlert ? \"has-alert\" : \"\"}`}\n >\n {tab.label}\n </Text>\n </Element>\n </li>\n ))}\n {additionalNavContentWrapper}\n </ul>\n </Nav>\n\n <Divider kind=\"tertiary\" marginTop=\"none\" marginBottom=\"micro\" />\n\n <Div\n key={activeTab.key}\n id={`tab-panel-${activeTab.key}`}\n role=\"tabpanel\"\n aria-labelledby={`tab-${activeTab.key}`}\n tabIndex={0}\n data-tab-content\n data-exiting={isExiting}\n >\n {activeTab.content}\n </Div>\n </Element>\n );\n },\n);\nTabs.displayName = \"Tabs\";","// REACT CORE ==========================================================================================================\nimport React, { useCallback, useEffect, useState } from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\nconst getStorageKey = (): string => {\n if (typeof window !== 'undefined') {\n const hostname = window.location.hostname;\n const port = window.location.port;\n \n // Create identifier from hostname and port\n let identifier = hostname.replace(/\\./g, '-');\n if (port) {\n identifier += `-${port}`;\n }\n \n return `${identifier}-theme`;\n }\n \n return \"fictoan-theme\";\n};\n\n// Create a tuple type for the theme context\ntype ThemeContextType = [string, React.Dispatch<React.SetStateAction<string>>];\n\nconst defaultContext: ThemeContextType = [\"\", (_) => {}];\nconst ThemeContext = React.createContext<ThemeContextType | undefined>(undefined);\n\nexport const useTheme = (): ThemeContextType => {\n const context = React.useContext(ThemeContext);\n if (context === undefined) {\n return defaultContext;\n }\n return context;\n};\n\nexport type ThemeProviderElementType = HTMLDivElement;\nexport interface ThemeProviderProps extends CommonAndHTMLProps<ThemeProviderElementType> {\n themeList : string[];\n currentTheme : string;\n}\n\nconst getTheme = (key: string, fallback?: string) => {\n let theme;\n try {\n theme = localStorage.getItem(key) || undefined;\n } catch (e) {\n // Unsupported\n }\n return theme || fallback;\n};\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const ThemeProvider = React.forwardRef(\n ({ currentTheme, themeList, children, ...props }: ThemeProviderProps, ref: React.Ref<ThemeProviderElementType>) => {\n const [shouldRender, setShouldRender] = useState<boolean>(false);\n const [themeState, setThemeState] = useState<string>(() =>\n getTheme(getStorageKey()) || currentTheme);\n\n const setTheme = useCallback(\n (value: React.SetStateAction<string>) => {\n // Handle both direct values and updater functions\n const newTheme = typeof value === \"function\"\n ? value(themeState)\n : value;\n\n if (!themeList.includes(newTheme)) {\n // Fall back to first available theme\n const fallbackTheme = themeList[0];\n setThemeState(fallbackTheme);\n document.documentElement.className = \"\";\n document.documentElement.classList.add(fallbackTheme);\n try {\n localStorage.setItem(getStorageKey(), fallbackTheme);\n } catch (e) {\n // Unsupported\n }\n return;\n }\n\n setThemeState(newTheme);\n document.documentElement.className = \"\";\n document.documentElement.classList.add(newTheme);\n if (!shouldRender) {\n setShouldRender(true);\n }\n try {\n localStorage.setItem(getStorageKey(), newTheme);\n } catch (e) {\n // Unsupported\n }\n },\n [themeState, themeList]\n );\n\n useEffect(() => {\n const theme = getTheme(getStorageKey());\n setTheme(theme || currentTheme);\n }, [currentTheme, setTheme]);\n\n return (\n <ThemeContext.Provider value={[themeState, setTheme]}>\n <Element<ThemeProviderElementType> as=\"div\" data-theme-provider ref={ref} {...props}>\n {shouldRender && children}\n </Element>\n </ThemeContext.Provider>\n );\n }\n);\nThemeProvider.displayName = \"ThemeProvider\";\n","// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps } from \"../../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./toasts-wrapper.css\";\n\n// prettier-ignore\nexport interface ToastsWrapperCustomProps {\n position ? : \"top\" | \"bottom\";\n}\n\nexport type ToastsWrapperElementType = HTMLDivElement;\nexport type ToastsWrapperProps = CommonAndHTMLProps<ToastsWrapperElementType> &\n ToastsWrapperCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const ToastsWrapper = React.forwardRef(\n ({position, ...props} : ToastsWrapperProps, ref : React.Ref<ToastsWrapperElementType>) => {\n let classNames = [];\n\n if (position) {\n classNames.push(position);\n }\n\n return (\n <Element<ToastsWrapperElementType>\n as=\"div\"\n data-toasts-wrapper\n ref={ref}\n classNames={classNames}\n {...props}\n />\n );\n },\n);\nToastsWrapper.displayName = \"ToastsWrapper\";\n","// REACT CORE ==========================================================================================================\nimport React, { useState, useEffect } from \"react\";\n\n// ELEMENT =============================================================================================================\nimport { CommonAndHTMLProps } from \"../../Element/constants\";\n\n// STYLES ==============================================================================================================\nimport \"./toast-item.css\";\n\n// OTHER ===============================================================================================================\nimport { Element } from \"$element\";\n\n// prettier-ignore\nexport interface ToastItemCustomProps {\n showWhen ? : boolean;\n secondsToShowFor ? : number;\n closeWhen ? : () => void;\n}\n\nexport type ToastItemElementType = HTMLDivElement;\nexport type ToastItemProps = Omit<CommonAndHTMLProps<ToastItemElementType>, keyof ToastItemCustomProps> &\n ToastItemCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const ToastItem = React.forwardRef(\n ({ showWhen, children, secondsToShowFor, closeWhen, ...props }: ToastItemProps, ref: React.Ref<ToastItemElementType>) => {\n let classNames: string[] = [];\n const [ isVisible, setIsVisible ] = useState<boolean>(showWhen ?? false);\n\n useEffect(() => {\n if (showWhen) {\n setIsVisible(true);\n }\n\n const timer = showWhen\n ? setTimeout(() => {\n closeWhen?.();\n }, (secondsToShowFor ?? 4) * 1000) // Default value is 4 seconds\n : undefined;\n\n return () => {\n timer && clearTimeout(timer);\n };\n }, [showWhen, secondsToShowFor, closeWhen]);\n\n const onTransitionEnd = () => {\n if (!showWhen) setIsVisible(false);\n };\n\n return (\n isVisible && (\n <Element<ToastItemElementType>\n as=\"div\"\n data-toast-item\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n classNames={[ ...classNames, showWhen ? \"visible\" : \"\" ]}\n onTransitionEnd={onTransitionEnd}\n shadow=\"soft\"\n {...props}\n >\n {children}\n </Element>\n )\n );\n },\n);\nToastItem.displayName = \"ToastItem\";\n","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","// REACT CORE ==========================================================================================================\nimport React, { useEffect, useRef, ReactNode } from \"react\";\nimport { createRoot, Root } from \"react-dom/client\";\n\n// STYLES ==============================================================================================================\nimport \"./tooltip.css\";\n\n// TYPES ===============================================================================================================\ntype Position = \"top\" | \"bottom\" | \"left\" | \"right\";\ntype ShowOn = \"click\" | \"hover\";\n\ninterface TooltipConfig {\n content : ReactNode;\n position : Position;\n showOn : ShowOn;\n}\n\nexport interface TooltipProps {\n children : ReactNode;\n isTooltipFor : string;\n showOn ? : ShowOn;\n position ? : Position;\n}\n\n// CONSTANTS ===========================================================================================================\nconst TOOLTIP_OFFSET = 8;\nconst SCREEN_PADDING = 16;\n\n// MODULE-LEVEL SINGLETON ==============================================================================================\nlet singletonContainer : HTMLDivElement | null = null;\nlet singletonRoot : Root | null = null;\nlet isInitialized = false;\nlet activeTargetId : string | null = null;\nlet activeTarget : HTMLElement | null = null;\n\nconst registry = new Map<string, TooltipConfig>();\n\n// POSITIONING =========================================================================================================\nconst calculatePosition = (\n tooltipElement: HTMLElement,\n targetElement: HTMLElement,\n position: Position,\n) => {\n const tooltipRect = tooltipElement.getBoundingClientRect();\n const targetRect = targetElement.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n\n let top: number;\n let left: number;\n\n switch (position) {\n case \"top\":\n top = targetRect.top - tooltipRect.height - TOOLTIP_OFFSET;\n left = targetRect.left + (targetRect.width - tooltipRect.width) / 2;\n if (top < SCREEN_PADDING) {\n top = targetRect.bottom + TOOLTIP_OFFSET;\n }\n break;\n case \"bottom\":\n top = targetRect.bottom + TOOLTIP_OFFSET;\n left = targetRect.left + (targetRect.width - tooltipRect.width) / 2;\n if (top + tooltipRect.height > viewportHeight - SCREEN_PADDING) {\n top = targetRect.top - tooltipRect.height - TOOLTIP_OFFSET;\n }\n break;\n case \"left\":\n top = targetRect.top + (targetRect.height - tooltipRect.height) / 2;\n left = targetRect.left - tooltipRect.width - TOOLTIP_OFFSET;\n if (left < SCREEN_PADDING) {\n left = targetRect.right + TOOLTIP_OFFSET;\n }\n break;\n case \"right\":\n top = targetRect.top + (targetRect.height - tooltipRect.height) / 2;\n left = targetRect.right + TOOLTIP_OFFSET;\n if (left + tooltipRect.width > viewportWidth - SCREEN_PADDING) {\n left = targetRect.left - tooltipRect.width - TOOLTIP_OFFSET;\n }\n break;\n default:\n top = targetRect.top - tooltipRect.height - TOOLTIP_OFFSET;\n left = targetRect.left + (targetRect.width - tooltipRect.width) / 2;\n }\n\n // Ensure tooltip stays within viewport bounds\n if (left < SCREEN_PADDING) {\n left = SCREEN_PADDING;\n } else if (left + tooltipRect.width > viewportWidth - SCREEN_PADDING) {\n left = viewportWidth - tooltipRect.width - SCREEN_PADDING;\n }\n\n if (top < SCREEN_PADDING) {\n top = SCREEN_PADDING;\n } else if (top + tooltipRect.height > viewportHeight - SCREEN_PADDING) {\n top = viewportHeight - tooltipRect.height - SCREEN_PADDING;\n }\n\n return { top, left };\n};\n\n// TOOLTIP CONTENT COMPONENT ===========================================================================================\ninterface TooltipContentProps {\n content : ReactNode;\n isVisible : boolean;\n position : { top: number; left: number };\n}\n\nconst TooltipContent = ({ content, isVisible, position }: TooltipContentProps) => (\n <div\n data-tooltip\n className={isVisible ? \"visible\" : \"\"}\n role=\"tooltip\"\n style={{\n position : \"fixed\",\n zIndex : 1000,\n top : `${position.top}px`,\n left : `${position.left}px`,\n }}\n >\n {content}\n </div>\n);\n\n// RENDER FUNCTIONS ====================================================================================================\nconst renderTooltip = (config: TooltipConfig | null, target: HTMLElement | null) => {\n if (!singletonRoot || !singletonContainer) return;\n\n if (!config || !target) {\n singletonRoot.render(\n <TooltipContent content={null} isVisible={false} position={{ top: -9999, left: -9999 }} />\n );\n return;\n }\n\n // First render hidden to measure\n singletonRoot.render(\n <TooltipContent content={config.content} isVisible={false} position={{ top: -9999, left: -9999 }} />\n );\n\n // Calculate position after render\n requestAnimationFrame(() => {\n if (!singletonContainer || !target) return;\n const tooltipEl = singletonContainer.firstElementChild as HTMLElement;\n if (!tooltipEl) return;\n\n const { top, left } = calculatePosition(tooltipEl, target, config.position);\n singletonRoot?.render(\n <TooltipContent content={config.content} isVisible={true} position={{ top, left }} />\n );\n });\n};\n\nconst updatePosition = () => {\n if (!activeTargetId || !activeTarget) return;\n const config = registry.get(activeTargetId);\n if (config) {\n renderTooltip(config, activeTarget);\n }\n};\n\nconst showTooltip = (targetId: string, target: HTMLElement) => {\n const config = registry.get(targetId);\n if (!config) return;\n\n activeTargetId = targetId;\n activeTarget = target;\n renderTooltip(config, target);\n};\n\nconst hideTooltip = (targetId?: string) => {\n if (targetId && activeTargetId !== targetId) return;\n activeTargetId = null;\n activeTarget = null;\n renderTooltip(null, null);\n};\n\n// EVENT HANDLERS ======================================================================================================\nconst handleMouseOver = (e: MouseEvent) => {\n const target = (e.target as HTMLElement).closest(\"[id]\") as HTMLElement;\n if (!target?.id) return;\n\n const config = registry.get(target.id);\n if (config?.showOn === \"hover\") {\n showTooltip(target.id, target);\n }\n};\n\nconst handleMouseOut = (e: MouseEvent) => {\n const target = (e.target as HTMLElement).closest(\"[id]\") as HTMLElement;\n if (!target?.id) return;\n\n const config = registry.get(target.id);\n if (config?.showOn === \"hover\") {\n hideTooltip(target.id);\n }\n};\n\nconst handleClick = (e: MouseEvent) => {\n // Check if click is inside the tooltip itself\n if (singletonContainer?.contains(e.target as Node)) {\n return;\n }\n\n const target = (e.target as HTMLElement).closest(\"[id]\") as HTMLElement;\n\n // Check if click is on a registered click-trigger element\n if (target?.id) {\n const config = registry.get(target.id);\n if (config?.showOn === \"click\") {\n if (activeTargetId === target.id) {\n hideTooltip();\n } else {\n showTooltip(target.id, target);\n }\n return;\n }\n }\n\n // Click outside - hide any active click tooltip\n if (activeTargetId) {\n const activeConfig = registry.get(activeTargetId);\n if (activeConfig?.showOn === \"click\") {\n hideTooltip();\n }\n }\n};\n\n// INITIALIZATION ======================================================================================================\nconst initializeSingleton = () => {\n if (isInitialized || typeof document === \"undefined\") return;\n\n // Create container\n singletonContainer = document.createElement(\"div\");\n singletonContainer.id = \"fictoan-tooltip-singleton\";\n document.body.appendChild(singletonContainer);\n\n // Create React root\n singletonRoot = createRoot(singletonContainer);\n\n // Initial render (hidden)\n singletonRoot.render(\n <TooltipContent content={null} isVisible={false} position={{ top: -9999, left: -9999 }} />\n );\n\n // Set up event delegation\n document.addEventListener(\"mouseover\", handleMouseOver);\n document.addEventListener(\"mouseout\", handleMouseOut);\n document.addEventListener(\"click\", handleClick);\n window.addEventListener(\"scroll\", updatePosition, true);\n window.addEventListener(\"resize\", updatePosition);\n\n isInitialized = true;\n};\n\n// COMPONENT ===========================================================================================================\nexport const Tooltip = ({\n children,\n isTooltipFor,\n showOn = \"hover\",\n position = \"top\",\n}: TooltipProps) => {\n const configRef = useRef<TooltipConfig>({ content: children, position, showOn });\n\n // Update ref when props change\n configRef.current = { content: children, position, showOn };\n\n useEffect(() => {\n // Initialize singleton on first mount\n initializeSingleton();\n\n // Register this tooltip\n registry.set(isTooltipFor, configRef.current);\n\n // If this tooltip is currently active, update its content\n if (activeTargetId === isTooltipFor && activeTarget) {\n renderTooltip(configRef.current, activeTarget);\n }\n\n return () => {\n registry.delete(isTooltipFor);\n // Hide if this was the active tooltip\n if (activeTargetId === isTooltipFor) {\n hideTooltip();\n }\n };\n }, [isTooltipFor]);\n\n // Update registry when content/position/showOn changes\n useEffect(() => {\n registry.set(isTooltipFor, configRef.current);\n\n // If this tooltip is currently active, update it\n if (activeTargetId === isTooltipFor && activeTarget) {\n renderTooltip(configRef.current, activeTarget);\n }\n }, [children, position, showOn, isTooltipFor]);\n\n // Renders nothing - the singleton renders the actual tooltip\n return null;\n};\n","// FRAMEWORK ===========================================================================================================\nimport React from \"react\";\n\n// FICTOAN =============================================================================================================\nimport { Element } from \"../Element\";\n\n// TYPES ===============================================================================================================\nimport { CommonAndHTMLProps, WeightTypes } from \"../Element/constants\";\n\n// prettier-ignore\ninterface HeadingBaseProps {\n as ? : \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n fontStyle ? : \"sans-serif\" | \"serif\" | \"monospace\";\n weight ? : WeightTypes;\n align ? : \"left\" | \"centre\" | \"center\" | \"right\";\n}\n\nexport type HeadingElementType = HTMLHeadingElement;\nexport type HeadingProps = Omit<CommonAndHTMLProps<HeadingElementType>, keyof HeadingBaseProps> & HeadingBaseProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nconst Heading = React.forwardRef(\n ({ fontStyle = \"sans-serif\", weight, align, ...props }: HeadingProps, ref: React.Ref<HeadingElementType>) => {\n let classNames = [];\n\n if (weight) {\n classNames.push(`weight-${weight}`);\n }\n\n if (fontStyle) {\n classNames.push(`font-${fontStyle}`);\n }\n\n if (align) {\n classNames.push(`text-${align}`);\n }\n\n return <Element<HeadingElementType> ref={ref} classNames={classNames} {...props} />;\n }\n);\n\nexport const Heading1 = React.forwardRef((props: HeadingProps, ref: React.Ref<HeadingElementType>) => (\n <Heading as=\"h1\" ref={ref} {...props} />\n));\nHeading1.displayName = \"Heading1\";\n\nexport const Heading2 = React.forwardRef((props: HeadingProps, ref: React.Ref<HeadingElementType>) => (\n <Heading as=\"h2\" ref={ref} {...props} />\n));\nHeading2.displayName = \"Heading2\";\n\nexport const Heading3 = React.forwardRef((props: HeadingProps, ref: React.Ref<HeadingElementType>) => (\n <Heading as=\"h3\" ref={ref} {...props} />\n));\nHeading3.displayName = \"Heading3\";\n\nexport const Heading4 = React.forwardRef((props: HeadingProps, ref: React.Ref<HeadingElementType>) => (\n <Heading as=\"h4\" ref={ref} {...props} />\n));\nHeading4.displayName = \"Heading4\";\n\nexport const Heading5 = React.forwardRef((props: HeadingProps, ref: React.Ref<HeadingElementType>) => (\n <Heading as=\"h5\" ref={ref} {...props} />\n));\nHeading5.displayName = \"Heading5\";\n\nexport const Heading6 = React.forwardRef((props: HeadingProps, ref: React.Ref<HeadingElementType>) => (\n <Heading as=\"h6\" ref={ref} {...props} />\n));\nHeading6.displayName = \"Heading6\";\n","// REACT CORE ==========================================================================================================\nimport React, { ReactNode } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./accordion.css\";\n\n// OTHER ===============================================================================================================\nimport { Text } from \"$/components\";\n\nexport interface AccordionCustomProps {\n isOpen ? : boolean;\n summary : ReactNode;\n children : ReactNode;\n}\n\nexport type AccordionElementType = HTMLDetailsElement;\nexport type AccordionProps =\n Omit<CommonAndHTMLProps<AccordionElementType>, keyof AccordionCustomProps>\n & AccordionCustomProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Accordion = React.forwardRef(\n ({summary, children, isOpen = false, ...props} : AccordionProps, ref : React.Ref<AccordionElementType>) => {\n\n return (\n <Element\n as=\"details\"\n data-expandable-content\n ref={ref}\n {...props}\n open={isOpen}\n role=\"region\"\n aria-labelledby=\"accordion-summary\"\n >\n <summary\n role=\"button\"\n tabIndex={0}\n aria-controls=\"accordion-content\"\n aria-expanded={isOpen}\n >\n {typeof summary === \"string\" ? <Text margin=\"none\">{summary}</Text> : summary}\n </summary>\n {children}\n </Element>\n );\n },\n);\nAccordion.displayName = \"Accordion\";\n"],"names":["f","require$$0","k","l","m","n","p","q","c","a","g","b","d","e","h","reactJsxRuntime_production_min","React","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_OFFSCREEN_TYPE","MAYBE_ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","maybeIterator","ReactSharedInternals","error","format","_len2","args","_key2","printWarning","level","ReactDebugCurrentFrame","stack","argsWithFormat","item","enableScopeAPI","enableCacheElement","enableTransitionTracing","enableLegacyHidden","enableDebugTracing","REACT_MODULE_REFERENCE","isValidElementType","type","getWrappedName","outerType","innerType","wrapperName","displayName","functionName","getContextName","getComponentNameFromType","context","provider","outerName","lazyComponent","payload","init","assign","disabledDepth","prevLog","prevInfo","prevWarn","prevError","prevGroup","prevGroupCollapsed","prevGroupEnd","disabledLog","disableLogs","props","reenableLogs","ReactCurrentDispatcher","prefix","describeBuiltInComponentFrame","name","source","ownerFn","x","match","reentry","componentFrameCache","PossiblyWeakMap","describeNativeComponentFrame","fn","construct","frame","control","previousPrepareStackTrace","previousDispatcher","Fake","sample","sampleLines","controlLines","s","_frame","syntheticFrame","describeFunctionComponentFrame","shouldConstruct","Component","prototype","describeUnknownElementTypeFrameInDEV","hasOwnProperty","loggedTypeFailures","setCurrentlyValidatingElement","element","owner","checkPropTypes","typeSpecs","values","location","componentName","has","typeSpecName","error$1","err","ex","isArrayImpl","isArray","typeName","value","hasToStringTag","willCoercionThrow","testStringCoercion","checkKeyStringCoercion","ReactCurrentOwner","RESERVED_PROPS","specialPropKeyWarningShown","specialPropRefWarningShown","hasValidRef","config","getter","hasValidKey","warnIfStringRefCannotBeAutoConverted","self","defineKeyPropWarningGetter","warnAboutAccessingKey","defineRefPropWarningGetter","warnAboutAccessingRef","ReactElement","key","ref","jsxDEV","maybeKey","propName","defaultProps","ReactCurrentOwner$1","ReactDebugCurrentFrame$1","setCurrentlyValidatingElement$1","propTypesMisspellWarningShown","isValidElement","object","getDeclarationErrorAddendum","getSourceInfoErrorAddendum","ownerHasKeyUseWarning","getCurrentComponentErrorInfo","parentType","info","parentName","validateExplicitKey","currentComponentErrorInfo","childOwner","validateChildKeys","node","i","child","iteratorFn","iterator","step","validatePropTypes","propTypes","_name","validateFragmentProps","fragment","keys","didWarnAboutKeySpread","jsxWithValidation","isStaticChildren","validType","sourceInfo","typeString","children","beforeExample","afterExample","jsxWithValidationStatic","jsxWithValidationDynamic","jsx","jsxs","reactJsxRuntime_development","jsxRuntimeModule","require$$1","createClassName","classNames","Element","role","ariaLabel","tabIndex","onKeyDown","bgColor","bgColour","bgOpacity","borderColor","borderColour","borderOpacity","className","columns","fillColor","fillColour","gap","hideOnDesktop","hideOnMobile","hideOnTabletLandscape","hideOnTabletPortrait","horizontalMargin","horizontalPadding","horizontallyCenterThis","horizontallyCentreThis","isFullHeight","isFullWidth","layoutAsFlexbox","layoutAsGrid","stackVertically","stackHorizontally","marginLeft","marginBottom","margin","marginRight","marginTop","opacity","paddingBottom","paddingLeft","padding","paddingRight","paddingTop","pushItemsToEnds","shadow","shape","showOnlyOnDesktop","showOnlyOnMobile","showOnlyOnTabletLandscape","showOnlyOnTabletPortrait","size","strokeColor","strokeColour","textColor","textColour","verticalMargin","verticalPadding","verticallyCenterItems","verticallyCentreItems","weight","style","minimalProps","_","__","sanitizedProps","computedStyle","createComponentWithElement","tagName","finalProps","external","Article","Aside","Body","Div","Footer","Header","Main","Nav","Section","Span","Hyperlink","ActionIcons","Badge","actionIcon","onActionClick","actionAriaLabel","handleActionClick","hasAction","useClickOutside","handler","memoizedHandler","useCallback","useEffect","listener","event","Drawer","id","isOpen","onClose","position","isDismissible","showOverlay","blurOverlay","closeOnClickOutside","zIndex","label","description","drawerId","descriptionId","drawerRef","useRef","effectiveRef","drawerClasses","drawer","overlay","handleEscape","handleAnimationEnd","Fragment","Button","kind","isLoading","ButtonGroup","isJoint","spacing","equaliseWidth","BreadcrumbItem","current","Separator","separator","Text","Breadcrumbs","childrenArray","processedChildren","acc","index","isLast","breadcrumbItem","Callout","title","roleMap","Card","heading","CodeBlock","language","showCopyButton","showLineNumbers","withSyntaxHighlighting","makeEditable","onChange","isCodeCopied","setIsCodeCopied","useState","prismModule","setPrismModule","setIsLoading","codeElement","setCodeElement","preRef","initialCode","Prism","_a","getCursorPosition","selection","range","currentNode","absoluteOffset","treeWalker","highlightCode","content","cursorPosition","highlighted","newRange","currentOffset","length","handleInput","copyToClipboard","textToCopy","handleKeyDown","lines","Divider","height","InputLabel","hideLabel","htmlFor","fontStyle","align","isSubtext","ValidationIcon","state","FormItem","customLabel","helpText","errorText","validationState","required","hasLabel","hasInfoSection","Checkbox","checked","defaultChecked","disabled","derivedName","useMemo","handleChange","Switch","CheckboxGroup","options","defaultValue","equalizeWidth","selectedValues","setSelectedValues","optionValue","newValues","v","option","optionId","optionLabel","optionProps","finalId","isChecked","SwitchGroup","FileUpload","ariaInvalid","accept","allowMultipleFiles","capture","instructionMainText","instructionSubText","invalid","badgeBgColour","badgeTextColour","files","setFiles","isDragging","setIsDragging","fileInputRef","handleDragOver","handleDragLeave","handleDrop","droppedFiles","handleFiles","newFiles","prevFiles","fileToAdd","handleFileInput","selectedFiles","removeFile","indexToRemove","updatedFiles","openFileDialog","file","InputField","innerIconLeft","innerIconRight","innerTextLeft","innerTextRight","validateThis","valid","externalValidationState","onBlur","onFocus","placeholder","autoComplete","maxLength","minLength","pattern","readOnly","leftElementRef","rightElementRef","internalInputRef","touched","setTouched","internalValidationState","setInternalValidationState","mergeRefs","el","updateValidationState","input","handleBlur","handleFocus","updateWidth","pos","formItem","renderSideElement","elRef","isText","isInteractive","hasLeftElement","hasRightElement","Portion","desktopSpan","mobileSpan","tabletLandscapeSpan","tabletPortraitSpan","isHorizontal","RadioButton","RadioGroup","Row","layout","gutters","retainLayoutOnTabletLandscape","retainLayoutOnTabletPortrait","retainLayoutOnMobile","retainLayoutAlways","allowUltraWide","groupLabel","Select","renderOption","renderOptGroup","group","getLimitState","limit","pluralise","count","singular","plural","TextArea","characterLimit","wordLimit","rows","cols","textareaRef","constructHelpText","limitsMessages","currentChars","limitState","excessChars","remaining","currentWords","excessWords","msg","setRefs","FormElements","getFormItem","formField","onFieldChange","elementName","formFieldProps","ElementComponent","generateFormThroughConfig","fields","formChildren","field","createElement","Form","onFieldsChange","handleFieldChange","fieldName","formContent","FormItemGroup","equalWidthForChildren","retainLayout","legend","groupId","levenshteinDistance","matrix","aLength","bLength","j","isSubsequence","search","target","searchIndex","targetIndex","generateAcronym","word","searchOptions","searchTerm","normalizedSearch","maxDistance","normalizedLabel","distance","words","searchWords","isPartialMatch","searchWord","acronym","isAcronymMatch","ListBox","selectionLimit","allowMultiSelect","allowCustomEntries","setIsOpen","searchValue","setSearchValue","activeIndex","setActiveIndex","selectedOption","setSelectedOption","selectedOptions","setSelectedOptions","allOptions","dropdownRef","searchInputRef","listboxId","filteredOptions","handleSelectOption","newSelectedOptions","opt","handleSearchChange","handleCustomEntry","customValue","customOption","handleDeleteOption","valueToRemove","handleClearAll","prev","exactMatch","activeOption","validate","PinInputField","mask","isOTP","autoFocus","pasteFromClipboard","focusFirstInputOnReset","pinInputFieldRef","inputRefs","setInputRefs","setValues","moveFocus","setMoveFocus","focusedIndex","setFocusedIndex","inputGroupId","inputDescription","focus","focusNext","next","handleResetPinInput","setValue","nextValues","inputValue","handleInputChange","inputFieldIndex","currentValue","nextValue","chars","nextFocusIndex","newIndex","handleSelect","createRef","useImperativeHandle","RadioTabGroup","optionsWrapperRef","indicatorPos","setIndicatorPos","needsScroll","setNeedsScroll","scrollPosition","setScrollPosition","maxScroll","setMaxScroll","labelsRef","measureWidths","wrapper","inputWrapper","totalContentWidth","availableWidth","needsToScroll","observer","selectedIndex","updateIndicator","width","transform","timeoutId","handleScroll","direction","scrollAmount","newPosition","canScrollLeft","canScrollRight","isDualRangeProps","Range","DualThumbRange","SingleThumbRange","suffix","min","max","thumbRef","trackRef","isActive","setIsActive","clampedValue","getPercent","val","getValueFromPosition","clientX","rect","percent","rawValue","steppedValue","handleDrag","newValue","handleMouseDown","handleMouseMove","handleMouseUp","handleTouchStart","handleTouchMove","handleTouchEnd","minLabel","maxLabel","rawMinValue","rawMaxValue","minValue","maxValue","minThumbRef","maxThumbRef","activeThumb","setActiveThumb","thumb","clampedMin","clampedMax","minPercent","maxPercent","Meter","showOptimumMarker","low","high","optimum","optimumPositionPercent","getValueDescription","percentage","status","Modal","showBackdrop","blurBackdrop","modalId","modal","focusableElements","NotificationsWrapper","anchor","order","NotificationItem","showWhen","closeWhen","secondsToShowFor","isVisible","setIsVisible","timer","onDismissClick","onTransitionEnd","Spinner","loadingText","start","end","usePagination","totalItems","currentPage","itemsToShowEachSide","totalPages","totalNumbers","pageNumbers","leftSideNumbers","rightSideNumbers","rangeStart","rangeEnd","defaultRenderItem","page","selected","onClick","paginationItemProps","Pagination","onPageChange","showGoToFirstItemButton","showGoToLastItemButton","showPreviousButton","showNextButton","showGoToInput","hideDisabledButtons","renderItem","emptyText","itemDisplayText","items","hasPrevPage","hasNextPage","goToPage","setGoToPage","handlePageInputChange","handlePageInputKeyPress","itemProps","ProgressBar","validValue","progressText","backgroundColour","progressFillColour","progressBarStyles","OptionCardsContext","createContext","OptionCardsGroup","allowMultipleSelections","showTickIcon","onSelectionChange","tickPosition","defaultSelectedIds","selectedIds","setSelectedIds","availableOptionsRef","registerOption","unregisterOption","toggleSelection","prevSelectedIds","newSelectedIds","selectAllOptions","enabledOptions","clearAllOptions","ids","newSet","setSelectedIdSet","isSelected","contextValue","useOptionCard","useContext","useOptionCardsGroup","OptionCard","showDeselect","setShowDeselect","isInitialHover","setIsInitialHover","handleMouseEnter","handleMouseLeave","handleClick","SidebarWrapper","collapsed","showMobileSidebar","forwardedRef","internalRef","ContentWrapper","SidebarHeader","isSticky","SidebarItem","hasAlert","hasEmptyIcon","hasNoIcon","SidebarFooter","SkeletonContext","Skeleton","variant","localEffect","loadingLabel","groupContext","effectiveEffect","effectiveLabel","computedWidth","computedHeight","SkeletonGroup","effect","animate","repeat","groupClassNames","Table","bordersFor","isStriped","highlightRowOnHover","alignText","caption","summary","hasColSpan","rowCount","getColumnCount","firstRow","Tabs","tabs","additionalNavContentWrapper","defaultActiveTab","tab","defaultTabIndex","activeTab","setActiveTab","isExiting","setIsExiting","tabButtonRefs","handleTabChange","currentIndex","nextIndex","nextTab","getStorageKey","hostname","port","identifier","defaultContext","ThemeContext","useTheme","getTheme","fallback","theme","ThemeProvider","currentTheme","themeList","shouldRender","setShouldRender","themeState","setThemeState","setTheme","newTheme","fallbackTheme","ToastsWrapper","ToastItem","client","o","TOOLTIP_OFFSET","SCREEN_PADDING","singletonContainer","singletonRoot","isInitialized","activeTargetId","activeTarget","registry","calculatePosition","tooltipElement","targetElement","tooltipRect","targetRect","viewportHeight","viewportWidth","top","left","TooltipContent","renderTooltip","tooltipEl","updatePosition","showTooltip","targetId","hideTooltip","handleMouseOver","handleMouseOut","activeConfig","initializeSingleton","createRoot","Tooltip","isTooltipFor","showOn","configRef","Heading","Heading1","Heading2","Heading3","Heading4","Heading5","Heading6","Accordion"],"mappings":"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","x_google_ignoreList":[0,1,2,58]}
|