@shohojdhara/atomix 0.1.7 → 0.1.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"js/atomix.react.cjs.js","mappings":"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","sources":["webpack://@shohojdhara/atomix/webpack/runtime/load script","webpack://@shohojdhara/atomix/./node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://@shohojdhara/atomix/./src/lib/constants/components.ts","webpack://@shohojdhara/atomix/./node_modules/react/jsx-runtime.js","webpack://@shohojdhara/atomix/external commonjs2 \"react\"","webpack://@shohojdhara/atomix/webpack/bootstrap","webpack://@shohojdhara/atomix/webpack/runtime/compat get default export","webpack://@shohojdhara/atomix/webpack/runtime/define property getters","webpack://@shohojdhara/atomix/webpack/runtime/ensure chunk","webpack://@shohojdhara/atomix/webpack/runtime/get javascript chunk filename","webpack://@shohojdhara/atomix/webpack/runtime/global","webpack://@shohojdhara/atomix/webpack/runtime/hasOwnProperty shorthand","webpack://@shohojdhara/atomix/webpack/runtime/make namespace object","webpack://@shohojdhara/atomix/webpack/runtime/publicPath","webpack://@shohojdhara/atomix/webpack/runtime/jsonp chunk loading","webpack://@shohojdhara/atomix/./src/lib/composables/useAccordion.ts","webpack://@shohojdhara/atomix/./src/components/Accordion/Accordion.tsx","webpack://@shohojdhara/atomix/external commonjs2 \"phosphor-react\"","webpack://@shohojdhara/atomix/./src/components/Icon/Icon.tsx","webpack://@shohojdhara/atomix/./src/components/Avatar/Avatar.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useBadge.ts","webpack://@shohojdhara/atomix/./src/components/Badge/Badge.tsx","webpack://@shohojdhara/atomix/./src/components/Breadcrumb/Breadcrumb.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useButton.ts","webpack://@shohojdhara/atomix/./src/components/Button/Button.tsx","webpack://@shohojdhara/atomix/./src/components/Button/index.ts","webpack://@shohojdhara/atomix/./src/components/Callout/Callout.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useCallout.ts","webpack://@shohojdhara/atomix/./src/components/Card/Card.tsx","webpack://@shohojdhara/atomix/./src/components/ColorModeToggle/ColorModeToggle.tsx","webpack://@shohojdhara/atomix/./src/components/Countdown/Countdown.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useDataTable.ts","webpack://@shohojdhara/atomix/./src/lib/composables/usePagination.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useSpinner.ts","webpack://@shohojdhara/atomix/./src/components/Spinner/Spinner.tsx","webpack://@shohojdhara/atomix/./src/components/Pagination/Pagination.tsx","webpack://@shohojdhara/atomix/./src/components/DataTable/DataTable.tsx","webpack://@shohojdhara/atomix/./src/components/DatePicker/utils.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useDatePicker.ts","webpack://@shohojdhara/atomix/./src/components/DatePicker/DatePicker.tsx","webpack://@shohojdhara/atomix/./src/components/Dropdown/Dropdown.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useEdgePanel.ts","webpack://@shohojdhara/atomix/./src/components/EdgePanel/EdgePanel.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useForm.ts","webpack://@shohojdhara/atomix/./src/components/Form/Form.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useInput.ts","webpack://@shohojdhara/atomix/./src/components/Form/Input.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useTextarea.ts","webpack://@shohojdhara/atomix/./src/components/Form/Textarea.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useHero.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useRiver.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useNavbar.ts","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/rng.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/regex.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/validate.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/stringify.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/parse.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/v35.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/md5.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/v3.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/native.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/v4.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/sha1.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/v5.js","webpack://@shohojdhara/atomix/./src/lib/composables/useTodo.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useFormGroup.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useSelect.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useCheckbox.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useRadio.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useModal.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useBreadcrumb.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useCard.ts","webpack://@shohojdhara/atomix/./src/components/Form/Select.tsx","webpack://@shohojdhara/atomix/./src/components/Form/Checkbox.tsx","webpack://@shohojdhara/atomix/./src/components/Form/Radio.tsx","webpack://@shohojdhara/atomix/./src/components/Hero/Hero.tsx","webpack://@shohojdhara/atomix/./src/components/List/List.tsx","webpack://@shohojdhara/atomix/./src/components/Avatar/AvatarGroup.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useMessages.ts","webpack://@shohojdhara/atomix/./src/components/Messages/Messages.tsx","webpack://@shohojdhara/atomix/./src/components/Modal/Modal.tsx","webpack://@shohojdhara/atomix/./src/components/Navbar/Navbar.tsx","webpack://@shohojdhara/atomix/./src/components/PhotoViewer/PhotoViewerHeader.tsx","webpack://@shohojdhara/atomix/./src/components/PhotoViewer/PhotoViewerNavigation.tsx","webpack://@shohojdhara/atomix/./src/components/PhotoViewer/PhotoViewerImage.tsx","webpack://@shohojdhara/atomix/./src/components/PhotoViewer/PhotoViewerThumbnails.tsx","webpack://@shohojdhara/atomix/./src/components/PhotoViewer/PhotoViewerInfo.tsx","webpack://@shohojdhara/atomix/./src/components/PhotoViewer/PhotoViewer.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/usePhotoViewer.ts","webpack://@shohojdhara/atomix/external commonjs2 \"react-dom\"","webpack://@shohojdhara/atomix/./src/lib/composables/usePopover.ts","webpack://@shohojdhara/atomix/./src/components/Popover/Popover.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useRating.ts","webpack://@shohojdhara/atomix/./src/lib/utils/useForkRef.ts","webpack://@shohojdhara/atomix/./src/components/Rating/Rating.tsx","webpack://@shohojdhara/atomix/./src/components/ProductReview/ProductReview.tsx","webpack://@shohojdhara/atomix/./src/components/Progress/Progress.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useProgress.ts","webpack://@shohojdhara/atomix/./src/components/River/River.tsx","webpack://@shohojdhara/atomix/./src/components/SectionIntro/SectionIntro.tsx","webpack://@shohojdhara/atomix/./src/components/Steps/Steps.tsx","webpack://@shohojdhara/atomix/./src/components/Tab/Tab.tsx","webpack://@shohojdhara/atomix/./src/components/Testimonial/Testimonial.tsx","webpack://@shohojdhara/atomix/./src/components/Todo/Todo.tsx","webpack://@shohojdhara/atomix/./src/components/Toggle/Toggle.tsx","webpack://@shohojdhara/atomix/./src/components/Tooltip/scripts/index.ts","webpack://@shohojdhara/atomix/./src/components/Tooltip/Tooltip.tsx","webpack://@shohojdhara/atomix/./src/components/Upload/Upload.tsx","webpack://@shohojdhara/atomix/./src/components/AtomixLogo/AtomixLogo.tsx","webpack://@shohojdhara/atomix/./src/lib/utils/dom.ts","webpack://@shohojdhara/atomix/./src/lib/utils/icons.ts","webpack://@shohojdhara/atomix/./src/index.ts"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"@shohojdhara/atomix:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","import { ThemeColor, Size } from '../types/components';\n\n/**\n * Default theme colors for components\n */\nexport const THEME_COLORS: ThemeColor[] = [\n 'primary',\n 'secondary',\n 'success',\n 'info',\n 'warning',\n 'error',\n 'light',\n 'dark'\n];\n\n/**\n * Default sizes for components\n */\nexport const SIZES: Size[] = ['sm', 'md', 'lg'];\n\n/**\n * CSS class prefixes\n */\nexport const CLASS_PREFIX = {\n COMPONENT: 'c-',\n UTILITY: 'u-',\n LAYOUT: 'l-',\n OBJECT: 'o-',\n};\n\n/**\n * Button-specific constants\n */\nexport const BUTTON = {\n BASE_CLASS: 'c-btn',\n ICON_CLASS: 'c-btn__icon',\n VARIANT_PREFIX: 'c-btn--',\n};\n\n/**\n * Callout-specific constants\n */\nexport const CALLOUT = {\n BASE_CLASS: 'c-callout',\n CONTENT_CLASS: 'c-callout__content',\n ICON_CLASS: 'c-callout__icon',\n MESSAGE_CLASS: 'c-callout__message',\n TITLE_CLASS: 'c-callout__title',\n TEXT_CLASS: 'c-callout__text',\n ACTIONS_CLASS: 'c-callout__actions',\n CLOSE_BTN_CLASS: 'c-callout__close-btn',\n VARIANT_PREFIX: 'c-callout--',\n CLASSES: {\n ONELINE: 'c-callout--oneline',\n TOAST: 'c-callout--toast',\n HIDE: 'is-hide'\n }\n};\n\n/**\n * Accordion-specific constants\n */\nexport const ACCORDION = {\n SELECTORS: {\n ACCORDION: '.c-accordion',\n HEADER: '.c-accordion__header',\n PANEL: '.c-accordion__panel',\n BODY: '.c-accordion__body'\n },\n CLASSES: {\n IS_OPEN: 'is-open',\n IS_ANIMATING: 'is-animating',\n IS_DISABLED: 'is-disabled'\n },\n ATTRIBUTES: {\n ARIA_EXPANDED: 'aria-expanded',\n ARIA_CONTROLS: 'aria-controls',\n ARIA_HIDDEN: 'aria-hidden',\n ROLE: 'role'\n },\n CSS_VARS: {\n PANEL_HEIGHT: '--panel-height'\n }\n};\n\n/**\n * Badge-specific constants\n */\nexport const BADGE = {\n BASE_CLASS: 'c-badge',\n ICON_CLASS: 'c-badge__icon',\n VARIANT_PREFIX: 'c-badge--',\n SIZE_PREFIX: 'c-badge--'\n};\n\n/**\n * List-specific constants\n */\nexport const LIST = {\n BASE_CLASS: 'c-list',\n ITEM_CLASS: 'c-list__item',\n VARIANT_PREFIX: 'c-list--',\n SIZE_PREFIX: 'c-list--',\n CLASSES: {\n ORDERED: 'c-list--ordered',\n INLINE: 'c-list--inline'\n }\n};\n\n/**\n * List Group-specific constants\n */\nexport const LIST_GROUP = {\n BASE_CLASS: 'c-list-group',\n ITEM_CLASS: 'c-list-group__item',\n VARIANT_PREFIX: 'c-list-group--',\n SIZE_PREFIX: 'c-list-group--',\n};\n\n/**\n * Breadcrumb-specific constants\n */\nexport const BREADCRUMB = {\n SELECTORS: {\n BREADCRUMB: '.c-breadcrumb',\n ITEM: '.c-breadcrumb__item',\n LINK: '.c-breadcrumb__link'\n },\n CLASSES: {\n BASE: 'c-breadcrumb',\n ITEM: 'c-breadcrumb__item',\n LINK: 'c-breadcrumb__link',\n ACTIVE: 'is-active'\n },\n DEFAULTS: {\n DIVIDER: '›'\n }\n};\n\n/**\n * Countdown-specific constants\n */\nexport const COUNTDOWN = {\n SELECTORS: {\n COUNTDOWN: '.c-countdown',\n TIME: '.c-countdown__time',\n TIME_COUNT: '.c-countdown__time-count',\n TIME_LABEL: '.c-countdown__time-label',\n SEPARATOR: '.c-countdown__separator'\n },\n CLASSES: {\n BASE: 'c-countdown',\n FOCUSED: 'c-countdown--focused'\n },\n DEFAULTS: {\n SEPARATOR: ':',\n SHOW: ['days', 'hours', 'minutes', 'seconds']\n }\n};\n\n/**\n * Hero-specific constants\n */\nexport const HERO = {\n SELECTORS: {\n HERO: '.c-hero',\n CONTAINER: '.c-hero__container',\n GRID: '.c-hero__grid',\n CONTENT: '.c-hero__content',\n SUBTITLE: '.c-hero__subtitle',\n TITLE: '.c-hero__title',\n TEXT: '.c-hero__text',\n ACTIONS: '.c-hero__actions',\n IMAGE: '.c-hero__image',\n BG: '.c-hero__bg',\n BG_IMAGE: '.c-hero__bg-image',\n OVERLAY: '.c-hero__overlay',\n IMAGE_WRAPPER: '.c-hero__image-wrapper'\n },\n CLASSES: {\n CENTER: 'c-hero--center',\n RIGHT: 'c-hero--right',\n LEFT: 'c-hero--left',\n FULL_VH: 'c-hero--full-vh'\n }\n};\n\n/**\n * Tooltip-specific constants\n */\nexport const TOOLTIP = {\n SELECTORS: {\n TOOLTIP: '.js-atomix-tooltip',\n TRIGGER: '.js-atomix-tooltip-trigger',\n CONTENT: '.js-atomix-tooltip-content',\n ARROW: '.c-tooltip__arrow'\n },\n CLASSES: {\n IS_ACTIVE: 'is-active',\n TOP: 'c-tooltip--top',\n BOTTOM: 'c-tooltip--bottom',\n LEFT: 'c-tooltip--left',\n RIGHT: 'c-tooltip--right',\n TOP_LEFT: 'c-tooltip--top-left',\n TOP_RIGHT: 'c-tooltip--top-right',\n BOTTOM_LEFT: 'c-tooltip--bottom-left',\n BOTTOM_RIGHT: 'c-tooltip--bottom-right'\n },\n ATTRIBUTES: {\n POSITION: 'data-tooltip-position',\n TRIGGER: 'data-tooltip-trigger',\n CONTENT_ID: 'data-tooltip-id'\n },\n DEFAULTS: {\n TRIGGER: 'hover',\n POSITION: 'top',\n OFFSET: 10,\n DELAY: 200\n }\n};\n\n/**\n * Popover-specific constants\n */\nexport const POPOVER = {\n SELECTORS: {\n POPOVER: '.js-atomix-popover',\n TRIGGER: '.js-atomix-popover-trigger',\n CONTENT: '.js-atomix-popover-content',\n CONTENT_INNER: '.c-popover__content-inner',\n ARROW: '.c-popover__arrow'\n },\n CLASSES: {\n IS_OPEN: 'is-open',\n TOP: 'c-popover--top',\n BOTTOM: 'c-popover--bottom',\n LEFT: 'c-popover--left',\n RIGHT: 'c-popover--right',\n AUTO: 'c-popover--auto'\n },\n ATTRIBUTES: {\n POSITION: 'data-popover-position',\n TRIGGER: 'data-popover-trigger',\n CONTENT_ID: 'data-popover-id'\n },\n DEFAULTS: {\n TRIGGER: 'click',\n POSITION: 'top',\n OFFSET: 12,\n DELAY: 0\n }\n};\n\n/**\n * Toggle-specific constants\n */\nexport const TOGGLE = {\n SELECTORS: {\n TOGGLE: '.c-toggle'\n },\n CLASSES: {\n IS_ON: 'is-on'\n }\n};\n\n/**\n * Tab-specific constants\n */\nexport const TAB = {\n SELECTORS: {\n TAB: '.js-atomix-tab',\n NAV_ITEMS: '.c-tabs__nav-item',\n NAV_BTN: '.c-tabs__nav-btn',\n PANELS: '.c-tabs__panel',\n PANEL_BODIES: '.c-tabs__panel-body'\n },\n CLASSES: {\n ACTIVE: 'is-active'\n },\n DEFAULTS: {\n ACTIVE_INDEX: 0\n }\n};\n\n/**\n * Steps-specific constants\n */\nexport const STEPS = {\n SELECTORS: {\n STEPS: '.c-steps',\n ITEM: '.c-steps__item',\n LINE: '.c-steps__line',\n CONTENT: '.c-steps__content',\n NUMBER: '.c-steps__number',\n TEXT: '.c-steps__text'\n },\n CLASSES: {\n ACTIVE: 'is-active',\n VERTICAL: 'c-steps--vertical',\n COMPLETED: 'is-completed'\n }\n};\n\n/**\n * Testimonial-specific constants\n */\nexport const TESTIMONIAL = {\n SELECTORS: {\n TESTIMONIAL: '.c-testimonial',\n QUOTE: '.c-testimonial__quote',\n AUTHOR: '.c-testimonial__author',\n AUTHOR_AVATAR: '.c-testimonial__author-avatar',\n AUTHOR_INFO: '.c-testimonial__info',\n AUTHOR_NAME: '.c-testimonial__author-name',\n AUTHOR_ROLE: '.c-testimonial__author-role'\n },\n CLASSES: {\n SMALL: 'c-testimonial--sm',\n LARGE: 'c-testimonial--lg'\n }\n};\n\n/**\n * Spinner-specific constants\n */\nexport const SPINNER = {\n SELECTORS: {\n SPINNER: '.c-spinner'\n },\n CLASSES: {\n PRIMARY: 'c-spinner--primary',\n SECONDARY: 'c-spinner--secondary',\n SUCCESS: 'c-spinner--success',\n INFO: 'c-spinner--info',\n WARNING: 'c-spinner--warning',\n DANGER: 'c-spinner--danger',\n LIGHT: 'c-spinner--light',\n DARK: 'c-spinner--dark',\n SMALL: 'c-spinner--sm',\n LARGE: 'c-spinner--lg'\n },\n VISUALLY_HIDDEN: 'u-visually-hidden'\n};\n\n/**\n * SectionIntro-specific constants\n */\nexport const SECTION_INTRO = {\n SELECTORS: {\n SECTION_INTRO: '.c-sectionintro',\n LABEL: '.c-sectionintro__label',\n TITLE: '.c-sectionintro__title',\n TEXT: '.c-sectionintro__text',\n ACTIONS: '.c-sectionintro__actions'\n },\n CLASSES: {\n CENTER: 'c-sectionintro--center',\n LARGE: 'c-sectionintro--lg',\n SMALL: 'c-sectionintro--sm'\n }\n};\n\n/**\n * River-specific constants\n */\nexport const RIVER = {\n SELECTORS: {\n RIVER: '.c-river',\n CONTAINER: '.c-river__container',\n ROW: '.c-river__row',\n CONTENT: '.c-river__content',\n CONTENT_COL: '.c-river__content-col',\n CONTENT_COL_TITLE: '.c-river__content-col--title',\n CONTENT_COL_TEXT: '.c-river__content-col--text',\n TITLE: '.c-river__title',\n TEXT: '.c-river__text',\n ACTIONS: '.c-river__actions',\n VISUAL: '.c-river__visual',\n IMAGE_WRAPPER: '.c-river__image-wrapper',\n IMAGE: '.c-river__image',\n BG: '.c-river__bg',\n BG_IMAGE: '.c-river__bg-image',\n OVERLAY: '.c-river__overlay'\n },\n CLASSES: {\n CENTER: 'c-river--center',\n BREAKOUT: 'c-river--breakout',\n REVERSE: 'c-river--reverse'\n },\n ATTRIBUTES: {\n CONTENT_WIDTH: '--river-content-width'\n }\n};\n\n/**\n * Upload-specific constants\n */\nexport const UPLOAD = {\n SELECTORS: {\n UPLOAD: '.c-upload',\n INNER: '.c-upload__inner',\n ICON: '.c-upload__icon',\n TITLE: '.c-upload__title',\n TEXT: '.c-upload__text',\n BUTTON: '.c-upload__btn',\n HELPER_TEXT: '.c-upload__helper-text',\n LOADER: '.c-upload__loader',\n LOADER_STATUS: '.c-upload__loader-status',\n LOADER_TITLE: '.c-upload__loader-title',\n LOADER_PROGRESS: '.c-upload__loader-progress',\n LOADER_PAR: '.c-upload__loader-par',\n LOADER_TIME: '.c-upload__loader-time',\n LOADER_CONTROL: '.c-upload__loader-control',\n LOADER_BAR: '.c-upload__loader-bar',\n LOADER_CLOSE: '.c-upload__loader-close'\n },\n CLASSES: {\n DISABLED: 'c-upload--disabled',\n ERROR: 'c-upload--error',\n SUCCESS: 'c-upload--success',\n LOADING: 'c-upload--loading',\n DRAGGING: 'c-upload--dragging'\n },\n ATTRIBUTES: {\n PERCENTAGE: '--upload-loader-percentage'\n }\n};\n\n/**\n * Navbar-specific constants\n */\nexport const NAVBAR = {\n SELECTORS: {\n NAVBAR: '.c-navbar',\n CONTAINER: '.c-navbar__container',\n BRAND: '.c-navbar__brand',\n COLLAPSE: '.c-navbar__collapse',\n TOGGLER: '.c-navbar__toggler'\n },\n CLASSES: {\n FIXED: 'c-navbar--fixed',\n FIXED_BOTTOM: 'c-navbar--fixed-bottom',\n EXPANDED: 'is-expanded'\n }\n};\n\n/**\n * Nav-specific constants\n */\nexport const NAV = {\n SELECTORS: {\n NAV: '.c-nav',\n ITEM: '.c-nav__item',\n LINK: '.c-nav__link',\n DROPDOWN: '.c-nav__item--dropdown',\n DROPDOWN_MENU: '.c-nav__dropdown-menu',\n MEGA_MENU: '.c-nav__mega-menu',\n ICON: '.c-nav__icon'\n },\n CLASSES: {\n END: 'c-nav--end',\n CENTER: 'c-nav--center',\n ACTIVE: 'is-active',\n DISABLED: 'is-disabled'\n }\n};\n\n/**\n * EdgePanel-specific constants\n */\n/**\n * Rating-specific constants\n */\nexport const RATING = {\n SELECTORS: {\n RATING: '.c-rating',\n STAR: '.c-rating__star',\n STAR_FULL: '.c-rating__star-full',\n STAR_HALF: '.c-rating__star-half'\n },\n CLASSES: {\n FULL: 'c-rating__star--full',\n HALF: 'c-rating__star--half',\n SMALL: 'c-rating--sm',\n LARGE: 'c-rating--lg'\n },\n ATTRIBUTES: {\n READONLY: 'data-readonly',\n VALUE: 'data-value'\n }\n};\n\nexport const EDGE_PANEL = {\n SELECTORS: {\n PANEL: '.c-edge-panel',\n BACKDROP: '.c-edge-panel__backdrop',\n CONTAINER: '.c-edge-panel__container',\n HEADER: '.c-edge-panel__header',\n BODY: '.c-edge-panel__body',\n CLOSE: '.c-edge-panel__close'\n },\n CLASSES: {\n BASE: 'c-edge-panel',\n START: 'c-edge-panel--start',\n END: 'c-edge-panel--end',\n TOP: 'c-edge-panel--top',\n BOTTOM: 'c-edge-panel--bottom',\n IS_OPEN: 'is-open'\n },\n TRANSFORM_VALUES: {\n start: 'translateX(-100%)',\n end: 'translateX(100%)',\n top: 'translateY(-100%)',\n bottom: 'translateY(100%)'\n },\n ANIMATION_DURATION: 300\n};\n\n/**\n * DataTable-specific constants\n */\nexport const DATA_TABLE_CLASSES = {\n base: 'c-data-table',\n container: 'c-data-table-container',\n tableWrapper: 'c-data-table-wrapper',\n header: 'c-data-table__header',\n headerCell: 'c-data-table__header-cell',\n headerContent: 'c-data-table__header-content',\n sortable: 'c-data-table__header-cell--sortable',\n sortIcon: 'c-data-table__sort-icon',\n row: 'c-data-table__row',\n cell: 'c-data-table__cell',\n loadingCell: 'c-data-table__loading-cell',\n loadingIndicator: 'c-data-table__loading-indicator',\n emptyCell: 'c-data-table__empty-cell',\n toolbar: 'c-data-table-toolbar',\n search: 'c-data-table-search',\n searchInput: 'c-data-table-search__input',\n pagination: 'c-data-table__pagination-container',\n striped: 'c-data-table--striped',\n bordered: 'c-data-table--bordered',\n dense: 'c-data-table--dense',\n loading: 'c-data-table--loading',\n open: 'is-open',\n};\n\n/**\n * DataTable-specific selectors\n */\nexport const DATA_TABLE_SELECTORS = {\n TABLE: '.c-data-table',\n HEADER: '.c-data-table__header',\n HEADER_CELL: '.c-data-table__header-cell',\n ROW: '.c-data-table__row',\n CELL: '.c-data-table__cell',\n PAGINATION: '.c-data-table__pagination',\n PAGINATION_BUTTON: '.c-data-table__pagination-button',\n SEARCH_INPUT: '.c-data-table__search-input',\n};\n\n/**\n * Pagination-specific constants\n */\nexport const PAGINATION_DEFAULTS = {\n currentPage: 1,\n totalPages: 1,\n siblingCount: 1,\n showFirstLastButtons: true,\n showPrevNextButtons: true,\n size: 'md' as Size,\n};\n\n/**\n * Todo-specific constants\n */\nexport const TODO = {\n SELECTORS: {\n TODO: '.c-todo',\n TITLE: '.c-todo__title',\n LIST: '.c-todo__list',\n ITEM: '.c-todo__item',\n ITEM_CONTENT: '.c-todo__item-content',\n ITEM_TEXT: '.c-todo__item-text',\n ITEM_ACTIONS: '.c-todo__item-actions',\n CHECKBOX: '.c-todo__checkbox',\n DELETE_BUTTON: '.c-todo__delete-btn',\n FORM: '.c-todo__form',\n INPUT: '.c-todo__input',\n ADD_BUTTON: '.c-todo__add-btn'\n },\n CLASSES: {\n BASE: 'c-todo',\n ITEM: 'c-todo__item',\n COMPLETED: 'c-todo__item--completed',\n SMALL: 'c-todo--sm',\n LARGE: 'c-todo--lg'\n }\n};\n\n/**\n * Form-specific constants\n */\nexport const FORM = {\n SELECTORS: {\n FORM: '.c-form',\n GROUP: '.c-form-group',\n LABEL: '.c-form-group__label',\n HELPER: '.c-form-group__helper',\n FIELD: '.c-form-group__field',\n REQUIRED: '.c-form-group__required'\n },\n CLASSES: {\n BASE: 'c-form',\n DISABLED: 'c-form--disabled'\n }\n};\n\n/**\n * Form Group-specific constants\n */\nexport const FORM_GROUP = {\n SELECTORS: {\n GROUP: '.c-form-group',\n LABEL: '.c-form-group__label',\n FIELD: '.c-form-group__field',\n HELPER: '.c-form-group__helper',\n REQUIRED: '.c-form-group__required'\n },\n CLASSES: {\n BASE: 'c-form-group',\n SMALL: 'c-form-group--sm',\n LARGE: 'c-form-group--lg',\n INVALID: 'c-form-group--invalid',\n VALID: 'c-form-group--valid',\n DISABLED: 'c-form-group--disabled'\n }\n};\n\n/**\n * Input-specific constants\n */\nexport const INPUT = {\n SELECTORS: {\n INPUT: '.c-input'\n },\n CLASSES: {\n BASE: 'c-input',\n SMALL: 'c-input--sm',\n LARGE: 'c-input--lg',\n INVALID: 'is-invalid',\n VALID: 'is-valid',\n DISABLED: 'is-disabled'\n }\n};\n\n/**\n * Radio-specific constants\n */\nexport const RADIO = {\n SELECTORS: {\n RADIO: '.c-radio',\n INPUT: '.c-radio__input',\n LABEL: '.c-radio__label'\n },\n CLASSES: {\n BASE: 'c-radio',\n INVALID: 'is-error',\n VALID: 'is-valid',\n DISABLED: 'is-disabled'\n }\n};\n\n/**\n * Checkbox-specific constants - extend existing checkbox constants\n */\n// Update existing CHECKBOX constants if needed\n\n/**\n * Card-specific constants\n */\nexport const CARD = {\n SELECTORS: {\n CARD: '.c-card',\n HEADER: '.c-card__header',\n BODY: '.c-card__body',\n IMAGE: '.c-card__image',\n TITLE: '.c-card__title',\n TEXT: '.c-card__text',\n ACTIONS: '.c-card__actions',\n ICON: '.c-card__icon',\n FOOTER: '.c-card__footer'\n },\n CLASSES: {\n BASE: 'c-card',\n ROW: 'c-card--row',\n FLAT: 'c-card--flat',\n ACTIVE: 'is-active',\n FLIPPED: 'is-flipped',\n FOCUSED: 'is-focused',\n CLICKABLE: 'is-clickable'\n },\n DEFAULTS: {\n HOVER: true\n }\n};\n\n/**\n * Select-specific constants\n */\nexport const SELECT = {\n SELECTORS: {\n SELECT: '.c-select',\n SELECTED: '.c-select__selected',\n SELECT_BODY: '.c-select__body',\n SELECT_PANEL: '.c-select__panel',\n SELECT_ITEMS: '.c-select__items',\n SELECT_ITEM: '.c-select__item',\n ITEM_LABEL: '.c-select__item-label',\n ITEM_INPUT: '.c-select__item-input',\n OPTION: 'option'\n },\n CLASSES: {\n BASE: 'c-select',\n SELECTED: 'c-select__selected',\n SELECT_BODY: 'c-select__body',\n SELECT_PANEL: 'c-select__panel',\n SELECT_ITEMS: 'c-select__items',\n SELECT_ITEM: 'c-select__item',\n TOGGLE_ICON: 'c-select__toggle-icon',\n ICON_CARET: 'icon-atomix-caret-down',\n SMALL: 'c-select--sm',\n LARGE: 'c-select--lg',\n INVALID: 'is-invalid',\n VALID: 'is-valid',\n DISABLED: 'is-disabled',\n IS_OPEN: 'is-open'\n }\n};\n\n/**\n * Textarea-specific constants\n */\nexport const TEXTAREA = {\n SELECTORS: {\n TEXTAREA: '.c-textarea'\n },\n CLASSES: {\n BASE: 'c-input c-input--textarea',\n SMALL: 'c-input--sm',\n LARGE: 'c-input--lg',\n INVALID: 'is-invalid',\n VALID: 'is-valid',\n DISABLED: 'is-disabled'\n }\n};\n\n/**\n * Avatar-specific constants\n */\nexport const AVATAR = {\n SELECTORS: {\n AVATAR: '.c-avatar',\n IMAGE: '.c-avatar__image',\n INITIALS: '.c-avatar__initials',\n ICON: '.c-avatar__icon'\n },\n CLASSES: {\n BASE: 'c-avatar',\n XS: 'c-avatar--xs',\n SM: 'c-avatar--sm',\n MD: 'c-avatar--md',\n LG: 'c-avatar--lg',\n XL: 'c-avatar--xl',\n CIRCLE: 'c-avatar--circle'\n }\n};\n\n/**\n * Avatar Group-specific constants\n */\nexport const AVATAR_GROUP = {\n SELECTORS: {\n GROUP: '.c-avatar-group',\n MORE: '.c-avatar-group__more'\n },\n CLASSES: {\n BASE: 'c-avatar-group',\n STACKED: 'c-avatar-group--stacked',\n MORE: 'c-avatar-group__more'\n }\n};\n\n/**\n * Modal component constants\n */\nexport const MODAL = {\n SELECTORS: {\n MODAL: '.c-modal',\n OPEN_BUTTON: '.js-modal-open',\n CLOSE_BUTTONS: '.js-modal-close',\n DIALOG: '.c-modal__dialog',\n BACKDROP: '.c-modal__backdrop'\n },\n CLASSES: {\n IS_OPEN: 'is-open'\n },\n DEFAULT_OPTIONS: {\n openELm: '.js-modal-open',\n closeELms: '.js-modal-close',\n modalDialogELm: '.c-modal__dialog',\n backdropELm: '.c-modal__backdrop',\n backdrop: true,\n keyboard: true\n }\n};\n\n/**\n * Messages-specific constants\n */\nexport const MESSAGES = {\n SELECTORS: {\n MESSAGES: '.c-messages',\n BODY: '.c-messages__body',\n CONTENT: '.c-messages__content',\n AVATAR: '.c-messages__avatar',\n ITEMS: '.c-messages__items',\n TEXT: '.c-messages__text',\n FILE: '.c-messages__file',\n IMAGE: '.c-messages__image',\n FORM: '.c-messages__form',\n INPUT: '.c-messages__input',\n },\n CLASSES: {\n BASE: 'c-messages',\n BODY: 'c-messages__body',\n CONTENT: 'c-messages__content',\n CONTENT_SELF: 'c-messages__content--self',\n AVATAR: 'c-messages__avatar',\n ITEMS: 'c-messages__items',\n NAME: 'c-messages__name',\n TEXT: 'c-messages__text',\n TIME: 'c-messages__time',\n FILE: 'c-messages__file',\n FILE_ICON: 'c-messages__file-icon',\n FILE_DETAILS: 'c-messages__file-details',\n FILE_NAME: 'c-messages__file-name',\n FILE_SIZE: 'c-messages__file-size',\n IMAGE: 'c-messages__image',\n FORM: 'c-messages__form',\n INPUT_GROUP: 'c-messages__input-group',\n INPUT: 'c-messages__input',\n OPTIONS: 'c-messages__options',\n OPTION: 'c-messages__option c-btn',\n OPTION_ICON: 'c-messages__option-icon',\n SUBMIT: 'c-messages__submit',\n },\n};\n\n/**\n * Dropdown-specific constants\n */\nexport const DROPDOWN = {\n SELECTORS: {\n DROPDOWN: '.c-dropdown',\n TOGGLE: '.c-dropdown__toggle',\n MENU: '.c-dropdown__menu',\n MENU_WRAPPER: '.c-dropdown__menu-wrapper',\n MENU_INNER: '.c-dropdown__menu-inner',\n MENU_ITEM: '.c-dropdown__menu-item',\n DIVIDER: '.c-dropdown__divider',\n HEADER: '.c-dropdown__header'\n },\n CLASSES: {\n IS_OPEN: 'is-open',\n IS_ACTIVE: 'is-active',\n IS_DISABLED: 'is-disabled'\n },\n DEFAULTS: {\n PLACEMENT: 'bottom-start',\n TRIGGER: 'click',\n OFFSET: 4,\n MIN_WIDTH: 180,\n ANIMATION_DURATION: '0.25s',\n ANIMATION_TIMING: 'cubic-bezier(0.16, 1, 0.3, 1)'\n }\n};\n\n/**\n * DatePicker-specific constants\n */\n/**\n * Progress-specific constants\n */\nexport const PROGRESS = {\n SELECTORS: {\n PROGRESS: '.c-progress',\n BAR: '.c-progress__bar',\n },\n CLASSES: {\n BASE: 'c-progress',\n BAR: 'c-progress__bar',\n SM: 'c-progress--sm',\n MD: 'c-progress--md',\n LG: 'c-progress--lg',\n },\n ATTRIBUTES: {\n ARIA_VALUEMIN: 'aria-valuemin',\n ARIA_VALUEMAX: 'aria-valuemax',\n ARIA_VALUENOW: 'aria-valuenow',\n ARIA_LABEL: 'aria-label',\n },\n CSS_VARS: {\n PERCENTAGE: '--atomix-progress-percentage',\n },\n DEFAULTS: {\n ARIA_LABEL: 'Progress bar',\n }\n};\n\nexport const DATEPICKER = {\n SELECTORS: {\n DATEPICKER: '.c-datepicker',\n INPUT: '.c-datepicker__input',\n CALENDAR: '.c-datepicker__calendar',\n DAY: '.c-datepicker__day',\n MONTH: '.c-datepicker__month',\n YEAR: '.c-datepicker__year',\n HEADER: '.c-datepicker__header',\n BODY: '.c-datepicker__body',\n FOOTER: '.c-datepicker__footer',\n WEEKDAYS: '.c-datepicker__weekdays',\n TODAY_BUTTON: '.c-datepicker__today-button',\n CLEAR_BUTTON: '.c-datepicker__clear-button',\n CLOSE_BUTTON: '.c-datepicker__close-button',\n NAV_BUTTON: '.c-datepicker__nav-button',\n VIEW_SWITCH: '.c-datepicker__view-switch'\n },\n CLASSES: {\n IS_OPEN: 'is-open',\n IS_DISABLED: 'is-disabled',\n IS_SELECTED: 'is-selected',\n IS_TODAY: 'is-today',\n INLINE: 'c-datepicker--inline'\n },\n ATTRIBUTES: {\n FORMAT: 'data-format',\n MIN_DATE: 'data-min-date',\n MAX_DATE: 'data-max-date',\n INLINE: 'data-inline',\n PLACEMENT: 'data-placement',\n CLEARABLE: 'data-clearable',\n SHOW_TODAY: 'data-show-today-button',\n SHOW_WEEK_NUMBERS: 'data-show-week-numbers'\n },\n DEFAULTS: {\n FORMAT: 'MM/dd/yyyy',\n PLACEMENT: 'bottom-start',\n CLEARABLE: true,\n SHOW_TODAY_BUTTON: true,\n SHOW_WEEK_NUMBERS: false,\n INLINE: false\n }\n};\n\n/**\n * PhotoViewer component constants\n */\nexport const PHOTOVIEWER = {\n SELECTOR: '.c-photo-viewer',\n CLASS: 'c-photo-viewer',\n DEFAULTS: {\n startIndex: 0,\n zoomLevel: 1,\n fullscreen: false,\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","module.exports = require(\"react\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \".atomix.react.cjs.js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/^blob:/, \"\").replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl + \"../\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk_shohojdhara_atomix\"] = self[\"webpackChunk_shohojdhara_atomix\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","import { AccordionProps, AccordionState, IconPosition, ElementRefs } from '../types/components';\nimport { useState, useEffect, useRef } from 'react';\nimport { ACCORDION } from '../constants/components';\n\n/**\n * Accordion functionality hook result\n */\ninterface UseAccordionResult {\n /** Current accordion state */\n state: AccordionState;\n /** Toggle the accordion open/closed */\n toggle: () => void;\n /** Update the panel height based on content */\n updatePanelHeight: () => void;\n /** Reference to the panel element */\n panelRef: React.RefObject<HTMLDivElement>;\n /** Reference to the content element */\n contentRef: React.RefObject<HTMLDivElement>;\n /** Generate accordion class names based on state */\n generateClassNames: (baseClassName?: string) => string;\n /** Generate header class names */\n generateHeaderClassNames: () => string;\n}\n\n/**\n * Accordion functionality hook\n * @param initialProps - Initial accordion properties\n * @returns Accordion state and methods\n */\nexport function useAccordion(initialProps?: Partial<AccordionProps> & { isOpen?: boolean; onOpenChange?: (open: boolean) => void }): UseAccordionResult {\n // Default accordion properties\n const defaultProps: Partial<AccordionProps> & { isOpen?: boolean; onOpenChange?: (open: boolean) => void } = {\n defaultOpen: false,\n disabled: false,\n iconPosition: 'right' as IconPosition,\n ...initialProps\n };\n\n // Controlled/uncontrolled open state\n const isControlled = typeof defaultProps.isOpen === 'boolean';\n const [internalOpen, setInternalOpen] = useState(defaultProps.defaultOpen || false);\n const isOpen = isControlled ? defaultProps.isOpen! : internalOpen;\n\n const [panelHeight, setPanelHeight] = useState<string>(isOpen ? 'auto' : '0px');\n\n const panelRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n\n /**\n * Toggle accordion open/closed state\n */\n const toggle = (): void => {\n if (!defaultProps.disabled) {\n if (isControlled) {\n defaultProps.onOpenChange && defaultProps.onOpenChange(!isOpen);\n } else {\n setInternalOpen(prev => !prev);\n }\n }\n };\n\n /**\n * Update panel height based on content\n */\n const updatePanelHeight = (): void => {\n if (contentRef.current && panelRef.current) {\n const height = isOpen ? `${contentRef.current.clientHeight}px` : '0px';\n panelRef.current.style.setProperty(ACCORDION.CSS_VARS.PANEL_HEIGHT, height);\n setPanelHeight(height);\n }\n };\n\n /**\n * Effect to update panel height when open state changes\n */\n useEffect(() => {\n updatePanelHeight();\n }, [isOpen]);\n\n /**\n * Effect to handle window resize and update panel height\n */\n useEffect(() => {\n const handleResize = (): void => {\n if (isOpen) {\n updatePanelHeight();\n }\n };\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [isOpen]);\n\n /**\n * Generate accordion class names based on state\n */\n const generateClassNames = (baseClassName: string = ''): string => {\n const openClass = isOpen ? ACCORDION.CLASSES.IS_OPEN : '';\n const disabledClass = defaultProps.disabled ? ACCORDION.CLASSES.IS_DISABLED : '';\n return `c-accordion ${openClass} ${disabledClass} ${baseClassName}`.trim();\n };\n\n /**\n * Generate header class names\n */\n const generateHeaderClassNames = (): string => {\n const iconPositionClass = defaultProps.iconPosition === 'left' ? 'c-accordion__header--icon-left' : '';\n return `c-accordion__header ${iconPositionClass}`.trim();\n };\n\n return {\n state: { isOpen, panelHeight },\n toggle,\n updatePanelHeight,\n panelRef,\n contentRef,\n generateClassNames,\n generateHeaderClassNames\n };\n} ","import React, { ReactNode, useId } from 'react';\nimport { ACCORDION } from '../../lib/constants/components';\nimport { useAccordion } from '../../lib/composables/useAccordion';\nimport { AccordionProps as AccordionPropsType } from '../../lib/types/components';\n\n/**\n * Accordion component for showing/hiding content panels\n * @see AccordionProps in types/components.ts\n */\nexport type AccordionProps = AccordionPropsType & {\n /**\n * Controlled open state (overrides defaultOpen)\n */\n isOpen?: boolean;\n /**\n * Callback when open state changes (for controlled mode)\n */\n onOpenChange?: (open: boolean) => void;\n};\n\nconst Accordion: React.FC<AccordionProps> = ({\n title,\n children,\n defaultOpen = false,\n isOpen: controlledOpen,\n onOpenChange,\n disabled = false,\n iconPosition = 'right',\n icon,\n className = '',\n}) => {\n // Generate unique IDs for accessibility\n const instanceId = useId();\n const buttonId = `accordion-header-${instanceId}`;\n const panelId = `accordion-panel-${instanceId}`;\n\n // Use composable hook for logic/state\n const {\n state,\n toggle,\n updatePanelHeight,\n panelRef,\n contentRef,\n generateClassNames,\n generateHeaderClassNames\n } = useAccordion({\n defaultOpen,\n disabled,\n iconPosition,\n isOpen: controlledOpen,\n onOpenChange\n });\n\n // Default icon\n const defaultIcon = (\n <i className=\"c-accordion__icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </i>\n );\n\n return (\n <div className={generateClassNames(className)}>\n <button\n id={buttonId}\n className={generateHeaderClassNames()}\n onClick={toggle}\n aria-expanded={state.isOpen}\n aria-controls={panelId}\n disabled={disabled}\n type=\"button\"\n >\n <span className=\"c-accordion__title\">{title}</span>\n {icon || defaultIcon}\n </button>\n <div\n id={panelId}\n className={ACCORDION.SELECTORS.PANEL.replace('.', '')}\n ref={panelRef}\n role=\"region\"\n aria-labelledby={buttonId}\n >\n <div className={ACCORDION.SELECTORS.BODY.replace('.', '')} ref={contentRef}>\n {children}\n </div>\n </div>\n </div>\n );\n};\n\n// Set display name for debugging\nAccordion.displayName = 'Accordion';\n\n// Default export (primary)\nexport default Accordion;\n\n// Named export for compatibility\nexport { Accordion };","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"phosphor-react\");","import React from 'react';\nimport * as PhosphorIcons from 'phosphor-react';\n\nexport type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type IconWeight = 'thin' | 'light' | 'regular' | 'bold' | 'fill' | 'duotone';\n\n// We need to filter out non-icon exports from the Phosphor package\ntype PhosphorIconsType = Exclude<keyof typeof PhosphorIcons, 'Icon' | 'IconContext' | 'IconBase' | 'IconProps' | 'createIcon' | 'default' | 'SSR'>;\n\ninterface IconProps {\n /**\n * Icon name from Phosphor Icons\n */\n name: PhosphorIconsType;\n \n /**\n * Icon size\n */\n size?: IconSize | number;\n \n /**\n * Icon weight/style\n */\n weight?: IconWeight;\n \n /**\n * Icon color\n */\n color?: string;\n \n /**\n * Additional CSS class names\n */\n className?: string;\n \n /**\n * Alt text for accessibility\n */\n alt?: string;\n}\n\n// Map string sizes to pixel values\nconst sizeMap: Record<IconSize, number> = {\n xs: 16,\n sm: 20,\n md: 24,\n lg: 32,\n xl: 40\n};\n\n/**\n * Icon component that displays a Phosphor icon\n */\nconst Icon: React.FC<IconProps> = ({\n name,\n size = 'md',\n weight = 'regular',\n color,\n className = '',\n alt\n}) => {\n // Get the icon component from Phosphor\n const IconComponent = PhosphorIcons[name] as React.FC<\n PhosphorIcons.IconProps & { ref?: React.Ref<SVGSVGElement> }\n >;\n \n if (!IconComponent) {\n console.warn(`Icon \"${name}\" not found in Phosphor Icons`);\n return null;\n }\n \n // Convert string size to pixel value if needed\n const pixelSize = typeof size === 'string' ? sizeMap[size as IconSize] || 24 : size;\n \n return (\n <span className={`c-icon c-icon--${size} ${className}`} aria-hidden={!alt} title={alt}>\n <IconComponent\n size={pixelSize}\n weight={weight}\n color={color}\n aria-label={alt}\n />\n </span>\n );\n};\n\nexport type { IconProps };\n\n// Set display name for debugging\nIcon.displayName = 'Icon';\n\n// Default export (primary)\nexport default Icon;\n\n// Named export for compatibility\nexport { Icon };","import React, { useState } from 'react';\nimport { AvatarProps } from '../../lib/types/components';\nimport { AVATAR } from '../../lib/constants/components';\nimport { Icon } from '../Icon';\n\nconst Avatar: React.FC<AvatarProps> = ({\n src,\n alt = 'Avatar',\n initials,\n icon,\n size = 'md',\n circle = false,\n className = '',\n disabled = false,\n onClick,\n}) => {\n const [imageError, setImageError] = useState(false);\n\n const handleImageError = () => {\n setImageError(true);\n };\n\n // Generate CSS classes\n const avatarClasses = [\n AVATAR.CLASSES.BASE,\n size !== 'md' && `c-avatar--${size}`,\n circle && AVATAR.CLASSES.CIRCLE,\n disabled && 'is-disabled',\n className,\n ].filter(Boolean).join(' ');\n\n // Handle click event\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!disabled && onClick) {\n onClick(e);\n }\n };\n\n return (\n <div \n className={avatarClasses}\n onClick={onClick ? handleClick : undefined}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick && !disabled ? 0 : undefined}\n aria-disabled={disabled || undefined}\n >\n {src && !imageError ? (\n <img \n src={src} \n alt={alt} \n className=\"c-avatar__image\" \n onError={handleImageError}\n />\n ) : initials ? (\n <span className=\"c-avatar__initials\">{initials}</span>\n ) : icon ? (\n <span className=\"c-avatar__icon\">{icon}</span>\n ) : (\n <span className=\"c-avatar__icon\">\n <Icon name=\"User\" size={size === 'xs' ? 'xs' : size === 'sm' ? 'sm' : 'md'} />\n </span>\n )}\n </div>\n );\n};\n\n\nexport type { AvatarProps };\n\n// Set display name for debugging\nAvatar.displayName = 'Avatar';\n\n// Default export (primary)\nexport default Avatar;\n\n// Named export for compatibility\nexport { Avatar };","import { BadgeProps } from '../types/components';\nimport { BADGE } from '../constants/components';\n\n/**\n * Badge state and functionality\n * @param initialProps - Initial badge properties\n * @returns Badge state and methods\n */\nexport function useBadge(initialProps?: Partial<BadgeProps>) {\n // Default badge properties\n const defaultProps: Partial<BadgeProps> = {\n variant: 'primary',\n size: 'md',\n disabled: false,\n ...initialProps\n };\n\n /**\n * Generate badge class based on properties\n * @param props - Badge properties\n * @returns Class string\n */\n const generateBadgeClass = (props: Partial<BadgeProps>): string => {\n const {\n variant = defaultProps.variant,\n size = defaultProps.size,\n disabled = defaultProps.disabled,\n className = '',\n } = props;\n\n const sizeClass = size === 'md' ? '' : `${BADGE.SIZE_PREFIX}${size}`;\n const variantClass = variant ? `${BADGE.VARIANT_PREFIX}${variant}` : '';\n const disabledClass = disabled ? 'c-badge--disabled' : '';\n \n return `${BADGE.BASE_CLASS} ${variantClass} ${sizeClass} ${disabledClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateBadgeClass,\n };\n} ","import React from 'react';\nimport { BadgeProps } from '../../lib/types/components';\nimport { useBadge } from '../../lib/composables/useBadge';\nimport { BADGE } from '../../lib/constants/components';\n\nconst Badge: React.FC<BadgeProps> = ({\n label,\n variant = 'primary',\n size = 'md',\n disabled = false,\n icon,\n className = '',\n}) => {\n const { generateBadgeClass } = useBadge({ \n variant, size, disabled \n });\n \n const badgeClass = generateBadgeClass({ \n variant, size, disabled, className \n });\n \n return (\n <span\n className={badgeClass}\n aria-disabled={disabled}\n >\n {icon && <span className={BADGE.ICON_CLASS}>{icon}</span>}\n <span>{label}</span>\n </span>\n );\n}; \n\nexport type { BadgeProps };\n\n// Set display name for debugging\nBadge.displayName = 'Badge';\n\n// Default export (primary)\nexport default Badge;\n\n// Named export for compatibility\nexport { Badge };","import React, { ReactNode } from 'react';\nimport { BREADCRUMB } from '../../lib/constants/components';\n\nexport interface BreadcrumbItem {\n /**\n * Text to display\n */\n label: string;\n \n /**\n * URL for the breadcrumb item\n */\n href?: string;\n \n /**\n * Whether this item is active (current page)\n */\n active?: boolean;\n \n /**\n * Optional icon to display before the label\n */\n icon?: ReactNode;\n \n /**\n * Optional click handler\n */\n onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;\n}\n\nexport interface BreadcrumbProps {\n /**\n * Array of breadcrumb items\n */\n items: BreadcrumbItem[];\n \n /**\n * Custom divider character or element\n */\n divider?: ReactNode;\n \n /**\n * Additional className\n */\n className?: string;\n \n /**\n * Aria label for the navigation\n */\n ariaLabel?: string;\n}\nconst Breadcrumb: React.FC<BreadcrumbProps> = ({\n items,\n divider,\n className = '',\n ariaLabel = 'Breadcrumb'\n}) => {\n const breadcrumbClasses = [\n BREADCRUMB.CLASSES.BASE,\n className\n ].filter(Boolean).join(' ');\n \n return (\n <nav aria-label={ariaLabel}>\n <ol className={breadcrumbClasses}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const itemClasses = [\n BREADCRUMB.CLASSES.ITEM,\n item.active || isLast ? BREADCRUMB.CLASSES.ACTIVE : ''\n ].filter(Boolean).join(' ');\n \n const linkContent = (\n <>\n {item.icon && <span className=\"c-breadcrumb__icon\">{item.icon}</span>}\n {item.label}\n </>\n );\n \n return (\n <li key={index} className={itemClasses}>\n {item.href && !item.active ? (\n <a\n href={item.href}\n className={BREADCRUMB.CLASSES.LINK}\n onClick={item.onClick}\n >\n {linkContent}\n </a>\n ) : (\n <span className={BREADCRUMB.CLASSES.LINK}>\n {linkContent}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n\n// Set display name for debugging\nBreadcrumb.displayName = 'Breadcrumb';\n\n// Default export (primary)\nexport default Breadcrumb;\n\n// Named export for compatibility\nexport { Breadcrumb };","import { ButtonProps } from '../types/components';\n\n/**\n * Button state and functionality\n * @param initialProps - Initial button properties\n * @returns Button state and methods\n */\nexport function useButton(initialProps?: Partial<ButtonProps>) {\n // Default button properties\n const defaultProps: Partial<ButtonProps> = {\n variant: 'primary',\n size: 'md',\n disabled: false,\n rounded: false,\n ...initialProps\n };\n\n /**\n * Generate button class based on properties\n * @param props - Button properties\n * @returns Class string\n */\n const generateButtonClass = (props: Partial<ButtonProps>): string => {\n const {\n variant = defaultProps.variant,\n size = defaultProps.size,\n disabled = defaultProps.disabled,\n rounded = defaultProps.rounded,\n iconOnly = false,\n className = '',\n } = props;\n\n const sizeClass = size === 'md' ? '' : `c-btn--${size}`;\n const iconOnlyClass = iconOnly ? 'c-btn--icon' : '';\n const roundedClass = rounded ? 'c-btn--rounded' : '';\n const disabledClass = disabled ? 'c-btn--disabled' : '';\n \n return `c-btn c-btn--${variant} ${sizeClass} ${iconOnlyClass} ${roundedClass} ${disabledClass} ${className}`.trim();\n };\n\n /**\n * Handle button click with disabled check\n * @param handler - Click handler function\n * @returns Function that respects disabled state\n */\n const handleClick = (handler?: () => void) => {\n return () => {\n if (!defaultProps.disabled && handler) {\n handler();\n }\n };\n };\n\n return {\n defaultProps,\n generateButtonClass,\n handleClick,\n };\n} ","import React, { forwardRef, ElementType } from 'react';\nimport { ButtonProps } from '../../lib/types/components';\nimport { useButton } from '../../lib/composables/useButton';\nimport { BUTTON } from '../../lib/constants/components';\n\ntype ButtonAsProp = {\n as?: ElementType;\n to?: string;\n href?: string;\n [key: string]: any;\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps & ButtonAsProp>(({\n label,\n children,\n onClick,\n variant = 'primary',\n size = 'md',\n disabled = false,\n icon,\n iconOnly = false,\n rounded = false,\n className = '',\n as: Component = 'button',\n ...props\n}, ref) => {\n const { generateButtonClass, handleClick } = useButton({ \n variant, size, disabled, rounded \n });\n \n const buttonClass = generateButtonClass({ \n variant, size, disabled, rounded, iconOnly, className \n });\n \n // Handle the case when the button is rendered as a link or another component\n const buttonProps = {\n ref,\n className: buttonClass,\n onClick: handleClick(onClick),\n disabled,\n 'aria-disabled': disabled,\n ...props,\n };\n\n return (\n <Component {...buttonProps}>\n {icon && <span className=\"button__icon\">{icon}</span>}\n {!iconOnly && <span className=\"button__label\">{label || children}</span>}\n </Component>\n );\n});\n\n// Add displayName for better debugging\nButton.displayName = 'Button';\n","import { Button } from './Button';\nimport type { ButtonProps } from '../../lib/types/components';\n\nexport { Button };\nexport type { ButtonProps };\nexport default Button; ","import React from 'react';\nimport { CalloutProps } from '../../lib/types/components';\nimport { useCallout } from '../../lib/composables/useCallout';\nimport { Icon } from '../Icon/Icon';\n\n/**\n * Callout component for displaying important messages, notifications, or alerts\n */\n const Callout: React.FC<CalloutProps> = ({\n title,\n children,\n icon,\n variant = 'primary',\n onClose,\n actions,\n oneLine = false,\n toast = false,\n className,\n ...props\n}) => {\n const { generateCalloutClass, handleClose } = useCallout({\n variant,\n oneLine,\n toast,\n className\n });\n\n // Determine appropriate ARIA attributes based on variant\n const getAriaAttributes = () => {\n const baseAttributes: Record<string, string> = {\n role: 'region',\n };\n \n // For toast notifications or alerts, use appropriate role and live region\n if (toast) {\n baseAttributes.role = 'alert';\n baseAttributes['aria-live'] = 'polite';\n } else if (['warning', 'error'].includes(variant)) {\n baseAttributes.role = 'alert';\n baseAttributes['aria-live'] = 'assertive';\n } else if (['info', 'success'].includes(variant)) {\n baseAttributes.role = 'status';\n baseAttributes['aria-live'] = 'polite';\n }\n \n return baseAttributes;\n };\n\n return (\n <div className={generateCalloutClass({ variant, oneLine, toast, className })} {...getAriaAttributes()} {...props}>\n <div className=\"c-callout__content\">\n {icon && <div className=\"c-callout__icon\">{icon}</div>}\n <div className=\"c-callout__message\">\n {title && <div className=\"c-callout__title\">{title}</div>}\n {children && <div className=\"c-callout__text\">{children}</div>}\n </div>\n </div>\n \n {actions && <div className=\"c-callout__actions\">{actions}</div>}\n \n {onClose && (\n <button \n className=\"c-callout__close-btn\" \n onClick={handleClose(onClose)}\n aria-label=\"Close\"\n >\n <Icon name=\"X\" size=\"md\" />\n </button>\n )}\n </div>\n );\n};\n\nexport type { CalloutProps };\n\n// Set display name for debugging\nCallout.displayName = 'Callout';\n\n// Default export (primary)\nexport default Callout;\n\n// Named export for compatibility\nexport { Callout };","import { CalloutProps } from '../types/components';\n\n/**\n * Callout state and functionality\n * @param initialProps - Initial callout properties\n * @returns Callout state and methods\n */\nexport function useCallout(initialProps?: Partial<CalloutProps>) {\n // Default callout properties\n const defaultProps: Partial<CalloutProps> = {\n variant: 'primary',\n oneLine: false,\n toast: false,\n ...initialProps\n };\n\n /**\n * Generate callout class based on properties\n * @param props - Callout properties\n * @returns Class string\n */\n const generateCalloutClass = (props: Partial<CalloutProps>): string => {\n const {\n variant = defaultProps.variant,\n oneLine = defaultProps.oneLine,\n toast = defaultProps.toast,\n className = '',\n } = props;\n\n const oneLineClass = oneLine ? 'c-callout--oneline' : '';\n const toastClass = toast ? 'c-callout--toast' : '';\n const variantClass = variant ? `c-callout--${variant}` : '';\n \n return `c-callout ${variantClass} ${oneLineClass} ${toastClass} ${className}`.trim();\n };\n\n /**\n * Handle callout close with callback\n * @param handler - Close handler function\n * @returns Function that calls the handler\n */\n const handleClose = (handler?: () => void) => {\n return () => {\n if (handler) {\n handler();\n }\n };\n };\n\n return {\n defaultProps,\n generateCalloutClass,\n handleClose,\n };\n}","import React, { forwardRef, Ref } from 'react';\nimport { CARD } from '../../lib/constants/components';\nimport { CardProps } from '../../lib/types/components';\n\n const Card = forwardRef<HTMLDivElement, CardProps>(({\n header,\n image,\n imageAlt = '',\n title,\n text,\n actions,\n icon,\n footer,\n row = false,\n flat = false,\n active = false,\n className = '',\n children,\n onClick,\n ...rest\n}, ref) => {\n const cardClasses = [\n CARD.CLASSES.BASE,\n row ? CARD.CLASSES.ROW : '',\n flat ? CARD.CLASSES.FLAT : '',\n active ? CARD.CLASSES.ACTIVE : '',\n className\n ].filter(Boolean).join(' ');\n\n return (\n <div\n ref={ref}\n className={cardClasses}\n onClick={onClick}\n {...rest}\n >\n {(image || icon || header) && (\n <div className={CARD.SELECTORS.HEADER.substring(1)}>\n {header}\n {image && (\n <img\n src={image}\n alt={imageAlt}\n className={CARD.SELECTORS.IMAGE.substring(1)}\n />\n )}\n\n {icon && (\n <div className={CARD.SELECTORS.ICON.substring(1)}>\n {icon}\n </div>\n )}\n </div>\n )}\n\n <div className={CARD.SELECTORS.BODY.substring(1)}>\n {title && (\n <h3 className={CARD.SELECTORS.TITLE.substring(1)}>\n {title}\n </h3>\n )}\n\n {text && (\n <p className={CARD.SELECTORS.TEXT.substring(1)}>\n {text}\n </p>\n )}\n\n {children}\n </div>\n\n {actions && (\n <div className={CARD.SELECTORS.ACTIONS.substring(1)}>\n {actions}\n </div>\n )}\n\n {footer && (\n <div className={CARD.SELECTORS.FOOTER.substring(1)}>\n {footer}\n </div>\n )}\n </div>\n );\n});\n\n\nexport type { CardProps };\n\n// Set display name for debugging\nCard.displayName = 'Badge';\n\n// Default export (primary)\nexport default Card;\n\n// Named export for compatibility\nexport { Card };","import React, { useEffect, useState } from 'react';\n\ninterface ColorModeToggleProps {\n className?: string;\n}\n\nconst ColorModeToggle: React.FC<ColorModeToggleProps> = ({ className = '' }) => {\n const [colorMode, setColorMode] = useState<'light' | 'dark'>('light');\n \n // Initialize color mode from localStorage or system preference\n useEffect(() => {\n // Check if color mode is already set in localStorage\n const storedColorMode = localStorage.getItem('atomix-color-mode');\n \n if (storedColorMode === 'light' || storedColorMode === 'dark') {\n setColorMode(storedColorMode);\n } else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n // Use system preference if no stored preference\n setColorMode('dark');\n }\n }, []);\n \n // Update the document theme attribute when colorMode changes\n useEffect(() => {\n document.documentElement.setAttribute('data-atomix-theme', colorMode);\n localStorage.setItem('atomix-color-mode', colorMode);\n }, [colorMode]);\n \n // Listen for system color scheme changes\n useEffect(() => {\n const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n \n const handleSystemThemeChange = (event: MediaQueryListEvent) => {\n // Only update if user hasn't explicitly set a preference\n if (!localStorage.getItem('atomix-color-mode')) {\n setColorMode(event.matches ? 'dark' : 'light');\n }\n };\n \n // Add event listener for system theme changes\n if (darkModeMediaQuery.addEventListener) {\n darkModeMediaQuery.addEventListener('change', handleSystemThemeChange);\n } else {\n // Fallback for older browsers\n darkModeMediaQuery.addListener(handleSystemThemeChange);\n }\n \n // Clean up event listener\n return () => {\n if (darkModeMediaQuery.removeEventListener) {\n darkModeMediaQuery.removeEventListener('change', handleSystemThemeChange);\n } else {\n // Fallback for older browsers\n darkModeMediaQuery.removeListener(handleSystemThemeChange);\n }\n };\n }, []);\n \n const toggleColorMode = () => {\n setColorMode(prevMode => prevMode === 'light' ? 'dark' : 'light');\n };\n \n return (\n <button \n className={`c-color-mode-toggle ${className}`}\n onClick={toggleColorMode}\n aria-label={`Switch to ${colorMode === 'light' ? 'dark' : 'light'} mode`}\n title={`Switch to ${colorMode === 'light' ? 'dark' : 'light'} mode`}\n >\n {colorMode === 'light' ? (\n <svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\">\n <path d=\"M9.37 5.51c-.18.64-.27 1.31-.27 1.99 0 4.08 3.32 7.4 7.4 7.4.68 0 1.35-.09 1.99-.27C17.45 17.19 14.93 19 12 19c-3.86 0-7-3.14-7-7 0-2.93 1.81-5.45 4.37-6.49zM12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9 9-4.03 9-9c0-.46-.04-.92-.1-1.36-.98 1.37-2.58 2.26-4.4 2.26-2.98 0-5.4-2.42-5.4-5.4 0-1.81.89-3.42 2.26-4.4-.44-.06-.9-.1-1.36-.1z\" />\n </svg>\n ) : (\n <svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\">\n <path d=\"M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zM2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1zm18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1zM11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1zm0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1zM5.99 4.58c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41L5.99 4.58zm12.37 12.37c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41l-1.06-1.06zm1.06-10.96c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41.39.39 1.03.39 1.41 0l1.06-1.06zM7.05 18.36c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41.39.39 1.03.39 1.41 0l1.06-1.06z\" />\n </svg>\n )}\n </button>\n );\n}; \n\nexport type { ColorModeToggleProps };\n\n// Set display name for debugging\nColorModeToggle.displayName = 'ColorModeToggle';\n\n// Default export (primary)\nexport default ColorModeToggle;\n\n// Named export for compatibility\nexport { ColorModeToggle };\n","import React, { useEffect, useState } from 'react';\n\ninterface CountdownProps {\n /** Target date/time as a Date or ISO string */\n target: Date | string;\n /** Show days, hours, minutes, seconds */\n show?: Array<'days' | 'hours' | 'minutes' | 'seconds'>;\n /** Separator string */\n separator?: string;\n /** Focused style */\n focused?: boolean;\n /** Custom className */\n className?: string;\n /** Optional callback when countdown reaches zero */\n onComplete?: () => void;\n}\n\nfunction getTimeParts(diff: number) {\n const totalSeconds = Math.max(0, Math.floor(diff / 1000));\n const days = Math.floor(totalSeconds / 86400);\n const hours = Math.floor((totalSeconds % 86400) / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n return { days, hours, minutes, seconds };\n}\n\nconst Countdown: React.FC<CountdownProps> = ({\n target,\n show = ['days', 'hours', 'minutes', 'seconds'],\n separator = ':',\n focused = false,\n className = '',\n onComplete,\n}) => {\n const targetDate = typeof target === 'string' ? new Date(target) : target;\n const [now, setNow] = useState(() => new Date());\n const [completed, setCompleted] = useState(false);\n\n useEffect(() => {\n if (completed) return;\n const interval = setInterval(() => {\n setNow(new Date());\n }, 1000);\n return () => clearInterval(interval);\n }, [completed]);\n\n const diff = targetDate.getTime() - now.getTime();\n const { days, hours, minutes, seconds } = getTimeParts(diff);\n\n useEffect(() => {\n if (diff <= 0 && !completed) {\n setCompleted(true);\n if (onComplete) onComplete();\n }\n }, [diff, completed, onComplete]);\n\n const timeParts = [];\n if (show.includes('days')) timeParts.push({ label: 'Days', value: days });\n if (show.includes('hours')) timeParts.push({ label: 'Hours', value: hours });\n if (show.includes('minutes')) timeParts.push({ label: 'Minutes', value: minutes });\n if (show.includes('seconds')) timeParts.push({ label: 'Seconds', value: seconds });\n\n return (\n <div className={`c-countdown${focused ? ' c-countdown--focused' : ''} ${className}`.trim()}>\n {timeParts.map((part, idx) => (\n <React.Fragment key={part.label}>\n <div className=\"c-countdown__time\">\n <span className=\"c-countdown__time-count\">{String(part.value).padStart(2, '0')}</span>\n <span className=\"c-countdown__time-label\">{part.label}</span>\n </div>\n {idx < timeParts.length - 1 && (\n <span className=\"c-countdown__separator\">{separator}</span>\n )}\n </React.Fragment>\n ))}\n </div>\n );\n};\n\n\nexport type { CountdownProps };\n\n// Set display name for debugging\nCountdown.displayName = 'Badge';\n\n// Default export (primary)\nexport default Countdown;\n\n// Named export for compatibility\nexport { Countdown };","import { useState, useEffect, useCallback, useMemo } from 'react';\nimport { DataTableColumn, SortConfig } from '../types/components';\n\nexport interface UseDataTableProps {\n /**\n * Data array to display\n */\n data: any[];\n \n /**\n * Column definitions\n */\n columns: DataTableColumn[];\n \n /**\n * Whether the table is sortable\n */\n sortable?: boolean;\n \n /**\n * Whether the table is paginated\n */\n paginated?: boolean;\n \n /**\n * Number of rows per page\n */\n pageSize?: number;\n \n /**\n * Callback when sorting changes\n */\n onSort?: (sortConfig: SortConfig) => void;\n \n /**\n * Initial sort configuration\n */\n initialSortConfig?: SortConfig;\n}\n\nexport interface UseDataTableReturn {\n /**\n * Data to display (filtered, sorted, paginated)\n */\n displayData: any[];\n \n /**\n * Current sort configuration\n */\n sortConfig: SortConfig | null;\n \n /**\n * Current page number\n */\n currentPage: number;\n \n /**\n * Total number of pages\n */\n totalPages: number;\n \n /**\n * Handle sort column click\n */\n handleSort: (key: string) => void;\n \n /**\n * Handle page change\n */\n handlePageChange: (page: number) => void;\n \n /**\n * Handle search input\n */\n handleSearch: (query: string) => void;\n}\n\n/**\n * Hook for managing DataTable state and behavior\n */\nexport function useDataTable({\n data = [],\n columns = [],\n sortable = false,\n paginated = false,\n pageSize = 10,\n onSort,\n initialSortConfig,\n}: UseDataTableProps): UseDataTableReturn {\n // Sort state\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(initialSortConfig || null);\n \n // Pagination state\n const [currentPage, setCurrentPage] = useState<number>(1);\n \n // Search state\n const [searchQuery, setSearchQuery] = useState<string>('');\n \n // Handle sorting\n const handleSort = useCallback((key: string) => {\n if (!sortable) return;\n \n let direction: 'asc' | 'desc' = 'asc';\n \n if (sortConfig && sortConfig.key === key && sortConfig.direction === 'asc') {\n direction = 'desc';\n }\n \n const newSortConfig = { key, direction };\n setSortConfig(newSortConfig);\n \n if (onSort) {\n onSort(newSortConfig);\n }\n }, [sortable, sortConfig, onSort]);\n \n // Handle page change\n const handlePageChange = useCallback((page: number) => {\n if (page < 1 || page > Math.ceil(data.length / pageSize)) return;\n setCurrentPage(page);\n }, [data.length, pageSize]);\n \n // Handle search\n const handleSearch = useCallback((query: string) => {\n setSearchQuery(query);\n setCurrentPage(1); // Reset to first page when searching\n }, []);\n \n // Filter data based on search query\n const filteredData = useMemo(() => {\n if (!searchQuery) return data;\n \n const lowercaseQuery = searchQuery.toLowerCase();\n \n return data.filter(row => {\n return columns.some(column => {\n const value = row[column.key];\n if (value == null) return false;\n return String(value).toLowerCase().includes(lowercaseQuery);\n });\n });\n }, [data, columns, searchQuery]);\n \n // Sort data\n const sortedData = useMemo(() => {\n if (!sortConfig || !sortable) return filteredData;\n \n return [...filteredData].sort((a, b) => {\n const aValue = a[sortConfig.key];\n const bValue = b[sortConfig.key];\n \n if (aValue == null) return sortConfig.direction === 'asc' ? -1 : 1;\n if (bValue == null) return sortConfig.direction === 'asc' ? 1 : -1;\n \n if (typeof aValue === 'string' && typeof bValue === 'string') {\n return sortConfig.direction === 'asc' \n ? aValue.localeCompare(bValue) \n : bValue.localeCompare(aValue);\n }\n \n return sortConfig.direction === 'asc' \n ? (aValue > bValue ? 1 : -1) \n : (aValue > bValue ? -1 : 1);\n });\n }, [filteredData, sortConfig, sortable]);\n \n // Paginate data\n const paginatedData = useMemo(() => {\n if (!paginated) return sortedData;\n \n const startIndex = (currentPage - 1) * pageSize;\n return sortedData.slice(startIndex, startIndex + pageSize);\n }, [sortedData, paginated, currentPage, pageSize]);\n \n // Calculate total pages\n const totalPages = useMemo(() => {\n if (!paginated) return 1;\n return Math.max(1, Math.ceil(sortedData.length / pageSize));\n }, [sortedData.length, paginated, pageSize]);\n \n // Reset to first page when data changes\n useEffect(() => {\n setCurrentPage(1);\n }, [data]);\n \n // Reset current page if it's out of bounds\n useEffect(() => {\n if (currentPage > totalPages) {\n setCurrentPage(Math.max(1, totalPages));\n }\n }, [currentPage, totalPages]);\n \n return {\n displayData: paginatedData,\n sortConfig,\n currentPage,\n totalPages,\n handleSort,\n handlePageChange,\n handleSearch,\n };\n}\n\nexport default useDataTable; ","import { useState, useMemo } from 'react';\nimport { PaginationProps } from '../types/components';\n\nexport const DOTS = '...';\n\nconst range = (start: number, end: number) => {\n const length = end - start + 1;\n return Array.from({ length }, (_, idx) => idx + start);\n};\n\nexport const usePagination = ({\n currentPage,\n totalPages,\n siblingCount = 1,\n onPageChange,\n}: Omit<PaginationProps, 'className'>) => {\n const paginationRange = useMemo(() => {\n const totalPageNumbers = siblingCount + 5; // siblingCount + firstPage + lastPage + currentPage + 2*DOTS\n\n /*\n Case 1: If the number of pages is less than the page numbers we want to show in our\n paginationComponent, we return the range [1..totalPages]\n */\n if (totalPageNumbers >= totalPages) {\n return range(1, totalPages);\n }\n\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);\n const rightSiblingIndex = Math.min(\n currentPage + siblingCount,\n totalPages\n );\n\n const shouldShowLeftDots = leftSiblingIndex > 2;\n const shouldShowRightDots = rightSiblingIndex < totalPages - 2;\n\n const firstPageIndex = 1;\n const lastPageIndex = totalPages;\n\n /*\n \tCase 2: No left dots to show, but rights dots to be shown\n */\n if (!shouldShowLeftDots && shouldShowRightDots) {\n let leftItemCount = 3 + 2 * siblingCount;\n let leftRange = range(1, leftItemCount);\n\n return [...leftRange, DOTS, totalPages];\n }\n\n /*\n \tCase 3: No right dots to show, but left dots to be shown\n */\n if (shouldShowLeftDots && !shouldShowRightDots) {\n let rightItemCount = 3 + 2 * siblingCount;\n let rightRange = range(\n totalPages - rightItemCount + 1,\n totalPages\n );\n return [firstPageIndex, DOTS, ...rightRange];\n }\n\n /*\n \tCase 4: Both left and right dots to be shown\n */\n if (shouldShowLeftDots && shouldShowRightDots) {\n let middleRange = range(leftSiblingIndex, rightSiblingIndex);\n return [firstPageIndex, DOTS, ...middleRange, DOTS, lastPageIndex];\n }\n\n // This case should ideally not be reached if logic is correct\n return []; \n\n }, [totalPages, siblingCount, currentPage]);\n\n const goToPage = (page: number) => {\n if (page >= 1 && page <= totalPages && page !== currentPage) {\n onPageChange(page);\n }\n };\n\n const nextPage = () => {\n goToPage(currentPage + 1);\n };\n\n const prevPage = () => {\n goToPage(currentPage - 1);\n };\n\n const firstPage = () => {\n goToPage(1);\n };\n\n const lastPage = () => {\n goToPage(totalPages);\n };\n\n return {\n paginationRange,\n currentPage,\n totalPages,\n goToPage,\n nextPage,\n prevPage,\n firstPage,\n lastPage,\n DOTS,\n };\n};\n","import { SpinnerProps } from '../types/components';\n\n/**\n * Spinner state and functionality\n * @param initialProps - Initial spinner properties\n * @returns Spinner state and methods\n */\nexport function useSpinner(initialProps?: Partial<SpinnerProps>) {\n // Default spinner properties\n const defaultProps: Partial<SpinnerProps> = {\n variant: 'primary',\n size: 'md',\n fullscreen: false,\n ...initialProps\n };\n\n /**\n * Generate spinner class based on properties\n * @param props - Spinner properties\n * @returns Class string\n */\n const generateSpinnerClass = (props: Partial<SpinnerProps>): string => {\n const {\n variant = defaultProps.variant,\n size = defaultProps.size,\n fullscreen = defaultProps.fullscreen,\n className = '',\n } = props;\n\n const baseClass = 'c-spinner';\n const variantClass = variant ? `${baseClass}--${variant}` : '';\n const sizeClass = size !== 'md' ? `${baseClass}--${size}` : '';\n const fullscreenClass = fullscreen ? `${baseClass}--fullscreen` : '';\n \n return `${baseClass} ${variantClass} ${sizeClass} ${fullscreenClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateSpinnerClass,\n };\n} ","import React from 'react';\nimport { SpinnerProps } from '../../lib/types/components';\nimport { useSpinner } from '../../lib/composables/useSpinner';\nimport { SPINNER } from '../../lib/constants/components';\n\nconst Spinner: React.FC<SpinnerProps> = ({\n size = 'md',\n variant = 'primary',\n fullscreen = false,\n className = '',\n}) => {\n const { generateSpinnerClass } = useSpinner({ \n size, variant, fullscreen \n });\n \n const spinnerClass = generateSpinnerClass({ \n size, variant, fullscreen, className \n });\n \n return (\n <div className={spinnerClass} role=\"status\">\n <span className={SPINNER.VISUALLY_HIDDEN}>Loading...</span>\n </div>\n );\n};\n\nexport type { SpinnerProps };\n\n// Set display name for debugging\nSpinner.displayName = 'Spinner';\n\n// Default export (primary)\nexport default Spinner;\n\nexport { Spinner };","import React from 'react';\nimport { PaginationProps } from '../../lib/types/components';\nimport { usePagination, DOTS } from '../../lib/composables/usePagination';\nimport { PAGINATION_DEFAULTS } from '../../lib/constants/components';\nimport { Icon, IconProps } from '../Icon';\n\n// @TODO: Add Search functionality for pagination\n\n/**\n * Navigation button types for pagination\n */\ntype NavButtonType = 'first' | 'prev' | 'next' | 'last';\n\n/**\n * Props for the PaginationNavButton component\n */\ninterface PaginationNavButtonProps {\n type: NavButtonType;\n onClick: () => void;\n disabled: boolean;\n label: string;\n iconName: IconProps['name'];\n}\n\n/**\n * PaginationNavButton component for rendering first, previous, next, and last buttons\n */\nconst PaginationNavButton: React.FC<PaginationNavButtonProps> = ({ \n type, \n onClick, \n disabled, \n label,\n iconName\n}) => (\n <li \n className={`c-pagination__item c-pagination__item--${type} ${disabled ? 'is-disabled' : ''}`}\n aria-disabled={disabled}\n >\n <button \n type=\"button\"\n className=\"c-pagination__link\"\n onClick={onClick} \n disabled={disabled}\n aria-label={label}\n >\n <Icon name={iconName} size=\"sm\" aria-hidden=\"true\" />\n </button>\n </li>\n);\n\n/**\n * Pagination component\n */\nconst Pagination: React.FC<PaginationProps> = ({\n currentPage = PAGINATION_DEFAULTS.currentPage,\n totalPages = PAGINATION_DEFAULTS.totalPages,\n onPageChange,\n siblingCount = PAGINATION_DEFAULTS.siblingCount,\n showFirstLastButtons = PAGINATION_DEFAULTS.showFirstLastButtons,\n showPrevNextButtons = PAGINATION_DEFAULTS.showPrevNextButtons,\n size = PAGINATION_DEFAULTS.size,\n className = '',\n ariaLabel = 'Pagination',\n}) => {\n const {\n paginationRange,\n goToPage,\n nextPage,\n prevPage,\n firstPage,\n lastPage,\n } = usePagination({\n currentPage,\n totalPages,\n siblingCount,\n onPageChange,\n });\n\n // Don't render pagination with a single page or no pages\n if (currentPage === 0 || paginationRange.length < 2) {\n return null;\n }\n\n return (\n <nav \n className={`c-pagination c-pagination--${size} ${className}`} \n aria-label={ariaLabel}\n >\n <ul className=\"c-pagination__items\">\n {showFirstLastButtons && (\n <PaginationNavButton \n type=\"first\"\n onClick={firstPage}\n disabled={currentPage === 1}\n label=\"Go to first page\"\n iconName=\"SkipBack\"\n />\n )}\n \n {showPrevNextButtons && (\n <PaginationNavButton \n type=\"prev\"\n onClick={prevPage}\n disabled={currentPage === 1}\n label=\"Go to previous page\"\n iconName=\"CaretLeft\"\n />\n )}\n \n {paginationRange.map((pageNumber, index) => {\n if (pageNumber === DOTS) {\n return (\n <li \n key={`dots-${index}`} \n className=\"c-pagination__item c-pagination__item--dots\"\n aria-hidden=\"true\"\n >\n &#8230;\n </li>\n );\n }\n\n const isActive = pageNumber === currentPage;\n \n return (\n <li \n key={pageNumber}\n className={`c-pagination__item ${isActive ? 'is-active' : ''}`}\n aria-current={isActive ? 'page' : undefined}\n >\n <button \n type=\"button\"\n className=\"c-pagination__link\"\n onClick={() => goToPage(pageNumber as number)}\n aria-label={`Page ${pageNumber}`}\n aria-current={isActive ? 'page' : undefined}\n >\n {pageNumber}\n </button>\n </li>\n );\n })}\n \n {showPrevNextButtons && (\n <PaginationNavButton \n type=\"next\"\n onClick={nextPage}\n disabled={currentPage === totalPages}\n label=\"Go to next page\"\n iconName=\"CaretRight\"\n />\n )}\n \n {showFirstLastButtons && (\n <PaginationNavButton \n type=\"last\"\n onClick={lastPage}\n disabled={currentPage === totalPages}\n label=\"Go to last page\"\n iconName=\"SkipForward\"\n />\n )}\n </ul>\n </nav>\n );\n};\n\n\nexport type { PaginationProps };\n\n// Set display name for debugging\nPagination.displayName = 'Pagination';\n\n// Default export (primary)\nexport default Pagination;\n\n// Named export for compatibility\nexport { Pagination };","import React, { useRef } from 'react';\nimport { DataTableProps } from '../../lib/types/components';\nimport { useDataTable } from './scripts';\nimport { DATA_TABLE_CLASSES } from '../../lib/constants/components';\nimport { Spinner } from '../Spinner';\nimport { Icon } from '../Icon';\nimport { Pagination } from '../Pagination';\n\n/**\n * DataTable - A flexible and accessible data table component\n * \n * @example\n * ```tsx\n * <DataTable \n * data={users}\n * columns={columns}\n * sortable={true}\n * onRowClick={handleRowClick}\n * />\n * ```\n */\nconst DataTable: React.FC<DataTableProps> = ({\n data = [],\n columns = [],\n className,\n sortable = false,\n filterable = false,\n paginated = false,\n pageSize = 10,\n striped = false,\n bordered = false,\n dense = false,\n loading = false,\n emptyMessage = 'No data available',\n onRowClick,\n onSort,\n ...props\n}) => {\n const tableRef = useRef<HTMLTableElement>(null);\n \n const {\n displayData,\n sortConfig,\n currentPage,\n totalPages,\n handleSort,\n handlePageChange,\n handleSearch,\n } = useDataTable({\n data,\n columns,\n sortable,\n paginated,\n pageSize,\n onSort,\n });\n \n // Generate component classes\n const tableClass = [\n DATA_TABLE_CLASSES.base,\n striped && DATA_TABLE_CLASSES.striped,\n bordered && DATA_TABLE_CLASSES.bordered,\n dense && DATA_TABLE_CLASSES.dense,\n loading && DATA_TABLE_CLASSES.loading,\n className\n ].filter(Boolean).join(' ');\n \n const renderHeader = () => {\n return (\n <thead className={DATA_TABLE_CLASSES.header}>\n <tr>\n {columns.map((column, index) => (\n <th \n key={`header-${index}`}\n className={`${DATA_TABLE_CLASSES.headerCell} ${column.sortable !== false && sortable ? DATA_TABLE_CLASSES.sortable : ''}`}\n onClick={() => column.sortable !== false && sortable ? handleSort(column.key) : null}\n aria-sort={sortConfig?.key === column.key ? (sortConfig.direction === 'asc' ? 'ascending' : 'descending') : undefined}\n >\n <div className={DATA_TABLE_CLASSES.headerContent}>\n <span>{column.title}</span>\n {column.sortable !== false && sortable && (\n <span className={DATA_TABLE_CLASSES.sortIcon}>\n {sortConfig?.key === column.key ? (\n sortConfig.direction === 'asc' ? \n <Icon name=\"CaretUp\" size=\"sm\" /> : \n <Icon name=\"CaretDown\" size=\"sm\" />\n ) : null}\n </span>\n )}\n </div>\n </th>\n ))}\n </tr>\n </thead>\n );\n };\n \n const renderBody = () => {\n if (loading) {\n return (\n <tbody>\n <tr>\n <td \n colSpan={columns.length} \n className={DATA_TABLE_CLASSES.loadingCell}\n >\n <div className={DATA_TABLE_CLASSES.loadingIndicator}>\n <Spinner size=\"md\" variant=\"primary\" />\n </div>\n </td>\n </tr>\n </tbody>\n );\n }\n \n if (displayData.length === 0) {\n return (\n <tbody>\n <tr>\n <td \n colSpan={columns.length} \n className={DATA_TABLE_CLASSES.emptyCell}\n >\n {emptyMessage}\n </td>\n </tr>\n </tbody>\n );\n }\n \n return (\n <tbody>\n {displayData.map((row: any, rowIndex: number) => (\n <tr \n key={`row-${rowIndex}`}\n className={DATA_TABLE_CLASSES.row}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n tabIndex={onRowClick ? 0 : undefined}\n role={onRowClick ? 'button' : undefined}\n >\n {columns.map((column, colIndex) => (\n <td \n key={`cell-${rowIndex}-${colIndex}`}\n className={DATA_TABLE_CLASSES.cell}\n >\n {column.render ? column.render(row[column.key], row) : row[column.key]}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n );\n };\n \n const renderPagination = () => {\n if (!paginated || totalPages <= 1) return null;\n \n return (\n <div className={DATA_TABLE_CLASSES.pagination}>\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={handlePageChange}\n showFirstLastButtons={true}\n showPrevNextButtons={true}\n size=\"sm\"\n ariaLabel=\"Data table pagination\"\n className=\"c-data-table__pagination\"\n />\n </div>\n );\n };\n \n const renderToolbar = () => {\n if (!filterable) return null;\n \n return (\n <div className={DATA_TABLE_CLASSES.toolbar}>\n <div className={DATA_TABLE_CLASSES.search}>\n <input\n type=\"text\"\n placeholder=\"Search...\"\n className={`${DATA_TABLE_CLASSES.searchInput} c-input`}\n onChange={(e) => handleSearch(e.target.value)}\n aria-label=\"Search table\"\n />\n </div>\n </div>\n );\n };\n \n return (\n <div className={DATA_TABLE_CLASSES.container} {...props}>\n {renderToolbar()}\n <div className={DATA_TABLE_CLASSES.tableWrapper}>\n <table \n ref={tableRef}\n className={tableClass}\n >\n {renderHeader()}\n {renderBody()}\n </table>\n </div>\n {renderPagination()}\n </div>\n );\n};\n\nexport type { DataTableProps };\n\n// Set display name for debugging\nDataTable.displayName = 'DataTable';\n\n// Default export (primary)\nexport default DataTable;\n\n// Named export for compatibility\nexport { DataTable };","/**\n * Get the name of a month by its index (0-11)\n */\nexport function getMonthName(month: number): string {\n const date = new Date();\n date.setMonth(month);\n \n return date.toLocaleString('default', { month: 'long' });\n}\n\n/**\n * Get the number of days in a month\n */\nexport function getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\n/**\n * Get the day of the week of the first day of a month (0-6, where 0 is Sunday)\n */\nexport function getFirstDayOfMonth(year: number, month: number): number {\n return new Date(year, month, 1).getDay();\n}\n\n/**\n * Format a date according to the specified format\n */\nexport function formatDate(date: Date, format: string): string {\n if (!date) return '';\n \n const day = date.getDate();\n const month = date.getMonth() + 1;\n const year = date.getFullYear();\n \n // Simple formatting for the most common patterns\n return format\n .replace('yyyy', year.toString())\n .replace('MM', month.toString().padStart(2, '0'))\n .replace('M', month.toString())\n .replace('dd', day.toString().padStart(2, '0'))\n .replace('d', day.toString());\n}\n\n/**\n * Format a date range for display\n */\nexport function formatDateRange(startDate: Date | null, endDate: Date | null, format: string): string {\n if (!startDate) return '';\n \n if (!endDate) {\n return `${formatDate(startDate, format)} - Select end date`;\n }\n \n return `${formatDate(startDate, format)} - ${formatDate(endDate, format)}`;\n}\n\n/**\n * Parse a date string according to the specified format\n */\nexport function parseDate(dateStr: string, format: string): Date | null {\n if (!dateStr) return null;\n \n // Simple parsing for common formats\n const normalized = format.toLowerCase();\n \n if (normalized === 'mm/dd/yyyy') {\n const parts = dateStr.split('/');\n if (parts.length !== 3) return null;\n \n const month = parseInt(parts[0], 10) - 1;\n const day = parseInt(parts[1], 10);\n const year = parseInt(parts[2], 10);\n \n if (isNaN(month) || isNaN(day) || isNaN(year)) return null;\n \n return new Date(year, month, day);\n }\n \n if (normalized === 'dd/mm/yyyy') {\n const parts = dateStr.split('/');\n if (parts.length !== 3) return null;\n \n const day = parseInt(parts[0], 10);\n const month = parseInt(parts[1], 10) - 1;\n const year = parseInt(parts[2], 10);\n \n if (isNaN(month) || isNaN(day) || isNaN(year)) return null;\n \n return new Date(year, month, day);\n }\n \n if (normalized === 'yyyy-mm-dd') {\n const parts = dateStr.split('-');\n if (parts.length !== 3) return null;\n \n const year = parseInt(parts[0], 10);\n const month = parseInt(parts[1], 10) - 1;\n const day = parseInt(parts[2], 10);\n \n if (isNaN(month) || isNaN(day) || isNaN(year)) return null;\n \n return new Date(year, month, day);\n }\n \n // Fallback to native parsing\n const parsedDate = new Date(dateStr);\n return isNaN(parsedDate.getTime()) ? null : parsedDate;\n}\n\n/**\n * Try to parse a date range string (e.g. \"01/01/2023 - 01/15/2023\")\n */\nexport function parseDateRange(rangeStr: string, format: string): { startDate: Date | null, endDate: Date | null } {\n if (!rangeStr) return { startDate: null, endDate: null };\n \n const parts = rangeStr.split('-');\n if (parts.length !== 2) return { startDate: null, endDate: null };\n \n const startDateStr = parts[0].trim();\n const endDateStr = parts[1].trim();\n \n const startDate = parseDate(startDateStr, format);\n const endDate = parseDate(endDateStr, format);\n \n return { startDate, endDate };\n}\n\n/**\n * Check if a date is within a min and max range\n */\nexport function isDateInRange(date: Date, minDate?: Date, maxDate?: Date): boolean {\n if (!date) return false;\n \n if (minDate && date < minDate) return false;\n if (maxDate && date > maxDate) return false;\n \n return true;\n}\n\n/**\n * Check if a date is between startDate and endDate (inclusive)\n */\nexport function isDateInSelectedRange(date: Date, startDate: Date | null, endDate: Date | null): boolean {\n if (!date || !startDate || !endDate) return false;\n \n // Handle case where end date is before start date\n if (endDate < startDate) {\n return date >= endDate && date <= startDate;\n }\n \n return date >= startDate && date <= endDate;\n}\n","import { useState, useRef, useCallback, useEffect } from 'react';\nimport { DatePickerViewMode, DatePickerSelectionMode, DateRange } from '../../components/DatePicker/types';\nimport { \n getMonthName, \n getDaysInMonth, \n getFirstDayOfMonth, \n formatDate, \n isDateInRange\n} from '../../components/DatePicker/utils';\n\ninterface UseDatePickerProps {\n /**\n * The currently selected date value\n */\n value?: Date | null;\n \n /**\n * Callback function when date is changed\n */\n onChange?: (date: Date | null) => void;\n \n /**\n * Selection mode - single date or date range\n */\n selectionMode?: DatePickerSelectionMode;\n \n /**\n * The start date of the range\n */\n startDate?: Date | null;\n \n /**\n * The end date of the range\n */\n endDate?: Date | null;\n \n /**\n * Callback function when date range is changed\n */\n onRangeChange?: (range: DateRange) => void;\n \n /**\n * Format for the date display\n */\n format?: string;\n \n /**\n * Minimum selectable date\n */\n minDate?: Date;\n \n /**\n * Maximum selectable date\n */\n maxDate?: Date;\n \n /**\n * Whether the datepicker is in inline mode\n */\n inline?: boolean;\n}\n\ninterface DateObject {\n day: number;\n month: number;\n year: number;\n isCurrentMonth: boolean;\n}\n\ninterface MonthObject {\n month: number;\n name: string;\n}\n\nexport function useDatePicker({\n value,\n onChange,\n selectionMode = 'single',\n startDate,\n endDate,\n onRangeChange,\n format = 'MM/dd/yyyy',\n minDate,\n maxDate,\n inline = false\n}: UseDatePickerProps = {}) {\n const [isOpen, setIsOpen] = useState(inline);\n const [inputValue, setInputValue] = useState(value ? formatDate(value, format) : '');\n const [rangeInputValue, setRangeInputValue] = useState(\n startDate && endDate \n ? `${formatDate(startDate, format)} - ${formatDate(endDate, format)}`\n : startDate \n ? `${formatDate(startDate, format)} - Select end date` \n : ''\n );\n const [viewDate, setViewDate] = useState(value || startDate || new Date());\n const [viewMode, setViewMode] = useState<DatePickerViewMode>('days');\n const [rangeSelectionState, setRangeSelectionState] = useState<'start' | 'end'>(\n !startDate || (startDate && endDate) ? 'start' : 'end'\n );\n \n const datePickerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n \n const today = new Date();\n const currentMonth = viewDate.getMonth();\n const currentYear = viewDate.getFullYear();\n const daysInMonth = getDaysInMonth(currentYear, currentMonth);\n const firstDayOfMonth = getFirstDayOfMonth(currentYear, currentMonth);\n \n // Update input value when value or range dates change externally\n useEffect(() => {\n if (selectionMode === 'single') {\n setInputValue(value ? formatDate(value, format) : '');\n } else {\n setRangeInputValue(\n startDate && endDate \n ? `${formatDate(startDate, format)} - ${formatDate(endDate, format)}`\n : startDate \n ? `${formatDate(startDate, format)} - Select end date` \n : ''\n );\n setRangeSelectionState(!startDate || (startDate && endDate) ? 'start' : 'end');\n }\n }, [value, startDate, endDate, format, selectionMode]);\n \n // Handle date selection\n const handleDateSelect = useCallback((day: number) => {\n const selectedDate = new Date(currentYear, currentMonth, day);\n \n if (minDate && selectedDate < minDate) return;\n if (maxDate && selectedDate > maxDate) return;\n \n if (selectionMode === 'single') {\n if (onChange) {\n onChange(selectedDate);\n }\n \n setInputValue(formatDate(selectedDate, format));\n if (!inline) {\n setIsOpen(false);\n }\n } else {\n // Range selection mode\n if (rangeSelectionState === 'start') {\n // Selecting start date\n if (onRangeChange) {\n onRangeChange({\n startDate: selectedDate,\n endDate: null\n });\n }\n setRangeInputValue(`${formatDate(selectedDate, format)} - Select end date`);\n setRangeSelectionState('end');\n } else {\n // Selecting end date\n if (!startDate) return;\n \n // Make sure end date is after start date\n if (selectedDate < startDate) {\n if (onRangeChange) {\n onRangeChange({\n startDate: selectedDate,\n endDate: startDate\n });\n }\n setRangeInputValue(`${formatDate(selectedDate, format)} - ${formatDate(startDate, format)}`);\n } else {\n if (onRangeChange) {\n onRangeChange({\n startDate,\n endDate: selectedDate\n });\n }\n setRangeInputValue(`${formatDate(startDate, format)} - ${formatDate(selectedDate, format)}`);\n }\n \n if (!inline) {\n setIsOpen(false);\n }\n setRangeSelectionState('start');\n }\n }\n }, [\n currentYear, \n currentMonth, \n minDate, \n maxDate, \n onChange, \n onRangeChange, \n format, \n inline, \n selectionMode, \n rangeSelectionState, \n startDate\n ]);\n \n // Calendar navigation\n const handlePrevMonth = useCallback(() => {\n setViewDate(new Date(currentYear, currentMonth - 1, 1));\n }, [currentYear, currentMonth]);\n \n const handleNextMonth = useCallback(() => {\n setViewDate(new Date(currentYear, currentMonth + 1, 1));\n }, [currentYear, currentMonth]);\n \n const handlePrevYear = useCallback(() => {\n setViewDate(new Date(currentYear - 1, currentMonth, 1));\n }, [currentYear, currentMonth]);\n \n const handleNextYear = useCallback(() => {\n setViewDate(new Date(currentYear + 1, currentMonth, 1));\n }, [currentYear, currentMonth]);\n \n // Handle view mode changes\n const switchToMonthView = useCallback(() => {\n setViewMode('months');\n }, []);\n \n const switchToYearView = useCallback(() => {\n setViewMode('years');\n }, []);\n \n const selectMonth = useCallback((month: number) => {\n setViewDate(new Date(currentYear, month, 1));\n setViewMode('days');\n }, [currentYear]);\n \n const selectYear = useCallback((year: number) => {\n setViewDate(new Date(year, currentMonth, 1));\n setViewMode('months');\n }, [currentMonth]);\n \n // Handle today button click\n const handleTodayClick = useCallback(() => {\n const todayDate = new Date();\n setViewDate(todayDate);\n \n if (selectionMode === 'single') {\n handleDateSelect(todayDate.getDate());\n } else {\n // For range mode, just navigate to today\n setViewDate(new Date());\n }\n }, [handleDateSelect, selectionMode]);\n \n // Handle clear button click\n const handleClear = useCallback(() => {\n if (selectionMode === 'single') {\n setInputValue('');\n if (onChange) {\n onChange(null);\n }\n } else {\n setRangeInputValue('');\n setRangeSelectionState('start');\n if (onRangeChange) {\n onRangeChange({\n startDate: null,\n endDate: null\n });\n }\n }\n }, [onChange, onRangeChange, selectionMode]);\n \n // Handle input change\n const handleInputChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n if (selectionMode === 'single') {\n setInputValue(e.target.value);\n \n // Try to parse the date\n const parsedDate = new Date(e.target.value);\n if (!isNaN(parsedDate.getTime())) {\n if (onChange) {\n onChange(parsedDate);\n }\n setViewDate(parsedDate);\n }\n } else {\n setRangeInputValue(e.target.value);\n \n // Attempt to parse range input (not fully implemented - would need complex parsing)\n // This is a simplified implementation that would need improvement\n const parts = e.target.value.split('-');\n if (parts.length === 2) {\n const startPart = parts[0].trim();\n const endPart = parts[1].trim();\n \n const parsedStart = new Date(startPart);\n if (!isNaN(parsedStart.getTime())) {\n setViewDate(parsedStart);\n }\n \n // Attempt to parse both dates\n if (startPart && endPart) {\n const parsedStartDate = new Date(startPart);\n const parsedEndDate = new Date(endPart);\n \n if (!isNaN(parsedStartDate.getTime()) && !isNaN(parsedEndDate.getTime())) {\n if (onRangeChange) {\n onRangeChange({\n startDate: parsedStartDate,\n endDate: parsedEndDate\n });\n }\n }\n }\n }\n }\n }, [onChange, onRangeChange, selectionMode]);\n \n // Handle input focus\n const handleInputFocus = useCallback(() => {\n if (!inline) {\n setIsOpen(true);\n }\n }, [inline]);\n \n // Handle click outside\n const handleClickOutside = useCallback((event: MouseEvent) => {\n if (\n datePickerRef.current && \n !datePickerRef.current.contains(event.target as Node) &&\n inputRef.current &&\n !inputRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n }, []);\n \n // Add/remove event listeners\n useEffect(() => {\n if (isOpen && !inline) {\n document.addEventListener('mousedown', handleClickOutside);\n } else {\n document.removeEventListener('mousedown', handleClickOutside);\n }\n \n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen, handleClickOutside, inline]);\n \n // Generate days for the calendar\n const generateDays = useCallback((): DateObject[] => {\n const days: DateObject[] = [];\n const prevMonthDays = getDaysInMonth(\n currentMonth === 0 ? currentYear - 1 : currentYear,\n currentMonth === 0 ? 11 : currentMonth - 1\n );\n \n // Add previous month's days\n for (let i = firstDayOfMonth - 1; i >= 0; i--) {\n days.push({\n day: prevMonthDays - i,\n month: currentMonth === 0 ? 11 : currentMonth - 1,\n year: currentMonth === 0 ? currentYear - 1 : currentYear,\n isCurrentMonth: false\n });\n }\n \n // Add current month's days\n for (let i = 1; i <= daysInMonth; i++) {\n days.push({\n day: i,\n month: currentMonth,\n year: currentYear,\n isCurrentMonth: true\n });\n }\n \n // Add next month's days\n const remainingDays = 42 - days.length;\n for (let i = 1; i <= remainingDays; i++) {\n days.push({\n day: i,\n month: currentMonth === 11 ? 0 : currentMonth + 1,\n year: currentMonth === 11 ? currentYear + 1 : currentYear,\n isCurrentMonth: false\n });\n }\n \n return days;\n }, [daysInMonth, firstDayOfMonth, currentMonth, currentYear]);\n \n // Generate months for month picker\n const generateMonths = useCallback((): MonthObject[] => {\n const months: MonthObject[] = [];\n for (let i = 0; i < 12; i++) {\n months.push({\n month: i,\n name: getMonthName(i)\n });\n }\n return months;\n }, []);\n \n // Generate years for year picker\n const generateYears = useCallback((): number[] => {\n const years: number[] = [];\n const startYear = currentYear - 6;\n for (let i = 0; i < 12; i++) {\n years.push(startYear + i);\n }\n return years;\n }, [currentYear]);\n \n // Check if a date is selectable\n const isDateSelectable = useCallback((year: number, month: number, day: number): boolean => {\n const date = new Date(year, month, day);\n return isDateInRange(date, minDate, maxDate);\n }, [minDate, maxDate]);\n \n // Check if a date is selected\n const isDateSelected = useCallback((year: number, month: number, day: number): boolean => {\n if (selectionMode === 'single') {\n if (!value) return false;\n \n return (\n value.getFullYear() === year &&\n value.getMonth() === month &&\n value.getDate() === day\n );\n } else {\n if (!startDate && !endDate) return false;\n \n const date = new Date(year, month, day);\n \n if (startDate && !endDate) {\n return (\n startDate.getFullYear() === year &&\n startDate.getMonth() === month &&\n startDate.getDate() === day\n );\n }\n \n if (startDate && endDate) {\n // Return true if the date is the start date or end date\n const isStartDate = (\n startDate.getFullYear() === year &&\n startDate.getMonth() === month &&\n startDate.getDate() === day\n );\n \n const isEndDate = (\n endDate.getFullYear() === year &&\n endDate.getMonth() === month &&\n endDate.getDate() === day\n );\n \n return isStartDate || isEndDate;\n }\n \n return false;\n }\n }, [value, selectionMode, startDate, endDate]);\n \n // Check if a date is in range (between startDate and endDate)\n const isDateInSelectedRange = useCallback((year: number, month: number, day: number): boolean => {\n if (selectionMode !== 'range' || !startDate || !endDate) return false;\n \n const date = new Date(year, month, day);\n return date > startDate && date < endDate;\n }, [selectionMode, startDate, endDate]);\n \n // Check if a date is today\n const isToday = useCallback((year: number, month: number, day: number): boolean => {\n return (\n today.getFullYear() === year &&\n today.getMonth() === month &&\n today.getDate() === day\n );\n }, [today]);\n \n // Calculate week number for a date\n const getWeekNumber = useCallback((date: Date): number => {\n const target = new Date(date.valueOf());\n const dayNr = (date.getDay() + 6) % 7;\n target.setDate(target.getDate() - dayNr + 3);\n const firstThursday = target.valueOf();\n target.setMonth(0, 1);\n if (target.getDay() !== 4) {\n target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n }\n return 1 + Math.ceil((firstThursday - target.valueOf()) / 604800000);\n }, []);\n \n return {\n // State\n isOpen,\n inputValue,\n rangeInputValue,\n viewDate,\n viewMode,\n currentMonth,\n currentYear,\n selectionMode,\n rangeSelectionState,\n \n // Refs\n datePickerRef,\n inputRef,\n \n // Range state\n startDate,\n endDate,\n \n // Action handlers\n setIsOpen,\n handleDateSelect,\n handlePrevMonth,\n handleNextMonth,\n handlePrevYear,\n handleNextYear,\n handleTodayClick,\n handleClear,\n handleInputChange,\n handleInputFocus,\n \n // View mode handlers\n switchToMonthView,\n switchToYearView,\n selectMonth,\n selectYear,\n \n // Data generators\n generateDays,\n generateMonths,\n generateYears,\n \n // State checkers\n isDateSelectable,\n isDateSelected,\n isDateInSelectedRange,\n isToday,\n getWeekNumber,\n };\n} ","import React, { forwardRef, useImperativeHandle } from 'react';\nimport { DatePickerProps, DatePickerRef } from './types';\nimport { useDatePicker } from '../../lib/composables/useDatePicker';\nimport { formatDate } from './utils';\nimport Icon from '../Icon';\n\n/**\n * DatePicker component for selecting dates from a calendar interface.\n * Supports various display modes, date ranges, and customization options.\n */\nconst DatePicker = forwardRef<DatePickerRef, DatePickerProps>(({\n value,\n onChange,\n selectionMode = 'single',\n startDate,\n endDate,\n onRangeChange,\n format = 'MM/dd/yyyy',\n minDate,\n maxDate,\n placeholder = 'Select date...',\n disabled = false,\n readOnly = false,\n clearable = true,\n showTodayButton = true,\n showWeekNumbers = false,\n inline = false,\n id,\n name,\n className = '',\n placement = 'bottom-start',\n inputClassName = '',\n size = 'md',\n ...props\n}, ref) => {\n const {\n // State\n isOpen,\n inputValue,\n rangeInputValue,\n viewMode,\n currentMonth,\n currentYear,\n selectionMode: activeSelectionMode,\n rangeSelectionState,\n \n // Refs\n datePickerRef,\n inputRef,\n \n // Range state\n startDate: rangeStartDate,\n endDate: rangeEndDate,\n \n // Action handlers\n setIsOpen,\n handleDateSelect,\n handlePrevMonth,\n handleNextMonth,\n handlePrevYear,\n handleNextYear,\n handleTodayClick,\n handleClear,\n handleInputChange,\n handleInputFocus,\n \n // View mode handlers\n switchToMonthView,\n switchToYearView,\n selectMonth,\n selectYear,\n \n // Data generators\n generateDays,\n generateMonths,\n generateYears,\n \n // State checkers\n isDateSelectable,\n isDateSelected,\n isDateInSelectedRange,\n isToday,\n getWeekNumber,\n } = useDatePicker({\n value,\n onChange,\n selectionMode,\n startDate,\n endDate,\n onRangeChange,\n format,\n minDate,\n maxDate,\n inline\n });\n \n // Expose the ref API\n useImperativeHandle(ref, () => ({\n open: () => setIsOpen(true),\n close: () => setIsOpen(false),\n clear: handleClear,\n focus: () => inputRef.current?.focus()\n }));\n \n // Prepare class names\n const datepickerClassName = `c-datepicker ${className} ${inline ? 'c-datepicker--inline' : ''}`.trim();\n const inputClasses = `c-datepicker__input c-input c-input--${size} ${inputClassName}`.trim();\n \n // Create unique ID for accessibility\n const datepickerId = id || `datepicker-${Math.random().toString(36).substring(2, 9)}`;\n const calendarId = `${datepickerId}-calendar`;\n \n // Get the appropriate input value based on selection mode\n const displayValue = selectionMode === 'single' ? inputValue : rangeInputValue;\n \n // Helper function to get placeholder based on selection mode\n const getPlaceholder = () => {\n if (selectionMode === 'single') {\n return placeholder;\n } else {\n return rangeSelectionState === 'start' \n ? 'Select start date...' \n : (rangeStartDate ? `${formatDate(rangeStartDate, format)} - Select end date...` : 'Select date range...');\n }\n };\n \n return (\n <div className={datepickerClassName} ref={datePickerRef} {...props}>\n {!inline && (\n <div className=\"c-datepicker__input-wrapper\">\n <input\n id={datepickerId}\n name={name}\n ref={inputRef}\n type=\"text\"\n className={inputClasses}\n placeholder={getPlaceholder()}\n value={displayValue}\n onChange={handleInputChange}\n onFocus={handleInputFocus}\n disabled={disabled}\n readOnly={readOnly}\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-controls={calendarId}\n />\n {clearable && displayValue && (\n <button\n type=\"button\"\n className=\"c-datepicker__clear-button\"\n onClick={handleClear}\n aria-label=\"Clear date\"\n >\n <Icon name=\"X\" size=\"sm\" />\n </button>\n )}\n <span className=\"c-datepicker__calendar-icon\" aria-hidden=\"true\">\n <Icon name=\"Calendar\" size=\"sm\" color=\"var(--atomix-secondary-text-emphasis)\" />\n </span>\n </div>\n )}\n \n {(isOpen || inline) && (\n <div \n id={calendarId}\n className={`c-datepicker__calendar c-datepicker__calendar--${placement}`}\n role=\"dialog\"\n aria-modal={!inline ? \"true\" : undefined}\n aria-label=\"Date picker\"\n >\n \n \n <div className=\"c-datepicker__header\">\n {viewMode === 'days' && (\n <>\n <button\n type=\"button\"\n className=\"c-datepicker__nav-button c-datepicker__nav-button--prev-year\"\n onClick={handlePrevYear}\n aria-label=\"Previous year\"\n >\n <Icon name=\"CaretDoubleLeft\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n className=\"c-datepicker__nav-button c-datepicker__nav-button--prev-month\"\n onClick={handlePrevMonth}\n aria-label=\"Previous month\"\n >\n <Icon name=\"CaretLeft\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n className=\"c-datepicker__view-switch\"\n onClick={switchToMonthView}\n aria-label=\"Switch to month view\"\n >\n {`${currentMonth + 1}/${currentYear}`}\n </button>\n <button\n type=\"button\"\n className=\"c-datepicker__nav-button c-datepicker__nav-button--next-month\"\n onClick={handleNextMonth}\n aria-label=\"Next month\"\n >\n <Icon name=\"CaretRight\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n className=\"c-datepicker__nav-button c-datepicker__nav-button--next-year\"\n onClick={handleNextYear}\n aria-label=\"Next year\"\n >\n <Icon name=\"CaretDoubleRight\" size=\"sm\" />\n </button>\n </>\n )}\n \n {viewMode === 'months' && (\n <>\n <button\n type=\"button\"\n className=\"c-datepicker__nav-button c-datepicker__nav-button--prev-year\"\n onClick={handlePrevYear}\n aria-label=\"Previous year\"\n >\n <Icon name=\"CaretLeft\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n className=\"c-datepicker__view-switch\"\n onClick={switchToYearView}\n aria-label=\"Switch to year view\"\n >\n {currentYear}\n </button>\n <button\n type=\"button\"\n className=\"c-datepicker__nav-button c-datepicker__nav-button--next-year\"\n onClick={handleNextYear}\n aria-label=\"Next year\"\n >\n <Icon name=\"CaretRight\" size=\"sm\" />\n </button>\n </>\n )}\n \n {viewMode === 'years' && (\n <>\n <button\n type=\"button\"\n className=\"c-datepicker__nav-button c-datepicker__nav-button--prev-year\"\n onClick={() => handlePrevYear()}\n aria-label=\"Previous year range\"\n >\n <Icon name=\"CaretLeft\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n className=\"c-datepicker__view-switch\"\n aria-label=\"Current year range\"\n >\n {currentYear - 6} - {currentYear + 5}\n </button>\n <button\n type=\"button\"\n className=\"c-datepicker__nav-button c-datepicker__nav-button--next-year\"\n onClick={() => handleNextYear()}\n aria-label=\"Next year range\"\n >\n <Icon name=\"CaretRight\" size=\"sm\" />\n </button>\n </>\n )}\n </div>\n \n <div className=\"c-datepicker__body\">\n {viewMode === 'days' && (\n <>\n <div className=\"c-datepicker__weekdays\" role=\"row\">\n {showWeekNumbers && <div className=\"c-datepicker__weekday c-datepicker__weeknumber\" role=\"columnheader\">#</div>}\n <div className=\"c-datepicker__weekday\" role=\"columnheader\">Su</div>\n <div className=\"c-datepicker__weekday\" role=\"columnheader\">Mo</div>\n <div className=\"c-datepicker__weekday\" role=\"columnheader\">Tu</div>\n <div className=\"c-datepicker__weekday\" role=\"columnheader\">We</div>\n <div className=\"c-datepicker__weekday\" role=\"columnheader\">Th</div>\n <div className=\"c-datepicker__weekday\" role=\"columnheader\">Fr</div>\n <div className=\"c-datepicker__weekday\" role=\"columnheader\">Sa</div>\n </div>\n \n <div \n className=\"c-datepicker__days\" \n role=\"grid\"\n aria-labelledby={`${datepickerId}-month-year`}\n >\n {generateDays().map((dateObj, index) => {\n const isSelectable = isDateSelectable(dateObj.year, dateObj.month, dateObj.day);\n const isSelected = isDateSelected(dateObj.year, dateObj.month, dateObj.day);\n const isTodayDate = isToday(dateObj.year, dateObj.month, dateObj.day);\n const dateValue = new Date(dateObj.year, dateObj.month, dateObj.day);\n \n // Check if date is in range (for range selection)\n const isInRange = isDateInSelectedRange(dateObj.year, dateObj.month, dateObj.day);\n \n // Determine if the day is start or end of range\n const isStartOfRange = selectionMode === 'range' && startDate && \n dateObj.day === startDate.getDate() && \n dateObj.month === startDate.getMonth() && \n dateObj.year === startDate.getFullYear();\n \n const isEndOfRange = selectionMode === 'range' && endDate && \n dateObj.day === endDate.getDate() && \n dateObj.month === endDate.getMonth() && \n dateObj.year === endDate.getFullYear();\n \n // Add week number if enabled\n if (showWeekNumbers && index % 7 === 0) {\n const weekNum = getWeekNumber(dateValue);\n \n return (\n <React.Fragment key={`week-${index}`}>\n <div \n className=\"c-datepicker__weeknumber\"\n aria-label={`Week ${weekNum}`}\n >\n {weekNum}\n </div>\n <button\n type=\"button\"\n className={`c-datepicker__day \n ${!dateObj.isCurrentMonth ? 'c-datepicker__day--outside' : ''} \n ${isSelected ? 'c-datepicker__day--selected' : ''} \n ${isStartOfRange ? 'c-datepicker__day--start-range' : ''}\n ${isEndOfRange ? 'c-datepicker__day--end-range' : ''}\n ${isInRange ? 'c-datepicker__day--in-range' : ''}\n ${isTodayDate ? 'c-datepicker__day--today' : ''} \n ${!isSelectable ? 'c-datepicker__day--disabled' : ''}`}\n onClick={() => isSelectable && handleDateSelect(dateObj.day)}\n disabled={!isSelectable}\n tabIndex={dateObj.isCurrentMonth ? 0 : -1}\n aria-label={dateValue.toLocaleDateString()}\n aria-selected={isSelected ? 'true' : 'false'}\n role=\"gridcell\"\n >\n {dateObj.day}\n </button>\n </React.Fragment>\n );\n }\n \n return (\n <button\n key={`day-${index}`}\n type=\"button\"\n className={`c-datepicker__day \n ${!dateObj.isCurrentMonth ? 'c-datepicker__day--outside' : ''} \n ${isSelected ? 'c-datepicker__day--selected' : ''} \n ${isStartOfRange ? 'c-datepicker__day--start-range' : ''}\n ${isEndOfRange ? 'c-datepicker__day--end-range' : ''}\n ${isInRange ? 'c-datepicker__day--in-range' : ''}\n ${isTodayDate ? 'c-datepicker__day--today' : ''} \n ${!isSelectable ? 'c-datepicker__day--disabled' : ''}`}\n onClick={() => isSelectable && handleDateSelect(dateObj.day)}\n disabled={!isSelectable}\n tabIndex={dateObj.isCurrentMonth ? 0 : -1}\n aria-label={dateValue.toLocaleDateString()}\n aria-selected={isSelected ? 'true' : 'false'}\n role=\"gridcell\"\n >\n {dateObj.day}\n </button>\n );\n })}\n </div>\n </>\n )}\n \n {viewMode === 'months' && (\n <div className=\"c-datepicker__months\" role=\"grid\">\n {generateMonths().map((monthObj, index) => {\n const isSelected = value && value.getMonth() === monthObj.month && value.getFullYear() === currentYear;\n \n return (\n <button\n key={`month-${index}`}\n type=\"button\"\n className={`c-datepicker__month ${isSelected ? 'c-datepicker__month--selected' : ''}`}\n onClick={() => selectMonth(monthObj.month)}\n aria-selected={isSelected ? 'true' : 'false'}\n role=\"gridcell\"\n >\n {monthObj.name.substring(0, 3)}\n </button>\n );\n })}\n </div>\n )}\n \n {viewMode === 'years' && (\n <div className=\"c-datepicker__years\" role=\"grid\">\n {generateYears().map((year, index) => {\n const isSelected = value && value.getFullYear() === year;\n \n return (\n <button\n key={`year-${index}`}\n type=\"button\"\n className={`c-datepicker__year ${isSelected ? 'c-datepicker__year--selected' : ''}`}\n onClick={() => selectYear(year)}\n aria-selected={isSelected ? 'true' : 'false'}\n role=\"gridcell\"\n >\n {year}\n </button>\n );\n })}\n </div>\n )}\n </div>\n \n {viewMode === 'days' && (\n <div className=\"c-datepicker__footer\">\n {selectionMode === 'range' && (\n <div className=\"c-datepicker__range-status c-badge c-badge--sm c-badge--info u-w-100\">\n Selecting {rangeSelectionState === 'start' ? 'start' : 'end'} date\n </div>\n )}\n\n {showTodayButton && (\n <button\n type=\"button\"\n className=\"c-datepicker__today-button c-btn c-btn--sm c-btn--outline-primary\"\n onClick={handleTodayClick}\n aria-label=\"Go to today\"\n >\n Today\n </button>\n )} \n \n {!inline && (\n <button\n type=\"button\"\n className=\"c-datepicker__close-button c-btn c-btn--sm c-btn--outline-error\"\n onClick={() => setIsOpen(false)}\n aria-label=\"Close calendar\"\n >\n Close\n </button>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n );\n});\n\nDatePicker.displayName = 'DatePicker';\n\n\nexport {DatePicker};\n\nexport type { DatePickerProps, DatePickerRef } from './types';\n\nexport default DatePicker;\n","import React, { useRef, useState, useCallback, createContext, useContext, useEffect } from 'react';\nimport { DROPDOWN } from '../../lib/constants/components';\nimport type { \n DropdownProps, \n DropdownItemProps, \n DropdownDividerProps, \n DropdownHeaderProps \n} from '../../lib/types/components';\n\n// Context type definition\ntype DropdownContextType = {\n isOpen: boolean;\n close: () => void;\n id: string;\n trigger: string;\n};\n\n// Create context for dropdown state management\nconst DropdownContext = createContext<DropdownContextType>({\n isOpen: false,\n close: () => {},\n id: '',\n trigger: 'click'\n});\n\n/**\n * DropdownItem component for menu items\n */\nexport const DropdownItem: React.FC<DropdownItemProps> = ({\n children,\n href,\n active = false,\n disabled = false,\n icon,\n onClick,\n className = '',\n ...props\n}) => {\n const { close } = useContext(DropdownContext);\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n\n if (onClick) {\n onClick(e);\n }\n\n // Always close the dropdown when an item is clicked\n close();\n };\n\n const itemClasses = [\n 'c-dropdown__menu-item',\n active ? 'is-active' : '',\n disabled ? 'is-disabled' : '',\n className\n ].filter(Boolean).join(' ');\n\n if (href && !disabled) {\n return (\n <li>\n <a \n href={href} \n className={itemClasses}\n onClick={handleClick}\n role=\"menuitem\"\n tabIndex={0}\n {...props}\n >\n {icon && <span className=\"c-dropdown__menu-item-icon\">{icon}</span>}\n {children}\n </a>\n </li>\n );\n }\n\n return (\n <li>\n <button \n type=\"button\"\n className={itemClasses}\n onClick={handleClick}\n disabled={disabled}\n role=\"menuitem\"\n tabIndex={0}\n {...props}\n >\n {icon && <span className=\"c-dropdown__menu-item-icon\">{icon}</span>}\n {children}\n </button>\n </li>\n );\n};\n\n/**\n * DropdownDivider component for separating groups of items\n */\nexport const DropdownDivider: React.FC<DropdownDividerProps> = ({ className = '' }) => {\n return <li className={`c-dropdown__divider ${className}`} role=\"separator\" />;\n};\n\n/**\n * DropdownHeader component for section headers\n */\nexport const DropdownHeader: React.FC<DropdownHeaderProps> = ({ children, className = '' }) => {\n return (\n <li className={`c-dropdown__header ${className}`}>\n {children}\n </li>\n );\n};\n\n/**\n * Dropdown component for creating dropdown menus\n */\nconst Dropdown: React.FC<DropdownProps> = ({\n children, \n menu,\n placement = 'bottom-start',\n trigger = 'click', \n offset = DROPDOWN.DEFAULTS.OFFSET,\n isOpen: controlledIsOpen,\n onOpenChange,\n closeOnClickOutside = true,\n closeOnEscape = true,\n maxHeight,\n minWidth = DROPDOWN.DEFAULTS.MIN_WIDTH,\n variant,\n className = '',\n ...props\n}) => {\n // Set up controlled vs uncontrolled state\n const [uncontrolledIsOpen, setUncontrolledIsOpen] = useState(false);\n const isControlled = controlledIsOpen !== undefined;\n const isOpen = isControlled ? controlledIsOpen : uncontrolledIsOpen;\n \n // Create refs\n const dropdownRef = useRef<HTMLDivElement>(null);\n const toggleRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n \n // Generate unique ID\n const dropdownId = useRef(`dropdown-${Math.random().toString(36).substring(2, 9)}`).current;\n \n // State change handlers\n const setIsOpen = useCallback((nextIsOpen: boolean) => {\n if (!isControlled) {\n setUncontrolledIsOpen(nextIsOpen);\n }\n if (onOpenChange) {\n onOpenChange(nextIsOpen);\n }\n }, [isControlled, onOpenChange]);\n \n const toggle = useCallback(() => setIsOpen(!isOpen), [isOpen, setIsOpen]);\n \n const close = useCallback(() => {\n setIsOpen(false);\n // Return focus to the toggle button after closing\n setTimeout(() => {\n toggleRef.current?.focus();\n }, 0);\n }, [setIsOpen]);\n \n // Click outside handler\n useEffect(() => {\n if (!isOpen || !closeOnClickOutside) return;\n \n const handleClickOutside = (e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\n close();\n }\n };\n \n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen, closeOnClickOutside, close]);\n \n // Escape key handler\n useEffect(() => {\n if (!isOpen || !closeOnEscape) return;\n \n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n close();\n }\n };\n \n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, closeOnEscape, close]);\n \n // Keyboard navigation\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (!menuRef.current) return;\n \n const focusableItems = menuRef.current.querySelectorAll<HTMLElement>('[role=\"menuitem\"]:not([disabled])');\n if (!focusableItems.length) return;\n \n const currentIndex = Array.from(focusableItems).findIndex(item => item === document.activeElement);\n \n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (currentIndex < focusableItems.length - 1) {\n focusableItems[currentIndex + 1].focus();\n } else {\n focusableItems[0].focus();\n }\n break;\n \n case 'ArrowUp':\n e.preventDefault();\n if (currentIndex > 0) {\n focusableItems[currentIndex - 1].focus();\n } else {\n focusableItems[focusableItems.length - 1].focus();\n }\n break;\n \n case 'Home':\n e.preventDefault();\n focusableItems[0].focus();\n break;\n \n case 'End':\n e.preventDefault();\n focusableItems[focusableItems.length - 1].focus();\n break;\n }\n }, []);\n \n // Event handlers\n const handleToggleClick = useCallback((e: React.MouseEvent) => {\n if (trigger === 'click') {\n e.preventDefault();\n e.stopPropagation();\n toggle();\n }\n }, [trigger, toggle]);\n \n const handleToggleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') && !isOpen) {\n e.preventDefault();\n setIsOpen(true);\n \n // Only focus the first menu item when using keyboard navigation\n if (e.key === 'ArrowDown' && menuRef.current) {\n setTimeout(() => {\n const firstItem = menuRef.current?.querySelector<HTMLElement>('[role=\"menuitem\"]');\n firstItem?.focus();\n }, 100);\n }\n } else if (e.key === 'Escape' && isOpen) {\n e.preventDefault();\n close();\n }\n }, [isOpen, setIsOpen, close]);\n \n // Hover handlers for trigger=\"hover\"\n const handleHoverOpen = useCallback(() => {\n if (trigger === 'hover') {\n setIsOpen(true);\n }\n }, [trigger, setIsOpen]);\n \n // Build class names\n const dropdownClasses = [\n 'c-dropdown',\n trigger === 'click' ? 'c-dropdown--onclick' : '',\n variant ? `c-dropdown--${variant}` : '',\n isOpen ? 'is-open' : '',\n className\n ].filter(Boolean).join(' ');\n \n // Menu styles\n const menuStyleProps: React.CSSProperties = {};\n if (maxHeight) menuStyleProps.maxHeight = maxHeight;\n if (minWidth !== undefined) {\n menuStyleProps.minWidth = typeof minWidth === 'number' ? `${minWidth}px` : minWidth;\n }\n\n return (\n <div \n ref={dropdownRef} \n className={dropdownClasses}\n onMouseEnter={trigger === 'hover' ? handleHoverOpen : undefined}\n {...props}\n >\n <div \n ref={toggleRef}\n className=\"c-dropdown__toggle\"\n onClick={handleToggleClick}\n onKeyDown={handleToggleKeyDown}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n aria-controls={dropdownId}\n tabIndex={0}\n >\n {children}\n </div>\n \n <div \n ref={menuRef}\n id={dropdownId}\n className={`c-dropdown__menu-wrapper c-dropdown__menu-wrapper--${placement} ${isOpen ? 'is-open' : ''}`}\n role=\"menu\"\n aria-orientation=\"vertical\"\n aria-hidden={!isOpen}\n onKeyDown={handleKeyDown}\n >\n <div className=\"c-dropdown__menu-inner\" style={menuStyleProps}>\n <DropdownContext.Provider value={{ isOpen, close, id: dropdownId, trigger }}>\n <ul className=\"c-dropdown__menu\">\n {menu}\n </ul>\n </DropdownContext.Provider>\n </div>\n </div>\n </div>\n );\n}; \n\n\n\nexport type { DropdownProps, DropdownItemProps, DropdownDividerProps, DropdownHeaderProps };\n\n// Set display name for debugging\nDropdown.displayName = 'Dropdown';\n\n// Default export (primary)\nexport default Dropdown;\n\n// Named export for compatibility\nexport { Dropdown };","import { useEffect, useRef, useState, useCallback } from 'react';\nimport { EdgePanelProps } from '../types/components';\nimport { EDGE_PANEL } from '../constants/components';\n\n/**\n * EdgePanel state and functionality\n * @param initialProps - Initial EdgePanel properties\n * @returns EdgePanel state and methods\n */\nexport function useEdgePanel(initialProps?: Partial<EdgePanelProps>) {\n // Default EdgePanel properties\n const defaultProps: Partial<EdgePanelProps> = {\n position: 'start',\n mode: 'slide',\n isOpen: false,\n backdrop: true,\n closeOnBackdropClick: true,\n closeOnEscape: true,\n ...initialProps\n };\n\n const [isOpen, setIsOpen] = useState(defaultProps.isOpen || false);\n const containerRef = useRef<HTMLDivElement>(null);\n const backdropRef = useRef<HTMLDivElement>(null);\n\n /**\n * Generate EdgePanel class based on properties\n * @param props - EdgePanel properties\n * @returns Class string\n */\n const generateEdgePanelClass = (props: Partial<EdgePanelProps>): string => {\n const {\n position = defaultProps.position,\n className = '',\n isOpen: propIsOpen,\n } = props;\n\n const baseClass = EDGE_PANEL.CLASSES.BASE;\n const positionClass = position ? `${baseClass}--${position}` : '';\n const openClass = (propIsOpen ?? isOpen) ? EDGE_PANEL.CLASSES.IS_OPEN : '';\n \n return `${baseClass} ${positionClass} ${openClass} ${className}`.trim();\n };\n \n /**\n * Adjust body padding in push mode\n */\n const adjustBodyPadding = useCallback(() => {\n if (!containerRef.current || defaultProps.mode !== 'push') return;\n \n const { position } = defaultProps;\n const size = position === 'top' || position === 'bottom'\n ? containerRef.current.clientHeight\n : containerRef.current.clientWidth;\n\n // Map position to CSS padding property\n let paddingProperty: string;\n switch (position) {\n case 'start':\n paddingProperty = 'paddingLeft';\n break;\n case 'end':\n paddingProperty = 'paddingRight';\n break;\n default:\n // For top/bottom, capitalize first letter\n paddingProperty = `padding${position!.charAt(0).toUpperCase() + position!.slice(1)}`;\n }\n \n document.body.style[paddingProperty as any] = `${size}px`;\n document.body.classList.add('is-pushed');\n }, [defaultProps.mode, defaultProps.position]);\n \n /**\n * Reset body padding\n */\n const resetBodyPadding = useCallback(() => {\n if (defaultProps.mode !== 'push') return;\n \n const { position } = defaultProps;\n \n // Map position to CSS padding property\n let paddingProperty: string;\n switch (position) {\n case 'start':\n paddingProperty = 'paddingLeft';\n break;\n case 'end':\n paddingProperty = 'paddingRight';\n break;\n default:\n // For top/bottom, capitalize first letter\n paddingProperty = `padding${position!.charAt(0).toUpperCase() + position!.slice(1)}`;\n }\n \n document.body.style[paddingProperty as any] = '';\n document.body.classList.remove('is-pushed');\n }, [defaultProps.mode, defaultProps.position]);\n\n /**\n * Open the panel\n */\n const openPanel = useCallback(() => {\n setIsOpen(true);\n document.body.classList.add('is-edgepanel-open');\n \n if (containerRef.current) {\n const { mode } = defaultProps;\n \n // Only add animation if not in 'none' mode\n if (mode !== 'none') {\n // Add animation class first\n containerRef.current.classList.add('is-animating');\n \n // Force a reflow before starting the animation\n void containerRef.current.offsetHeight;\n \n // Remove animation class after animation completes\n const container = containerRef.current;\n setTimeout(() => {\n if (container) {\n container.classList.remove('is-animating');\n }\n }, EDGE_PANEL.ANIMATION_DURATION);\n }\n \n // Then set transform\n containerRef.current.style.transform = 'translate(0)';\n \n // If push mode, adjust body padding\n if (defaultProps.mode === 'push') {\n adjustBodyPadding();\n }\n }\n \n if (defaultProps.onOpenChange) {\n defaultProps.onOpenChange(true);\n }\n }, [defaultProps, adjustBodyPadding]);\n\n /**\n * Close the panel\n */\n const closePanel = useCallback(() => {\n if (containerRef.current) {\n const { position, mode } = defaultProps;\n \n // Only add animation if not in 'none' mode\n if (mode !== 'none') {\n // Add animation class first\n containerRef.current.classList.add('is-animating-out');\n \n // Capture container for setTimeout\n const container = containerRef.current;\n \n setTimeout(() => {\n if (container) {\n container.classList.remove('is-animating-out');\n }\n }, EDGE_PANEL.ANIMATION_DURATION);\n }\n \n // Then set transform\n containerRef.current.style.transform = position ? EDGE_PANEL.TRANSFORM_VALUES[position] : '';\n \n // Reset body padding if push mode\n if (defaultProps.mode === 'push') {\n resetBodyPadding();\n }\n \n // Wait for animation to complete before hiding\n const hideDelay = mode === 'none' ? 0 : EDGE_PANEL.ANIMATION_DURATION;\n \n setTimeout(() => {\n setIsOpen(false);\n document.body.classList.remove('is-edgepanel-open');\n \n if (defaultProps.onOpenChange) {\n defaultProps.onOpenChange(false);\n }\n }, hideDelay);\n } else {\n setIsOpen(false);\n document.body.classList.remove('is-edgepanel-open');\n \n if (defaultProps.onOpenChange) {\n defaultProps.onOpenChange(false);\n }\n }\n }, [defaultProps, resetBodyPadding]);\n\n /**\n * Handle Escape key press\n */\n const handleEscapeKey = useCallback((event: KeyboardEvent) => {\n if (defaultProps.closeOnEscape && event.key === 'Escape' && isOpen) {\n closePanel();\n }\n }, [closePanel, defaultProps.closeOnEscape, isOpen]);\n\n /**\n * Handle backdrop click\n */\n const handleBackdropClick = useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n if (defaultProps.closeOnBackdropClick && event.target === event.currentTarget) {\n closePanel();\n }\n }, [closePanel, defaultProps.closeOnBackdropClick]);\n\n /**\n * Set up event listeners for keyboard events\n */\n useEffect(() => {\n if (isOpen && defaultProps.closeOnEscape) {\n document.addEventListener('keydown', handleEscapeKey);\n }\n \n return () => {\n document.removeEventListener('keydown', handleEscapeKey);\n };\n }, [isOpen, handleEscapeKey, defaultProps.closeOnEscape]);\n\n /**\n * Set initial transform values\n */\n useEffect(() => {\n if (containerRef.current) {\n const { position, mode } = defaultProps;\n \n if (!isOpen && (mode === 'slide' || mode === 'push') && position) {\n containerRef.current.style.transform = EDGE_PANEL.TRANSFORM_VALUES[position];\n }\n }\n }, [defaultProps.mode, defaultProps.position, isOpen]);\n\n /**\n * Sync with prop changes\n */\n useEffect(() => {\n if (defaultProps.isOpen !== undefined && defaultProps.isOpen !== isOpen) {\n if (defaultProps.isOpen) {\n openPanel();\n } else {\n closePanel();\n }\n }\n }, [defaultProps.isOpen, closePanel, isOpen, openPanel]);\n\n return {\n isOpen,\n containerRef,\n backdropRef,\n generateEdgePanelClass,\n openPanel,\n closePanel,\n handleBackdropClick\n };\n} ","import React from 'react';\nimport { EdgePanelProps } from '../../lib/types/components';\nimport { useEdgePanel } from '../../lib/composables/useEdgePanel';\nimport { EDGE_PANEL } from '../../lib/constants/components';\nimport { Icon } from '../Icon/Icon';\nconst EdgePanel: React.FC<EdgePanelProps> = ({\n title,\n children,\n position = 'start',\n mode = 'slide',\n isOpen = false,\n onOpenChange,\n backdrop = true,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n className = '',\n}) => {\n const {\n isOpen: isOpenState,\n containerRef,\n backdropRef,\n generateEdgePanelClass,\n closePanel,\n handleBackdropClick\n } = useEdgePanel({\n position,\n mode,\n isOpen,\n onOpenChange,\n backdrop,\n closeOnBackdropClick,\n closeOnEscape,\n });\n\n const panelClass = generateEdgePanelClass({\n position,\n isOpen,\n className,\n });\n\n // If not open and not controlled by parent, don't render\n if (!isOpenState && isOpen === false) {\n return null;\n }\n\n return (\n <div className={panelClass} data-position={position} data-mode={mode}>\n {backdrop && (\n <div \n ref={backdropRef}\n className=\"c-edge-panel__backdrop\"\n onClick={handleBackdropClick}\n />\n )}\n <div ref={containerRef} className=\"c-edge-panel__container\">\n <div className=\"c-edge-panel__header\">\n <h4>{title}</h4>\n <button \n className=\"c-edge-panel__close c-btn c-btn--icon\" \n onClick={closePanel}\n aria-label=\"Close panel\"\n >\n <Icon name=\"X\" />\n </button>\n </div>\n <div className=\"c-edge-panel__body\">\n {children}\n </div>\n </div>\n </div>\n );\n}; \n\n\n\nexport type { EdgePanelProps } from '../../lib/types/components';\n\n// Set display name for debugging\nEdgePanel.displayName = 'EdgePanel';\n\n// Default export (primary)\nexport default EdgePanel;\n\n// Named export for compatibility\nexport { EdgePanel };","import { FormProps } from '../types/components';\nimport { FORM } from '../constants/components';\n\n/**\n * Form state and functionality\n * @param initialProps - Initial form properties\n * @returns Form state and methods\n */\nexport function useForm(initialProps?: Partial<FormProps>) {\n // Default form properties\n const defaultProps: Partial<FormProps> = {\n disabled: false,\n ...initialProps\n };\n\n /**\n * Generate form class based on properties\n * @param props - Form properties\n * @returns Class string\n */\n const generateFormClass = (props: Partial<FormProps>): string => {\n const {\n disabled = defaultProps.disabled,\n className = '',\n } = props;\n\n const disabledClass = disabled ? FORM.CLASSES.DISABLED : '';\n \n return `${FORM.CLASSES.BASE} ${disabledClass} ${className}`.trim();\n };\n\n /**\n * Handle form submission with disabled check\n * @param handler - Submit handler function\n * @returns Function that respects disabled state\n */\n const handleSubmit = (handler?: (event: React.FormEvent<HTMLFormElement>) => void) => {\n return (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!defaultProps.disabled && handler) {\n handler(event);\n }\n };\n };\n\n /**\n * Handle form reset with disabled check\n * @param handler - Reset handler function\n * @returns Function that respects disabled state\n */\n const handleReset = (handler?: (event: React.FormEvent<HTMLFormElement>) => void) => {\n return (event: React.FormEvent<HTMLFormElement>) => {\n if (!defaultProps.disabled && handler) {\n handler(event);\n }\n };\n };\n\n return {\n defaultProps,\n generateFormClass,\n handleSubmit,\n handleReset,\n };\n} ","import React from 'react';\nimport { FormProps } from '../../lib/types/components';\nimport { useForm } from '../../lib/composables/useForm';\n\n/**\n * Form - A component for creating form layouts\n */\nconst Form: React.FC<FormProps> = ({\n children,\n onSubmit,\n onReset,\n className = '',\n disabled = false,\n id,\n method = 'post',\n encType,\n noValidate = false,\n autoComplete = 'on',\n}) => {\n const { generateFormClass, handleSubmit, handleReset } = useForm({ \n disabled \n });\n \n const formClass = generateFormClass({ className, disabled });\n \n return (\n <form\n id={id}\n className={formClass}\n onSubmit={handleSubmit(onSubmit)}\n onReset={handleReset(onReset)}\n method={method}\n encType={encType}\n noValidate={noValidate}\n autoComplete={autoComplete}\n >\n {children}\n </form>\n );\n};\n\nexport type { FormProps };\n\n// Set display name for debugging\nForm.displayName = 'Form';\n\n// Default export (primary)\nexport default Form;\n\n// Named export for compatibility\nexport { Form };","import { InputProps, ThemeColor } from '../types/components';\nimport { INPUT } from '../constants/components';\n\n/**\n * Input state and functionality\n * @param initialProps - Initial input properties\n * @returns Input state and methods\n */\nexport function useInput(initialProps?: Partial<InputProps>) {\n // Default input properties\n const defaultProps: Partial<InputProps> = {\n size: 'md',\n disabled: false,\n invalid: false,\n valid: false,\n ...initialProps\n };\n\n /**\n * Generate input class based on properties\n * @param props - Input properties\n * @returns Class string\n */\n const generateInputClass = (props: Partial<InputProps> & { type?: string }): string => {\n const {\n size = defaultProps.size,\n variant = defaultProps.variant,\n disabled = defaultProps.disabled,\n invalid = defaultProps.invalid,\n valid = defaultProps.valid,\n className = '',\n type,\n } = props;\n\n const sizeClass = size === 'md' ? '' : (\n size === 'sm' ? INPUT.CLASSES.SMALL : INPUT.CLASSES.LARGE\n );\n \n const variantClass = variant ? `c-input--${variant}` : '';\n \n const textareaClass = type === 'textarea' ? 'c-input--textarea' : '';\n \n let validationClass = '';\n if (invalid) {\n validationClass = INPUT.CLASSES.INVALID;\n } else if (valid) {\n validationClass = INPUT.CLASSES.VALID;\n }\n \n const disabledClass = disabled ? INPUT.CLASSES.DISABLED : '';\n \n return `${INPUT.CLASSES.BASE} ${sizeClass} ${variantClass} ${textareaClass} ${validationClass} ${disabledClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateInputClass,\n };\n} ","import React from 'react';\nimport { InputProps } from '../../lib/types/components';\nimport { useInput } from '../../lib/composables/useInput';\n\n/**\n * Input - A component for text input fields\n */\n const Input: React.FC<InputProps> = ({\n type = 'text',\n value,\n onChange,\n onBlur,\n onFocus,\n placeholder,\n className = '',\n disabled = false,\n required = false,\n readOnly = false,\n id,\n name,\n autoComplete,\n autoFocus = false,\n size = 'md',\n variant,\n invalid = false,\n valid = false,\n maxLength,\n minLength,\n pattern,\n min,\n max,\n step,\n ariaLabel,\n ariaDescribedBy,\n}) => {\n const { generateInputClass } = useInput({ \n size, variant, disabled, invalid, valid\n });\n \n const inputClass = generateInputClass({ \n className, size, variant, disabled, invalid, valid, type\n });\n \n return (\n <input\n type={type}\n className={inputClass}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n onFocus={onFocus}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n readOnly={readOnly}\n id={id}\n name={name}\n autoComplete={autoComplete}\n autoFocus={autoFocus}\n maxLength={maxLength}\n minLength={minLength}\n pattern={pattern}\n min={min}\n max={max}\n step={step}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n aria-invalid={invalid}\n />\n );\n};\n\nexport type { InputProps };\n\n// Set display name for debugging\nInput.displayName = 'Input';\n\n// Default export (primary)\nexport default Input;\n\n// Named export for compatibility\nexport { Input };","import { TextareaProps } from '../types/components';\nimport { TEXTAREA } from '../constants/components';\n\n/**\n * Textarea state and functionality\n * @param initialProps - Initial textarea properties\n * @returns Textarea state and methods\n */\nexport function useTextarea(initialProps?: Partial<TextareaProps>) {\n // Default textarea properties\n const defaultProps: Partial<TextareaProps> = {\n size: 'md',\n disabled: false,\n invalid: false,\n valid: false,\n ...initialProps\n };\n\n /**\n * Generate textarea class based on properties\n * @param props - Textarea properties\n * @returns Class string\n */\n const generateTextareaClass = (props: Partial<TextareaProps>): string => {\n const {\n size = defaultProps.size,\n variant = defaultProps.variant,\n disabled = defaultProps.disabled,\n invalid = defaultProps.invalid,\n valid = defaultProps.valid,\n className = '',\n } = props;\n\n const sizeClass = size === 'md' ? '' : (\n size === 'sm' ? TEXTAREA.CLASSES.SMALL : TEXTAREA.CLASSES.LARGE\n );\n \n const variantClass = variant ? `c-input--${variant}` : '';\n \n let validationClass = '';\n if (invalid) {\n validationClass = TEXTAREA.CLASSES.INVALID;\n } else if (valid) {\n validationClass = TEXTAREA.CLASSES.VALID;\n }\n \n const disabledClass = disabled ? TEXTAREA.CLASSES.DISABLED : '';\n \n return `${TEXTAREA.CLASSES.BASE} ${sizeClass} ${variantClass} ${validationClass} ${disabledClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateTextareaClass,\n };\n} ","import React from 'react';\nimport { TextareaProps } from '../../lib/types/components';\nimport { useTextarea } from '../../lib/composables/useTextarea';\n\n/**\n * Textarea - A component for multiline text input\n */\nconst Textarea: React.FC<TextareaProps> = ({\n value,\n onChange,\n onBlur,\n onFocus,\n placeholder,\n className = '',\n disabled = false,\n required = false,\n readOnly = false,\n id,\n name,\n rows = 4,\n cols,\n maxLength,\n minLength,\n size = 'md',\n variant,\n invalid = false,\n valid = false,\n autoFocus = false,\n ariaLabel,\n ariaDescribedBy,\n}) => {\n const { generateTextareaClass } = useTextarea({ \n size, variant, disabled, invalid, valid\n });\n \n const textareaClass = generateTextareaClass({ \n className, size, variant, disabled, invalid, valid\n });\n \n return (\n <textarea\n className={textareaClass}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n onFocus={onFocus}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n readOnly={readOnly}\n id={id}\n name={name}\n rows={rows}\n cols={cols}\n maxLength={maxLength}\n minLength={minLength}\n autoFocus={autoFocus}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n aria-invalid={invalid}\n />\n );\n};\n\nexport type { TextareaProps };\n\n// Set display name for debugging\nTextarea.displayName = 'Textarea';\n\n// Default export (primary)\nexport default Textarea;\n\n// Named export for compatibility\nexport { Textarea };","import { useEffect, useRef } from 'react';\nimport { HeroProps, HeroAlignment } from '../types/components';\nimport { HERO } from '../constants/components';\n\n/**\n * Hero hook result interface\n */\ninterface UseHeroResult {\n /**\n * Generate hero class names based on props\n */\n generateHeroClassNames: (baseClassName?: string) => string;\n \n /**\n * Generate image column class based on size\n */\n generateImageColClass: (size?: number) => string;\n \n /**\n * Generate content column class based on size\n */\n generateContentColClass: (size?: number) => string;\n \n /**\n * Determine if the hero has a background image\n */\n hasBackgroundImage: boolean;\n \n /**\n * Determine if the hero has a foreground image\n */\n hasForegroundImage: boolean;\n \n /**\n * Determine if content should be displayed in a grid\n */\n useGridLayout: boolean;\n \n /**\n * Reference to the hero element\n */\n heroRef: React.RefObject<HTMLDivElement>;\n \n /**\n * Reference to the video element\n */\n videoRef: React.RefObject<HTMLVideoElement>;\n \n /**\n * Apply parallax effect\n */\n applyParallaxEffect: (element: HTMLElement, intensity: number) => void;\n \n /**\n * Remove parallax effect\n */\n removeParallaxEffect: (element: HTMLElement) => void;\n}\n\n/**\n * Hook for Hero component functionality\n * @param initialProps - Initial hero props\n * @returns Hero methods\n */\nexport function useHero(initialProps?: Partial<HeroProps>): UseHeroResult {\n const heroRef = useRef<HTMLDivElement>(null);\n const videoRef = useRef<HTMLVideoElement>(null);\n const parallaxHandlerRef = useRef<((event: Event) => void) | null>(null);\n \n const defaultProps: Partial<HeroProps> = {\n alignment: 'left',\n imageColSize: 7,\n contentColSize: 5,\n imageAlt: 'Hero image',\n showOverlay: true,\n fullViewportHeight: false,\n contentWidth: undefined,\n parallax: false,\n parallaxIntensity: 0.5,\n ...initialProps\n };\n\n /**\n * Check if the hero has a background image\n */\n const hasBackgroundImage = !!defaultProps.backgroundImageSrc;\n \n /**\n * Check if the hero has a foreground image\n */\n const hasForegroundImage = !!defaultProps.imageSrc;\n \n /**\n * Check if content should be displayed in a grid\n */\n const useGridLayout = hasForegroundImage && defaultProps.alignment !== 'center';\n \n /**\n * Apply parallax effect to hero background\n */\n const applyParallaxEffect = (element: HTMLElement, intensity: number = 0.5): void => {\n if (!element) return;\n \n // Ensure intensity is between 0 and 1\n const safeIntensity = Math.max(0, Math.min(1, intensity));\n \n // Add parallax class\n element.classList.add('c-hero--parallax');\n \n // Handle scroll event\n const handleScroll = (): void => {\n const scrollPosition = window.pageYOffset;\n const offset = scrollPosition * safeIntensity;\n \n // Apply transform to background\n const bgElement = element.querySelector(HERO.SELECTORS.BG);\n if (bgElement) {\n (bgElement as HTMLElement).style.transform = `translateY(${offset}px)`;\n }\n };\n \n // Store the handler for cleanup\n parallaxHandlerRef.current = handleScroll;\n \n // Add event listener\n window.addEventListener('scroll', handleScroll);\n \n // Initial call\n handleScroll();\n };\n \n /**\n * Remove parallax effect from hero\n */\n const removeParallaxEffect = (element: HTMLElement): void => {\n if (!element) return;\n \n // Remove class\n element.classList.remove('c-hero--parallax');\n \n // Remove transform\n const bgElement = element.querySelector(HERO.SELECTORS.BG);\n if (bgElement) {\n (bgElement as HTMLElement).style.transform = '';\n }\n \n // Remove event listener\n if (parallaxHandlerRef.current) {\n window.removeEventListener('scroll', parallaxHandlerRef.current);\n parallaxHandlerRef.current = null;\n }\n };\n \n // Apply parallax effect if enabled\n useEffect(() => {\n const heroElement = heroRef.current;\n \n if (heroElement && defaultProps.parallax && hasBackgroundImage) {\n applyParallaxEffect(heroElement, defaultProps.parallaxIntensity);\n }\n \n return () => {\n if (heroElement && parallaxHandlerRef.current) {\n removeParallaxEffect(heroElement);\n }\n };\n }, [defaultProps.parallax, defaultProps.parallaxIntensity, hasBackgroundImage]);\n\n /**\n * Generate hero class names based on props\n * @param baseClassName - Additional class names\n * @returns Combined class names string\n */\n const generateHeroClassNames = (baseClassName: string = ''): string => {\n const classes = [\n HERO.SELECTORS.HERO.replace('.', '')\n ];\n\n // Add alignment class\n if (defaultProps.alignment === 'center') {\n classes.push(HERO.CLASSES.CENTER);\n } else if (defaultProps.alignment === 'right') {\n classes.push(HERO.CLASSES.RIGHT);\n } else if (defaultProps.alignment === 'left') {\n classes.push(HERO.CLASSES.LEFT);\n }\n \n // Add full viewport height class if needed\n if (defaultProps.fullViewportHeight) {\n classes.push(HERO.CLASSES.FULL_VH);\n }\n \n // Add parallax class if enabled\n if (defaultProps.parallax) {\n classes.push('c-hero--parallax');\n }\n \n // Add video background class if provided\n if (defaultProps.videoBackground) {\n classes.push('c-hero--video');\n }\n\n if (baseClassName) {\n classes.push(baseClassName);\n }\n\n return classes.join(' ');\n };\n\n /**\n * Determine content column order based on alignment\n */\n const contentFirst = defaultProps.alignment === 'left';\n\n /**\n * Generate image column class based on size\n * @param size - Column size (1-12)\n * @returns Column class\n */\n const generateImageColClass = (size: number = defaultProps.imageColSize || 7): string => {\n const classes = [`o-grid__col o-grid__col--md-${size}`];\n \n // Add responsive margin if needed for mobile view\n if (defaultProps.alignment === 'left') {\n classes.push('u-mt-5 u-mt-md-0');\n }\n \n return classes.join(' ');\n };\n\n /**\n * Generate content column class based on size\n * @param size - Column size (1-12)\n * @returns Column class\n */\n const generateContentColClass = (size: number = defaultProps.contentColSize || 5): string => {\n return `o-grid__col o-grid__col--md-${size}`;\n };\n\n return {\n generateHeroClassNames,\n generateImageColClass,\n generateContentColClass,\n hasBackgroundImage,\n hasForegroundImage,\n useGridLayout,\n heroRef,\n videoRef,\n applyParallaxEffect,\n removeParallaxEffect\n };\n} ","import { ReactNode } from 'react';\nimport { RIVER } from '../constants/components';\n\n/**\n * River content column interface\n */\nexport interface RiverContentColumn {\n /**\n * Column type (title or text)\n */\n type: 'title' | 'text';\n \n /**\n * Content for the column\n */\n content: ReactNode;\n}\n\n/**\n * River properties interface\n */\nexport interface RiverProps {\n /**\n * Title of the river section\n */\n title?: ReactNode;\n \n /**\n * Text content (can be a string or array of paragraphs)\n */\n text?: string | string[];\n \n /**\n * Action buttons/links\n */\n actions?: ReactNode;\n \n /**\n * Image source URL\n */\n imageSrc?: string;\n \n /**\n * Image alt text\n */\n imageAlt?: string;\n \n /**\n * Whether to use the center layout\n */\n center?: boolean;\n \n /**\n * Whether to use the breakout layout\n */\n breakout?: boolean;\n \n /**\n * Whether to use the reverse layout (image on right)\n */\n reverse?: boolean;\n \n /**\n * Use content columns instead of simple title/text structure\n */\n contentColumns?: RiverContentColumn[];\n \n /**\n * Additional CSS class\n */\n className?: string;\n \n /**\n * Background image source\n */\n backgroundImageSrc?: string;\n \n /**\n * Whether to show the background overlay\n */\n showOverlay?: boolean;\n \n /**\n * Custom width for the river content\n */\n contentWidth?: string;\n}\n\n/**\n * River hook result interface\n */\ninterface UseRiverResult {\n /**\n * Generate river class names based on props\n */\n generateRiverClassNames: (baseClassName?: string) => string;\n \n /**\n * Generate content class names\n */\n generateContentClass: () => string;\n \n /**\n * Generate visual/image class names\n */\n generateVisualClass: () => string;\n \n /**\n * Determine if the river has a background image\n */\n hasBackgroundImage: boolean;\n \n /**\n * Determine if the river has a foreground image\n */\n hasForegroundImage: boolean;\n \n /**\n * Convert text to array if it's a string\n */\n textContent: string[];\n}\n\n/**\n * Hook for River component functionality\n * @param initialProps - Initial river props\n * @returns River methods and state\n */\nexport function useRiver(initialProps?: Partial<RiverProps>): UseRiverResult {\n const defaultProps: Partial<RiverProps> = {\n center: false,\n breakout: false,\n reverse: false,\n imageAlt: 'Image',\n showOverlay: true,\n ...initialProps\n };\n\n /**\n * Check if the river has a background image\n */\n const hasBackgroundImage = !!defaultProps.backgroundImageSrc;\n \n /**\n * Check if the river has a foreground image\n */\n const hasForegroundImage = !!defaultProps.imageSrc;\n \n /**\n * Convert text to array if it's a string\n */\n const textContent = typeof defaultProps.text === 'string' \n ? [defaultProps.text] \n : defaultProps.text || [];\n\n /**\n * Generate river class names based on props\n * @param baseClassName - Additional class names\n * @returns Combined class names string\n */\n const generateRiverClassNames = (baseClassName: string = ''): string => {\n const classes = [\n RIVER.SELECTORS.RIVER.replace('.', '')\n ];\n\n // Add layout classes\n if (defaultProps.center) {\n classes.push(RIVER.CLASSES.CENTER);\n }\n \n if (defaultProps.breakout) {\n classes.push(RIVER.CLASSES.BREAKOUT);\n }\n \n if (defaultProps.reverse) {\n classes.push(RIVER.CLASSES.REVERSE);\n }\n\n if (baseClassName) {\n classes.push(baseClassName);\n }\n\n return classes.join(' ');\n };\n\n /**\n * Generate content class names\n */\n const generateContentClass = (): string => {\n return RIVER.SELECTORS.CONTENT.replace('.', '');\n };\n\n /**\n * Generate visual/image class names\n */\n const generateVisualClass = (): string => {\n return RIVER.SELECTORS.VISUAL.replace('.', '');\n };\n\n return {\n generateRiverClassNames,\n generateContentClass,\n generateVisualClass,\n hasBackgroundImage,\n hasForegroundImage,\n textContent\n };\n} ","import { useState } from 'react';\nimport { NavbarProps, NavProps, NavItemProps, NavDropdownProps } from '../types/components';\nimport { NAVBAR, NAV } from '../constants/components';\nimport React from 'react';\nimport { Icon } from '../../components/Icon';\n\n/**\n * Navbar state and functionality\n * @param initialProps - Initial navbar properties\n * @returns Navbar state and methods\n */\nexport function useNavbar(initialProps?: Partial<NavbarProps>) {\n // Default navbar properties\n const defaultProps: Partial<NavbarProps> = {\n position: 'static',\n collapsible: true,\n ...initialProps\n };\n\n // Local expanded state for when not controlled externally\n const [isExpanded, setIsExpanded] = useState(false);\n\n /**\n * Generate navbar class based on properties\n * @param props - Navbar properties\n * @returns Class string\n */\n const generateNavbarClass = (props: Partial<NavbarProps>): string => {\n const {\n position = defaultProps.position,\n variant,\n collapsible = defaultProps.collapsible,\n className = '',\n } = props;\n\n const positionClass = position !== 'static' ? `c-navbar--${position}` : '';\n const variantClass = variant ? `c-navbar--${variant}` : '';\n const collapsibleClass = collapsible ? 'c-navbar--collapsible' : '';\n \n return `c-navbar ${positionClass} ${variantClass} ${collapsibleClass} ${className}`.trim();\n };\n\n /**\n * Generate container style\n * @param width - Container width\n * @returns Style object\n */\n const generateContainerStyle = (width?: string) => {\n return width ? { maxWidth: width } : {};\n };\n\n /**\n * Generate collapse class based on expanded state\n * @param expanded - Whether the collapse is expanded\n * @returns Class string\n */\n const generateCollapseClass = (expanded: boolean): string => {\n return `c-navbar__collapse ${expanded ? 'is-expanded' : ''}`.trim();\n };\n\n /**\n * Toggle expanded state\n */\n const toggleExpanded = () => {\n const newState = !isExpanded;\n setIsExpanded(newState);\n \n if (defaultProps.onToggle) {\n defaultProps.onToggle(newState);\n }\n };\n\n /**\n * Get current expanded state\n * @param controlled - External expanded value if controlled\n * @returns Current expanded state\n */\n const getExpandedState = (controlled?: boolean): boolean => {\n return typeof controlled !== 'undefined' ? controlled : isExpanded;\n };\n\n return {\n defaultProps,\n isExpanded,\n setIsExpanded,\n generateNavbarClass,\n generateContainerStyle,\n generateCollapseClass,\n toggleExpanded,\n getExpandedState\n };\n}\n\n/**\n * Nav state and functionality\n * @param initialProps - Initial nav properties\n * @returns Nav state and methods\n */\nexport function useNav(initialProps?: Partial<NavProps>) {\n // Default nav properties\n const defaultProps: Partial<NavProps> = {\n alignment: 'start',\n ...initialProps\n };\n\n /**\n * Generate nav class based on properties\n * @param props - Nav properties\n * @returns Class string\n */\n const generateNavClass = (props: Partial<NavProps>): string => {\n const {\n alignment = defaultProps.alignment,\n className = '',\n } = props;\n\n const alignmentClass = alignment !== 'start' ? `c-nav--${alignment}` : '';\n \n return `c-nav ${alignmentClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateNavClass\n };\n}\n\n/**\n * Nav item state and functionality\n * @param initialProps - Initial nav item properties\n * @returns Nav item state and methods\n */\nexport function useNavItem(initialProps?: Partial<NavItemProps & { megaMenu?: boolean }>) {\n // Default nav item properties\n const defaultProps: Partial<NavItemProps & { megaMenu?: boolean }> = {\n dropdown: false,\n megaMenu: false,\n active: false,\n ...initialProps\n };\n\n /**\n * Generate nav item class based on properties\n * @param props - Nav item properties\n * @returns Class string\n */\n const generateNavItemClass = (props: Partial<NavItemProps & { megaMenu?: boolean }>): string => {\n const {\n dropdown = defaultProps.dropdown,\n megaMenu = defaultProps.megaMenu,\n active = defaultProps.active,\n disabled = defaultProps.disabled,\n className = '',\n } = props;\n\n // Apply dropdown class only for regular dropdowns, not mega menus\n const dropdownClass = dropdown && !megaMenu ? NAV.SELECTORS.DROPDOWN.replace('.', '') : '';\n // Add a custom class for mega menu items if needed\n const megaMenuClass = megaMenu ? 'c-nav__item--mega-menu' : '';\n const activeClass = active ? NAV.CLASSES.ACTIVE : '';\n const disabledClass = disabled ? NAV.CLASSES.DISABLED : '';\n \n return `c-nav__item ${dropdownClass} ${megaMenuClass} ${activeClass} ${disabledClass} ${className}`.trim();\n };\n\n /**\n * Generate nav link class based on properties\n * @param active - Whether link is active\n * @param disabled - Whether link is disabled\n * @param className - Additional class names\n * @returns Class string\n */\n const generateNavLinkClass = (active = false, disabled = false, className = ''): string => {\n const activeClass = active ? NAV.CLASSES.ACTIVE : '';\n const disabledClass = disabled ? 'c-nav__link--disabled' : '';\n \n return `c-nav__link ${activeClass} ${disabledClass} ${className}`.trim();\n };\n\n /**\n * Handle nav item click with disabled check\n * @param handler - Click handler function\n * @returns Function that respects disabled state\n */\n const handleClick = (handler?: () => void) => {\n return (e: React.MouseEvent) => {\n if (defaultProps.disabled || !handler) {\n e.preventDefault();\n return;\n }\n \n handler();\n };\n };\n\n return {\n defaultProps,\n generateNavItemClass,\n generateNavLinkClass,\n handleClick\n };\n}\n\n/**\n * Nav dropdown state and functionality\n * @param initialProps - Initial dropdown properties\n * @returns Dropdown state and methods\n */\nexport function useNavDropdown(initialProps?: Partial<NavDropdownProps>) {\n // Default dropdown properties\n const defaultProps: Partial<NavDropdownProps> = {\n alignment: 'start',\n megaMenu: false,\n ...initialProps\n };\n\n /**\n * Generate dropdown menu class based on properties\n * @param props - Dropdown properties\n * @returns Class string\n */\n const generateDropdownMenuClass = (props: Partial<NavDropdownProps>): string => {\n const {\n alignment = defaultProps.alignment,\n megaMenu = defaultProps.megaMenu,\n className = '',\n } = props;\n\n // Select the base class based on mega menu or regular dropdown\n const baseClass = megaMenu ? NAV.SELECTORS.MEGA_MENU.replace('.', '') : NAV.SELECTORS.DROPDOWN_MENU.replace('.', '');\n \n // Add alignment class if not default 'start'\n let alignmentClass = '';\n if (alignment === 'center') {\n alignmentClass = `${baseClass}--center`;\n } else if (alignment === 'end') {\n alignmentClass = `${baseClass}--end`;\n }\n \n return `${baseClass} ${alignmentClass} ${className}`.trim();\n };\n\n /**\n * Detect whether we're in a fixed-bottom navbar\n * @returns Boolean indicating if in fixed-bottom navbar\n */\n const isInFixedBottomNavbar = (): boolean => {\n // This would need to be called in the component itself\n // because it requires DOM access\n return document.querySelector('.c-navbar--fixed-bottom') !== null;\n };\n \n /**\n * Get the appropriate icon name based on navbar position\n * @param isMegaMenu - Whether it's a mega menu\n * @returns Icon name for the new Icon component\n */\n const getIconName = (isMegaMenu: boolean = false): string => {\n const isFixedBottom = isInFixedBottomNavbar();\n return isFixedBottom ? 'CaretUp' : 'CaretDown';\n };\n\n // Keeping this for backward compatibility\n const getIconClass = (isMegaMenu: boolean = false): string => {\n console.warn('getIconClass is deprecated. Please use the Icon component directly with the getIconName function.');\n const isFixedBottom = isInFixedBottomNavbar();\n return `c-nav__icon ${isFixedBottom ? 'icon-lux-caret-up' : 'icon-lux-caret-down'}`;\n };\n\n return {\n defaultProps,\n generateDropdownMenuClass,\n isInFixedBottomNavbar,\n getIconClass,\n getIconName\n };\n} ","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","import { unsafeStringify } from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function v35(name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n var _namespace;\n\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (let i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n const output = [];\n const length32 = input.length * 32;\n const hexTab = '0123456789abcdef';\n\n for (let i = 0; i < length32; i += 8) {\n const x = input[i >> 5] >>> i % 32 & 0xff;\n const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n let a = 1732584193;\n let b = -271733879;\n let c = -1732584194;\n let d = 271733878;\n\n for (let i = 0; i < x.length; i += 16) {\n const olda = a;\n const oldb = b;\n const oldc = c;\n const oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n const length8 = input.length * 8;\n const output = new Uint32Array(getOutputLength(length8));\n\n for (let i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n const lsw = (x & 0xffff) + (y & 0xffff);\n const msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import v35 from './v35.js';\nimport md5 from './md5.js';\nconst v3 = v35('v3', 0x30, md5);\nexport default v3;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (let i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n const l = bytes.length / 4 + 2;\n const N = Math.ceil(l / 16);\n const M = new Array(N);\n\n for (let i = 0; i < N; ++i) {\n const arr = new Uint32Array(16);\n\n for (let j = 0; j < 16; ++j) {\n arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];\n }\n\n M[i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (let i = 0; i < N; ++i) {\n const W = new Uint32Array(80);\n\n for (let t = 0; t < 16; ++t) {\n W[t] = M[i][t];\n }\n\n for (let t = 16; t < 80; ++t) {\n W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n }\n\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n let e = H[4];\n\n for (let t = 0; t < 80; ++t) {\n const s = Math.floor(t / 20);\n const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nconst v5 = v35('v5', 0x50, sha1);\nexport default v5;","import { useState } from 'react';\nimport { TodoProps, Size } from '../types/components';\nimport { TodoItem } from '../../components/Todo/scripts/types';\nimport { v4 as uuidv4 } from 'uuid';\nimport { TODO, SIZES } from '../constants/components';\n\n/**\n * Todo composable hook - manages todo items state and operations\n * @param initialProps - Initial todo properties\n * @returns Todo state and methods\n */\nexport function useTodo(initialProps?: Partial<TodoProps>) {\n // Default todo properties\n const defaultProps: Partial<TodoProps> = {\n items: [],\n title: 'Todo List',\n size: 'md',\n placeholder: 'Add a new todo',\n showCompleted: true,\n ...initialProps\n };\n\n // State\n const [items, setItems] = useState<TodoItem[]>(defaultProps.items || []);\n const [inputText, setInputText] = useState<string>('');\n\n /**\n * Generate todo classes based on properties\n * @param props - Todo properties\n * @returns Class string for the todo component\n */\n const generateTodoClasses = (props: Partial<TodoProps>): string => {\n const {\n size = defaultProps.size,\n className = '',\n disabled = false\n } = props;\n\n const sizeClass = size === 'md' ? '' : `c-todo--${size}`;\n const disabledClass = disabled ? 'c-todo--disabled' : '';\n \n return `${TODO.CLASSES.BASE} ${sizeClass} ${disabledClass} ${className}`.trim();\n };\n\n /**\n * Generate todo item classes based on completion status\n * @param item - Todo item\n * @returns Class string for the todo item\n */\n const generateItemClasses = (item: TodoItem): string => {\n const completedClass = item.completed ? TODO.CLASSES.COMPLETED : '';\n return `${TODO.CLASSES.ITEM} ${completedClass}`.trim();\n };\n\n /**\n * Add a new todo item\n * @param text - Text for the new todo\n * @returns The new todo item\n */\n const addTodo = (text: string): TodoItem | null => {\n if (!text.trim()) return null;\n \n const newItem: TodoItem = {\n id: uuidv4(),\n text: text.trim(),\n completed: false\n };\n \n setItems(prevItems => [...prevItems, newItem]);\n setInputText('');\n return newItem;\n };\n\n /**\n * Toggle the completed state of a todo item\n * @param id - ID of the todo item to toggle\n * @returns Updated todo item or null if not found\n */\n const toggleTodo = (id: string): TodoItem | null => {\n let updatedItem: TodoItem | null = null;\n \n setItems(prevItems => {\n return prevItems.map(item => {\n if (item.id === id) {\n updatedItem = { ...item, completed: !item.completed };\n return updatedItem;\n }\n return item;\n });\n });\n \n return updatedItem;\n };\n\n /**\n * Delete a todo item\n * @param id - ID of the todo item to delete\n * @returns Boolean indicating successful deletion\n */\n const deleteTodo = (id: string): boolean => {\n const initialLength = items.length;\n \n setItems(prevItems => prevItems.filter(item => item.id !== id));\n \n return items.length !== initialLength;\n };\n\n /**\n * Handle form submission for adding a new todo\n * @param event - Form submit event\n * @param onAddTodo - Optional callback when a todo is added\n */\n const handleSubmit = (event: React.FormEvent, onAddTodo?: (text: string) => void) => {\n event.preventDefault();\n if (!inputText.trim()) return;\n \n const newItem = addTodo(inputText);\n \n if (newItem && onAddTodo) {\n onAddTodo(newItem.text);\n }\n };\n\n /**\n * Get filtered items based on showCompleted prop\n * @param showCompleted - Whether to show completed items\n * @returns Filtered todo items\n */\n const getFilteredItems = (showCompleted: boolean = true): TodoItem[] => {\n if (showCompleted) return items;\n return items.filter(item => !item.completed);\n };\n\n return {\n items,\n inputText,\n setInputText,\n addTodo,\n toggleTodo,\n deleteTodo,\n handleSubmit,\n generateTodoClasses,\n generateItemClasses,\n getFilteredItems\n };\n} ","import { FormGroupProps } from '../types/components';\nimport { FORM_GROUP } from '../constants/components';\n\n/**\n * Form Group state and functionality\n * @param initialProps - Initial form group properties\n * @returns Form Group state and methods\n */\nexport function useFormGroup(initialProps?: Partial<FormGroupProps>) {\n // Default form group properties\n const defaultProps: Partial<FormGroupProps> = {\n size: 'md',\n disabled: false,\n invalid: false,\n valid: false,\n ...initialProps\n };\n\n /**\n * Generate form group class based on properties\n * @param props - Form group properties\n * @returns Class string\n */\n const generateFormGroupClass = (props: Partial<FormGroupProps>): string => {\n const {\n size = defaultProps.size,\n disabled = defaultProps.disabled,\n invalid = defaultProps.invalid,\n valid = defaultProps.valid,\n className = '',\n } = props;\n\n const sizeClass = size === 'md' ? '' : (\n size === 'sm' ? FORM_GROUP.CLASSES.SMALL : FORM_GROUP.CLASSES.LARGE\n );\n \n const validationClass = invalid \n ? FORM_GROUP.CLASSES.INVALID \n : valid \n ? FORM_GROUP.CLASSES.VALID \n : '';\n \n const disabledClass = disabled ? FORM_GROUP.CLASSES.DISABLED : '';\n \n return `${FORM_GROUP.CLASSES.BASE} ${sizeClass} ${validationClass} ${disabledClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateFormGroupClass,\n };\n} ","import { SelectProps } from '../types/components';\nimport { SELECT } from '../constants/components';\n\n/**\n * Select state and functionality\n * @param initialProps - Initial select properties\n * @returns Select state and methods\n */\nexport function useSelect(initialProps?: Partial<SelectProps>) {\n // Default select properties\n const defaultProps: Partial<SelectProps> = {\n size: 'md',\n disabled: false,\n invalid: false,\n valid: false,\n ...initialProps\n };\n\n /**\n * Generate select class based on properties\n * @param props - Select properties\n * @returns Class string\n */\n const generateSelectClass = (props: Partial<SelectProps>): string => {\n const {\n size = defaultProps.size,\n disabled = defaultProps.disabled,\n invalid = defaultProps.invalid,\n valid = defaultProps.valid,\n className = '',\n } = props;\n\n const sizeClass = size === 'md' ? '' : (\n size === 'sm' ? SELECT.CLASSES.SMALL : SELECT.CLASSES.LARGE\n );\n \n let validationClass = '';\n if (invalid) {\n validationClass = SELECT.CLASSES.INVALID;\n } else if (valid) {\n validationClass = SELECT.CLASSES.VALID;\n }\n \n const disabledClass = disabled ? SELECT.CLASSES.DISABLED : '';\n \n return `${SELECT.CLASSES.BASE} ${sizeClass} ${validationClass} ${disabledClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateSelectClass,\n };\n} ","import { useRef, useEffect } from 'react';\nimport { CheckboxProps } from '../types/components';\n\n// Define checkbox class constants\nconst CHECKBOX_CLASSES = {\n BASE: 'c-checkbox',\n INVALID: 'is-error',\n VALID: 'is-valid',\n DISABLED: 'is-disabled',\n MIXED: 'c-checkbox--mixed'\n};\n\n/**\n * Checkbox state and functionality\n * @param initialProps - Initial checkbox properties\n * @returns Checkbox state and methods\n */\nexport function useCheckbox(initialProps?: Partial<CheckboxProps>) {\n // Default checkbox properties\n const defaultProps: Partial<CheckboxProps> = {\n disabled: false,\n invalid: false,\n valid: false,\n indeterminate: false,\n ...initialProps\n };\n \n // Ref for the checkbox input element\n const checkboxRef = useRef<HTMLInputElement>(null);\n \n // Handle indeterminate state\n useEffect(() => {\n if (checkboxRef.current) {\n checkboxRef.current.indeterminate = Boolean(defaultProps.indeterminate);\n }\n }, [defaultProps.indeterminate]);\n\n /**\n * Generate checkbox class based on properties\n * @param props - Checkbox properties\n * @returns Class string\n */\n const generateCheckboxClass = (props: Partial<CheckboxProps>): string => {\n const {\n disabled = defaultProps.disabled,\n invalid = defaultProps.invalid,\n valid = defaultProps.valid,\n indeterminate = defaultProps.indeterminate,\n className = '',\n } = props;\n\n let validationClass = '';\n if (invalid) {\n validationClass = CHECKBOX_CLASSES.INVALID;\n } else if (valid) {\n validationClass = CHECKBOX_CLASSES.VALID;\n }\n \n const disabledClass = disabled ? CHECKBOX_CLASSES.DISABLED : '';\n const indeterminateClass = indeterminate ? CHECKBOX_CLASSES.MIXED : '';\n \n return `${CHECKBOX_CLASSES.BASE} ${validationClass} ${disabledClass} ${indeterminateClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateCheckboxClass,\n checkboxRef,\n };\n} ","import { RadioProps } from '../types/components';\nimport { RADIO } from '../constants/components';\n\n/**\n * Radio state and functionality\n * @param initialProps - Initial radio properties\n * @returns Radio state and methods\n */\nexport function useRadio(initialProps?: Partial<RadioProps>) {\n // Default radio properties\n const defaultProps: Partial<RadioProps> = {\n disabled: false,\n invalid: false,\n valid: false,\n ...initialProps\n };\n\n /**\n * Generate radio class based on properties\n * @param props - Radio properties\n * @returns Class string\n */\n const generateRadioClass = (props: Partial<RadioProps>): string => {\n const {\n disabled = defaultProps.disabled,\n invalid = defaultProps.invalid,\n valid = defaultProps.valid,\n className = '',\n } = props;\n\n let validationClass = '';\n if (invalid) {\n validationClass = RADIO.CLASSES.INVALID;\n } else if (valid) {\n validationClass = RADIO.CLASSES.VALID;\n }\n \n const disabledClass = disabled ? RADIO.CLASSES.DISABLED : '';\n \n return `${RADIO.CLASSES.BASE} ${validationClass} ${disabledClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateRadioClass,\n };\n} ","import { useState, useCallback, useEffect } from 'react';\n\nexport interface UseModalProps {\n /**\n * Whether the modal is open\n */\n isOpen?: boolean;\n \n /**\n * Callback when modal state changes\n */\n onOpenChange?: (isOpen: boolean) => void;\n \n /**\n * Callback when modal opens\n */\n onOpen?: () => void;\n \n /**\n * Callback when modal closes\n */\n onClose?: () => void;\n}\n\nexport interface UseModalReturn {\n /**\n * Current open state\n */\n isOpen: boolean;\n \n /**\n * Function to open the modal\n */\n open: () => void;\n \n /**\n * Function to close the modal\n */\n close: () => void;\n \n /**\n * Function to toggle the modal\n */\n toggle: () => void;\n}\n\n/**\n * Hook for managing modal state\n */\nexport function useModal({\n isOpen: isOpenProp,\n onOpenChange,\n onOpen,\n onClose\n}: UseModalProps = {}): UseModalReturn {\n // For uncontrolled usage\n const [isOpenState, setIsOpenState] = useState(false);\n \n // Determine if we're in controlled or uncontrolled mode\n const isControlled = isOpenProp !== undefined;\n const isOpen = isControlled ? !!isOpenProp : isOpenState;\n \n // Update internal state when prop changes (for controlled mode)\n useEffect(() => {\n if (isControlled) {\n setIsOpenState(!!isOpenProp);\n }\n }, [isOpenProp, isControlled]);\n \n const updateOpen = useCallback((nextIsOpen: boolean) => {\n // For uncontrolled mode, update internal state\n if (!isControlled) {\n setIsOpenState(nextIsOpen);\n }\n \n // Call the change handler in either mode\n if (onOpenChange) {\n onOpenChange(nextIsOpen);\n }\n \n // Call the specific handler\n if (nextIsOpen && onOpen) {\n onOpen();\n } else if (!nextIsOpen && onClose) {\n onClose();\n }\n }, [isControlled, onOpenChange, onOpen, onClose]);\n \n const open = useCallback(() => {\n updateOpen(true);\n }, [updateOpen]);\n \n const close = useCallback(() => {\n updateOpen(false);\n }, [updateOpen]);\n \n const toggle = useCallback(() => {\n updateOpen(!isOpen);\n }, [isOpen, updateOpen]);\n \n return {\n isOpen,\n open,\n close,\n toggle\n };\n} ","import { BreadcrumbItem, BreadcrumbOptions } from '../../components/Breadcrumb/scripts/types';\nimport { BREADCRUMB } from '../constants/components';\n\n/**\n * Breadcrumb state and functionality\n * @param initialOptions - Initial breadcrumb options\n * @returns Breadcrumb state and methods\n */\nexport function useBreadcrumb(initialOptions?: Partial<BreadcrumbOptions>) {\n // Default breadcrumb options\n const defaultOptions: BreadcrumbOptions = {\n items: [],\n divider: BREADCRUMB.DEFAULTS.DIVIDER,\n className: '',\n ariaLabel: 'Breadcrumb',\n ...initialOptions\n };\n\n /**\n * Generate breadcrumb class based on options\n * @param options - Breadcrumb options\n * @returns Class string\n */\n const generateBreadcrumbClass = (options: Partial<BreadcrumbOptions>): string => {\n const { className = '' } = options;\n \n return [BREADCRUMB.CLASSES.BASE, className]\n .filter(Boolean)\n .join(' ')\n .trim();\n };\n\n /**\n * Generate breadcrumb item class\n * @param item - Breadcrumb item\n * @param isLast - Whether this is the last item\n * @returns Class string\n */\n const generateItemClass = (item: BreadcrumbItem, isLast: boolean): string => {\n return [\n BREADCRUMB.CLASSES.ITEM,\n (item.active || isLast) ? BREADCRUMB.CLASSES.ACTIVE : ''\n ]\n .filter(Boolean)\n .join(' ')\n .trim();\n };\n\n /**\n * Check if an item should be rendered as a link\n * @param item - Breadcrumb item\n * @param isLast - Whether this is the last item\n * @returns Whether item should be a link\n */\n const isItemLink = (item: BreadcrumbItem, isLast: boolean): boolean => {\n return Boolean(item.href && !item.active && !isLast);\n };\n\n /**\n * Parse items from a JSON string\n * @param jsonString - JSON string of items\n * @returns Array of breadcrumb items\n */\n const parseItemsFromJson = (jsonString: string): BreadcrumbItem[] => {\n try {\n return JSON.parse(jsonString) as BreadcrumbItem[];\n } catch (error) {\n console.error('Error parsing breadcrumb items:', error);\n return [];\n }\n };\n\n return {\n defaultOptions,\n generateBreadcrumbClass,\n generateItemClass,\n isItemLink,\n parseItemsFromJson\n };\n} ","import { RefObject, useCallback, useEffect, useRef, useState } from 'react';\nimport { UseCardOptions, UseCardReturn } from '../types/components';\nimport { CARD } from '../constants/components';\n\n/**\n * Hook for managing Card component state and behaviors\n * \n * @param options - Configuration options for the card\n * @returns Card state and handlers\n */\nexport const useCard = (options: UseCardOptions = {}): UseCardReturn => {\n const {\n elevationEffect = false,\n elevationClass = CARD.CLASSES.ACTIVE,\n flipEffect = false,\n flipTrigger = 'click',\n focusEffect = false,\n clickable = false,\n onClick\n } = options;\n\n const cardRef = useRef<HTMLDivElement>(null);\n const frontRef = useRef<HTMLDivElement>(null);\n const backRef = useRef<HTMLDivElement>(null);\n\n const [isFlipped, setIsFlipped] = useState(false);\n const [isElevated, setIsElevated] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n\n // Handle click events\n const handleClick = useCallback((event: React.MouseEvent) => {\n if (flipEffect && flipTrigger === 'click') {\n setIsFlipped(prev => !prev);\n }\n\n if (onClick) {\n onClick(event);\n }\n }, [flipEffect, flipTrigger, onClick]);\n\n // Handle keyboard events for accessibility\n const handleKeyDown = useCallback((event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n \n if (flipEffect && flipTrigger === 'click') {\n setIsFlipped(prev => !prev);\n }\n\n if (onClick) {\n onClick(event as unknown as React.MouseEvent);\n }\n }\n }, [flipEffect, flipTrigger, onClick]);\n\n // Handle mouse enter events\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n \n if (elevationEffect) {\n setIsElevated(true);\n }\n\n if (flipEffect && flipTrigger === 'hover') {\n setIsFlipped(true);\n }\n }, [elevationEffect, flipEffect, flipTrigger]);\n\n // Handle mouse leave events\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n \n if (elevationEffect) {\n setIsElevated(false);\n }\n\n if (flipEffect && flipTrigger === 'hover') {\n setIsFlipped(false);\n }\n }, [elevationEffect, flipEffect, flipTrigger]);\n\n // Handle focus events\n const handleFocus = useCallback(() => {\n setIsFocused(true);\n }, []);\n\n // Handle blur events\n const handleBlur = useCallback(() => {\n setIsFocused(false);\n }, []);\n\n // Get all card props combined\n const getCardProps = useCallback(() => {\n const className = [\n CARD.CLASSES.BASE,\n isElevated ? elevationClass : '',\n isFlipped ? CARD.CLASSES.FLIPPED : '',\n isFocused && focusEffect ? CARD.CLASSES.FOCUSED : '',\n clickable ? CARD.CLASSES.CLICKABLE : ''\n ].filter(Boolean).join(' ');\n\n return {\n className,\n ref: cardRef,\n tabxwIndex: clickable || flipEffect ? 0 : -1,\n role: clickable ? 'button' : undefined,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onFocus: handleFocus,\n onBlur: handleBlur,\n onClick: handleClick,\n onKeyDown: handleKeyDown\n };\n }, [isElevated, isFlipped, isFocused, elevationClass, focusEffect, clickable, handleMouseEnter, handleMouseLeave, handleFocus, handleBlur, handleClick, handleKeyDown, flipEffect]);\n\n return {\n cardRef,\n frontRef,\n backRef,\n isFlipped,\n isElevated,\n isFocused,\n isHovered,\n handleClick,\n handleKeyDown,\n handleMouseEnter,\n handleMouseLeave,\n handleFocus,\n handleBlur,\n getCardProps\n };\n};","import React, { useRef, useEffect, useState } from 'react';\nimport { SelectProps } from '../../lib/types/components';\nimport { useSelect } from '../../lib/composables';\nimport { SELECT } from '../../lib/constants/components';\n\n/**\n * Select - A component for dropdown selection\n */\nconst Select: React.FC<SelectProps> = ({\n options = [],\n value,\n onChange,\n onBlur,\n onFocus,\n placeholder = 'Select an option',\n className = '',\n disabled = false,\n required = false,\n id,\n name,\n size = 'md',\n invalid = false,\n valid = false,\n multiple = false,\n ariaLabel,\n ariaDescribedBy,\n}) => {\n const { generateSelectClass } = useSelect({ \n size, disabled, invalid, valid\n });\n \n const selectClass = generateSelectClass({ \n className, size, disabled, invalid, valid\n });\n\n const [isOpen, setIsOpen] = useState(false);\n const [selectedLabel, setSelectedLabel] = useState(placeholder);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const bodyRef = useRef<HTMLDivElement>(null);\n const nativeSelectRef = useRef<HTMLSelectElement>(null);\n\n // Update selected label when value changes\n useEffect(() => {\n if (value) {\n const selectedOption = options.find(opt => opt.value === value);\n if (selectedOption) {\n setSelectedLabel(selectedOption.label);\n }\n } else {\n setSelectedLabel(placeholder);\n }\n }, [value, options, placeholder]);\n\n // Handle click outside to close dropdown\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n if (bodyRef.current) {\n bodyRef.current.style.height = '0px';\n }\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, []);\n\n // Toggle dropdown\n const handleToggle = () => {\n if (!disabled) {\n if (!isOpen && bodyRef.current && panelRef.current) {\n bodyRef.current.style.height = `${panelRef.current.clientHeight}px`;\n } else if (bodyRef.current) {\n bodyRef.current.style.height = '0px';\n }\n setIsOpen(!isOpen);\n }\n };\n\n // Handle item selection\n const handleItemClick = (option: { value: string, label: string }) => {\n setSelectedLabel(option.label);\n setIsOpen(false);\n if (bodyRef.current) {\n bodyRef.current.style.height = '0px';\n }\n \n if (nativeSelectRef.current) {\n nativeSelectRef.current.value = option.value;\n }\n \n if (onChange) {\n // Create a synthetic event\n const event = {\n target: {\n name,\n value: option.value\n }\n } as React.ChangeEvent<HTMLSelectElement>;\n onChange(event);\n }\n };\n\n return (\n <div \n className={`${selectClass} ${isOpen ? SELECT.CLASSES.IS_OPEN : ''}`} \n ref={dropdownRef}\n aria-expanded={isOpen}\n >\n {/* Native select for accessibility and form submission */}\n <select\n ref={nativeSelectRef}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n onFocus={onFocus}\n disabled={disabled}\n required={required}\n id={id}\n name={name}\n multiple={multiple}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n aria-invalid={invalid}\n style={{ display: 'none' }}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((option) => (\n <option \n key={option.value} \n value={option.value} \n disabled={option.disabled}\n >\n {option.label}\n </option>\n ))}\n </select>\n \n {/* Custom Select UI */}\n <div \n className={SELECT.CLASSES.SELECTED}\n onClick={handleToggle}\n aria-disabled={disabled}\n >\n {selectedLabel}\n </div>\n \n <i className={`${SELECT.CLASSES.ICON_CARET} ${SELECT.CLASSES.TOGGLE_ICON}`} />\n \n <div className={SELECT.CLASSES.SELECT_BODY} ref={bodyRef} style={{ height: 0 }}>\n <div className={SELECT.CLASSES.SELECT_PANEL} ref={panelRef}>\n <ul className={SELECT.CLASSES.SELECT_ITEMS}>\n {options.map((option, index) => (\n <li \n key={option.value}\n className={SELECT.CLASSES.SELECT_ITEM}\n data-value={option.value}\n onClick={() => !option.disabled && handleItemClick(option)}\n >\n <label htmlFor={`SelectItem${index}`} className=\"c-checkbox\">\n <input \n type=\"checkbox\" \n id={`SelectItem${index}`} \n className=\"c-checkbox__input c-select__item-input\" \n checked={value === option.value}\n readOnly\n disabled={option.disabled}\n />\n <div className=\"c-select__item-label\">{option.label}</div>\n </label>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </div>\n );\n};\n\nexport type { SelectProps };\n\n// Set display name for debugging\nSelect.displayName = 'Select';\n\n// Default export (primary)\nexport default Select;\n\n// Named export for compatibility\nexport { Select };","import React from 'react';\nimport { CheckboxProps } from '../../lib/types/components';\nimport { useCheckbox } from '../../lib/composables/useCheckbox';\n\n/**\n * Checkbox - A component for checkbox inputs\n */\n const Checkbox: React.FC<CheckboxProps> = ({\n label,\n checked = false,\n onChange,\n className = '',\n disabled = false,\n required = false,\n id,\n name,\n value,\n invalid = false,\n valid = false,\n indeterminate = false,\n ariaLabel,\n ariaDescribedBy,\n}) => {\n const { generateCheckboxClass, checkboxRef } = useCheckbox({\n indeterminate, disabled, invalid, valid\n });\n \n const checkboxClass = generateCheckboxClass({\n className, disabled, invalid, valid, indeterminate\n });\n \n return (\n <div className={checkboxClass}>\n <input\n ref={checkboxRef}\n type=\"checkbox\"\n className=\"c-checkbox__input\"\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n required={required}\n id={id}\n name={name}\n value={value}\n aria-label={!label ? ariaLabel : undefined}\n aria-describedby={ariaDescribedBy}\n aria-invalid={invalid}\n />\n {label && (\n <label className=\"c-checkbox__label\" htmlFor={id}>\n {label}\n </label>\n )}\n </div>\n );\n};\n\n\nexport type { CheckboxProps };\n\n// Set display name for debugging\nCheckbox.displayName = 'Checkbox';\n\n// Default export (primary)\nexport default Checkbox;\n\n// Named export for compatibility\nexport { Checkbox };","import React from 'react';\nimport { RadioProps } from '../../lib/types/components';\nimport { useRadio } from '../../lib/composables/useRadio';\n\n/**\n * Radio - A component for radio button inputs\n */\nconst Radio: React.FC<RadioProps> = ({\n label,\n checked = false,\n onChange,\n className = '',\n disabled = false,\n required = false,\n id,\n name,\n value,\n invalid = false,\n valid = false,\n ariaLabel,\n ariaDescribedBy,\n}) => {\n const { generateRadioClass } = useRadio({\n disabled, invalid, valid\n });\n \n const radioClass = generateRadioClass({\n className, disabled, invalid, valid\n });\n \n return (\n <div className={radioClass}>\n <input\n type=\"radio\"\n className=\"c-radio__input\"\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n required={required}\n id={id}\n name={name}\n value={value}\n aria-label={!label ? ariaLabel : undefined}\n aria-describedby={ariaDescribedBy}\n aria-invalid={invalid}\n />\n {label && (\n <label className=\"c-radio__label\" htmlFor={id}>\n {label}\n </label>\n )}\n </div>\n );\n};\n\nexport type { RadioProps };\n\n// Set display name for debugging\nRadio.displayName = 'Radio';\n\n// Default export (primary)\nexport default Radio;\n\n// Named export for compatibility\nexport { Radio };","import React, { CSSProperties, useEffect } from 'react';\nimport { HeroProps, HeroAlignment } from '../../lib/types/components';\nimport { useHero } from '../../lib/composables/useHero';\nimport { HERO } from '../../lib/constants/components';\n\n const Hero: React.FC<HeroProps> = ({\n title,\n subtitle,\n text,\n imageSrc,\n imageAlt = 'Hero image',\n alignment = 'left',\n backgroundImageSrc,\n showOverlay = true,\n fullViewportHeight = false,\n actions,\n imageColSize = 7,\n contentColSize = 5,\n contentWidth,\n className = '',\n parallax = false,\n parallaxIntensity = 0.5,\n videoBackground,\n videoOptions = {\n autoplay: true,\n loop: true,\n muted: true\n }\n}) => {\n const { \n generateHeroClassNames, \n generateImageColClass, \n generateContentColClass,\n hasBackgroundImage,\n hasForegroundImage,\n useGridLayout,\n heroRef,\n videoRef\n } = useHero({\n alignment,\n imageColSize,\n contentColSize,\n imageSrc,\n backgroundImageSrc,\n showOverlay,\n fullViewportHeight,\n contentWidth,\n parallax,\n parallaxIntensity,\n videoBackground\n });\n\n // Create custom style for hero element with content width if provided\n const heroStyle: React.CSSProperties | undefined = contentWidth ? {\n '--atomix-hero-content-width': contentWidth\n } as React.CSSProperties : undefined;\n\n const renderVideoBackground = () => {\n if (!videoBackground) return null;\n \n const { autoplay, loop, muted, posterUrl } = videoOptions;\n \n return (\n <video \n ref={videoRef}\n className=\"c-hero__video\"\n autoPlay={autoplay}\n loop={loop}\n muted={muted}\n playsInline\n poster={posterUrl}\n >\n <source src={videoBackground} type={`video/${videoBackground.split('.').pop() || 'mp4'}`} />\n Your browser does not support the video tag.\n </video>\n );\n };\n\n const renderBackground = () => {\n if (!hasBackgroundImage && !videoBackground) return null;\n \n return (\n <div className={HERO.SELECTORS.BG.replace('.', '')}>\n {backgroundImageSrc && (\n <img\n src={backgroundImageSrc}\n alt=\"Background\"\n className={HERO.SELECTORS.BG_IMAGE.replace('.', '')}\n />\n )}\n {renderVideoBackground()}\n {showOverlay && <div className={HERO.SELECTORS.OVERLAY.replace('.', '')}></div>}\n </div>\n );\n };\n\n const renderContent = () => (\n <div className={HERO.SELECTORS.CONTENT.replace('.', '')}>\n {subtitle && <p className={HERO.SELECTORS.SUBTITLE.replace('.', '')}>{subtitle}</p>}\n <h1 className={HERO.SELECTORS.TITLE.replace('.', '')}>{title}</h1>\n {text && <p className={HERO.SELECTORS.TEXT.replace('.', '')}>{text}</p>}\n {actions && <div className={HERO.SELECTORS.ACTIONS.replace('.', '')}>{actions}</div>}\n </div>\n );\n\n const renderForegroundImage = () => {\n if (!hasForegroundImage) return null;\n \n if (alignment === 'center') {\n return (\n <div className={HERO.SELECTORS.IMAGE_WRAPPER.replace('.', '')}>\n <img\n src={imageSrc}\n alt={imageAlt}\n className={HERO.SELECTORS.IMAGE.replace('.', '')}\n />\n </div>\n );\n }\n \n return (\n <div className={generateImageColClass()}>\n <img\n src={imageSrc}\n alt={imageAlt}\n className={HERO.SELECTORS.IMAGE.replace('.', '')}\n />\n </div>\n );\n };\n\n const renderGridContent = () => {\n // For left-aligned content, render content first then image\n if (alignment === 'left') {\n return (\n <>\n <div className={generateContentColClass()}>\n {renderContent()}\n </div>\n {renderForegroundImage()}\n </>\n );\n }\n \n // For right-aligned or default, render image first then content\n return (\n <>\n {renderForegroundImage()}\n <div className={generateContentColClass()}>\n {renderContent()}\n </div>\n </>\n );\n };\n\n return (\n <div \n ref={heroRef}\n className={generateHeroClassNames(className)} \n style={heroStyle}\n data-parallax={parallax ? 'true' : undefined}\n data-parallax-intensity={parallax ? parallaxIntensity : undefined}\n >\n {renderBackground()}\n <div className={`${HERO.SELECTORS.CONTAINER.replace('.', '')} o-container`}>\n {useGridLayout ? (\n <div className={`${HERO.SELECTORS.GRID.replace('.', '')} o-grid`}>\n {renderGridContent()}\n </div>\n ) : (\n <>\n {renderContent()}\n {renderForegroundImage()}\n </>\n )}\n </div>\n </div>\n );\n}; \n\nexport type { HeroProps };\n\n// Set display name for debugging\nHero.displayName = 'Hero';\n\n// Default export (primary)\nexport default Hero;\n\n// Named export for compatibility\nexport { Hero };","import React from 'react';\nimport { ListProps } from '../../lib/types/components';\nimport { LIST } from '../../lib/constants/components';\n\nconst List: React.FC<ListProps> = ({\n children,\n variant = 'default',\n className = '',\n ...props\n}) => {\n // Generate CSS classes\n const listClasses = [\n LIST.BASE_CLASS,\n variant !== 'default' && `c-list--${variant}`,\n className,\n ].filter(Boolean).join(' ');\n\n // Determine the HTML element based on variant\n const ListElement = ['number', 'text'].includes(variant) ? 'ol' : 'ul';\n\n return (\n <ListElement className={listClasses} {...props}>\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return <li className=\"c-list__item\">{child}</li>;\n }\n return <li className=\"c-list__item\">{child}</li>;\n })}\n </ListElement>\n );\n};\n\n\n\nexport type { ListProps };\n\n// Set display name for debugging\nList.displayName = 'List';\n\n// Default export (primary)\nexport default List;\n\n// Named export for compatibility\nexport { List };","import React, { Children, cloneElement, isValidElement } from 'react';\nimport { AvatarGroupProps, AvatarProps } from '../../lib/types/components';\nimport { AVATAR_GROUP, AVATAR } from '../../lib/constants/components';\nimport { Avatar } from './Avatar';\n\nconst AvatarGroup: React.FC<AvatarGroupProps> = ({\n children,\n max,\n stacked = false,\n className = '',\n moreText,\n}) => {\n // Generate CSS classes\n const avatarGroupClasses = [\n AVATAR_GROUP.CLASSES.BASE,\n stacked && AVATAR_GROUP.CLASSES.STACKED,\n className,\n ].filter(Boolean).join(' ');\n\n // Get valid Avatar children\n const avatarChildren = Children.toArray(children).filter(\n child => isValidElement(child) && child.type === Avatar\n );\n\n // Determine if we need to show the \"more\" indicator\n const showMoreIndicator = max !== undefined && avatarChildren.length > max;\n const visibleAvatars = showMoreIndicator \n ? avatarChildren.slice(0, max) \n : avatarChildren;\n const hiddenAvatarCount = avatarChildren.length - (max || 0);\n\n // Extract size and shape from first avatar to ensure consistent styling\n const firstAvatar = isValidElement<AvatarProps>(avatarChildren[0]) \n ? avatarChildren[0].props \n : null;\n const avatarSize = firstAvatar?.size || 'md';\n const isCircle = firstAvatar?.circle || false;\n\n // Generate more indicator classes\n const moreClasses = [\n AVATAR.CLASSES.BASE,\n AVATAR_GROUP.CLASSES.MORE,\n avatarSize !== 'md' && `c-avatar--${avatarSize}`,\n isCircle && 'c-avatar--circle',\n ].filter(Boolean).join(' ');\n\n return (\n <div className={avatarGroupClasses}>\n {visibleAvatars.map((child, index) => {\n if (isValidElement<AvatarProps>(child)) {\n // Clone the Avatar element to ensure proper styling\n return cloneElement(child, {\n key: index,\n ...child.props,\n });\n }\n return null;\n })}\n\n {showMoreIndicator && (\n <div className={moreClasses}>\n {moreText || `+${hiddenAvatarCount}`}\n </div>\n )}\n </div>\n );\n};\n\nexport type { AvatarGroupProps, AvatarProps }\n\n// Set display name for debugging\nAvatarGroup.displayName = 'Accordion';\n\n// Default export (primary)\nexport default AvatarGroup;\n\n// Named export for compatibility\nexport { AvatarGroup };","import { useState } from 'react';\nimport { MessageItem } from '../types/components';\n\ninterface UseMessagesProps {\n /**\n * Initial messages\n */\n initialMessages?: MessageItem[];\n \n /**\n * Callback when a message is sent\n */\n onSendMessage?: (text: string) => void;\n}\n\ninterface UseMessagesReturn {\n /**\n * Current input value\n */\n inputValue: string;\n \n /**\n * Set input value\n */\n setInputValue: (value: string) => void;\n \n /**\n * Handle input change\n */\n handleInputChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n \n /**\n * Handle form submission\n */\n handleSubmit: (e: React.FormEvent) => void;\n \n /**\n * Handle key down events\n */\n handleKeyDown: (e: React.KeyboardEvent) => void;\n}\n\n/**\n * Hook for managing Messages component state and behavior\n */\nexport const useMessages = ({\n onSendMessage\n}: UseMessagesProps = {}): UseMessagesReturn => {\n const [inputValue, setInputValue] = useState('');\n \n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n };\n \n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (inputValue.trim() && onSendMessage) {\n onSendMessage(inputValue.trim());\n setInputValue('');\n }\n };\n \n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSubmit(e);\n }\n };\n \n return {\n inputValue,\n setInputValue,\n handleInputChange,\n handleSubmit,\n handleKeyDown\n };\n};\n\nexport default useMessages; ","import React from 'react';\nimport { Icon } from '../Icon';\nimport { Avatar } from '../Avatar';\nimport { MESSAGES } from '../../lib/constants/components';\nimport { MessagesProps } from '../../lib/types/components';\nimport { useMessages } from '../../lib/composables/useMessages';\n\n/**\n * Messages component for displaying a chat interface with messages, images, and file attachments\n */\nconst Messages: React.FC<MessagesProps> = ({\n messages = [],\n otherAvatar,\n selfAvatar,\n otherName,\n width = '100%',\n onSendMessage,\n placeholder = 'Type a message',\n className = '',\n bodyHeight,\n disabled = false,\n id,\n}) => {\n const {\n inputValue,\n handleInputChange,\n handleSubmit,\n handleKeyDown\n } = useMessages({ onSendMessage });\n \n // Generate unique ID for accessibility\n const messagesId = id || `messages-${Math.random().toString(36).substr(2, 9)}`;\n const inputId = `${messagesId}-input`;\n \n return (\n <div \n className={`${MESSAGES.CLASSES.BASE} ${disabled ? 'is-disabled' : ''} ${className}`}\n style={{ '--atomix-messages-width': width } as React.CSSProperties}\n id={messagesId}\n aria-label=\"Chat messages\"\n role=\"log\"\n aria-live=\"polite\"\n >\n <div \n className={MESSAGES.CLASSES.BODY}\n style={bodyHeight ? { '--atomix-messages-body-height': bodyHeight } as React.CSSProperties : undefined}\n >\n {messages.map((message) => (\n <div \n key={message.id} \n className={`${MESSAGES.CLASSES.CONTENT} ${message.isSelf ? MESSAGES.CLASSES.CONTENT_SELF : ''}`}\n aria-label={`${message.isSelf ? 'You' : otherName || 'Other person'} sent a message at ${message.time}`}\n >\n <Avatar \n src={message.isSelf ? selfAvatar : otherAvatar}\n size=\"xl\"\n circle\n className={MESSAGES.CLASSES.AVATAR}\n alt={message.isSelf ? 'Your avatar' : `${otherName || 'Other person'}'s avatar`}\n />\n <div className={MESSAGES.CLASSES.ITEMS}>\n {!message.isSelf && otherName && (\n <div className={MESSAGES.CLASSES.NAME}>{otherName}</div>\n )}\n \n {message.text && (\n <div className={MESSAGES.CLASSES.TEXT}>\n {message.text}\n <span className={MESSAGES.CLASSES.TIME} aria-label={`Sent at ${message.time}`}>\n {message.time}\n </span>\n </div>\n )}\n \n {message.image && (\n <img \n className={MESSAGES.CLASSES.IMAGE} \n src={message.image} \n alt=\"Message attachment\" \n loading=\"lazy\"\n />\n )}\n \n {message.file && (\n <div \n className={MESSAGES.CLASSES.FILE}\n aria-label={`File attachment: ${message.file.name}, size: ${message.file.size}`}\n >\n <span className={MESSAGES.CLASSES.FILE_ICON}>\n <Icon name=\"File\" aria-hidden=\"true\" />\n </span>\n <div className={MESSAGES.CLASSES.FILE_DETAILS}>\n <div className={MESSAGES.CLASSES.FILE_NAME}>{message.file.name}</div>\n <div className={MESSAGES.CLASSES.FILE_SIZE}>{message.file.size}</div>\n </div>\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n \n <form \n className={MESSAGES.CLASSES.FORM} \n onSubmit={handleSubmit}\n aria-label=\"Message input form\"\n >\n <div className={MESSAGES.CLASSES.INPUT_GROUP}>\n <label htmlFor={inputId} className=\"u-visually-hidden\">\n Type a message\n </label>\n <input\n id={inputId}\n type=\"text\"\n className={MESSAGES.CLASSES.INPUT}\n placeholder={placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n aria-label=\"Message input\"\n />\n <div className={MESSAGES.CLASSES.OPTIONS} aria-label=\"Message options\">\n <button \n type=\"button\"\n className={MESSAGES.CLASSES.OPTION}\n aria-label=\"Attach file\"\n disabled={disabled}\n >\n <Icon name=\"PaperclipHorizontal\" aria-hidden=\"true\" className={MESSAGES.CLASSES.OPTION_ICON}/>\n </button>\n <button \n type=\"button\"\n className={MESSAGES.CLASSES.OPTION}\n aria-label=\"Attach image\"\n disabled={disabled}\n >\n <Icon name=\"Image\" aria-hidden=\"true\" className={MESSAGES.CLASSES.OPTION_ICON}/>\n </button>\n <button \n type=\"button\"\n className={MESSAGES.CLASSES.OPTION}\n aria-label=\"Insert link\"\n disabled={disabled}\n >\n <Icon name=\"Link\" aria-hidden=\"true\" className={MESSAGES.CLASSES.OPTION_ICON}/>\n </button>\n </div>\n </div>\n <button \n type=\"submit\" \n className={MESSAGES.CLASSES.SUBMIT}\n aria-label=\"Send message\"\n disabled={disabled}\n >\n <Icon name=\"PaperPlaneTilt\" aria-hidden=\"true\" size={24}/>\n </button>\n </form>\n </div>\n );\n};\n\nexport type { MessagesProps };\n\n// Set display name for debugging\nMessages.displayName = 'Messages';\n\n// Default export (primary)\nexport default Messages;\n\n// Named export for compatibility\nexport { Messages };","import React, { useEffect, useRef, useState, useCallback } from 'react';\nimport { ModalProps } from '../../lib/types/components';\nimport { MODAL } from '../../lib/constants/components';\n\n/**\n * Hook for managing modal state\n */\nfunction useModal({\n isOpen: isOpenProp,\n onOpenChange,\n onOpen,\n onClose\n}: {\n isOpen?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n onOpen?: () => void;\n onClose?: () => void;\n} = {}) {\n // For uncontrolled usage\n const [isOpenState, setIsOpenState] = useState(false);\n \n // Determine if we're in controlled or uncontrolled mode\n const isControlled = isOpenProp !== undefined;\n const isOpen = isControlled ? !!isOpenProp : isOpenState;\n \n // Update internal state when prop changes (for controlled mode)\n useEffect(() => {\n if (isControlled) {\n setIsOpenState(!!isOpenProp);\n }\n }, [isOpenProp, isControlled]);\n \n const updateOpen = useCallback((nextIsOpen: boolean) => {\n // For uncontrolled mode, update internal state\n if (!isControlled) {\n setIsOpenState(nextIsOpen);\n }\n \n // Call the change handler in either mode\n if (onOpenChange) {\n onOpenChange(nextIsOpen);\n }\n \n // Call the specific handler\n if (nextIsOpen && onOpen) {\n onOpen();\n } else if (!nextIsOpen && onClose) {\n onClose();\n }\n }, [isControlled, onOpenChange, onOpen, onClose]);\n \n const open = useCallback(() => {\n updateOpen(true);\n }, [updateOpen]);\n \n const close = useCallback(() => {\n updateOpen(false);\n }, [updateOpen]);\n \n const toggle = useCallback(() => {\n updateOpen(!isOpen);\n }, [isOpen, updateOpen]);\n \n return {\n isOpen,\n open,\n close,\n toggle\n };\n}\n\n/**\n * Modal component for displaying overlay content\n */\nconst Modal: React.FC<ModalProps> = ({\n children,\n isOpen = false,\n onOpenChange,\n onClose,\n onOpen,\n title,\n subtitle,\n size = 'md',\n backdrop = true,\n keyboard = true,\n className = '',\n closeButton = true,\n footer,\n ...props\n}) => {\n const modalRef = useRef<HTMLDivElement>(null);\n const dialogRef = useRef<HTMLDivElement>(null);\n const backdropRef = useRef<HTMLDivElement>(null);\n \n const {\n isOpen: isOpenState,\n open,\n close\n } = useModal({\n isOpen,\n onOpenChange,\n onClose,\n onOpen\n });\n\n // Handle keyboard events for Escape key\n useEffect(() => {\n if (!keyboard) return;\n \n const handleKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpenState) {\n close();\n }\n };\n \n document.addEventListener('keydown', handleKeydown);\n return () => {\n document.removeEventListener('keydown', handleKeydown);\n };\n }, [isOpenState, close, keyboard]);\n \n // Handle backdrop click\n const handleBackdropClick = (event: React.MouseEvent<HTMLDivElement>) => {\n if (backdrop && event.target === event.currentTarget) {\n close();\n }\n };\n \n // Assemble classes\n const modalClasses = [\n 'c-modal',\n isOpenState ? MODAL.CLASSES.IS_OPEN : '',\n size ? `c-modal--${size}` : '',\n className\n ].filter(Boolean).join(' ');\n \n return (\n <div \n ref={modalRef}\n className={modalClasses}\n style={{ display: isOpenState ? 'block' : 'none' }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-hidden={!isOpenState}\n {...props}\n >\n <div \n ref={backdropRef} \n className=\"c-modal__backdrop\"\n onClick={handleBackdropClick}\n />\n <div \n ref={dialogRef} \n className=\"c-modal__dialog\"\n >\n <div className=\"c-modal__content\">\n {(title || closeButton) && (\n <div className=\"c-modal__header\">\n <div className=\"c-modal__header-content\">\n {title && <h3 className=\"c-modal__title\">{title}</h3>}\n {subtitle && <p className=\"c-modal__sub\">{subtitle}</p>}\n </div>\n {closeButton && (\n <button \n type=\"button\" \n className=\"c-modal__close c-btn js-modal-close\" \n onClick={close}\n aria-label=\"Close modal\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.0672 15.1828C16.1253 15.2409 16.1713 15.3098 16.2028 15.3857C16.2342 15.4615 16.2504 15.5429 16.2504 15.625C16.2504 15.7071 16.2342 15.7884 16.2028 15.8643C16.1713 15.9402 16.1253 16.0091 16.0672 16.0672C16.0091 16.1252 15.9402 16.1713 15.8643 16.2027C15.7885 16.2342 15.7071 16.2503 15.625 16.2503C15.5429 16.2503 15.4616 16.2342 15.3857 16.2027C15.3098 16.1713 15.2409 16.1252 15.1828 16.0672L10 10.8836L4.8172 16.0672C4.69992 16.1844 4.54086 16.2503 4.37501 16.2503C4.20916 16.2503 4.0501 16.1844 3.93282 16.0672C3.81555 15.9499 3.74966 15.7908 3.74966 15.625C3.74966 15.4591 3.81555 15.3001 3.93282 15.1828L9.11642 9.99998L3.93282 4.81717C3.81555 4.69989 3.74966 4.54083 3.74966 4.37498C3.74966 4.20913 3.81555 4.05007 3.93282 3.93279C4.0501 3.81552 4.20916 3.74963 4.37501 3.74963C4.54086 3.74963 4.69992 3.81552 4.8172 3.93279L10 9.11639L15.1828 3.93279C15.3001 3.81552 15.4592 3.74963 15.625 3.74963C15.7909 3.74963 15.9499 3.81552 16.0672 3.93279C16.1845 4.05007 16.2504 4.20913 16.2504 4.37498C16.2504 4.54083 16.1845 4.69989 16.0672 4.81717L10.8836 9.99998L16.0672 15.1828Z\" fill=\"#141414\"/>\n </svg>\n </button>\n )}\n </div>\n )}\n \n <div className=\"c-modal__body\">\n {children}\n </div>\n \n {footer && (\n <div className=\"c-modal__footer\">\n {footer}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nModal.displayName = 'Modal';\n\nexport type { ModalProps };\n\n// Set display name for debugging\nModal.displayName = 'Modal';\n\n// Default export (primary)\nexport default Modal;\n\n// Named export for compatibility\nexport { Modal };","import React, { useState, useEffect, useRef } from 'react';\nimport { NavbarProps } from '../../lib/types/components';\nimport { useNavbar } from '../../lib/composables/useNavbar';\nimport { NAVBAR } from '../../lib/constants/components';\n\nconst Navbar: React.FC<NavbarProps> = ({\n brand,\n children,\n variant,\n position = 'static',\n containerWidth,\n collapsible = true,\n expanded,\n onToggle,\n className = '',\n disabled = false\n}) => {\n const { generateNavbarClass, generateContainerStyle, generateCollapseClass } = useNavbar({ \n position, collapsible, expanded, onToggle\n });\n \n // Use controlled or uncontrolled expanded state\n const [navbarExpanded, setNavbarExpanded] = useState(expanded || false);\n \n // Ref for the collapse element to handle responsive behavior\n const collapseRef = useRef<HTMLDivElement>(null);\n \n // Update local state when external state changes\n useEffect(() => {\n if (typeof expanded !== 'undefined') {\n setNavbarExpanded(expanded);\n }\n }, [expanded]);\n \n // Handle resize to reset mobile menu state when switching to desktop\n useEffect(() => {\n const handleResize = () => {\n const isMobile = window.innerWidth < 768; // MD breakpoint\n if (!isMobile && collapsible) {\n // Reset expanded state on desktop\n if (typeof onToggle === 'function') {\n // Only update if different to avoid unnecessary renders\n if (expanded) onToggle(false);\n } else {\n setNavbarExpanded(false);\n }\n }\n };\n \n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, [collapsible, expanded, onToggle]);\n \n // Generate the navbar class\n const navbarClass = generateNavbarClass({ \n position, variant, collapsible, className\n });\n \n // Generate the container style\n const containerStyle = generateContainerStyle(containerWidth);\n \n // Generate collapse class\n const collapseClass = generateCollapseClass(navbarExpanded);\n \n // Handle toggler click\n const handleToggleClick = () => {\n if (disabled) return;\n \n const newState = !navbarExpanded;\n \n if (typeof onToggle === 'function') {\n // Controlled component\n onToggle(newState);\n } else {\n // Uncontrolled component\n setNavbarExpanded(newState);\n }\n };\n \n return (\n <nav className={navbarClass} aria-label=\"Main navigation\">\n <div className=\"c-navbar__container\" style={containerStyle}>\n {brand && (\n typeof brand === 'string' ? (\n <a href=\"/\" className=\"c-navbar__brand\">{brand}</a>\n ) : (\n <div className=\"c-navbar__brand\">{brand}</div>\n )\n )}\n \n {collapsible && (\n <button \n className=\"c-navbar__toggler\" \n onClick={handleToggleClick}\n aria-expanded={navbarExpanded}\n aria-label=\"Toggle navigation\"\n aria-controls=\"navbar-collapse\"\n disabled={disabled}\n type=\"button\"\n >\n <span className=\"c-navbar__toggler-icon\"></span>\n </button>\n )}\n \n <div \n id=\"navbar-collapse\"\n className={collapseClass}\n ref={collapseRef}\n >\n {children}\n </div>\n </div>\n </nav>\n );\n}; \n\n\nexport type { NavbarProps };\n\n// Set display name for debugging\nNavbar.displayName = 'Navbar';\n\n// Default export (primary)\nexport default Navbar;\n\n// Named export for compatibility\nexport { Navbar };","import React from \"react\";\nimport { ImageType } from \"../../lib/types/components\";\nimport { Button } from \"../Button/Button\";\nimport { Badge } from \"../Badge/Badge\";\nimport { Icon } from \"../Icon/Icon\";\n\n/**\n * Props for the PhotoViewerHeader component\n */\nexport interface PhotoViewerHeaderProps {\n /** Current image index */\n currentIndex: number;\n /** Total number of images */\n imagesLength: number;\n /** Callback to zoom out */\n onZoomOut: () => void;\n /** Callback to reset zoom */\n onResetZoom: () => void;\n /** Callback to zoom in */\n onZoomIn: () => void;\n /** Callback to toggle fullscreen */\n onToggleFullscreen: () => void;\n /** Callback to close the viewer */\n onClose: () => void;\n /** Whether fullscreen is active */\n isFullscreen: boolean;\n /** Current zoom level */\n zoomLevel: number;\n /** Callback to rotate image */\n onRotate: () => void;\n /** Callback to download image */\n onDownload: () => void;\n /** Callback to share image */\n onShare: () => void;\n /** Whether info panel is shown */\n showInfo: boolean;\n /** Callback to toggle info panel */\n onToggleInfo: () => void;\n /** Current image object */\n currentImage?: ImageType;\n}\n\n/**\n * PhotoViewerHeader component - displays controls and counter for the photo viewer\n *\n * @param props - PhotoViewerHeaderProps\n * @returns JSX.Element\n */\nexport const PhotoViewerHeader: React.FC<PhotoViewerHeaderProps> = ({\n currentIndex,\n imagesLength,\n onZoomOut,\n onResetZoom,\n onZoomIn,\n onToggleFullscreen,\n onClose,\n isFullscreen,\n zoomLevel,\n onRotate,\n onDownload,\n onShare,\n showInfo,\n onToggleInfo,\n currentImage,\n}) => (\n <div className=\"c-photo-viewer__header\">\n <Badge\n label={`${currentIndex + 1} / ${imagesLength}`}\n variant=\"light\"\n size=\"sm\"\n className=\"c-photo-viewer__counter-badge\"\n />\n <div className=\"c-photo-viewer__actions\">\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onZoomOut}\n disabled={zoomLevel <= 0.1}\n aria-label=\"Zoom out\"\n icon={<Icon name=\"Minus\" size=\"sm\" />}\n className=\"c-photo-viewer__action-button\"\n />\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onResetZoom}\n disabled={zoomLevel === 1}\n aria-label=\"Reset zoom\"\n icon={<Icon name=\"MagnifyingGlass\" size=\"sm\" />}\n className=\"c-photo-viewer__action-button\"\n />\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onZoomIn}\n disabled={zoomLevel >= 5}\n aria-label=\"Zoom in\"\n icon={<Icon name=\"Plus\" size=\"sm\" />}\n className=\"c-photo-viewer__action-button\"\n />\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onRotate}\n aria-label=\"Rotate image\"\n icon={<Icon name=\"ArrowsClockwise\" size=\"sm\" />}\n className=\"c-photo-viewer__action-button\"\n />\n {currentImage?.src && (\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onDownload}\n aria-label=\"Download image\"\n icon={<Icon name=\"DownloadSimple\" size=\"sm\" />}\n className=\"c-photo-viewer__action-button\"\n />\n )}\n {currentImage?.src &&\n typeof navigator !== \"undefined\" &&\n \"share\" in navigator && (\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onShare}\n aria-label=\"Share image\"\n icon={<Icon name=\"ShareNetwork\" size=\"sm\" />}\n className=\"c-photo-viewer__action-button\"\n />\n )}\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onToggleInfo}\n aria-label={showInfo ? \"Hide info\" : \"Show info\"}\n icon={<Icon name=\"Info\" size=\"sm\" />}\n className=\"c-photo-viewer__action-button\"\n />\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onToggleFullscreen}\n aria-label={isFullscreen ? \"Exit fullscreen\" : \"Enter fullscreen\"}\n icon={\n isFullscreen ? (\n <Icon name=\"ArrowsIn\" size=\"sm\" />\n ) : (\n <Icon name=\"ArrowsOut\" size=\"sm\" />\n )\n }\n className=\"c-photo-viewer__action-button\"\n />\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onClose}\n aria-label=\"Close photo viewer\"\n icon={<Icon name=\"X\" size=\"sm\" />}\n className=\"c-photo-viewer__action-button c-photo-viewer__close\"\n />\n </div>\n </div>\n);\n\nexport default PhotoViewerHeader;\n","import React, { useEffect } from 'react';\nimport { Button } from '../Button/Button';\nimport { Icon } from '../Icon/Icon';\n\n/**\n * Props for the PhotoViewerNavigation component\n */\nexport interface PhotoViewerNavigationProps {\n /** Whether to show navigation buttons */\n show: boolean;\n /** Callback to go to previous image */\n onPrev: () => void;\n /** Callback to go to next image */\n onNext: () => void;\n /** Current image index */\n currentIndex: number;\n /** Total number of images */\n imagesLength: number;\n /** Whether keyboard navigation is enabled */\n enableKeyboardNav: boolean;\n /** Callback to close the viewer */\n onClose: () => void;\n}\n\n/**\n * PhotoViewerNavigation component - handles navigation between images\n * \n * @param props - PhotoViewerNavigationProps\n * @returns JSX.Element\n */\nexport const PhotoViewerNavigation: React.FC<PhotoViewerNavigationProps> = ({\n show,\n onPrev,\n onNext,\n currentIndex,\n imagesLength,\n enableKeyboardNav,\n onClose,\n}) => {\n // Add keyboard navigation\n useEffect(() => {\n if (!enableKeyboardNav) return;\n \n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'ArrowLeft') onPrev();\n if (e.key === 'ArrowRight') onNext();\n if (e.key === 'Escape') onClose();\n };\n \n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [enableKeyboardNav, onPrev, onNext, onClose]);\n \n return show ? (\n <>\n <Button\n iconOnly\n size=\"md\"\n variant=\"light\"\n rounded\n onClick={onPrev}\n disabled={currentIndex === 0}\n aria-label=\"Previous image\"\n icon={<Icon name=\"CaretLeft\" size=\"md\" />}\n className=\"c-photo-viewer__nav-button c-photo-viewer__nav-button--prev\"\n />\n <Button\n iconOnly\n size=\"md\"\n variant=\"light\"\n rounded\n onClick={onNext}\n disabled={currentIndex === imagesLength - 1}\n aria-label=\"Next image\"\n icon={<Icon name=\"CaretRight\" size=\"md\" />}\n className=\"c-photo-viewer__nav-button c-photo-viewer__nav-button--next\"\n />\n </>\n ) : null;\n};\n\nexport default PhotoViewerNavigation;","import React, { useRef, useEffect, useState } from 'react';\n\n/**\n * Props for the PhotoViewerImage component\n */\nexport interface PhotoViewerImageProps {\n /** Ref to the image element */\n imageRef: React.RefObject<HTMLImageElement>;\n /** Ref to the container element */\n containerRef?: React.RefObject<HTMLDivElement>;\n /** Image source URL */\n src: string;\n /** Image alt text */\n alt?: string;\n /** Current zoom level */\n zoomLevel: number;\n /** Current drag position */\n dragPosition: { x: number; y: number };\n /** Whether image is being dragged */\n isDragging: boolean;\n /** Current rotation angle in degrees */\n rotationAngle: number;\n /** Whether image is transitioning */\n isTransitioning?: boolean;\n /** Mouse down event handler */\n onMouseDown: (event: React.MouseEvent<HTMLDivElement | HTMLImageElement, MouseEvent>) => void;\n /** Mouse move event handler */\n onMouseMove: (event: React.MouseEvent<HTMLDivElement | HTMLImageElement, MouseEvent>) => void;\n /** Mouse up event handler */\n onMouseUp: (event: React.MouseEvent<HTMLDivElement | HTMLImageElement, MouseEvent>) => void;\n /** Wheel event handler for zoom */\n onWheel: (event: React.WheelEvent<HTMLDivElement>) => void;\n /** Touch start event handler */\n onTouchStart: (event: React.TouchEvent<HTMLDivElement | HTMLImageElement>) => void;\n /** Touch move event handler */\n onTouchMove: (event: React.TouchEvent<HTMLDivElement | HTMLImageElement>) => void;\n /** Touch end event handler */\n onTouchEnd: (event: React.TouchEvent<HTMLDivElement | HTMLImageElement>) => void;\n /** Double click event handler */\n onDoubleClick?: (event: React.MouseEvent<HTMLDivElement | HTMLImageElement, MouseEvent>) => void;\n}\n\n/**\n * PhotoViewerImage component - displays the main image with zoom and pan capabilities\n * \n * @param props - PhotoViewerImageProps\n * @returns JSX.Element\n */\nexport const PhotoViewerImage: React.FC<PhotoViewerImageProps> = ({\n imageRef,\n containerRef,\n src,\n alt,\n zoomLevel,\n dragPosition,\n isDragging,\n rotationAngle,\n isTransitioning = false,\n onMouseDown,\n onMouseMove,\n onMouseUp,\n onWheel,\n onTouchStart,\n onTouchMove,\n onTouchEnd,\n onDoubleClick,\n}) => {\n const internalContainerRef = useRef<HTMLDivElement>(null);\n const effectiveContainerRef = containerRef || internalContainerRef;\n const [isMounted, setIsMounted] = useState(false);\n \n // Track mounting state\n useEffect(() => {\n setIsMounted(true);\n return () => setIsMounted(false);\n }, []);\n\n // Add double-click to zoom\n const handleDoubleClick = (e: React.MouseEvent<HTMLDivElement | HTMLImageElement, MouseEvent>) => {\n if (isMounted && onDoubleClick) onDoubleClick(e);\n };\n \n // Add non-passive event listeners to prevent page scrolling/zooming\n useEffect(() => {\n const container = effectiveContainerRef.current;\n if (!container) return;\n \n const handleWheelEvent = (e: WheelEvent) => {\n // Only call if mounted and handler exists\n if (isMounted && container && onWheel) {\n onWheel(e as unknown as React.WheelEvent<HTMLDivElement>);\n }\n };\n \n const handleTouchStartEvent = (e: TouchEvent) => {\n // Only call if mounted and handler exists\n if (isMounted && container && onTouchStart) {\n onTouchStart(e as unknown as React.TouchEvent<HTMLDivElement>);\n }\n };\n \n const handleTouchMoveEvent = (e: TouchEvent) => {\n // Only call if mounted and handler exists\n if (isMounted && container && onTouchMove) {\n onTouchMove(e as unknown as React.TouchEvent<HTMLDivElement>);\n }\n };\n \n const handleTouchEndEvent = (e: TouchEvent) => {\n // Only call if mounted and handler exists\n if (isMounted && container && onTouchEnd) {\n onTouchEnd(e as unknown as React.TouchEvent<HTMLDivElement>);\n }\n };\n \n // Only add event listeners if mounted\n if (isMounted) {\n container.addEventListener('wheel', handleWheelEvent, { passive: false });\n container.addEventListener('touchstart', handleTouchStartEvent, { passive: false });\n container.addEventListener('touchmove', handleTouchMoveEvent, { passive: false });\n container.addEventListener('touchend', handleTouchEndEvent, { passive: false });\n }\n \n // Clean up\n return () => {\n container.removeEventListener('wheel', handleWheelEvent);\n container.removeEventListener('touchstart', handleTouchStartEvent);\n container.removeEventListener('touchmove', handleTouchMoveEvent);\n container.removeEventListener('touchend', handleTouchEndEvent);\n };\n }, [isMounted, onWheel, onTouchStart, onTouchMove, onTouchEnd, effectiveContainerRef]);\n \n return (\n <div\n ref={effectiveContainerRef}\n className={`c-photo-viewer__image-container ${isTransitioning ? 'is-transitioning' : ''}`}\n style={{\n cursor: isDragging ? 'grabbing' : zoomLevel > 1 ? 'grab' : 'default',\n opacity: isTransitioning ? 0.7 : 1,\n touchAction: 'none', // Prevent browser touch behaviors\n }}\n onMouseDown={onMouseDown}\n onMouseMove={onMouseMove}\n onMouseUp={onMouseUp}\n onMouseLeave={onMouseUp}\n onDoubleClick={handleDoubleClick}\n >\n <img\n ref={imageRef}\n src={src}\n alt={alt}\n className=\"c-photo-viewer__image\"\n style={{\n transform: `scale(${zoomLevel}) translate(${dragPosition.x}px, ${dragPosition.y}px) rotate(${rotationAngle}deg)`,\n transition: isDragging \n ? 'none' \n : isTransitioning \n ? 'opacity 0.15s ease-out' \n : 'transform 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n transformOrigin: 'center center',\n willChange: isDragging ? 'transform' : 'auto',\n touchAction: 'none', // Prevent image-specific touch behaviors\n }}\n draggable={false}\n onContextMenu={(e) => e.preventDefault()} // Prevent context menu on long press\n />\n </div>\n );\n};\n\nexport default PhotoViewerImage;","import React from 'react';\nimport { ImageType } from '../../lib/types/components';\nimport { Button } from '../Button/Button';\n\n/**\n * Props for the PhotoViewerThumbnails component\n */\nexport interface PhotoViewerThumbnailsProps {\n /** Array of images to display thumbnails for */\n images: ImageType[];\n /** Current active image index */\n currentIndex: number;\n /** Callback to navigate to a specific image */\n goToImage: (index: number) => void;\n}\n\n/**\n * PhotoViewerThumbnails component - displays thumbnail navigation for images\n * \n * @param props - PhotoViewerThumbnailsProps\n * @returns JSX.Element\n */\nexport const PhotoViewerThumbnails: React.FC<PhotoViewerThumbnailsProps> = ({ \n images, \n currentIndex, \n goToImage \n}) => images.length > 1 ? (\n <div className=\"c-photo-viewer__thumbnails\">\n {images.map((image: ImageType, index: number) => {\n const thumbnailSrc = image.thumbnail || image.src;\n return (\n <Button\n key={index}\n variant=\"light\"\n className={`c-photo-viewer__thumbnail ${index === currentIndex ? 'is-active' : ''}`}\n onClick={() => goToImage(index)}\n aria-label={`View image ${index + 1}`}\n aria-current={index === currentIndex}\n >\n <img \n loading=\"lazy\"\n src={thumbnailSrc} \n alt={image.alt || `Thumbnail ${index + 1}`} \n className=\"c-photo-viewer__thumbnail-img\" \n />\n </Button>\n );\n })}\n </div>\n) : null;\n\nexport default PhotoViewerThumbnails;","import React from 'react';\nimport { ImageType } from '../../lib/types/components';\nimport { Button } from '../Button/Button';\nimport { Badge } from '../Badge/Badge';\nimport { Icon } from '../Icon/Icon';\n\n/**\n * Props for the PhotoViewerInfo component\n */\nexport interface PhotoViewerInfoProps {\n /** Whether to show the info panel */\n show: boolean;\n /** Image object to display info for */\n image?: ImageType;\n /** Callback to close the info panel */\n onClose: () => void;\n}\n\n/**\n * PhotoViewerInfo component - displays image metadata and information\n * \n * @param props - PhotoViewerInfoProps\n * @returns JSX.Element\n */\nexport const PhotoViewerInfo: React.FC<PhotoViewerInfoProps> = ({ show, image, onClose }) => {\n if (!show || !image) return null;\n \n return (\n <div className=\"c-photo-viewer__info-panel\">\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onClose}\n aria-label=\"Close info panel\"\n icon={<Icon name=\"X\" size=\"sm\" />}\n className=\"c-photo-viewer__info-close\"\n />\n <div className=\"c-photo-viewer__info-content\">\n {image.title && <h3 className=\"c-photo-viewer__info-title\">{image.title}</h3>}\n {image.description && <p className=\"c-photo-viewer__info-description\">{image.description}</p>}\n {image.date && <p className=\"c-photo-viewer__info-meta\">Date: {image.date}</p>}\n {image.author && <p className=\"c-photo-viewer__info-meta\">By: {image.author}</p>}\n {image.tags && image.tags.length > 0 && (\n <div className=\"c-photo-viewer__info-tags\">\n {image.tags.map((tag: string, index: number) => (\n <Badge key={index} label={tag} variant=\"light\" size=\"sm\" className=\"c-photo-viewer__info-tag\" />\n ))}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default PhotoViewerInfo;","import React, { useMemo, useEffect } from \"react\";\nimport { PhotoViewerProps, ImageType } from \"../../lib/types/components\";\nimport { usePhotoViewer } from \"../../lib/composables/usePhotoViewer\";\nimport { PhotoViewerHeader } from \"./PhotoViewerHeader\";\nimport { PhotoViewerNavigation } from \"./PhotoViewerNavigation\";\nimport { PhotoViewerImage } from \"./PhotoViewerImage\";\nimport { PhotoViewerThumbnails } from \"./PhotoViewerThumbnails\";\nimport { PhotoViewerInfo } from \"./PhotoViewerInfo\";\n\n/**\n * PhotoViewer component - A comprehensive image viewer with zoom, pan, navigation, and metadata display\n *\n * Features:\n * - Image navigation with keyboard support\n * - Zoom and pan functionality\n * - Touch gestures for mobile devices\n * - Fullscreen mode\n * - Image rotation\n * - Download and share capabilities\n * - Thumbnail navigation\n * - Image metadata display\n * - Responsive design\n *\n * @param props - PhotoViewerProps\n * @returns JSX.Element\n */\nconst PhotoViewer: React.FC<PhotoViewerProps> = ({\n images,\n startIndex = 0,\n className = \"\",\n disabled = false,\n enableKeyboardNavigation = true,\n enableGestures = true,\n enableFullscreen = true,\n thumbnailPosition = \"bottom\",\n onImageChange,\n onClose,\n}) => {\n // Use the external composable hook with enhanced features\n const {\n currentIndex,\n zoomLevel,\n imagePosition: dragPosition,\n isDragging,\n isFullscreen,\n rotationAngle,\n showInfo,\n imageRef,\n containerRef,\n isTransitioning,\n setZoomLevel,\n setImagePosition: setDragPosition,\n setIsDragging,\n setIsFullscreen,\n setRotationAngle,\n setShowInfo,\n closeModal,\n goToPrevious,\n goToNext,\n setCurrentIndex: goToImage,\n handleMouseDown,\n handleMouseMove,\n handleMouseUp,\n handleWheel,\n handleTouchStart,\n handleTouchMove,\n handleTouchEnd,\n handleDoubleClick,\n resetImageState,\n } = usePhotoViewer({\n images,\n startIndex,\n enableGestures,\n onImageChange,\n onClose: onClose || (() => {}),\n });\n\n // Process images to handle both string arrays and object arrays, ensuring ImageType structure\n const processedImages: ImageType[] = useMemo(() => {\n return images.map((img) => (typeof img === \"string\" ? { src: img } : img));\n }, [images]);\n\n // Current image object\n const currentImage: ImageType | undefined = processedImages[currentIndex];\n\n // Handle fullscreen toggle with bounds update\n const handleToggleFullscreen = () => {\n if (!enableFullscreen) return;\n\n if (!isFullscreen) {\n const element = document.documentElement;\n if (element.requestFullscreen) {\n element.requestFullscreen();\n }\n } else {\n if (document.exitFullscreen) {\n document.exitFullscreen();\n }\n }\n setIsFullscreen(!isFullscreen);\n };\n\n // Handle image rotation with bounds update\n const handleRotate = () => {\n setRotationAngle((angle: number) => (angle + 90) % 360);\n };\n\n // Handle image download\n const handleDownload = () => {\n if (!currentImage?.src) return;\n\n const link = document.createElement(\"a\");\n link.href = currentImage.src;\n link.download = currentImage.title || `image-${currentIndex + 1}`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n };\n\n // Handle image sharing\n const handleShare = async () => {\n if (!navigator.share || !currentImage?.src) return;\n\n try {\n await navigator.share({\n title: currentImage.title || \"Shared Image\",\n text: currentImage.description || \"Check out this image\",\n url: currentImage.src,\n });\n } catch (error) {\n console.error(\"Error sharing:\", error);\n }\n };\n\n // Memoize class names\n const photoViewerClasses = useMemo(\n () =>\n [\n \"c-photo-viewer\",\n `c-photo-viewer--thumbnails-${thumbnailPosition}`,\n isDragging ? \"c-photo-viewer--dragging\" : \"\",\n isFullscreen ? \"c-photo-viewer--fullscreen\" : \"\",\n showInfo ? \"c-photo-viewer--info-open\" : \"\",\n disabled ? \"is-disabled\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \"),\n [\n isDragging,\n isFullscreen,\n showInfo,\n disabled,\n thumbnailPosition,\n className,\n ],\n );\n\n // Listen for fullscreen changes\n useEffect(() => {\n const handleFullscreenChange = () => {\n setIsFullscreen(!!document.fullscreenElement);\n };\n\n document.addEventListener(\"fullscreenchange\", handleFullscreenChange);\n return () =>\n document.removeEventListener(\"fullscreenchange\", handleFullscreenChange);\n }, [setIsFullscreen]);\n\n // Add/remove is-open-photoviewer class on body\n useEffect(() => {\n document.body.classList.add(\"is-open-photoviewer\");\n\n return () => {\n document.body.classList.remove(\"is-open-photoviewer\");\n };\n }, []);\n\n // Early return for empty images array\n if (!images.length) return null;\n\n return (\n <div\n className={photoViewerClasses}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Photo viewer\"\n >\n <div className=\"c-photo-viewer__backdrop\" onClick={closeModal} />\n <div className=\"c-photo-viewer__container\">\n <PhotoViewerHeader\n currentIndex={currentIndex}\n imagesLength={images.length}\n onZoomOut={() => setZoomLevel((z: number) => Math.max(z - 0.25, 0.1))}\n onResetZoom={() => {\n resetImageState();\n }}\n onZoomIn={() => setZoomLevel((z: number) => Math.min(z + 0.25, 5))}\n onToggleFullscreen={handleToggleFullscreen}\n onClose={onClose || closeModal}\n isFullscreen={isFullscreen}\n zoomLevel={zoomLevel}\n onRotate={handleRotate}\n onDownload={handleDownload}\n onShare={handleShare}\n showInfo={showInfo}\n onToggleInfo={() => setShowInfo(!showInfo)}\n currentImage={currentImage}\n />\n <div className=\"c-photo-viewer__content\">\n <PhotoViewerNavigation\n show={images.length > 1}\n onPrev={goToPrevious}\n onNext={goToNext}\n currentIndex={currentIndex}\n imagesLength={images.length}\n enableKeyboardNav={enableKeyboardNavigation}\n onClose={onClose || closeModal}\n />\n {currentImage?.src && (\n <PhotoViewerImage\n imageRef={imageRef}\n containerRef={containerRef}\n src={currentImage.src}\n alt={currentImage?.alt || `Image ${currentIndex + 1}`}\n zoomLevel={zoomLevel}\n dragPosition={dragPosition}\n isDragging={isDragging}\n rotationAngle={rotationAngle}\n isTransitioning={isTransitioning}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onWheel={handleWheel}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n onDoubleClick={handleDoubleClick}\n />\n )}\n </div>\n {thumbnailPosition !== \"none\" && (\n <PhotoViewerThumbnails\n images={processedImages}\n currentIndex={currentIndex}\n goToImage={goToImage}\n />\n )}\n <PhotoViewerInfo\n show={showInfo}\n image={currentImage}\n onClose={() => setShowInfo(false)}\n />\n </div>\n </div>\n );\n};\n\nexport type { PhotoViewerProps };\n\n// Set display name for debugging\nPhotoViewer.displayName = 'PhotoViewer';\n\n// Default export (primary)\nexport default PhotoViewer;\n\n// Named export for compatibility\nexport { PhotoViewer };\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\n\ninterface UsePhotoViewerProps {\n images: (string | { src: string; [key: string]: any })[];\n startIndex?: number;\n enableGestures?: boolean;\n onImageChange?: (index: number) => void;\n onClose?: () => void;\n}\n\ninterface ImageState {\n zoomLevel: number;\n position: { x: number; y: number };\n rotation: number;\n bounds: {\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n };\n}\n\nexport const usePhotoViewer = ({ \n images, \n startIndex = 0, \n enableGestures = true, \n onImageChange, \n onClose \n}: UsePhotoViewerProps) => {\n const [currentIndex, setCurrentIndex] = useState(startIndex);\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [startDragPosition, setStartDragPosition] = useState({ x: 0, y: 0 });\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [showInfo, setShowInfo] = useState(false);\n const [imageStates, setImageStates] = useState<Record<number, ImageState>>({});\n const [isTransitioning, setIsTransitioning] = useState(false);\n const [isMounted, setIsMounted] = useState(false);\n const [momentumZoom, setMomentumZoom] = useState({ velocity: 0, timestamp: 0 });\n \n // Ref for the image element\n const imageRef = useRef<HTMLImageElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n \n // Track touch points for pinch zoom\n const touchPointsRef = useRef<{ x: number; y: number }[]>([]);\n const lastDistanceRef = useRef<number | null>(null);\n const lastMidpointRef = useRef<{ x: number; y: number } | null>(null);\n const lastWheelTime = useRef<number>(0);\n const momentumTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Calculate dragging bounds based on zoom level and image dimensions\n const calculateBounds = useCallback((zoomLevel: number, rotation: number) => {\n if (!isMounted || !imageRef.current || !containerRef.current) {\n return { minX: 0, maxX: 0, minY: 0, maxY: 0 };\n }\n\n const image = imageRef.current;\n const container = containerRef.current;\n \n // Additional safety check for DOM readiness\n if (!image.naturalWidth && !image.width) {\n return { minX: 0, maxX: 0, minY: 0, maxY: 0 };\n }\n \n // Get natural image dimensions\n const imageWidth = image.naturalWidth || image.width || 800;\n const imageHeight = image.naturalHeight || image.height || 600;\n \n // Get container dimensions with null check\n try {\n const containerRect = container.getBoundingClientRect();\n if (!containerRect || containerRect.width === 0 || containerRect.height === 0) {\n return { minX: 0, maxX: 0, minY: 0, maxY: 0 };\n }\n const containerWidth = containerRect.width;\n const containerHeight = containerRect.height;\n \n // Calculate image display dimensions considering rotation\n const rotationRad = (rotation * Math.PI) / 180;\n const cos = Math.abs(Math.cos(rotationRad));\n const sin = Math.abs(Math.sin(rotationRad));\n \n // Calculate the actual display size of the image\n const aspectRatio = imageWidth / imageHeight;\n let displayWidth, displayHeight;\n \n if (containerWidth / containerHeight > aspectRatio) {\n displayHeight = Math.min(containerHeight * 0.9, imageHeight);\n displayWidth = displayHeight * aspectRatio;\n } else {\n displayWidth = Math.min(containerWidth * 0.9, imageWidth);\n displayHeight = displayWidth / aspectRatio;\n }\n \n // Account for rotation in bounds calculation\n const rotatedWidth = displayWidth * cos + displayHeight * sin;\n const rotatedHeight = displayWidth * sin + displayHeight * cos;\n \n // Calculate scaled dimensions\n const scaledWidth = rotatedWidth * zoomLevel;\n const scaledHeight = rotatedHeight * zoomLevel;\n \n // Calculate bounds - how far we can drag\n const maxX = Math.max(0, (scaledWidth - containerWidth) / 2);\n const maxY = Math.max(0, (scaledHeight - containerHeight) / 2);\n \n return {\n minX: -maxX,\n maxX: maxX,\n minY: -maxY,\n maxY: maxY\n };\n } catch (error) {\n console.warn('PhotoViewer: Error calculating bounds', error);\n return { minX: 0, maxX: 0, minY: 0, maxY: 0 };\n }\n }, [isMounted]);\n\n // Constrain position within bounds\n const constrainPosition = useCallback((position: { x: number; y: number }, bounds: ImageState['bounds']) => {\n return {\n x: Math.max(bounds.minX, Math.min(bounds.maxX, position.x)),\n y: Math.max(bounds.minY, Math.min(bounds.maxY, position.y))\n };\n }, []);\n\n // Mount tracking and ensure the current index is within bounds\n useEffect(() => {\n setIsMounted(true);\n if (startIndex < 0 || startIndex >= images.length) {\n setCurrentIndex(0);\n } else {\n setCurrentIndex(startIndex);\n }\n return () => setIsMounted(false);\n }, [images, startIndex]);\n\n // Handle modal open/close body class\n useEffect(() => {\n if (isModalOpen) {\n document.body.classList.add('is-open-photoviewer');\n } else {\n document.body.classList.remove('is-open-photoviewer');\n }\n }, [isModalOpen]);\n\n // Initialize state for current image when index changes\n useEffect(() => {\n if (isModalOpen) {\n setImageStates(prev => {\n if (!prev[currentIndex]) {\n return {\n ...prev,\n [currentIndex]: {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n }\n };\n }\n return prev;\n });\n }\n }, [isModalOpen, currentIndex]);\n \n // Call onImageChange callback when current index changes\n useEffect(() => {\n if (onImageChange) {\n onImageChange(currentIndex);\n }\n }, [currentIndex, onImageChange]);\n\n // Update bounds when image loads or dimensions change\n useEffect(() => {\n const image = imageRef.current;\n const container = containerRef.current;\n \n const updateImageBounds = () => {\n if (!isMounted || !image || !container) return;\n \n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n const newBounds = calculateBounds(currentState.zoomLevel, currentState.rotation);\n const constrainedPosition = constrainPosition(currentState.position, newBounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n bounds: newBounds,\n position: constrainedPosition\n }\n };\n });\n };\n \n if (image && container && image.complete && isMounted) {\n updateImageBounds();\n } else if (image && container && isMounted) {\n image.addEventListener('load', updateImageBounds);\n return () => image.removeEventListener('load', updateImageBounds);\n }\n }, [currentIndex, calculateBounds, constrainPosition, isMounted]);\n\n // Handle window resize\n useEffect(() => {\n const handleResize = () => {\n if (!isMounted || !imageRef.current || !containerRef.current) return;\n \n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n const newBounds = calculateBounds(currentState.zoomLevel, currentState.rotation);\n const constrainedPosition = constrainPosition(currentState.position, newBounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n bounds: newBounds,\n position: constrainedPosition\n }\n };\n });\n };\n \n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [currentIndex, calculateBounds, constrainPosition, isMounted]);\n\n const openModal = useCallback(() => {\n setIsModalOpen(true);\n }, []);\n\n const closeModal = useCallback(() => {\n setIsModalOpen(false);\n if (onClose) onClose();\n }, [onClose]);\n\n const goToPrevious = useCallback(() => {\n if (currentIndex > 0) {\n setIsTransitioning(true);\n setTimeout(() => {\n setCurrentIndex(prev => prev - 1);\n setIsTransitioning(false);\n }, 150);\n }\n }, [currentIndex]);\n\n const goToNext = useCallback(() => {\n if (currentIndex < images.length - 1) {\n setIsTransitioning(true);\n setTimeout(() => {\n setCurrentIndex(prev => prev + 1);\n setIsTransitioning(false);\n }, 150);\n }\n }, [currentIndex, images.length]);\n\n const setZoomLevel = useCallback((zoom: number | ((prev: number) => number)) => {\n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n const newZoom = typeof zoom === 'function' ? zoom(currentState.zoomLevel) : zoom;\n const clampedZoom = Math.max(0.1, Math.min(5, newZoom));\n \n const newBounds = calculateBounds(clampedZoom, currentState.rotation);\n const constrainedPosition = constrainPosition(currentState.position, newBounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n zoomLevel: clampedZoom,\n bounds: newBounds,\n position: constrainedPosition\n }\n };\n });\n }, [isMounted, currentIndex, calculateBounds, constrainPosition]);\n\n const setImagePosition = useCallback((position: { x: number; y: number } | ((prev: { x: number; y: number }) => { x: number; y: number })) => {\n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n const newPosition = typeof position === 'function' ? position(currentState.position) : position;\n const constrainedPosition = constrainPosition(newPosition, currentState.bounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n position: constrainedPosition\n }\n };\n });\n }, [currentIndex, constrainPosition]);\n\n const setRotationAngle = useCallback((rotation: number | ((prev: number) => number)) => {\n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n const newRotation = typeof rotation === 'function' ? rotation(currentState.rotation) : rotation;\n const normalizedRotation = ((newRotation % 360) + 360) % 360;\n \n const newBounds = calculateBounds(currentState.zoomLevel, normalizedRotation);\n const constrainedPosition = constrainPosition(currentState.position, newBounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n rotation: normalizedRotation,\n bounds: newBounds,\n position: constrainedPosition\n }\n };\n });\n }, [isMounted, currentIndex, calculateBounds, constrainPosition]);\n\n // Handle mouse wheel for zooming with proper bounds\n const handleWheel = useCallback((event: React.WheelEvent<HTMLDivElement>) => {\n if (!isMounted || !event || !event.currentTarget) return;\n \n // Additional safety check for the target element\n const target = event.currentTarget;\n if (!target || typeof target.getBoundingClientRect !== 'function') return;\n \n // Storybook-specific safety check - ensure DOM is ready\n if (typeof window !== 'undefined' && window.location?.href?.includes('storybook')) {\n try {\n // Test if getBoundingClientRect works before proceeding\n const testRect = target.getBoundingClientRect();\n if (!testRect || testRect.width === 0 || testRect.height === 0) return;\n } catch (e) {\n return;\n }\n }\n \n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n // Advanced gesture detection for different input methods\n const isMac = /Mac|iPod|iPhone|iPad/.test(navigator.platform);\n const isTrackpadPinch = event.ctrlKey && isMac;\n const hasHorizontalScroll = Math.abs(event.deltaX) > 0;\n const isTrackpadScroll = !event.ctrlKey && hasHorizontalScroll && isMac;\n const isMagicMouse = !event.ctrlKey && !hasHorizontalScroll && isMac;\n const isRegularMouse = !isMac;\n \n // Handle different input methods with appropriate sensitivity\n let zoomAmount: number;\n let shouldPreventDefault = false;\n \n if (isTrackpadPinch) {\n // MacBook trackpad pinch zoom - natural, high sensitivity\n zoomAmount = event.deltaY * -0.02;\n shouldPreventDefault = true;\n } else if (isTrackpadScroll) {\n // MacBook trackpad scroll with two fingers\n if (currentState.zoomLevel > 1) {\n // Only zoom when already zoomed in, otherwise allow natural scroll\n zoomAmount = event.deltaY * -0.003;\n shouldPreventDefault = true;\n } else {\n return prev; // Allow page scroll when not zoomed\n }\n } else if (isMagicMouse) {\n // Apple Magic Mouse - less sensitive\n zoomAmount = event.deltaY * -0.004;\n shouldPreventDefault = true;\n } else if (isRegularMouse) {\n // Regular mouse wheel - medium sensitivity\n zoomAmount = event.deltaY * -0.006;\n shouldPreventDefault = true;\n } else {\n // Fallback for other input methods\n zoomAmount = event.deltaY * -0.005;\n shouldPreventDefault = true;\n }\n \n if (shouldPreventDefault) {\n event.preventDefault();\n event.stopPropagation();\n }\n \n // Add momentum for trackpad gestures\n const currentTime = Date.now();\n const timeDelta = currentTime - lastWheelTime.current;\n lastWheelTime.current = currentTime;\n \n // Calculate velocity for momentum (trackpad specific)\n if (isTrackpadPinch && timeDelta < 100) {\n const velocity = Math.abs(zoomAmount) / timeDelta;\n setMomentumZoom({ velocity, timestamp: currentTime });\n \n // Clear any existing momentum timeout\n if (momentumTimeoutRef.current) {\n clearTimeout(momentumTimeoutRef.current);\n }\n \n // Apply momentum decay after gesture ends\n momentumTimeoutRef.current = setTimeout(() => {\n const decayFactor = 0.95;\n const minVelocity = 0.001;\n \n const applyMomentum = () => {\n setMomentumZoom(prev => {\n if (prev.velocity < minVelocity) return prev;\n \n const newVelocity = prev.velocity * decayFactor;\n const momentumZoomAmount = newVelocity * (zoomAmount > 0 ? 1 : -1);\n \n // Apply momentum zoom\n setImageStates(current => {\n const state = current[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n const newZoom = Math.max(0.1, Math.min(5, state.zoomLevel + momentumZoomAmount));\n if (newZoom === state.zoomLevel) return current;\n \n const newBounds = calculateBounds(newZoom, state.rotation);\n const constrainedPosition = constrainPosition(state.position, newBounds);\n \n return {\n ...current,\n [currentIndex]: {\n ...state,\n zoomLevel: newZoom,\n bounds: newBounds,\n position: constrainedPosition\n }\n };\n });\n \n if (newVelocity >= minVelocity) {\n requestAnimationFrame(applyMomentum);\n }\n \n return { velocity: newVelocity, timestamp: Date.now() };\n });\n };\n \n requestAnimationFrame(applyMomentum);\n }, 50);\n }\n \n // Safe getBoundingClientRect call with error handling\n let rect;\n try {\n rect = target.getBoundingClientRect();\n } catch (error) {\n console.warn('PhotoViewer: Error getting bounding rect', error);\n return prev;\n }\n \n if (!rect || rect.width === 0 || rect.height === 0) return prev;\n \n const centerX = rect.width / 2;\n const centerY = rect.height / 2;\n const cursorX = event.clientX - rect.left - centerX;\n const cursorY = event.clientY - rect.top - centerY;\n \n const oldZoom = currentState.zoomLevel;\n const newZoom = Math.max(0.1, Math.min(5, oldZoom + zoomAmount));\n \n if (newZoom !== oldZoom) {\n const zoomFactor = newZoom / oldZoom;\n const newBounds = calculateBounds(newZoom, currentState.rotation);\n \n // Calculate new position to zoom towards cursor\n const newPosition = {\n x: currentState.position.x + cursorX * (1 - zoomFactor) * 0.5,\n y: currentState.position.y + cursorY * (1 - zoomFactor) * 0.5\n };\n \n const constrainedPosition = constrainPosition(newPosition, newBounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n zoomLevel: newZoom,\n bounds: newBounds,\n position: constrainedPosition\n }\n };\n }\n return prev;\n });\n }, [isMounted, currentIndex, calculateBounds, constrainPosition]);\n\n // Handle double click to zoom with smart zoom levels\n const handleDoubleClick = useCallback((event: React.MouseEvent) => {\n if (!isMounted || !event || !event.currentTarget) return;\n \n const target = event.currentTarget;\n if (!target || typeof target.getBoundingClientRect !== 'function') return;\n \n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n let rect;\n try {\n rect = target.getBoundingClientRect();\n } catch (error) {\n console.warn('PhotoViewer: Error getting bounding rect in double click', error);\n return prev;\n }\n \n if (!rect || rect.width === 0 || rect.height === 0) return prev;\n \n const centerX = rect.width / 2;\n const centerY = rect.height / 2;\n const cursorX = event.clientX - rect.left - centerX;\n const cursorY = event.clientY - rect.top - centerY;\n \n let newZoom: number;\n let newPosition = { x: 0, y: 0 };\n \n if (currentState.zoomLevel < 1.5) {\n newZoom = 2;\n // Zoom towards cursor\n newPosition = {\n x: -cursorX * 0.5,\n y: -cursorY * 0.5\n };\n } else if (currentState.zoomLevel < 3) {\n newZoom = 4;\n newPosition = {\n x: -cursorX * 0.75,\n y: -cursorY * 0.75\n };\n } else {\n newZoom = 1;\n newPosition = { x: 0, y: 0 };\n }\n \n const newBounds = calculateBounds(newZoom, currentState.rotation);\n const constrainedPosition = constrainPosition(newPosition, newBounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n zoomLevel: newZoom,\n bounds: newBounds,\n position: constrainedPosition\n }\n };\n });\n }, [isMounted, currentIndex, calculateBounds, constrainPosition]);\n\n // Handle mouse down for panning\n const handleMouseDown = useCallback((event: React.MouseEvent<HTMLDivElement | HTMLImageElement, MouseEvent>) => {\n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n if (currentState.zoomLevel > 1) {\n event.preventDefault();\n setIsDragging(true);\n setStartDragPosition({ \n x: event.clientX - currentState.position.x, \n y: event.clientY - currentState.position.y \n });\n }\n return prev;\n });\n }, [currentIndex]);\n\n // Handle mouse move for panning with bounds\n const handleMouseMove = useCallback((event: React.MouseEvent<HTMLDivElement | HTMLImageElement, MouseEvent>) => {\n if (!isDragging) return;\n \n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n const newPosition = {\n x: event.clientX - startDragPosition.x,\n y: event.clientY - startDragPosition.y\n };\n \n const constrainedPosition = constrainPosition(newPosition, currentState.bounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n position: constrainedPosition\n }\n };\n });\n }, [isDragging, startDragPosition, currentIndex, constrainPosition]);\n\n // Handle mouse up for panning\n const handleMouseUp = useCallback(() => {\n setIsDragging(false);\n }, []);\n \n // Touch handlers for mobile gestures with bounds\n const handleTouchStart = useCallback((event: React.TouchEvent<HTMLImageElement | HTMLDivElement>) => {\n if (!enableGestures) return;\n \n const touches = event.touches;\n \n // Always prevent default for multi-touch to stop page zoom\n if (touches.length > 1) {\n event.preventDefault();\n event.stopPropagation();\n }\n \n touchPointsRef.current = Array.from(touches).map(touch => ({\n x: touch.clientX,\n y: touch.clientY\n }));\n \n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n if (touches.length === 1 && currentState.zoomLevel > 1) {\n setIsDragging(true);\n setStartDragPosition({\n x: touches[0].clientX - currentState.position.x,\n y: touches[0].clientY - currentState.position.y\n });\n } else if (touches.length === 2) {\n const dx = touches[0].clientX - touches[1].clientX;\n const dy = touches[0].clientY - touches[1].clientY;\n lastDistanceRef.current = Math.sqrt(dx * dx + dy * dy);\n \n lastMidpointRef.current = {\n x: (touches[0].clientX + touches[1].clientX) / 2,\n y: (touches[0].clientY + touches[1].clientY) / 2\n };\n }\n return prev;\n });\n }, [enableGestures, currentIndex]);\n\n // Handle touch move for dragging and pinch zoom with bounds\n const handleTouchMove = useCallback((event: React.TouchEvent<HTMLImageElement | HTMLDivElement>) => {\n if (!enableGestures) return;\n \n const touches = event.touches;\n \n // Always prevent default for multi-touch gestures to stop page zoom\n if (touches.length > 1) {\n event.preventDefault();\n event.stopPropagation();\n }\n \n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n // Prevent default for single touch when zoomed in to avoid conflicts\n if (currentState.zoomLevel > 1 && touches.length === 1) {\n event.preventDefault();\n }\n \n if (touches.length === 1 && isDragging && currentState.zoomLevel > 1) {\n const newPosition = {\n x: touches[0].clientX - startDragPosition.x,\n y: touches[0].clientY - startDragPosition.y\n };\n const constrainedPosition = constrainPosition(newPosition, currentState.bounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n position: constrainedPosition\n }\n };\n } else if (touches.length === 2 && lastDistanceRef.current !== null) {\n const dx = touches[0].clientX - touches[1].clientX;\n const dy = touches[0].clientY - touches[1].clientY;\n const distance = Math.sqrt(dx * dx + dy * dy);\n \n const zoomDelta = (distance - lastDistanceRef.current) * 0.005;\n lastDistanceRef.current = distance;\n \n const currentMidpoint = {\n x: (touches[0].clientX + touches[1].clientX) / 2,\n y: (touches[0].clientY + touches[1].clientY) / 2\n };\n \n const oldZoom = currentState.zoomLevel;\n const newZoom = Math.max(0.1, Math.min(5, oldZoom + zoomDelta));\n \n if (newZoom !== oldZoom && lastMidpointRef.current) {\n let rect;\n try {\n rect = event.currentTarget.getBoundingClientRect();\n } catch (error) {\n console.warn('PhotoViewer: Error getting bounding rect in touch move', error);\n return prev;\n }\n \n if (!rect || rect.width === 0 || rect.height === 0) return prev;\n \n const centerX = rect.width / 2;\n const centerY = rect.height / 2;\n const midpointX = currentMidpoint.x - rect.left - centerX;\n const midpointY = currentMidpoint.y - rect.top - centerY;\n \n const zoomFactor = newZoom / oldZoom;\n const newBounds = calculateBounds(newZoom, currentState.rotation);\n \n const newPosition = {\n x: currentState.position.x + midpointX * (1 - zoomFactor) * 0.5,\n y: currentState.position.y + midpointY * (1 - zoomFactor) * 0.5\n };\n \n const constrainedPosition = constrainPosition(newPosition, newBounds);\n \n lastMidpointRef.current = currentMidpoint;\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n zoomLevel: newZoom,\n bounds: newBounds,\n position: constrainedPosition\n }\n };\n }\n \n lastMidpointRef.current = currentMidpoint;\n }\n return prev;\n });\n }, [isMounted, enableGestures, isDragging, startDragPosition, currentIndex, constrainPosition, calculateBounds]);\n\n // Handle touch end\n const handleTouchEnd = useCallback(() => {\n setIsDragging(false);\n lastDistanceRef.current = null;\n lastMidpointRef.current = null;\n }, []);\n\n // Get current state values without causing re-renders\n const currentState = imageStates[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n\n return {\n currentIndex,\n isModalOpen,\n zoomLevel: currentState.zoomLevel,\n imagePosition: currentState.position,\n isDragging,\n isFullscreen,\n rotationAngle: currentState.rotation,\n showInfo,\n imageRef,\n containerRef,\n isTransitioning,\n setCurrentIndex,\n setZoomLevel,\n setImagePosition,\n setIsDragging,\n setIsFullscreen,\n setRotationAngle,\n setShowInfo,\n openModal,\n closeModal,\n goToPrevious,\n goToNext,\n handleWheel,\n handleMouseDown,\n handleMouseMove,\n handleMouseUp,\n handleTouchStart,\n handleTouchMove,\n handleTouchEnd,\n handleDoubleClick,\n resetImageState: () => {\n setImageStates(prev => ({\n ...prev,\n [currentIndex]: {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n }\n }));\n }\n };\n};","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"react-dom\");","import { useState, useRef, useEffect, RefObject } from 'react';\n\ntype PopoverPosition = 'top' | 'bottom' | 'left' | 'right';\ntype PopoverTrigger = 'click' | 'hover';\n\ninterface UsePopoverProps {\n position?: PopoverPosition | 'auto';\n trigger?: PopoverTrigger;\n offset?: number;\n delay?: number;\n defaultOpen?: boolean;\n isOpen?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n closeOnClickOutside?: boolean;\n closeOnEscape?: boolean;\n id?: string;\n}\n\ninterface UsePopoverResult {\n isOpen: boolean;\n setIsOpen: (isOpen: boolean) => void;\n triggerRef: RefObject<HTMLElement>;\n popoverRef: RefObject<HTMLDivElement>;\n arrowRef: RefObject<HTMLDivElement>;\n popoverId: string;\n currentPosition: PopoverPosition;\n updatePosition: () => void;\n}\n\n/**\n * Hook for managing popover state and positioning logic\n */\nexport const usePopover = ({\n position = 'top',\n trigger = 'click',\n offset = 12,\n delay = 0,\n defaultOpen = false,\n isOpen: controlledIsOpen,\n onOpenChange,\n closeOnClickOutside = true,\n closeOnEscape = true,\n id,\n}: UsePopoverProps): UsePopoverResult => {\n const [isOpen, setIsOpenState] = useState(defaultOpen);\n const [currentPosition, setCurrentPosition] = useState<PopoverPosition>(position === 'auto' ? 'top' : position as PopoverPosition);\n const triggerRef = useRef<HTMLElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const arrowRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<number | null>(null);\n const popoverId = id || `popover-${Math.random().toString(36).slice(2, 11)}`;\n\n // Use controlled state if provided\n const isControlled = controlledIsOpen !== undefined;\n const isOpenState = isControlled ? controlledIsOpen : isOpen;\n\n // Define setIsOpen function before using it in useEffect\n const setIsOpen = (newIsOpen: boolean) => {\n if (!isControlled) {\n setIsOpenState(newIsOpen);\n }\n if (onOpenChange) {\n onOpenChange(newIsOpen);\n }\n };\n\n // Handle hover events if trigger is hover\n useEffect(() => {\n if (trigger !== 'hover' || !triggerRef.current || !popoverRef.current) return;\n\n const handleTriggerMouseEnter = () => {\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n\n if (delay > 0) {\n timeoutRef.current = window.setTimeout(() => {\n setIsOpen(true);\n }, delay);\n } else {\n setIsOpen(true);\n }\n };\n\n const handleTriggerMouseLeave = () => {\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n\n timeoutRef.current = window.setTimeout(() => {\n if (!popoverRef.current?.matches(':hover')) {\n setIsOpen(false);\n }\n }, 100);\n };\n\n const handlePopoverMouseEnter = () => {\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n };\n\n const handlePopoverMouseLeave = () => {\n setIsOpen(false);\n };\n\n // Add hover event listeners\n triggerRef.current.addEventListener('mouseenter', handleTriggerMouseEnter);\n triggerRef.current.addEventListener('mouseleave', handleTriggerMouseLeave);\n popoverRef.current.addEventListener('mouseenter', handlePopoverMouseEnter);\n popoverRef.current.addEventListener('mouseleave', handlePopoverMouseLeave);\n\n return () => {\n if (triggerRef.current) {\n triggerRef.current.removeEventListener('mouseenter', handleTriggerMouseEnter);\n triggerRef.current.removeEventListener('mouseleave', handleTriggerMouseLeave);\n }\n if (popoverRef.current) {\n popoverRef.current.removeEventListener('mouseenter', handlePopoverMouseEnter);\n popoverRef.current.removeEventListener('mouseleave', handlePopoverMouseLeave);\n }\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n }\n };\n }, [trigger, delay, isOpenState]);\n\n const updatePosition = (event?: Event) => {\n if (!triggerRef.current || !popoverRef.current) return;\n \n const triggerRect = triggerRef.current.getBoundingClientRect();\n const popoverRect = popoverRef.current.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n \n // Check if the trigger is near viewport edges\n const isNearViewportEdge = \n triggerRect.top < 50 || \n triggerRect.bottom > (viewportHeight - 50) ||\n triggerRect.left < 50 || \n triggerRect.right > (viewportWidth - 50);\n \n // If this is a scroll update and trigger isn't near edges, skip repositioning\n if (\n event?.type === 'scroll' && \n !isNearViewportEdge\n ) {\n return;\n }\n \n // Calculate space available in each direction\n const spaceTop = triggerRect.top;\n const spaceBottom = viewportHeight - triggerRect.bottom;\n const spaceLeft = triggerRect.left;\n const spaceRight = viewportWidth - triggerRect.right;\n \n // Determine best position based on available space\n let bestPosition: PopoverPosition = position === 'auto' ? 'top' : position as PopoverPosition;\n \n // If specified position is 'auto', find the position with most space\n if (position === 'auto') {\n const spaces = [\n { position: 'top', space: spaceTop },\n { position: 'right', space: spaceRight },\n { position: 'bottom', space: spaceBottom },\n { position: 'left', space: spaceLeft }\n ];\n \n // Sort by available space (descending)\n spaces.sort((a, b) => b.space - a.space);\n \n // Select position with most space\n bestPosition = spaces[0].position as PopoverPosition;\n } else {\n // Check if the preferred position has enough space\n const needsFlip = (\n (position === 'top' && spaceTop < popoverRect.height + offset && spaceBottom >= popoverRect.height + offset) ||\n (position === 'bottom' && spaceBottom < popoverRect.height + offset && spaceTop >= popoverRect.height + offset) ||\n (position === 'left' && spaceLeft < popoverRect.width + offset && spaceRight >= popoverRect.width + offset) ||\n (position === 'right' && spaceRight < popoverRect.width + offset && spaceLeft >= popoverRect.width + offset)\n );\n \n if (needsFlip) {\n // Flip to the opposite side\n const oppositePositions: Record<PopoverPosition | 'auto', PopoverPosition> = {\n 'top': 'bottom',\n 'bottom': 'top',\n 'left': 'right',\n 'right': 'left',\n 'auto': 'bottom'\n };\n bestPosition = oppositePositions[position as PopoverPosition | 'auto'];\n }\n }\n \n setCurrentPosition(bestPosition);\n \n // Calculate position based on the determined best position\n let top = 0;\n let left = 0;\n \n // Calculate viewport-relative position\n switch (bestPosition) {\n case 'top':\n top = triggerRect.top - popoverRect.height - offset;\n left = triggerRect.left + (triggerRect.width / 2) - (popoverRect.width / 2);\n break;\n case 'bottom':\n top = triggerRect.bottom + offset;\n left = triggerRect.left + (triggerRect.width / 2) - (popoverRect.width / 2);\n break;\n case 'left':\n top = triggerRect.top + (triggerRect.height / 2) - (popoverRect.height / 2);\n left = triggerRect.left - popoverRect.width - offset;\n break;\n case 'right':\n top = triggerRect.top + (triggerRect.height / 2) - (popoverRect.height / 2);\n left = triggerRect.right + offset;\n break;\n }\n \n // Constrain to viewport boundaries\n if (left < 0) {\n left = 5;\n } else if (left + popoverRect.width > viewportWidth) {\n left = viewportWidth - popoverRect.width - 5;\n }\n \n if (top < 0) {\n top = 5;\n } else if (top + popoverRect.height > viewportHeight) {\n top = viewportHeight - popoverRect.height - 5;\n }\n \n // Add scroll position to convert viewport coordinates to absolute position\n const absoluteTop = top + window.scrollY;\n const absoluteLeft = left + window.scrollX;\n \n // Apply position using absolute positioning to follow when scrolling\n popoverRef.current.style.position = 'absolute';\n popoverRef.current.style.top = `${absoluteTop}px`;\n popoverRef.current.style.left = `${absoluteLeft}px`;\n };\n\n // Position the popover\n useEffect(() => {\n if (!isOpenState || !triggerRef.current || !popoverRef.current) return;\n \n // Initial positioning\n updatePosition();\n \n // Update position on resize \n window.addEventListener('resize', updatePosition);\n \n // Update position on scroll, but throttled for performance\n let scrollTimeout: number | null = null;\n const handleScroll = (e: Event) => {\n if (scrollTimeout) {\n return;\n }\n \n scrollTimeout = window.setTimeout(() => {\n updatePosition(e);\n scrollTimeout = null;\n }, 100);\n };\n \n window.addEventListener('scroll', handleScroll, { passive: true });\n \n // Update position less frequently to handle content changes\n const intervalId = setInterval(() => {\n updatePosition();\n }, 500);\n \n return () => {\n window.removeEventListener('resize', updatePosition);\n window.removeEventListener('scroll', handleScroll);\n if (scrollTimeout) {\n window.clearTimeout(scrollTimeout);\n }\n clearInterval(intervalId);\n };\n }, [isOpenState, position, offset]);\n \n // Handle click outside to close popover\n useEffect(() => {\n if (!isOpenState || !closeOnClickOutside) return;\n \n const handleClickOutside = (event: MouseEvent) => {\n if (\n popoverRef.current && \n !popoverRef.current.contains(event.target as Node) &&\n triggerRef.current && \n !triggerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n \n document.addEventListener('mousedown', handleClickOutside);\n \n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpenState, closeOnClickOutside]);\n \n // Handle escape key to close popover\n useEffect(() => {\n if (!isOpenState || !closeOnEscape) return;\n \n const handleEscapeKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsOpen(false);\n }\n };\n \n document.addEventListener('keydown', handleEscapeKey);\n \n return () => {\n document.removeEventListener('keydown', handleEscapeKey);\n };\n }, [isOpenState, closeOnEscape]);\n\n // Clean up on unmount\n useEffect(() => {\n return () => {\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n return {\n isOpen: isOpenState,\n setIsOpen,\n triggerRef,\n popoverRef,\n arrowRef,\n popoverId,\n currentPosition,\n updatePosition,\n };\n};\n\nexport default usePopover; ","import React, { ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { POPOVER } from '../../lib/constants/components';\nimport { usePopover } from '../../lib/composables/usePopover';\nimport type { PopoverProps, PopoverTriggerProps } from '../../lib/types/components';\n\n// Context to share popover state between components\nconst PopoverContext = React.createContext<{\n isOpen: boolean;\n setIsOpen: (isOpen: boolean) => void;\n triggerRef: React.RefObject<HTMLElement>;\n popoverId: string;\n triggerType: 'click' | 'hover';\n}>({\n isOpen: false,\n setIsOpen: () => {},\n triggerRef: { current: null },\n popoverId: '',\n triggerType: 'click'\n});\n\n/**\n * Popover component for displaying floating content\n */\n const Popover: React.FC<PopoverProps> = ({\n content,\n position = 'top',\n trigger = 'click',\n className = '',\n delay = 0,\n offset = 12,\n defaultOpen = false,\n isOpen: controlledIsOpen,\n onOpenChange,\n closeOnClickOutside = true,\n closeOnEscape = true,\n id,\n children,\n}) => {\n const {\n isOpen,\n setIsOpen,\n triggerRef,\n popoverRef,\n arrowRef,\n popoverId,\n currentPosition,\n updatePosition\n } = usePopover({\n position,\n trigger,\n offset,\n delay,\n defaultOpen,\n isOpen: controlledIsOpen,\n onOpenChange,\n closeOnClickOutside,\n closeOnEscape,\n id\n });\n \n return (\n <PopoverContext.Provider\n value={{ isOpen, setIsOpen, triggerRef, popoverId, triggerType: trigger }}\n >\n {children}\n \n {typeof document !== 'undefined' && createPortal(\n <div\n ref={popoverRef}\n className={`c-popover c-popover--${currentPosition} ${isOpen ? POPOVER.CLASSES.IS_OPEN : ''} ${className}`}\n id={popoverId}\n role=\"tooltip\"\n aria-hidden={!isOpen}\n >\n <div className=\"c-popover__content\">\n <div className=\"c-popover__content-inner\">\n {content}\n </div>\n </div>\n <div ref={arrowRef} className=\"c-popover__arrow\"></div>\n </div>,\n document.body\n )}\n </PopoverContext.Provider>\n );\n};\n\n/**\n * PopoverTrigger component to wrap the element that triggers the popover\n */\nexport const PopoverTrigger: React.FC<PopoverTriggerProps> = ({\n children,\n trigger: triggerProp,\n}) => {\n const { isOpen, setIsOpen, triggerRef, popoverId, triggerType } = React.useContext(PopoverContext);\n \n // Determine which trigger type to use - prop from PopoverTrigger or from context\n const effectiveTrigger = triggerProp || triggerType;\n \n // Handle trigger events\n const handleClick = () => {\n setIsOpen(!isOpen);\n };\n \n const handleMouseEnter = () => {\n setIsOpen(true);\n };\n \n const handleMouseLeave = () => {\n setIsOpen(false);\n };\n \n // Clone the children element with additional props\n const child = React.Children.only(children) as React.ReactElement;\n \n const triggerProps: any = {\n ref: triggerRef,\n 'aria-describedby': popoverId,\n 'aria-expanded': isOpen,\n };\n \n if (effectiveTrigger === 'click') {\n triggerProps.onClick = handleClick;\n } else if (effectiveTrigger === 'hover') {\n triggerProps.onMouseEnter = handleMouseEnter;\n triggerProps.onMouseLeave = handleMouseLeave;\n }\n \n return React.cloneElement(child, triggerProps);\n}; \n\nexport type { PopoverProps, PopoverTriggerProps };\n\n// Set display name for debugging\nPopover.displayName = 'Popover';\n\n// Default export (primary)\nexport default Popover;\n\n// Named export for compatibility\nexport { Popover };","import { useState, useCallback } from 'react';\nimport type { RatingProps } from '../types/components';\n\n/**\n * Props for the useRating hook\n */\nexport type UseRatingProps = Pick<RatingProps, 'value' | 'maxValue' | 'allowHalf' | 'readOnly' | 'onChange'>;\n\nexport interface UseRatingReturn {\n /**\n * Current rating value (controlled or uncontrolled)\n */\n currentValue: number;\n \n /**\n * Value being hovered over\n */\n hoverValue: number | null;\n \n /**\n * Currently focused star index\n */\n focusedIndex: number | null;\n \n /**\n * Handle mouse enter on a star\n */\n handleMouseEnter: (starValue: number) => void;\n \n /**\n * Handle mouse leave from rating component\n */\n handleMouseLeave: () => void;\n \n /**\n * Handle click on a star\n */\n handleClick: (newValue: number) => void;\n \n /**\n * Handle keyboard navigation\n */\n handleKeyDown: (e: React.KeyboardEvent, index: number) => void;\n \n /**\n * Set focus on a specific star\n */\n setFocused: (index: number | null) => void;\n \n /**\n * Set hover value directly\n */\n setHoverValue: (value: number | null) => void;\n \n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n}\n\n/**\n * Hook for managing rating component state and interactions\n */\nexport const useRating = ({\n value = 0,\n maxValue = 5,\n allowHalf = false,\n readOnly = false,\n onChange\n}: UseRatingProps): UseRatingReturn => {\n // Determine if component is in controlled mode\n const isControlled = typeof onChange !== 'undefined';\n \n // Internal state for uncontrolled mode\n const [internalValue, setInternalValue] = useState<number>(value);\n const [hoverValue, setHoverValue] = useState<number | null>(null);\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n \n // Use controlled or uncontrolled value\n const currentValue = isControlled ? value : internalValue;\n \n // Handle mouse enter on star\n const handleMouseEnter = useCallback((starValue: number) => {\n if (readOnly) return;\n setHoverValue(starValue);\n }, [readOnly]);\n \n // Handle mouse leave from rating component\n const handleMouseLeave = useCallback(() => {\n if (readOnly) return;\n setHoverValue(null);\n }, [readOnly]);\n \n // Handle click on star\n const handleClick = useCallback((newValue: number) => {\n if (readOnly) return;\n \n if (!isControlled) {\n setInternalValue(newValue);\n }\n \n onChange?.(newValue);\n }, [readOnly, onChange, isControlled]);\n \n // Handle keyboard navigation\n const handleKeyDown = useCallback((e: React.KeyboardEvent, index: number) => {\n if (readOnly) return;\n \n const step = allowHalf ? 0.5 : 1;\n let newValue = currentValue;\n \n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n newValue = Math.min(maxValue, currentValue + step);\n e.preventDefault();\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n newValue = Math.max(0, currentValue - step);\n e.preventDefault();\n break;\n case 'Home':\n newValue = 0;\n e.preventDefault();\n break;\n case 'End':\n newValue = maxValue;\n e.preventDefault();\n break;\n case ' ':\n case 'Enter':\n newValue = index;\n e.preventDefault();\n break;\n default:\n return;\n }\n \n if (newValue !== currentValue) {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n }\n }, [currentValue, maxValue, allowHalf, readOnly, onChange, isControlled]);\n \n return {\n currentValue,\n hoverValue,\n focusedIndex,\n handleMouseEnter,\n handleMouseLeave,\n handleClick,\n handleKeyDown,\n setFocused: setFocusedIndex,\n setHoverValue,\n isControlled\n };\n};\n\nexport default useRating;\n","import React from 'react';\n\n/**\n * Utility to merge multiple React refs into one\n */\nexport function setRef<T>(\n ref: React.MutableRefObject<T | null> | ((instance: T | null) => void) | null,\n value: T | null\n): void {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n // This is safe because we're checking that ref exists first\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (ref as any).current = value;\n }\n}\n\n/**\n * Combines two React refs into a single ref function\n * This is used when you need to use and forward a ref at the same time\n */\nexport default function useForkRef<T>(\n refA: React.Ref<T> | null,\n refB: React.Ref<T> | null\n): React.RefCallback<T> | null {\n return React.useMemo(() => {\n if (refA == null && refB == null) {\n return null;\n }\n \n return (refValue: T | null) => {\n setRef(refA, refValue);\n setRef(refB, refValue);\n };\n }, [refA, refB]);\n}\n","import React, { useRef, useEffect, useCallback, forwardRef } from 'react';\nimport { THEME_COLORS, SIZES, RATING } from '../../lib/constants/components';\nimport { useRating } from '../../lib/composables/useRating';\nimport type { RatingProps } from '../../lib/types/components';\nimport useForkRef from '../../lib/utils/useForkRef';\n\n/**\n * Rating component for displaying and collecting star ratings\n * \n * @example\n * // Basic usage\n * <Rating value={3} onChange={handleRatingChange} />\n * \n * @example\n * // Read-only with custom color\n * <Rating value={4.5} readOnly color=\"warning\" />\n * \n * @example\n * // With half-star support\n * <Rating value={3.5} allowHalf maxValue={5} />\n */\nconst Rating = forwardRef<HTMLDivElement, RatingProps>(({\n value: valueProp = 0,\n defaultValue,\n maxValue = 5,\n allowHalf = false,\n readOnly = false,\n size = 'md',\n color,\n onChange,\n className = '',\n label,\n id,\n useVanillaJS = false,\n ...restProps\n}, ref) => {\n const internalRef = useRef<HTMLDivElement>(null);\n const ratingInstance = useRef<any>(null);\n \n // Use the rating hook for React-based implementation\n const {\n currentValue,\n hoverValue,\n focusedIndex,\n setHoverValue,\n setFocused,\n handleKeyDown\n } = useRating({\n value: valueProp !== undefined ? valueProp : defaultValue,\n maxValue,\n allowHalf,\n readOnly,\n onChange\n });\n \n // Handle mouse enter on star with half-star support\n const handleMouseEnter = useCallback((e: React.MouseEvent, starValue: number) => {\n if (readOnly) return;\n \n if (allowHalf) {\n // Get the star element's bounding rectangle\n const starRect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n // Calculate the x position within the star\n const starCenterX = starRect.left + starRect.width / 2;\n // If mouse is on the left half of the star, use half value\n const isHalfStar = e.clientX < starCenterX;\n const adjustedValue = isHalfStar ? starValue - 0.5 : starValue;\n setHoverValue(Math.max(0.5, adjustedValue)); // Ensure minimum of 0.5\n } else {\n setHoverValue(starValue);\n }\n }, [readOnly, allowHalf, setHoverValue]);\n \n // Handle mouse move on star for half-star precision\n const handleMouseMove = useCallback((e: React.MouseEvent, starValue: number) => {\n if (readOnly || !allowHalf) return;\n \n // Get the star element's bounding rectangle\n const starRect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n // Calculate the x position within the star\n const starCenterX = starRect.left + starRect.width / 2;\n // If mouse is on the left half of the star, use half value\n const isHalfStar = e.clientX < starCenterX;\n const adjustedValue = isHalfStar ? starValue - 0.5 : starValue;\n setHoverValue(Math.max(0.5, adjustedValue)); // Ensure minimum of 0.5\n }, [readOnly, allowHalf, setHoverValue]);\n \n // Handle mouse leave from rating component\n const handleMouseLeave = useCallback(() => {\n if (readOnly) return;\n setHoverValue(null);\n }, [readOnly, setHoverValue]);\n \n // Handle click on star with half-star support\n const handleClick = useCallback((e: React.MouseEvent, starValue: number) => {\n if (readOnly) return;\n \n let newValue = starValue;\n \n if (allowHalf) {\n // Get the star element's bounding rectangle\n const starRect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n // Calculate the x position within the star\n const starCenterX = starRect.left + starRect.width / 2;\n // If click is on the left half of the star, use half value\n const isHalfStar = e.clientX < starCenterX;\n newValue = isHalfStar ? starValue - 0.5 : starValue;\n newValue = Math.max(0.5, newValue); // Ensure minimum of 0.5\n }\n \n onChange?.(newValue);\n }, [readOnly, onChange, allowHalf]);\n \n // Use vanilla JS implementation if specified\n useEffect(() => {\n if (!useVanillaJS || typeof window === 'undefined' || !internalRef.current) return;\n\n // Dynamically import the rating script to avoid server-side rendering issues\n import('./scripts/bundle').then(({ default: RatingClass }) => {\n if (internalRef.current) {\n ratingInstance.current = new RatingClass(internalRef.current, {\n value: valueProp !== undefined ? valueProp : defaultValue,\n maxValue,\n allowHalf,\n readOnly,\n size,\n color,\n onChange\n });\n }\n });\n \n // Cleanup on unmount\n return () => {\n if (ratingInstance.current) {\n ratingInstance.current.destroy();\n }\n };\n }, [useVanillaJS, valueProp, defaultValue, maxValue, allowHalf, readOnly, size, color, onChange]);\n \n // Update vanilla JS implementation when props change\n useEffect(() => {\n if (!useVanillaJS || !ratingInstance.current) return;\n \n ratingInstance.current.updateOptions({\n value: valueProp !== undefined ? valueProp : defaultValue,\n maxValue,\n allowHalf,\n readOnly,\n size,\n color\n });\n }, [useVanillaJS, valueProp, defaultValue, maxValue, allowHalf, readOnly, size, color]);\n \n // Determine CSS classes\n const ratingClasses = [\n 'c-rating',\n size === 'sm' ? RATING.CLASSES.SMALL : '',\n size === 'lg' ? RATING.CLASSES.LARGE : '',\n color ? `c-rating--${color}` : '',\n className\n ].filter(Boolean).join(' ');\n \n // If using vanilla JS, just render the container\n if (useVanillaJS) {\n return (\n <div \n className={ratingClasses}\n ref={useForkRef(internalRef, ref)}\n id={id}\n {...restProps}\n >\n {/* Stars will be generated by the vanilla JS implementation */}\n </div>\n );\n }\n \n // React-based implementation\n // Determine the effective value (either hovered or actual)\n const effectiveValue = hoverValue !== null ? hoverValue : currentValue;\n \n // Generate stars\n const renderStars = () => {\n const stars = [];\n const roundedValue = allowHalf ? Math.floor(effectiveValue * 2) / 2 : Math.round(effectiveValue);\n const componentId = id || `rating-${Math.random().toString(36).substring(2, 9)}`;\n \n for (let i = 1; i <= maxValue; i++) {\n // For half-star support\n const isFullStar = i <= Math.floor(roundedValue);\n const isHalfStar = allowHalf && (i - 0.5 === roundedValue);\n \n const starClass = [\n 'c-rating__star',\n isFullStar ? RATING.CLASSES.FULL : '',\n isHalfStar ? RATING.CLASSES.HALF : '',\n color ? `c-rating__star--${color}` : '',\n focusedIndex === i ? 'c-rating__star--focused' : ''\n ].filter(Boolean).join(' ');\n \n const starId = `${componentId}-star-${i}`;\n \n stars.push(\n <div \n key={i}\n id={starId}\n className={starClass}\n data-value={i}\n role={readOnly ? 'presentation' : 'button'}\n tabIndex={readOnly ? -1 : 0}\n aria-label={`${i} ${i === 1 ? 'star' : 'stars'}`}\n aria-checked={i <= roundedValue}\n aria-setsize={maxValue}\n aria-posinset={i}\n onClick={(e) => handleClick(e, i)}\n onMouseEnter={(e) => handleMouseEnter(e, i)}\n onMouseMove={(e) => handleMouseMove(e, i)}\n onFocus={() => setFocused(i)}\n onBlur={() => setFocused(null)}\n onKeyDown={(e) => handleKeyDown(e, i)}\n >\n <svg \n viewBox=\"0 0 24 24\" \n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n {/* Empty star (outline) */}\n <path \n className=\"c-rating__star-outline\"\n d=\"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\"\n strokeWidth=\"1\"\n />\n \n {/* Full star */}\n <path \n className=\"c-rating__star-full\"\n d=\"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\"\n />\n \n {/* Half star with proper clipping */}\n <path \n className=\"c-rating__star-half\"\n d=\"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\"\n clipPath={`url(#half-star-clip-${componentId}-${i})`}\n />\n \n {/* Clipping path for half star */}\n <defs>\n <clipPath id={`half-star-clip-${componentId}-${i}`}>\n <rect x=\"0\" y=\"0\" width=\"12\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n </div>\n );\n }\n \n return stars;\n };\n \n return (\n <div \n className={ratingClasses}\n ref={useForkRef(internalRef, ref)}\n id={id}\n data-readonly={readOnly ? 'true' : 'false'}\n onMouseLeave={handleMouseLeave}\n role={readOnly ? 'img' : 'radiogroup'}\n aria-label={label || `Rating: ${currentValue} out of ${maxValue} stars`}\n {...restProps}\n >\n {renderStars()}\n </div>\n );\n});\n\nRating.displayName = 'Rating';\n\nexport type { RatingProps };\n\n// Set display name for debugging\nRating.displayName = 'Rating';\n\n// Default export (primary)\nexport default Rating;\n\n// Named export for compatibility\nexport { Rating };\n","import React, { useState, useRef, useEffect } from 'react';\nimport { Rating } from '../Rating';\nimport { Button } from '../Button';\nimport type { ThemeColor } from '../../lib/types/components';\n\ninterface ProductReviewProps {\n /**\n * Product name\n */\n productName: string;\n \n /**\n * Product image URL\n */\n productImage?: string;\n \n /**\n * Initial rating value (0-5)\n */\n initialRating?: number;\n \n /**\n * Maximum possible rating value\n */\n maxRating?: number;\n \n /**\n * Whether to allow half-star ratings\n */\n allowHalf?: boolean;\n \n /**\n * Color theme for the rating stars\n */\n ratingColor?: ThemeColor;\n \n /**\n * Callback when review is submitted\n */\n onSubmit?: (rating: number, comment: string) => void;\n \n /**\n * Additional CSS class\n */\n className?: string;\n}\n\n/**\n * ProductReview component for collecting user ratings and feedback\n */\nconst ProductReview: React.FC<ProductReviewProps> = ({\n productName,\n productImage,\n initialRating = 0,\n maxRating = 5,\n allowHalf = true,\n ratingColor = 'warning' as ThemeColor,\n onSubmit,\n className = '',\n}) => {\n const [rating, setRating] = useState<number>(initialRating);\n const [comment, setComment] = useState<string>('');\n const [submitted, setSubmitted] = useState<boolean>(false);\n const reviewRef = useRef<HTMLDivElement>(null);\n const reviewInstance = useRef<any>(null);\n \n useEffect(() => {\n // Only run on client-side\n if (typeof window === 'undefined' || !reviewRef.current) return;\n\n // Dynamically import the product review script to avoid server-side rendering issues\n import('./scripts/bundle').then(({ default: ProductReviewClass }) => {\n if (reviewRef.current) {\n reviewInstance.current = new ProductReviewClass(reviewRef.current, {\n productName,\n productImage,\n initialRating,\n maxRating,\n allowHalf,\n ratingColor,\n onSubmit\n });\n }\n }).catch(err => {\n console.warn('Failed to load ProductReview script:', err);\n });\n \n // Cleanup on unmount\n return () => {\n if (reviewInstance.current) {\n reviewInstance.current.destroy();\n }\n };\n }, [productName, productImage, initialRating, maxRating, allowHalf, ratingColor, onSubmit]);\n \n const handleSubmit = (e: React.FormEvent): void => {\n e.preventDefault();\n \n if (onSubmit) {\n onSubmit(rating, comment);\n }\n \n setSubmitted(true);\n };\n \n const containerClasses = ['c-product-review', className].filter(Boolean).join(' ');\n \n if (submitted) {\n return (\n <div className={containerClasses} ref={reviewRef}>\n <div className=\"c-product-review__success\">\n <h3>Thank you for your review!</h3>\n <p>Your feedback helps us improve our products.</p>\n <Button \n variant=\"secondary\" \n label=\"Write another review\"\n onClick={() => {\n setSubmitted(false);\n setRating(0);\n setComment('');\n }}\n />\n </div>\n </div>\n );\n }\n \n return (\n <div className={containerClasses} ref={reviewRef}>\n <div className=\"c-product-review__header\">\n <h3 className=\"c-product-review__title\">Review {productName}</h3>\n {productImage && (\n <div className=\"c-product-review__image-wrapper\">\n <img \n src={productImage} \n alt={productName} \n className=\"c-product-review__image\" \n />\n </div>\n )}\n </div>\n \n <form className=\"c-product-review__form\" onSubmit={handleSubmit}>\n <div className=\"c-product-review__rating-container\">\n <label className=\"c-product-review__label\">Your Rating</label>\n <div className=\"c-rating-container\">\n <Rating \n value={rating} \n onChange={setRating} \n allowHalf={allowHalf}\n maxValue={maxRating}\n size=\"lg\"\n color={ratingColor}\n />\n <span className=\"c-rating__value\">\n {rating > 0 ? rating.toFixed(1) : 'Select a rating'}\n </span>\n </div>\n </div>\n \n <div className=\"c-product-review__comment-container\">\n <label htmlFor=\"review-comment\" className=\"c-product-review__label\">\n Your Review\n </label>\n <textarea\n id=\"review-comment\"\n className=\"c-product-review__textarea\"\n value={comment}\n onChange={(e) => setComment(e.target.value)}\n placeholder=\"Share your experience with this product...\"\n rows={5}\n />\n </div>\n \n <div className=\"c-product-review__actions\">\n <Button \n variant=\"primary\" \n label=\"Submit Review\"\n disabled={rating === 0}\n onClick={() => handleSubmit(new Event('click') as unknown as React.FormEvent)}\n />\n </div>\n </form>\n </div>\n );\n};\n\nexport type { ProductReviewProps };\n\n// Set display name for debugging\nProductReview.displayName = 'ProductReview';\n\n// Default export (primary)\nexport default ProductReview;\n\n// Named export for compatibility\nexport { ProductReview };","import React, { forwardRef } from 'react';\nimport { ProgressProps } from '../../lib/types/components';\nimport { useProgress } from '../../lib/composables/useProgress';\nimport { PROGRESS } from '../../lib/constants/components';\n\nconst Progress = forwardRef<HTMLDivElement, ProgressProps>((\n {\n value,\n variant = 'primary',\n size = 'md',\n className = '',\n disabled = false,\n ariaLabel = PROGRESS.DEFAULTS.ARIA_LABEL,\n }, \n ref\n) => {\n const { progressValue, progressStyle, progressClasses } = useProgress({\n value,\n variant,\n size,\n className\n });\n\n return (\n <div\n ref={ref}\n className={progressClasses}\n style={progressStyle}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={progressValue}\n aria-label={ariaLabel}\n aria-disabled={disabled}\n >\n <div className={PROGRESS.CLASSES.BAR}></div>\n </div>\n );\n});\n\nexport type { ProgressProps };\n\n// Set display name for debugging\nProgress.displayName = 'Progress';\n\n// Default export (primary)\nexport default Progress;\n\n// Named export for compatibility\nexport { Progress };\n","import { ThemeColor } from '../types/components';\n\ninterface UseProgressProps {\n /**\n * Progress value from 0 to 100\n */\n value: number;\n \n /**\n * Optional color variant\n */\n variant?: ThemeColor;\n \n /**\n * Optional size\n */\n size?: 'sm' | 'md' | 'lg';\n \n /**\n * Optional className for custom styling\n */\n className?: string;\n}\n\ninterface UseProgressReturn {\n /**\n * Computed progress value clamped between 0 and 100\n */\n progressValue: number;\n \n /**\n * CSS properties for the progress component\n */\n progressStyle: React.CSSProperties;\n \n /**\n * CSS classes for the progress component\n */\n progressClasses: string;\n}\n\n/**\n * Hook for managing Progress component state and behavior\n */\nexport const useProgress = ({\n value,\n variant = 'primary',\n size = 'md',\n className = '',\n}: UseProgressProps): UseProgressReturn => {\n // Clamp value between 0 and 100\n const progressValue = Math.min(Math.max(value, 0), 100);\n\n // Create CSS custom properties\n const progressStyle = {\n '--atomix-progress-percentage': `${progressValue}%`,\n } as React.CSSProperties;\n\n // Generate class names\n const baseClass = 'c-progress';\n const variantClass = variant ? `${baseClass}--${variant}` : '';\n const sizeClass = size ? `${baseClass}--${size}` : '';\n const customClass = className || '';\n \n const progressClasses = [\n baseClass,\n variantClass,\n sizeClass,\n customClass\n ].filter(Boolean).join(' ');\n\n return {\n progressValue,\n progressStyle,\n progressClasses,\n };\n};\n","import React, { useRef, useEffect, ReactNode } from 'react';\nimport { RIVER } from '../../lib/constants/components';\nimport { useRiver, RiverProps, RiverContentColumn } from '../../lib/composables/useRiver';\n\n/**\n * River component for displaying content with image sections\n */\nconst River: React.FC<RiverProps> = ({\n title,\n text,\n actions,\n imageSrc,\n imageAlt = 'Image',\n center = false,\n breakout = false,\n reverse = false,\n contentColumns,\n backgroundImageSrc,\n showOverlay = true,\n contentWidth,\n className = '',\n}) => {\n const riverRef = useRef<HTMLDivElement>(null);\n const riverInstance = useRef<any>(null);\n \n const { \n generateRiverClassNames,\n generateContentClass,\n generateVisualClass,\n hasBackgroundImage,\n hasForegroundImage,\n textContent\n } = useRiver({\n title,\n text,\n imageSrc,\n imageAlt,\n center,\n breakout,\n reverse,\n backgroundImageSrc,\n showOverlay,\n contentWidth\n });\n \n useEffect(() => {\n // Only run on client-side\n if (typeof window === 'undefined' || !riverRef.current) return;\n\n // Dynamically import the river script to avoid server-side rendering issues\n import('./scripts').then(({ default: RiverClass }) => {\n if (riverRef.current) {\n riverInstance.current = new RiverClass(riverRef.current, {\n center,\n breakout,\n reverse,\n backgroundImageSrc,\n showOverlay\n });\n }\n });\n \n // Cleanup on unmount\n return () => {\n if (riverInstance.current) {\n riverInstance.current.destroy();\n }\n };\n }, [center, breakout, reverse, backgroundImageSrc, showOverlay]);\n \n // Create custom style for river element with content width if provided\n const riverStyle: React.CSSProperties | undefined = contentWidth ? {\n [RIVER.ATTRIBUTES.CONTENT_WIDTH]: contentWidth\n } as React.CSSProperties : undefined;\n \n const renderBackground = () => {\n if (!hasBackgroundImage) return null;\n \n return (\n <div className={RIVER.SELECTORS.BG.replace('.', '')}>\n <img\n src={backgroundImageSrc}\n alt=\"Background\"\n className={RIVER.SELECTORS.BG_IMAGE.replace('.', '')}\n />\n {showOverlay && <div className={RIVER.SELECTORS.OVERLAY.replace('.', '')}></div>}\n </div>\n );\n };\n \n const renderContent = () => (\n <div className={generateContentClass()}>\n {title && (\n <h2 className={RIVER.SELECTORS.TITLE.replace('.', '')}>{title}</h2>\n )}\n {textContent.map((paragraph, index) => (\n <p key={index} className={RIVER.SELECTORS.TEXT.replace('.', '')}>{paragraph}</p>\n ))}\n {actions && (\n <div className={RIVER.SELECTORS.ACTIONS.replace('.', '')}>\n {actions}\n </div>\n )}\n </div>\n );\n\n const renderImage = () => {\n if (!hasForegroundImage) return null;\n \n return (\n <div className={generateVisualClass()}>\n <div className={RIVER.SELECTORS.IMAGE_WRAPPER.replace('.', '')}>\n <img \n src={imageSrc} \n alt={imageAlt} \n className={RIVER.SELECTORS.IMAGE.replace('.', '')} \n />\n </div>\n </div>\n );\n };\n \n // Render with content columns (advanced layout)\n if (contentColumns && contentColumns.length > 0) {\n return (\n <div className={generateRiverClassNames(className)} ref={riverRef} style={riverStyle}>\n {renderBackground()}\n <div className={`${RIVER.SELECTORS.CONTAINER.replace('.', '')} o-container`}>\n <div className={RIVER.SELECTORS.ROW.replace('.', '')}>\n {!reverse && renderImage()}\n <div className={generateContentClass()}>\n {contentColumns.map((column, index) => (\n <div \n key={index}\n className={`${RIVER.SELECTORS.CONTENT_COL.replace('.', '')} ${RIVER.SELECTORS[`CONTENT_COL_${column.type.toUpperCase()}` as keyof typeof RIVER.SELECTORS].replace('.', '')}`}\n >\n {column.content}\n </div>\n ))}\n {actions && (\n <div className={RIVER.SELECTORS.ACTIONS.replace('.', '')}>\n {actions}\n </div>\n )}\n </div>\n {reverse && renderImage()}\n </div>\n </div>\n </div>\n );\n }\n \n // Render with standard layout\n return (\n <div className={generateRiverClassNames(className)} ref={riverRef} style={riverStyle}>\n {renderBackground()}\n <div className={`${RIVER.SELECTORS.CONTAINER.replace('.', '')} o-container`}>\n <div className={RIVER.SELECTORS.ROW.replace('.', '')}>\n {!reverse && renderImage()}\n {renderContent()}\n {reverse && renderImage()}\n </div>\n </div>\n </div>\n );\n};\n\nexport type { RiverProps };\n\n// Set display name for debugging\nRiver.displayName = 'River';\n\n// Default export (primary)\nexport default River;\n\n// Named export for compatibility\nexport { River };","import React, { useRef, useEffect, ReactNode } from 'react';\nimport { SECTION_INTRO } from '../../lib/constants/components';\n\ninterface SectionIntroProps {\n /**\n * The section title\n */\n title: ReactNode;\n \n /**\n * Optional subtitle or overline text\n */\n /**\n * Optional label text (equivalent to subtitle in the UI)\n */\n label?: ReactNode;\n \n /**\n * Optional description text\n */\n /**\n * Optional text content\n */\n text?: ReactNode;\n \n /**\n * Optional call to action elements\n */\n actions?: ReactNode;\n \n /**\n * Alignment of the content\n */\n alignment?: 'left' | 'center' | 'right';\n \n /**\n * Optional background image URL\n */\n backgroundImageSrc?: string;\n \n /**\n * Whether to show an overlay on the background\n */\n showOverlay?: boolean;\n \n /**\n * Optional foreground image URL\n */\n imageSrc?: string;\n \n /**\n * Alternative text for the image\n */\n imageAlt?: string;\n \n /**\n * Size variant\n */\n size?: 'sm' | 'md' | 'lg';\n \n /**\n * Whether to show a skeleton loading state\n */\n skeleton?: boolean;\n \n /**\n * Additional CSS class\n */\n className?: string;\n}\n\n/**\n * SectionIntro component for introducing content sections with titles, descriptions, and optional imagery\n */\nconst SectionIntro: React.FC<SectionIntroProps> = ({\n title,\n label,\n text,\n actions,\n alignment = 'left',\n backgroundImageSrc,\n showOverlay = false,\n imageSrc,\n imageAlt = 'Section image',\n size = 'md',\n skeleton = false,\n className = '',\n}) => {\n const sectionIntroRef = useRef<HTMLDivElement>(null);\n const sectionIntroInstance = useRef<any>(null);\n \n useEffect(() => {\n // Only run on client-side\n if (typeof window === 'undefined' || !sectionIntroRef.current) return;\n\n // Dynamically import the section intro script to avoid server-side rendering issues\n import('./scripts').then(({ default: SectionIntroClass }) => {\n if (sectionIntroRef.current) {\n sectionIntroInstance.current = new SectionIntroClass(sectionIntroRef.current, {\n alignment,\n backgroundImageSrc,\n showOverlay,\n size,\n skeleton\n });\n }\n });\n \n // Cleanup on unmount\n return () => {\n if (sectionIntroInstance.current) {\n sectionIntroInstance.current.destroy();\n }\n };\n }, [alignment, backgroundImageSrc, showOverlay, size, skeleton]);\n \n // Determine CSS classes\n const sectionIntroClasses = [\n 'c-sectionintro',\n alignment === 'center' ? SECTION_INTRO.CLASSES.CENTER : '',\n size === 'sm' ? SECTION_INTRO.CLASSES.SMALL : '',\n size === 'lg' ? SECTION_INTRO.CLASSES.LARGE : '',\n backgroundImageSrc ? 'c-sectionintro--has-bg' : '',\n className\n ].filter(Boolean).join(' ');\n \n // Render skeleton version\n if (skeleton) {\n return (\n <div className={sectionIntroClasses} ref={sectionIntroRef}>\n <div className=\"c-sectionintro__container o-container\">\n {label && (\n <div className=\"c-sectionintro__label\">\n <span className=\"c-skeleton u-w-25\"></span>\n </div>\n )}\n <div className=\"c-sectionintro__title\">\n <span className=\"c-skeleton\"></span>\n </div>\n {text && (\n <div className=\"c-sectionintro__text\">\n <span className=\"c-skeleton\"></span>\n <span className=\"c-skeleton\"></span>\n <span className=\"c-skeleton u-w-75\"></span>\n </div>\n )}\n {actions && (\n <div className=\"c-sectionintro__actions\">\n <span className=\"c-skeleton u-w-25\"></span>\n </div>\n )}\n {imageSrc && (\n <div className=\"c-sectionintro__image-wrapper\">\n <div className=\"c-sectionintro__image c-skeleton\"></div>\n </div>\n )}\n </div>\n </div>\n );\n }\n \n // Render background if provided\n const renderBackground = () => {\n if (!backgroundImageSrc) return null;\n \n return (\n <div className=\"c-sectionintro__bg\">\n <img\n src={backgroundImageSrc}\n alt=\"Background\"\n className=\"c-sectionintro__bg-image\"\n />\n {showOverlay && <div className=\"c-sectionintro__overlay\"></div>}\n </div>\n );\n };\n \n // Render normal version\n return (\n <div className={sectionIntroClasses} ref={sectionIntroRef}>\n {renderBackground()}\n <div className=\"c-sectionintro__container o-container\">\n {label && <div className=\"c-sectionintro__label\">{label}</div>}\n <h2 className=\"c-sectionintro__title\">{title}</h2>\n {text && <div className=\"c-sectionintro__text\">{text}</div>}\n {actions && <div className=\"c-sectionintro__actions\">{actions}</div>}\n {imageSrc && (\n <div className=\"c-sectionintro__image-wrapper\">\n <img\n src={imageSrc}\n alt={imageAlt}\n className=\"c-sectionintro__image\"\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport type { SectionIntroProps };\n\n// Set display name for debugging\nSectionIntro.displayName = 'SectionIntro';\n\n// Default export (primary)\nexport default SectionIntro;\n\n// Named export for compatibility\nexport { SectionIntro };\n","import React, { useRef, useEffect, useState, ReactNode } from 'react';\nimport { STEPS } from '../../lib/constants/components';\n\ninterface StepItem {\n /**\n * The number for the step\n */\n number: number | string | ReactNode;\n \n /**\n * The text label for the step\n */\n text: string;\n \n /**\n * Optional custom content for the step\n */\n content?: React.ReactNode;\n}\n\ninterface StepsProps {\n /**\n * Array of step items\n */\n items: StepItem[];\n \n /**\n * Current active step index (0-based)\n */\n activeIndex?: number;\n \n /**\n * Whether to display steps vertically\n */\n vertical?: boolean;\n \n /**\n * Called when active step changes\n */\n onStepChange?: (index: number) => void;\n \n /**\n * Additional CSS class\n */\n className?: string;\n}\n\n/**\n * Steps component for displaying a sequence of steps\n */\n const Steps: React.FC<StepsProps> = ({\n items,\n activeIndex = 0,\n vertical = false,\n onStepChange,\n className = '',\n}) => {\n const [currentStep, setCurrentStep] = useState(activeIndex);\n const stepsRef = useRef<HTMLDivElement>(null);\n const stepsInstance = useRef<any>(null);\n \n useEffect(() => {\n // Only run on client-side\n if (typeof window === 'undefined' || !stepsRef.current) return;\n\n // Dynamically import the steps script to avoid server-side rendering issues\n import('./scripts').then(({ default: StepsClass }) => {\n if (stepsRef.current) {\n stepsInstance.current = new StepsClass(stepsRef.current, {\n activeIndex: currentStep,\n vertical\n });\n }\n });\n \n // Cleanup on unmount\n return () => {\n if (stepsInstance.current) {\n stepsInstance.current.destroy();\n }\n };\n }, []);\n\n // Update steps when activeIndex prop changes\n useEffect(() => {\n if (currentStep !== activeIndex) {\n setCurrentStep(activeIndex);\n \n if (stepsInstance.current) {\n stepsInstance.current.setActive(activeIndex);\n }\n }\n }, [activeIndex]);\n \n // Method to go to next step\n const goToNextStep = () => {\n const nextIndex = currentStep + 1;\n if (nextIndex < items.length) {\n setCurrentStep(nextIndex);\n \n if (stepsInstance.current) {\n stepsInstance.current.next();\n }\n \n if (onStepChange) {\n onStepChange(nextIndex);\n }\n }\n };\n \n // Method to go to previous step\n const goToPreviousStep = () => {\n const prevIndex = currentStep - 1;\n if (prevIndex >= 0) {\n setCurrentStep(prevIndex);\n \n if (stepsInstance.current) {\n stepsInstance.current.previous();\n }\n \n if (onStepChange) {\n onStepChange(prevIndex);\n }\n }\n };\n \n return (\n <div \n className={`c-steps ${vertical ? STEPS.CLASSES.VERTICAL : ''} ${className}`}\n ref={stepsRef}\n role=\"navigation\"\n aria-label=\"Steps\"\n >\n {items.map((item, index) => (\n <div \n key={`step-${index}`}\n className={`c-steps__item ${index <= currentStep ? STEPS.CLASSES.ACTIVE : ''} ${index < currentStep ? STEPS.CLASSES.COMPLETED : ''}`}\n aria-current={index === currentStep ? 'step' : undefined}\n >\n <div className=\"c-steps__line\"></div>\n <div className=\"c-steps__content\">\n <div className=\"c-steps__number\">{item.number}</div>\n <div className=\"c-steps__text\">{item.text}</div>\n {item.content && <div className=\"c-steps__custom-content\">{item.content}</div>}\n </div>\n </div>\n ))}\n </div>\n );\n};\n\nexport type { StepsProps, StepItem };\n\n// Set display name for debugging\nSteps.displayName = 'Steps';\n\n// Default export (primary)\nexport default Steps;\n\n// Named export for compatibility\nexport { Steps };","import React, { useRef, useEffect, useState, ReactNode } from 'react';\nimport { TAB } from '../../lib/constants/components';\n\ninterface TabItemProps {\n /**\n * Label for the tab\n */\n label: string;\n \n /**\n * Content of the tab panel\n */\n content: ReactNode;\n \n /**\n * Whether the tab is initially active\n */\n isActive?: boolean;\n \n /**\n * Additional CSS class for the tab\n */\n className?: string;\n}\n\ninterface TabProps {\n /**\n * Array of tab items\n */\n items: TabItemProps[];\n \n /**\n * Initial active tab index\n */\n activeIndex?: number;\n \n /**\n * Callback when tab changes\n */\n onTabChange?: (index: number) => void;\n \n /**\n * Additional CSS class for the tab component\n */\n className?: string;\n}\n\n/**\n * Tab component for switching between different content panels\n */\nconst Tab: React.FC<TabProps> = ({\n items,\n activeIndex = TAB.DEFAULTS.ACTIVE_INDEX,\n onTabChange,\n className = '',\n}) => {\n const [currentTab, setCurrentTab] = useState(activeIndex);\n const tabRef = useRef<HTMLDivElement>(null);\n const tabInstance = useRef<any>(null);\n \n // Handle tab instance initialization and cleanup\n useEffect(() => {\n // Only run on client-side\n if (typeof window === 'undefined' || !tabRef.current) return;\n\n // Dynamically import the tab script to avoid server-side rendering issues\n import('./scripts').then(({ default: TabClass }) => {\n if (tabRef.current) {\n tabInstance.current = new TabClass(tabRef.current);\n }\n });\n \n // Cleanup on unmount\n return () => {\n if (tabInstance.current) {\n tabInstance.current.destroy();\n }\n };\n }, []);\n \n // Handle tab change\n const handleTabClick = (index: number) => {\n setCurrentTab(index);\n if (onTabChange) {\n onTabChange(index);\n }\n };\n \n return (\n <div className={`c-tabs js-atomix-tab ${className}`} ref={tabRef}>\n <ul className=\"c-tabs__nav\">\n {items.map((item, index) => (\n <li className=\"c-tabs__nav-item\" key={`tab-nav-${index}`}>\n <button \n className={`c-tabs__nav-btn ${index === currentTab ? TAB.CLASSES.ACTIVE : ''}`}\n onClick={() => handleTabClick(index)}\n data-tabindex={index}\n role=\"tab\"\n aria-selected={index === currentTab}\n aria-controls={`tab-panel-${index}`}\n >\n {item.label}\n </button>\n </li>\n ))}\n </ul>\n <div className=\"c-tabs__panels\">\n {items.map((item, index) => (\n <div \n className={`c-tabs__panel ${index === currentTab ? TAB.CLASSES.ACTIVE : ''}`}\n key={`tab-panel-${index}`}\n data-tabindex={index}\n id={`tab-panel-${index}`}\n role=\"tabpanel\"\n aria-labelledby={`tab-nav-${index}`}\n style={{ \n height: index === currentTab ? 'auto' : '0px',\n opacity: index === currentTab ? 1 : 0,\n overflow: 'hidden',\n transition: 'height 0.3s ease, opacity 0.3s ease'\n }}\n >\n <div className=\"c-tabs__panel-body\">\n {item.content}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}; \n\nexport type { TabProps, TabItemProps };\n\n// Set display name for debugging\nTab.displayName = 'Tab';\n\n// Default export (primary)\nexport default Tab;\n\nexport { Tab };","import React, { useRef, useEffect, ReactNode } from 'react';\nimport { TESTIMONIAL } from '../../lib/constants/components';\n\ninterface TestimonialAuthor {\n /**\n * The author's name\n */\n name: string;\n \n /**\n * The author's role or title\n */\n role: string;\n \n /**\n * The URL to the author's avatar image\n */\n avatarSrc?: string;\n \n /**\n * Alternative text for the avatar image\n */\n avatarAlt?: string;\n}\n\ninterface TestimonialProps {\n /**\n * The testimonial quote text or content\n */\n quote: ReactNode;\n \n /**\n * Author information\n */\n author?: TestimonialAuthor;\n \n /**\n * Size variant\n */\n size?: 'sm' | 'lg' | '';\n \n /**\n * Whether to show a skeleton loading state\n */\n skeleton?: boolean;\n \n /**\n * Additional CSS class\n */\n className?: string;\n}\n\n/**\n * Testimonial component for displaying customer quotes and feedback\n */\nconst Testimonial: React.FC<TestimonialProps> = ({\n quote,\n author,\n size = '',\n skeleton = false,\n className = '',\n}) => {\n const testimonialRef = useRef<HTMLDivElement>(null);\n const testimonialInstance = useRef<any>(null);\n \n useEffect(() => {\n // Only run on client-side\n if (typeof window === 'undefined' || !testimonialRef.current) return;\n\n // Dynamically import the testimonial script to avoid server-side rendering issues\n import('./scripts').then(({ default: TestimonialClass }) => {\n if (testimonialRef.current) {\n testimonialInstance.current = new TestimonialClass(testimonialRef.current, {\n size,\n skeleton\n });\n }\n });\n \n // Cleanup on unmount\n return () => {\n if (testimonialInstance.current) {\n testimonialInstance.current.destroy();\n }\n };\n }, [size, skeleton]);\n \n // Determine CSS classes\n const testimonialClasses = [\n 'c-testimonial',\n size === 'sm' ? TESTIMONIAL.CLASSES.SMALL : '',\n size === 'lg' ? TESTIMONIAL.CLASSES.LARGE : '',\n className\n ].filter(Boolean).join(' ');\n \n // Render skeleton version\n if (skeleton) {\n return (\n <div className={testimonialClasses} ref={testimonialRef}>\n <blockquote className=\"c-testimonial__quote\">\n <span className=\"c-skeleton\"></span>\n <span className=\"c-skeleton\"></span>\n <span className=\"c-skeleton u-w-75\"></span>\n <span className=\"c-skeleton u-w-25\"></span>\n </blockquote>\n <div className=\"c-testimonial__author\">\n <span className=\"c-testimonial__author-avatar c-avatar c-avatar--xxl c-avatar--circle c-skeleton\"></span>\n <div className=\"c-testimonial__info u-w-75\">\n <p className=\"c-testimonial__author-name\">\n <span className=\"c-skeleton u-w-25\"></span>\n </p>\n <p className=\"c-testimonial__author-role\">\n <span className=\"c-skeleton u-w-25\"></span>\n </p>\n </div>\n </div>\n </div>\n );\n }\n \n // Render normal version\n return (\n <div className={testimonialClasses} ref={testimonialRef}>\n <blockquote className=\"c-testimonial__quote\">\n {quote}\n </blockquote>\n {author && (\n <div className=\"c-testimonial__author\">\n {author.avatarSrc && (\n <img\n src={author.avatarSrc}\n alt={author.avatarAlt || ''}\n className=\"c-testimonial__author-avatar c-avatar c-avatar--xxl c-avatar--circle\"\n />\n )}\n <div className=\"c-testimonial__info\">\n <p className=\"c-testimonial__author-name\">{author.name}</p>\n <p className=\"c-testimonial__author-role\">{author.role}</p>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport type { TestimonialProps, TestimonialAuthor };\n\n// Set display name for debugging\nTestimonial.displayName = 'Testimonial';\n\n// Default export (primary)\nexport default Testimonial;\n\n// Named export for compatibility\nexport { Testimonial };","import React, { useState, useEffect } from 'react';\nimport { TodoProps } from '../../lib/types/components';\nimport { useTodo } from '../../lib/composables/useTodo';\nimport { Icon } from '../Icon';\nimport { TODO } from '../../lib/constants/components';\nimport { v4 as uuidv4 } from 'uuid';\n\nconst Todo: React.FC<TodoProps> = ({\n items = [],\n title = 'Todo List',\n onAddTodo,\n onToggleTodo,\n onDeleteTodo,\n size = 'md',\n placeholder = 'Add a new todo',\n showCompleted = true,\n className = '',\n disabled = false,\n}) => {\n const {\n inputText,\n setInputText,\n addTodo,\n generateTodoClasses,\n generateItemClasses,\n } = useTodo({ items, title, size, placeholder, showCompleted, disabled });\n\n // State to manage local items\n const [localItems, setLocalItems] = useState(items);\n \n // Update local items when props change\n useEffect(() => {\n setLocalItems(items);\n }, [items]);\n \n // Handle item toggle\n const handleToggle = (id: string) => {\n if (disabled) return;\n \n setLocalItems(prevItems => \n prevItems.map(item => \n item.id === id \n ? { ...item, completed: !item.completed } \n : item\n )\n );\n \n if (onToggleTodo) {\n onToggleTodo(id);\n }\n };\n \n // Handle item delete\n const handleDelete = (id: string) => {\n if (disabled) return;\n \n setLocalItems(prevItems => prevItems.filter(item => item.id !== id));\n \n if (onDeleteTodo) {\n onDeleteTodo(id);\n }\n };\n \n // Handle form submission\n const handleFormSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (disabled || !inputText.trim()) return;\n \n // Create a new todo item with a unique ID\n const newTodo = {\n id: uuidv4(),\n text: inputText.trim(),\n completed: false\n };\n \n // Update local state\n setLocalItems(prevItems => [...prevItems, newTodo]);\n \n // Call parent callback if provided\n if (onAddTodo) {\n onAddTodo(inputText);\n }\n \n // Clear the input field\n setInputText('');\n };\n \n // Filter items based on showCompleted prop\n const filteredItems = showCompleted \n ? localItems \n : localItems.filter(item => !item.completed);\n \n // Generate component classes\n const todoClass = generateTodoClasses({ size, className, disabled });\n \n return (\n <div className={todoClass}>\n {title && <h2 className=\"c-todo__title\">{title}</h2>}\n \n <form \n className=\"c-todo__form\"\n onSubmit={handleFormSubmit}\n >\n <div className=\"c-todo__form-group\">\n <input\n type=\"text\"\n className=\"c-todo__input c-input\"\n placeholder={placeholder}\n value={inputText}\n onChange={(e) => setInputText(e.target.value)}\n disabled={disabled}\n aria-label=\"Add a new todo\"\n />\n <button\n type=\"submit\"\n className=\"c-todo__add-btn c-btn c-btn--primary\"\n disabled={disabled || !inputText.trim()}\n aria-label=\"Add todo\"\n >\n <Icon name=\"Plus\" size=\"sm\" />\n </button>\n </div>\n </form>\n \n <ul className=\"c-todo__list\">\n {filteredItems.length === 0 ? (\n <li className=\"c-todo__empty\">No items to display</li>\n ) : (\n filteredItems.map(item => (\n <li \n key={item.id} \n className={generateItemClasses(item)}\n >\n <div className=\"c-todo__item-content\">\n <label className=\"c-todo__checkbox-label\">\n <input\n type=\"checkbox\"\n className=\"c-todo__checkbox c-checkbox\"\n checked={item.completed}\n onChange={() => handleToggle(item.id)}\n disabled={disabled}\n aria-label={`Mark \"${item.text}\" as ${item.completed ? 'incomplete' : 'complete'}`}\n />\n <span className=\"c-todo__item-text\">{item.text}</span>\n </label>\n \n <button\n type=\"button\"\n className=\"c-todo__delete-btn c-btn c-btn--error c-btn--sm\"\n onClick={() => handleDelete(item.id)}\n disabled={disabled}\n aria-label={`Delete \"${item.text}\"`}\n >\n <Icon name=\"Trash\" size=\"sm\" />\n </button>\n </div>\n </li>\n ))\n )}\n </ul>\n </div>\n );\n};\n\nexport type { TodoProps };\n\n// Set display name for debugging\nTodo.displayName = 'Todo';\n\n// Default export (primary)\nexport default Todo;\n\n// Named export for compatibility\nexport { Todo };","import React, { useRef, useEffect, useState } from 'react';\nimport { TOGGLE } from '../../lib/constants/components';\n\ninterface ToggleProps {\n /**\n * Whether the toggle is initially on\n */\n initialOn?: boolean;\n \n /**\n * Callback when the toggle is turned on\n */\n onToggleOn?: () => void;\n \n /**\n * Callback when the toggle is turned off\n */\n onToggleOff?: () => void;\n \n /**\n * Whether the toggle is disabled\n */\n disabled?: boolean;\n \n /**\n * Additional CSS class for the toggle\n */\n className?: string;\n}\n\n/**\n * Toggle component for switching between two states\n */\nconst Toggle: React.FC<ToggleProps> = ({\n initialOn = false,\n onToggleOn,\n onToggleOff,\n disabled = false,\n className = '',\n}) => {\n const [isOn, setIsOn] = useState(initialOn);\n const toggleRef = useRef<HTMLDivElement>(null);\n const toggleInstance = useRef<any>(null);\n \n useEffect(() => {\n // Only run on client-side\n if (typeof window === 'undefined' || !toggleRef.current) return;\n\n // Initialize toggle instance\n import('./scripts').then(({ default: ToggleClass }) => {\n if (toggleRef.current) {\n toggleInstance.current = new ToggleClass(toggleRef.current);\n }\n });\n \n // Add event listeners for custom events\n const handleToggleOn = () => {\n setIsOn(true);\n if (onToggleOn) onToggleOn();\n };\n \n const handleToggleOff = () => {\n setIsOn(false);\n if (onToggleOff) onToggleOff();\n };\n \n const element = toggleRef.current;\n element?.addEventListener('toggle:on', handleToggleOn);\n element?.addEventListener('toggle:off', handleToggleOff);\n \n // Set initial state if needed\n if (initialOn && toggleInstance.current) {\n toggleInstance.current.turnOn();\n }\n \n // Cleanup on unmount\n return () => {\n element?.removeEventListener('toggle:on', handleToggleOn);\n element?.removeEventListener('toggle:off', handleToggleOff);\n \n if (toggleInstance.current) {\n toggleInstance.current.destroy();\n }\n };\n }, [initialOn, onToggleOn, onToggleOff]);\n \n // Update the toggle when the isOn prop changes\n useEffect(() => {\n if (!toggleInstance.current) return;\n \n if (isOn) {\n toggleInstance.current.turnOn();\n } else {\n toggleInstance.current.turnOff();\n }\n }, [isOn]);\n \n return (\n <div \n className={`c-toggle ${isOn ? TOGGLE.CLASSES.IS_ON : ''} ${disabled ? 'is-disabled' : ''} ${className}`} \n ref={toggleRef}\n role=\"switch\"\n aria-checked={isOn}\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n >\n <div className=\"c-toggle__switch\"></div>\n </div>\n );\n}; \n\nexport type { ToggleProps };\n\n// Set display name for debugging\nToggle.displayName = 'Toggle';\n\n// Default export (primary)\nexport default Toggle;\n\nexport { Toggle };","import { TOOLTIP } from '../../../lib/constants/components';\n\n/**\n * Default options for the tooltip component\n */\nconst DEFAULT_OPTIONS = {\n trigger: TOOLTIP.DEFAULTS.TRIGGER,\n position: TOOLTIP.DEFAULTS.POSITION,\n offset: TOOLTIP.DEFAULTS.OFFSET,\n delay: TOOLTIP.DEFAULTS.DELAY,\n activeClass: TOOLTIP.CLASSES.IS_ACTIVE,\n contentIdAttr: TOOLTIP.ATTRIBUTES.CONTENT_ID,\n positionAttr: TOOLTIP.ATTRIBUTES.POSITION,\n triggerAttr: TOOLTIP.ATTRIBUTES.TRIGGER\n};\n\n/**\n * Interface for Tooltip options\n */\nexport interface TooltipOptions {\n trigger: string;\n position: string;\n offset: number;\n delay: number;\n activeClass: string;\n contentIdAttr: string;\n positionAttr: string;\n triggerAttr: string;\n [key: string]: any;\n}\n\n/**\n * Interface for Tooltip instance\n */\nexport interface TooltipInstance {\n show: () => void;\n hide: () => void;\n destroy: () => void;\n isInitialized: () => boolean;\n isVisible: () => boolean;\n getElement: () => HTMLElement | null;\n getTriggerElement: () => HTMLElement | null;\n getPosition: () => string;\n setPosition: (position: string) => void;\n}\n\n/**\n * Class representing a Tooltip component\n */\nexport class Tooltip implements TooltipInstance {\n private selector: string | Element;\n private $element: HTMLElement | null;\n private $trigger: HTMLElement | null;\n private $content: HTMLElement | null;\n private options: TooltipOptions;\n private timeout: number | null;\n private hideTimeout: number | null;\n private isActive: boolean = false;\n\n /**\n * Creates an instance of Tooltip\n * @param selector - CSS selector string or DOM Element\n * @param options - Custom options to override defaults\n */\n constructor(selector: string | Element, options = {}) {\n this.selector = selector || TOOLTIP.SELECTORS.TOOLTIP;\n this.$element = \n typeof selector === 'string' \n ? document.querySelector<HTMLElement>(selector)\n : selector as HTMLElement;\n this.options = { ...DEFAULT_OPTIONS, ...options } as TooltipOptions;\n this.timeout = null;\n this.hideTimeout = null;\n this.$trigger = null;\n this.$content = null;\n this._initialize();\n }\n\n /**\n * Initialize the tooltip component\n */\n private _initialize(): void {\n if (!this.$element) return;\n\n this._initializeElements();\n this._setPosition();\n this._bindEvents();\n }\n\n /**\n * Initialize DOM elements\n */\n private _initializeElements(): void {\n if (!this.$element) return;\n \n // Find the parent container that wraps both trigger and tooltip\n const parentContainer = this.$element.parentElement;\n if (!parentContainer) return;\n \n // Find the trigger as a sibling or within the same parent container\n this.$trigger = parentContainer.querySelector<HTMLElement>(TOOLTIP.SELECTORS.TRIGGER);\n this.$content = this.$element.querySelector<HTMLElement>(TOOLTIP.SELECTORS.CONTENT);\n \n // Check for custom position from data attribute\n const customPosition = this.$element.getAttribute(this.options.positionAttr);\n if (customPosition) {\n this.options.position = customPosition;\n }\n \n // Check for custom trigger from data attribute\n const customTrigger = this.$element.getAttribute(this.options.triggerAttr);\n if (customTrigger) {\n this.options.trigger = customTrigger;\n }\n }\n\n /**\n * Set tooltip position\n */\n private _setPosition(): void {\n if (!this.$content || !this.$element) return;\n \n // Reset any existing position classes\n this.$element.classList.remove(\n TOOLTIP.CLASSES.TOP, \n TOOLTIP.CLASSES.BOTTOM, \n TOOLTIP.CLASSES.LEFT, \n TOOLTIP.CLASSES.RIGHT, \n TOOLTIP.CLASSES.TOP_LEFT, \n TOOLTIP.CLASSES.TOP_RIGHT, \n TOOLTIP.CLASSES.BOTTOM_LEFT, \n TOOLTIP.CLASSES.BOTTOM_RIGHT\n );\n \n // Add the appropriate position class\n switch (this.options.position) {\n case 'top':\n this.$element.classList.add(TOOLTIP.CLASSES.TOP);\n break;\n case 'bottom':\n this.$element.classList.add(TOOLTIP.CLASSES.BOTTOM);\n break;\n case 'left':\n this.$element.classList.add(TOOLTIP.CLASSES.LEFT);\n break;\n case 'right':\n this.$element.classList.add(TOOLTIP.CLASSES.RIGHT);\n break;\n case 'top-left':\n this.$element.classList.add(TOOLTIP.CLASSES.TOP_LEFT);\n break;\n case 'top-right':\n this.$element.classList.add(TOOLTIP.CLASSES.TOP_RIGHT);\n break;\n case 'bottom-left':\n this.$element.classList.add(TOOLTIP.CLASSES.BOTTOM_LEFT);\n break;\n case 'bottom-right':\n this.$element.classList.add(TOOLTIP.CLASSES.BOTTOM_RIGHT);\n break;\n default:\n this.$element.classList.add(TOOLTIP.CLASSES.TOP);\n }\n \n // Calculate offset based on position\n const offset = this.options.offset;\n \n switch (this.options.position) {\n case 'top':\n case 'top-left':\n case 'top-right':\n this.$element.style.bottom = `${offset}px`;\n break;\n case 'bottom':\n case 'bottom-left':\n case 'bottom-right':\n this.$element.style.top = `${offset}px`;\n break;\n case 'left':\n this.$element.style.right = `${offset}px`;\n break;\n case 'right':\n this.$element.style.left = `${offset}px`;\n break;\n default:\n this.$element.style.bottom = `${offset}px`;\n }\n }\n\n /**\n * Bind event listeners\n */\n private _bindEvents(): void {\n if (!this.$trigger) return;\n \n if (this.options.trigger === 'hover') {\n this.$trigger.addEventListener('mouseenter', this._handleTriggerEnter.bind(this));\n this.$trigger.addEventListener('mouseleave', this._handleTriggerLeave.bind(this));\n } else if (this.options.trigger === 'click') {\n this.$trigger.addEventListener('click', this._handleTriggerClick.bind(this));\n }\n \n // Handle focus for accessibility\n this.$trigger.addEventListener('focus', this._handleTriggerEnter.bind(this));\n this.$trigger.addEventListener('blur', this._handleTriggerLeave.bind(this));\n }\n\n /**\n * Handle trigger mouseenter or focus event\n */\n private _handleTriggerEnter(): void {\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n \n if (this.timeout) return;\n \n this.timeout = window.setTimeout(() => {\n this.show();\n this.timeout = null;\n }, this.options.delay);\n }\n\n /**\n * Handle trigger mouseleave or blur event\n */\n private _handleTriggerLeave(): void {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n \n this.hideTimeout = window.setTimeout(() => {\n this.hide();\n this.hideTimeout = null;\n }, this.options.delay);\n }\n\n /**\n * Handle trigger click event\n */\n private _handleTriggerClick(): void {\n if (this.$element && this.$element.classList.contains(this.options.activeClass)) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n /**\n * Check if tooltip is initialized\n */\n public isInitialized(): boolean {\n return !!this.$element && !!this.$trigger;\n }\n\n /**\n * Check if tooltip is currently visible\n */\n public isVisible(): boolean {\n return this.isActive;\n }\n\n /**\n * Get tooltip element\n */\n public getElement(): HTMLElement | null {\n return this.$element;\n }\n\n /**\n * Get trigger element\n */\n public getTriggerElement(): HTMLElement | null {\n return this.$trigger;\n }\n\n /**\n * Get current position\n */\n public getPosition(): string {\n return this.options.position;\n }\n\n /**\n * Set tooltip position\n */\n public setPosition(position: string): void {\n if (this.options.position !== position) {\n this.options.position = position;\n this._setPosition();\n }\n }\n\n /**\n * Show the tooltip\n */\n public show(): void {\n if (!this.$element) return;\n \n // Dispatch custom event before showing\n const showEvent = new CustomEvent('tooltip:show', {\n bubbles: true,\n cancelable: true,\n detail: { tooltip: this }\n });\n \n this.$element.dispatchEvent(showEvent);\n \n // If event was canceled, don't show\n if (showEvent.defaultPrevented) return;\n \n this.$element.classList.add(this.options.activeClass);\n this.isActive = true;\n }\n\n /**\n * Hide the tooltip\n */\n public hide(): void {\n if (!this.$element) return;\n \n // Dispatch custom event before hiding\n const hideEvent = new CustomEvent('tooltip:hide', {\n bubbles: true,\n cancelable: true,\n detail: { tooltip: this }\n });\n \n this.$element.dispatchEvent(hideEvent);\n \n // If event was canceled, don't hide\n if (hideEvent.defaultPrevented) return;\n \n this.$element.classList.remove(this.options.activeClass);\n this.isActive = false;\n }\n\n /**\n * Destroy the tooltip\n */\n public destroy(): void {\n if (!this.$trigger) return;\n \n // Remove event listeners\n if (this.options.trigger === 'hover') {\n this.$trigger.removeEventListener('mouseenter', this._handleTriggerEnter.bind(this));\n this.$trigger.removeEventListener('mouseleave', this._handleTriggerLeave.bind(this));\n } else if (this.options.trigger === 'click') {\n this.$trigger.removeEventListener('click', this._handleTriggerClick.bind(this));\n }\n \n this.$trigger.removeEventListener('focus', this._handleTriggerEnter.bind(this));\n this.$trigger.removeEventListener('blur', this._handleTriggerLeave.bind(this));\n \n // Clear timeouts\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n \n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n \n // Hide tooltip\n if (this.$element) {\n this.$element.classList.remove(this.options.activeClass);\n }\n }\n\n /**\n * Initialize all tooltips in the document\n * @param selector - CSS selector for tooltip elements\n * @param options - Custom options\n */\n public static initializeAll(selector = TOOLTIP.SELECTORS.TOOLTIP, options = {}): Tooltip[] {\n const elements = document.querySelectorAll(selector);\n return Array.from(elements).map(element => new Tooltip(element, options));\n }\n}\n\n/**\n * Initialize all tooltips in the document\n * @param selector - CSS selector for tooltip elements\n * @param options - Custom options\n */\nexport function initializeTooltips(selector = TOOLTIP.SELECTORS.TOOLTIP, options = {}): TooltipInstance[] {\n return Tooltip.initializeAll(selector, options);\n} ","import React, { ReactNode, useRef, useEffect } from 'react';\nimport { TOOLTIP } from '../../lib/constants/components';\nimport { Tooltip as TooltipClass } from './scripts';\n\ninterface TooltipProps {\n /**\n * Content to be displayed in the tooltip\n */\n content: ReactNode;\n \n /**\n * The element that will trigger the tooltip\n */\n children: ReactNode;\n \n /**\n * The position of the tooltip relative to the trigger\n */\n position?: 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n \n /**\n * How the tooltip is triggered\n */\n trigger?: 'hover' | 'click';\n \n /**\n * Additional CSS class for the tooltip\n */\n className?: string;\n \n /**\n * Delay before showing the tooltip (in milliseconds)\n */\n delay?: number;\n \n /**\n * Offset from the trigger element (in pixels)\n */\n offset?: number;\n}\n\nconst Tooltip: React.FC<TooltipProps> = ({\n content,\n children,\n position = TOOLTIP.DEFAULTS.POSITION,\n trigger = TOOLTIP.DEFAULTS.TRIGGER,\n className = '',\n delay = TOOLTIP.DEFAULTS.DELAY,\n offset = TOOLTIP.DEFAULTS.OFFSET,\n}) => {\n const tooltipRef = useRef<HTMLDivElement>(null);\n const tooltipInstance = useRef<any>(null);\n \n useEffect(() => {\n if (tooltipRef.current) {\n // Initialize tooltip\n tooltipInstance.current = new TooltipClass(tooltipRef.current, {\n position,\n trigger,\n delay,\n offset,\n });\n }\n \n // Cleanup on unmount\n return () => {\n if (tooltipInstance.current) {\n tooltipInstance.current.destroy();\n }\n };\n }, [position, trigger, delay, offset]);\n \n return (\n <div className=\"u-position-relative u-d-inline-block\">\n <div className={`${TOOLTIP.SELECTORS.TRIGGER.substring(1)}${className ? ` ${className}` : ''}`}>\n {children}\n </div>\n <div \n className={`c-tooltip ${TOOLTIP.SELECTORS.TOOLTIP.substring(1)}`} \n ref={tooltipRef}\n data-tooltip-position={position}\n data-tooltip-trigger={trigger}\n >\n <div className={`c-tooltip__content ${TOOLTIP.SELECTORS.CONTENT.substring(1)}`}>\n <span className={TOOLTIP.SELECTORS.ARROW.substring(1)}></span>\n {content}\n </div>\n </div>\n </div>\n );\n}; \n\nexport type { TooltipProps };\n\n// Set display name for debugging\nTooltip.displayName = 'Tooltip';\n\n// Default export (primary)\nexport default Tooltip;\n\n// Named export for compatibility\nexport { Tooltip };","import React, { useRef, useEffect, useState } from 'react';\nimport { UPLOAD } from '../../lib/constants/components';\n\ninterface UploadProps {\n /**\n * Whether the upload component is disabled\n */\n disabled?: boolean;\n \n /**\n * Maximum file size in MB\n */\n maxSizeInMB?: number;\n \n /**\n * Accepted file types\n */\n acceptedFileTypes?: string[];\n \n /**\n * Whether multiple files can be selected\n */\n multiple?: boolean;\n \n /**\n * Text for the drag and drop section\n */\n title?: string;\n \n /**\n * Text describing supported file types\n */\n supportedFilesText?: string;\n \n /**\n * Text for the upload button\n */\n buttonText?: string;\n \n /**\n * Helper text displayed below the button\n */\n helperText?: string;\n \n /**\n * Icon component or class name\n */\n icon?: React.ReactNode;\n \n /**\n * Called when files are selected\n */\n onFileSelect?: (files: File[]) => void;\n \n /**\n * Called during file upload with progress\n */\n onFileUpload?: (file: File, progress: number) => void;\n \n /**\n * Called when file upload is complete\n */\n onFileUploadComplete?: (file: File) => void;\n \n /**\n * Called on file upload errors\n */\n onFileUploadError?: (file: File, error: string) => void;\n \n /**\n * Additional CSS class\n */\n className?: string;\n}\n\n/**\n * Upload status type\n */\ntype UploadStatus = 'idle' | 'loading' | 'success' | 'error';\n\n/**\n * Upload component for file uploads with drag and drop\n */\nconst Upload: React.FC<UploadProps> = ({\n disabled = false,\n maxSizeInMB = 5,\n acceptedFileTypes = ['application/pdf', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'image/jpeg', 'image/png'],\n multiple = false,\n title = 'Drag and Drop files here',\n supportedFilesText = 'Files supported: PDF, XSLS, JPEG, PNG, Scanner',\n buttonText = 'Choose File',\n helperText = `Maximum size: ${maxSizeInMB}MB`,\n icon = <i className=\"icon-lux-cloud-arrow-up-fill\"></i>,\n onFileSelect,\n onFileUpload,\n onFileUploadComplete,\n onFileUploadError,\n className = '',\n}) => {\n const uploadRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const uploadInstance = useRef<any>(null);\n \n const [status, setStatus] = useState<UploadStatus>('idle');\n const [isDragging, setIsDragging] = useState(false);\n const [currentFile, setCurrentFile] = useState<File | null>(null);\n const [uploadProgress, setUploadProgress] = useState(0);\n const [timeLeft, setTimeLeft] = useState<string | null>(null);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [successMessage, setSuccessMessage] = useState<string | null>(null);\n const dragCounter = useRef(0);\n \n useEffect(() => {\n // Only run on client-side\n if (typeof window === 'undefined' || !uploadRef.current) return;\n\n // Dynamically import the upload script to avoid server-side rendering issues\n import('./scripts').then(({ default: UploadClass }) => {\n if (uploadRef.current) {\n uploadInstance.current = new UploadClass(uploadRef.current, {\n disabled,\n maxSizeInMB,\n acceptedFileTypes,\n multiple,\n onFileSelect,\n onFileUpload: (file: File, progress: number) => {\n setUploadProgress(progress);\n setTimeLeft(`${Math.ceil((100 - progress) / 5)} seconds left`);\n if (onFileUpload) onFileUpload(file, progress);\n },\n onFileUploadComplete: (file: File) => {\n setStatus('success');\n setSuccessMessage('Upload successful');\n if (onFileUploadComplete) onFileUploadComplete(file);\n },\n onFileUploadError: (file: File, error: string) => {\n setStatus('error');\n setErrorMessage(error);\n if (onFileUploadError) onFileUploadError(file, error);\n }\n });\n }\n });\n \n // Cleanup on unmount\n return () => {\n if (uploadInstance.current) {\n uploadInstance.current.destroy();\n }\n };\n }, [disabled, maxSizeInMB, acceptedFileTypes, multiple, onFileSelect, onFileUpload, onFileUploadComplete, onFileUploadError]);\n \n // Handle file input change\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!e.target.files?.length) return;\n \n const files = Array.from(e.target.files);\n handleFiles(files);\n };\n \n // Handle button click\n const handleButtonClick = () => {\n if (inputRef.current && !disabled) {\n inputRef.current.click();\n }\n };\n \n // Handle drag enter\n const handleDragEnter = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n \n dragCounter.current++;\n if (dragCounter.current === 1) {\n setIsDragging(true);\n }\n };\n \n // Handle drag leave\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n \n dragCounter.current--;\n if (dragCounter.current === 0) {\n setIsDragging(false);\n }\n };\n \n // Handle drag over\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n };\n \n // Handle drop\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n \n dragCounter.current = 0;\n setIsDragging(false);\n \n if (!e.dataTransfer.files?.length) return;\n \n const files = Array.from(e.dataTransfer.files);\n handleFiles(files);\n };\n \n // Process files\n const handleFiles = (files: File[]) => {\n if (!files.length) return;\n \n // If multiple is not allowed, take only the first file\n const filesToProcess = multiple ? files : [files[0]];\n \n // Validate files\n const validFiles = filesToProcess.filter(file => validateFile(file));\n \n // Notify about file selection\n if (validFiles.length && onFileSelect) {\n onFileSelect(validFiles);\n }\n \n // Process the first valid file\n if (validFiles.length) {\n setCurrentFile(validFiles[0]);\n simulateUpload(validFiles[0]);\n }\n };\n \n // Validate file\n const validateFile = (file: File): boolean => {\n const maxSizeInBytes = maxSizeInMB * 1024 * 1024;\n \n // Check file size\n if (file.size > maxSizeInBytes) {\n setStatus('error');\n setErrorMessage(`File too large. Maximum size is ${maxSizeInMB}MB.`);\n return false;\n }\n \n // Check file type if acceptedFileTypes is provided\n if (acceptedFileTypes?.length) {\n const isAcceptedType = acceptedFileTypes.some(type => {\n // Handle wildcards like image/*\n if (type.endsWith('/*')) {\n const mainType = type.split('/')[0];\n return file.type.startsWith(`${mainType}/`);\n }\n return file.type === type;\n });\n \n if (!isAcceptedType) {\n setStatus('error');\n setErrorMessage('File type not supported.');\n return false;\n }\n }\n \n return true;\n };\n \n // Simulate upload (in a real component, this would be an actual upload)\n const simulateUpload = (file: File) => {\n setStatus('loading');\n setUploadProgress(0);\n \n // Simulate progress updates\n let progress = 0;\n const interval = setInterval(() => {\n progress += 5;\n \n if (progress < 100) {\n setUploadProgress(progress);\n setTimeLeft(`${Math.ceil((100 - progress) / 5)} seconds left`);\n \n if (onFileUpload) {\n onFileUpload(file, progress);\n }\n } else {\n clearInterval(interval);\n setStatus('success');\n setSuccessMessage('Upload successful');\n \n if (onFileUploadComplete) {\n onFileUploadComplete(file);\n }\n }\n }, 500);\n };\n \n // Handle close button click\n const handleClose = () => {\n setStatus('idle');\n setCurrentFile(null);\n setUploadProgress(0);\n setTimeLeft(null);\n setErrorMessage(null);\n setSuccessMessage(null);\n \n // Reset input\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n };\n \n // Determine CSS classes\n const uploadClasses = [\n 'c-upload',\n disabled ? UPLOAD.CLASSES.DISABLED : '',\n status === 'loading' ? UPLOAD.CLASSES.LOADING : '',\n status === 'success' ? UPLOAD.CLASSES.SUCCESS : '',\n status === 'error' ? UPLOAD.CLASSES.ERROR : '',\n isDragging ? UPLOAD.CLASSES.DRAGGING : '',\n className\n ].filter(Boolean).join(' ');\n \n // Update CSS variable for progress\n const style = uploadProgress > 0 ? {\n [UPLOAD.ATTRIBUTES.PERCENTAGE]: uploadProgress\n } as React.CSSProperties : {};\n \n return (\n <div \n className={uploadClasses} \n ref={uploadRef}\n style={style}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <div className=\"c-upload__inner\">\n <div className=\"c-upload__icon\">\n {icon}\n </div>\n <h3 className=\"c-upload__title\">{title}</h3>\n <p className=\"c-upload__text\">{supportedFilesText}</p>\n <button \n className=\"c-upload__btn c-btn c-btn--primary\" \n disabled={disabled}\n onClick={handleButtonClick}\n >\n {buttonText}\n </button>\n <p className=\"c-upload__helper-text\">{helperText}</p>\n <input\n ref={inputRef}\n type=\"file\"\n accept={acceptedFileTypes.join(',')}\n multiple={multiple}\n style={{ display: 'none' }}\n onChange={handleFileChange}\n />\n </div>\n \n {(status === 'loading' || status === 'success' || status === 'error') && currentFile && (\n <div className=\"c-upload__loader\">\n <div className=\"c-upload__loader-status\">\n <h5 className=\"c-upload__loader-title\">{currentFile.name}</h5>\n <div className=\"c-upload__loader-progress\">\n {status === 'loading' && uploadProgress < 100 && (\n <>\n <div className=\"c-upload__loader-par\">{uploadProgress}%</div>\n {timeLeft && <div className=\"c-upload__loader-time\">{timeLeft}</div>}\n </>\n )}\n {status === 'success' && successMessage}\n {status === 'error' && errorMessage}\n </div>\n </div>\n \n <div className=\"c-upload__loader-control\">\n {status === 'loading' && uploadProgress < 100 && (\n <div className=\"c-upload__loader-bar\">\n <svg>\n <circle cx=\"10\" cy=\"10\" r=\"10\"></circle>\n <circle cx=\"10\" cy=\"10\" r=\"10\"></circle>\n </svg>\n </div>\n )}\n <button \n className=\"c-upload__loader-close c-btn c-btn--icon\"\n onClick={handleClose}\n >\n {status === 'success' ? (\n <i className=\"icon-lux-check-circle-fill\"></i>\n ) : (\n <i className=\"icon-lux-x\"></i>\n )}\n </button>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport type { UploadProps };\n\n// Set display name for debugging\nUpload.displayName = 'Upload';\n\n// Default export (primary)\nexport default Upload;\n\n// Named export for compatibility\nexport { Upload };","import React from 'react';\n\nexport interface AtomixLogoProps extends React.SVGProps<SVGSVGElement> {\n height?: number | string;\n width?: number | string;\n color?: string;\n}\n\nexport const AtomixLogo: React.FC<AtomixLogoProps> = ({\n height = 24,\n width = 24,\n color = 'currentColor',\n ...props\n}) => {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"\n fill={color}\n />\n <path\n d=\"M12 6c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zm0 10c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4z\"\n fill={color}\n />\n </svg>\n );\n};\n\nexport default AtomixLogo;\n","/**\n * Check if element has a specific class\n * @param element - DOM element to check\n * @param className - Class name to check for\n * @returns Whether element has the class\n */\nexport function hasClass(element: HTMLElement, className: string): boolean {\n return element.classList.contains(className);\n}\n\n/**\n * Add class to element if not already present\n * @param element - DOM element to modify\n * @param className - Class name to add\n */\nexport function addClass(element: HTMLElement, className: string): void {\n if (!hasClass(element, className)) {\n element.classList.add(className);\n }\n}\n\n/**\n * Remove class from element if present\n * @param element - DOM element to modify\n * @param className - Class name to remove\n */\nexport function removeClass(element: HTMLElement, className: string): void {\n if (hasClass(element, className)) {\n element.classList.remove(className);\n }\n}\n\n/**\n * Toggle class on element\n * @param element - DOM element to modify\n * @param className - Class name to toggle\n * @param force - If true, adds class; if false, removes class\n */\nexport function toggleClass(\n element: HTMLElement, \n className: string, \n force?: boolean\n): void {\n element.classList.toggle(className, force);\n} ","/**\n * Icon path definitions for common Phosphor icons\n */\nconst ICON_PATHS: Record<string, string> = {\n House: 'M240 121.6V240h-48v-72a24 24 0 0 0-24-24h-80a24 24 0 0 0-24 24v72H16V121.6a16 16 0 0 1 5.4-12L111.4 29a16 16 0 0 1 21.2 0l90 80.6a16 16 0 0 1 5.4 12Z',\n Package: 'M223.68 66.15 135.68 18a15.88 15.88 0 0 0-15.36 0l-88 48.13a16 16 0 0 0-8.32 14v95.64a16 16 0 0 0 8.32 14l88 48.17a15.88 15.88 0 0 0 15.36 0l88-48.17a16 16 0 0 0 8.32-14V80.18a16 16 0 0 0-8.32-14.03ZM128 32.59l74.12 40.55-32 17.56-74.12-40.55ZM96 68.08l73.56 40.23-32.04 17.53L64 85.64ZM40 95.83l72 39.39v79.23l-72-39.4Zm144 79.22v-79.23l72-39.39v79.22Z',\n Folder: 'M216 72h-84.7L104.4 44.2A16.05 16.05 0 0 0 92.7 40H40a16 16 0 0 0-16 16v144.3a15.91 15.91 0 0 0 15.9 15.7h176.2a15.91 15.91 0 0 0 15.9-15.7V88a16 16 0 0 0-16-16Z',\n Tag: 'M246.15 128.6 183.06 65.5l.09-24.21A16.05 16.05 0 0 0 167 25.14l-24.1.09L79.4 88.85a16 16 0 0 0 0 22.63l67.26 67.27a16 16 0 0 0 22.63 0l76.86-76.86a16 16 0 0 0 0-23.29ZM160 152l-56-56 56-56 56 56Zm-16-72a16 16 0 1 1-16 16 16 16 0 0 1 16-16Z',\n CaretRight: 'M181.66 133.66l-80 80A8 8 0 0 1 88 208V48a8 8 0 0 1 13.66-5.66l80 80a8 8 0 0 1 0 11.32Z',\n CaretDown: 'M208 96v16a8 8 0 0 1-2.34 5.66l-80 80a8 8 0 0 1-11.32 0l-80-80A8 8 0 0 1 32 112V96a8 8 0 0 1 8-8h160a8 8 0 0 1 8 8Z',\n User: 'M230.92 212c-15.23-26.33-38.7-45.21-66.09-54.16a72 72 0 1 0-73.66 0c-27.39 8.94-50.86 27.82-66.09 54.16a8 8 0 1 0 13.85 8c18.84-32.56 52.14-52 89.07-52s70.23 19.44 89.07 52a8 8 0 1 0 13.85-8ZM72 96a56 56 0 1 1 56 56 56.06 56.06 0 0 1-56-56Z',\n Home: 'M224 115.55V208a16 16 0 0 1-16 16h-40a16 16 0 0 1-16-16v-40a8 8 0 0 0-8-8h-32a8 8 0 0 0-8 8v40a16 16 0 0 1-16 16H48a16 16 0 0 1-16-16v-92.45a16 16 0 0 1 5.17-11.78l80-75.48a16 16 0 0 1 21.66 0l80 75.48a16 16 0 0 1 5.17 11.78Z',\n // Added icons for DatePicker\n X: 'M205.66 194.34a8 8 0 0 1-11.32 11.32L128 139.31l-66.34 66.35a8 8 0 0 1-11.32-11.32L116.69 128 50.34 61.66a8 8 0 0 1 11.32-11.32L128 116.69l66.34-66.35a8 8 0 0 1 11.32 11.32L139.31 128l66.35 66.34Z',\n Calendar: 'M208 32h-24v-8a8 8 0 0 0-16 0v8H88v-8a8 8 0 0 0-16 0v8H48a16 16 0 0 0-16 16v160a16 16 0 0 0 16 16h160a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16ZM72 48v8a8 8 0 0 0 16 0v-8h80v8a8 8 0 0 0 16 0v-8h24v32H48V48Zm136 160H48V96h160v112Z',\n CaretDoubleLeft: 'M181.66 181.66a8 8 0 0 1-11.32 0L120 131.31V160a8 8 0 0 1-13.66 5.66l-48-48a8 8 0 0 1 0-11.32l48-48A8 8 0 0 1 120 64v28.69l50.34-50.35a8 8 0 0 1 11.32 11.32l-56 56a8 8 0 0 1-11.32 0L102.63 98 64 128l38.63 30L114.34 146.63a8 8 0 0 1 11.32 0l56 56a8 8 0 0 1 0 11.32Z',\n CaretDoubleRight: 'M74.34 181.66a8 8 0 0 0 11.32 0L136 131.31V160a8 8 0 0 0 13.66 5.66l48-48a8 8 0 0 0 0-11.32l-48-48A8 8 0 0 0 136 64v28.69L85.66 42.34a8 8 0 0 0-11.32 11.32l56 56a8 8 0 0 0 11.32 0l11.71-11.71L192 128l-38.63 30-11.71-11.71a8 8 0 0 0-11.32 0l-56 56a8 8 0 0 0 0 11.32Z'\n};\n\n/**\n * Create a Phosphor icon SVG element\n * @param name - Icon name\n * @param size - Icon size in pixels\n * @returns SVG element as HTML string\n */\nexport function createPhosphorIcon(name: string, size: number = 16): string {\n const path = ICON_PATHS[name] || '';\n \n if (!path) {\n console.warn(`Icon \"${name}\" not found in icon library`);\n }\n \n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\" fill=\"currentColor\" viewBox=\"0 0 256 256\">\n <path d=\"${path}\"></path>\n </svg>`;\n}\n\n/**\n * Create an icon element\n * @param name - Icon name\n * @param size - Icon size in pixels\n * @param className - Additional CSS class name\n * @returns Icon element\n */\nexport function createIconElement(\n name: string,\n size: number = 16,\n className: string = ''\n): HTMLSpanElement {\n const iconElement = document.createElement('span');\n iconElement.className = className || 'c-icon';\n iconElement.style.display = 'inline-flex';\n iconElement.style.alignItems = 'center';\n iconElement.style.justifyContent = 'center';\n iconElement.innerHTML = createPhosphorIcon(name, size);\n \n return iconElement;\n}\n\n/**\n * Get all available icon names\n * @returns Array of icon names\n */\nexport function getAvailableIcons(): string[] {\n return Object.keys(ICON_PATHS);\n} ","// Export all components explicitly\nexport * from './components';\n\n\n// Default export for backward compatibility\nimport * as components from './components';\nimport * as utilities from './lib';\n\nconst Atomix = {\n ...components,\n ...utilities,\n} as any;\n\nexport default Atomix;"],"names":["inProgress","dataWebpackPrefix","f","k","Symbol","for","l","m","Object","prototype","hasOwnProperty","n","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","p","key","ref","__self","__source","q","c","a","g","b","d","e","h","call","defaultProps","$$typeof","type","props","_owner","current","exports","Fragment","jsx","jsxs","THEME_COLORS","SIZES","CLASS_PREFIX","COMPONENT","UTILITY","LAYOUT","OBJECT","BUTTON","BASE_CLASS","ICON_CLASS","VARIANT_PREFIX","CALLOUT","CONTENT_CLASS","MESSAGE_CLASS","TITLE_CLASS","TEXT_CLASS","ACTIONS_CLASS","CLOSE_BTN_CLASS","CLASSES","ONELINE","TOAST","HIDE","ACCORDION","SELECTORS","HEADER","PANEL","BODY","IS_OPEN","IS_ANIMATING","IS_DISABLED","ATTRIBUTES","ARIA_EXPANDED","ARIA_CONTROLS","ARIA_HIDDEN","ROLE","CSS_VARS","PANEL_HEIGHT","BADGE","SIZE_PREFIX","LIST","ITEM_CLASS","ORDERED","INLINE","LIST_GROUP","BREADCRUMB","ITEM","LINK","BASE","ACTIVE","DEFAULTS","DIVIDER","COUNTDOWN","TIME","TIME_COUNT","TIME_LABEL","SEPARATOR","FOCUSED","SHOW","HERO","CONTAINER","GRID","CONTENT","SUBTITLE","TITLE","TEXT","ACTIONS","IMAGE","BG","BG_IMAGE","OVERLAY","IMAGE_WRAPPER","CENTER","RIGHT","LEFT","FULL_VH","TOOLTIP","TRIGGER","ARROW","IS_ACTIVE","TOP","BOTTOM","TOP_LEFT","TOP_RIGHT","BOTTOM_LEFT","BOTTOM_RIGHT","POSITION","CONTENT_ID","OFFSET","DELAY","POPOVER","CONTENT_INNER","AUTO","TOGGLE","IS_ON","TAB","NAV_ITEMS","NAV_BTN","PANELS","PANEL_BODIES","ACTIVE_INDEX","STEPS","LINE","NUMBER","VERTICAL","COMPLETED","TESTIMONIAL","QUOTE","AUTHOR","AUTHOR_AVATAR","AUTHOR_INFO","AUTHOR_NAME","AUTHOR_ROLE","SMALL","LARGE","SPINNER","PRIMARY","SECONDARY","SUCCESS","INFO","WARNING","DANGER","LIGHT","DARK","VISUALLY_HIDDEN","SECTION_INTRO","LABEL","RIVER","ROW","CONTENT_COL","CONTENT_COL_TITLE","CONTENT_COL_TEXT","VISUAL","BREAKOUT","REVERSE","CONTENT_WIDTH","UPLOAD","INNER","ICON","HELPER_TEXT","LOADER","LOADER_STATUS","LOADER_TITLE","LOADER_PROGRESS","LOADER_PAR","LOADER_TIME","LOADER_CONTROL","LOADER_BAR","LOADER_CLOSE","DISABLED","ERROR","LOADING","DRAGGING","PERCENTAGE","NAVBAR","BRAND","COLLAPSE","TOGGLER","FIXED","FIXED_BOTTOM","EXPANDED","NAV","DROPDOWN","DROPDOWN_MENU","MEGA_MENU","END","RATING","STAR","STAR_FULL","STAR_HALF","FULL","HALF","READONLY","VALUE","EDGE_PANEL","BACKDROP","CLOSE","START","TRANSFORM_VALUES","start","end","top","bottom","ANIMATION_DURATION","DATA_TABLE_CLASSES","base","container","tableWrapper","header","headerCell","headerContent","sortable","sortIcon","row","cell","loadingCell","loadingIndicator","emptyCell","toolbar","search","searchInput","pagination","striped","bordered","dense","loading","open","DATA_TABLE_SELECTORS","TABLE","HEADER_CELL","CELL","PAGINATION","PAGINATION_BUTTON","SEARCH_INPUT","PAGINATION_DEFAULTS","currentPage","totalPages","siblingCount","showFirstLastButtons","showPrevNextButtons","size","TODO","ITEM_CONTENT","ITEM_TEXT","ITEM_ACTIONS","CHECKBOX","DELETE_BUTTON","FORM","INPUT","ADD_BUTTON","GROUP","HELPER","FIELD","REQUIRED","FORM_GROUP","INVALID","VALID","RADIO","CARD","FOOTER","FLAT","FLIPPED","CLICKABLE","HOVER","SELECT","SELECTED","SELECT_BODY","SELECT_PANEL","SELECT_ITEMS","SELECT_ITEM","ITEM_LABEL","ITEM_INPUT","OPTION","TOGGLE_ICON","ICON_CARET","TEXTAREA","AVATAR","INITIALS","XS","SM","MD","LG","XL","CIRCLE","AVATAR_GROUP","MORE","STACKED","MODAL","OPEN_BUTTON","CLOSE_BUTTONS","DIALOG","DEFAULT_OPTIONS","openELm","closeELms","modalDialogELm","backdropELm","backdrop","keyboard","MESSAGES","ITEMS","FILE","CONTENT_SELF","NAME","FILE_ICON","FILE_DETAILS","FILE_NAME","FILE_SIZE","INPUT_GROUP","OPTIONS","OPTION_ICON","SUBMIT","MENU","MENU_WRAPPER","MENU_INNER","MENU_ITEM","PLACEMENT","MIN_WIDTH","ANIMATION_TIMING","PROGRESS","BAR","ARIA_VALUEMIN","ARIA_VALUEMAX","ARIA_VALUENOW","ARIA_LABEL","DATEPICKER","CALENDAR","DAY","MONTH","YEAR","WEEKDAYS","TODAY_BUTTON","CLEAR_BUTTON","CLOSE_BUTTON","NAV_BUTTON","VIEW_SWITCH","IS_SELECTED","IS_TODAY","FORMAT","MIN_DATE","MAX_DATE","CLEARABLE","SHOW_TODAY","SHOW_WEEK_NUMBERS","SHOW_TODAY_BUTTON","PHOTOVIEWER","SELECTOR","CLASS","startIndex","zoomLevel","fullscreen","module","require","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","__esModule","definition","o","defineProperty","enumerable","get","chunkId","Promise","all","keys","reduce","promises","u","globalThis","this","Function","window","obj","prop","url","done","push","script","needAttach","scripts","document","getElementsByTagName","i","length","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","forEach","fn","setTimeout","bind","target","head","appendChild","r","toStringTag","value","scriptUrl","importScripts","location","currentScript","tagName","toUpperCase","test","Error","replace","installedChunks","j","installedChunkData","promise","resolve","reject","error","errorType","realSrc","message","name","request","webpackJsonpCallback","parentChunkLoadingFunction","data","chunkIds","moreModules","runtime","some","id","chunkLoadingGlobal","self","useAccordion","initialProps","defaultOpen","disabled","iconPosition","isControlled","isOpen","internalOpen","setInternalOpen","useState","panelHeight","setPanelHeight","panelRef","useRef","contentRef","updatePanelHeight","height","clientHeight","style","setProperty","useEffect","handleResize","addEventListener","removeEventListener","state","toggle","onOpenChange","generateClassNames","arguments","trim","generateHeaderClassNames","Accordion","_ref","title","children","controlledOpen","icon","className","instanceId","useId","buttonId","panelId","defaultIcon","_jsx","xmlns","width","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","points","_jsxs","onClick","role","displayName","sizeMap","xs","sm","md","lg","xl","Icon","weight","color","alt","IconComponent","PhosphorIcons","Avatar","initials","circle","imageError","setImageError","avatarClasses","filter","Boolean","join","tabIndex","onError","handleImageError","useBadge","variant","generateBadgeClass","Badge","label","badgeClass","Breadcrumb","items","ariaLabel","breadcrumbClasses","map","item","index","itemClasses","active","linkContent","_Fragment","href","useButton","rounded","generateButtonClass","iconOnly","handleClick","handler","Button","forwardRef","as","Component","buttonProps","Callout","onClose","actions","oneLine","toast","generateCalloutClass","handleClose","useCallout","getAriaAttributes","baseAttributes","includes","Card","image","imageAlt","text","footer","flat","rest","cardClasses","substring","ColorModeToggle","colorMode","setColorMode","storedColorMode","localStorage","getItem","matchMedia","matches","documentElement","setItem","darkModeMediaQuery","handleSystemThemeChange","addListener","removeListener","toggleColorMode","prevMode","Countdown","show","separator","focused","onComplete","targetDate","Date","now","setNow","completed","setCompleted","interval","setInterval","clearInterval","diff","getTime","days","hours","minutes","seconds","totalSeconds","Math","max","floor","getTimeParts","timeParts","part","idx","React","String","padStart","useDataTable","columns","paginated","pageSize","onSort","initialSortConfig","sortConfig","setSortConfig","setCurrentPage","searchQuery","setSearchQuery","handleSort","useCallback","direction","newSortConfig","handlePageChange","page","ceil","handleSearch","query","filteredData","useMemo","lowercaseQuery","toLowerCase","column","sortedData","sort","aValue","bValue","localeCompare","paginatedData","slice","displayData","DOTS","range","Array","from","_","usePagination","onPageChange","paginationRange","leftSiblingIndex","rightSiblingIndex","min","shouldShowLeftDots","shouldShowRightDots","lastPageIndex","rightRange","middleRange","goToPage","nextPage","prevPage","firstPage","lastPage","useSpinner","generateSpinnerClass","baseClass","Spinner","spinnerClass","PaginationNavButton","iconName","Pagination","_ref2","pageNumber","isActive","DataTable","filterable","emptyMessage","onRowClick","tableRef","tableClass","placeholder","onChange","colSpan","rowIndex","colIndex","render","getMonthName","month","date","setMonth","toLocaleString","getDaysInMonth","year","getDate","formatDate","format","day","getMonth","getFullYear","useDatePicker","selectionMode","startDate","endDate","onRangeChange","minDate","maxDate","inline","setIsOpen","inputValue","setInputValue","rangeInputValue","setRangeInputValue","viewDate","setViewDate","viewMode","setViewMode","rangeSelectionState","setRangeSelectionState","datePickerRef","inputRef","today","currentMonth","currentYear","daysInMonth","firstDayOfMonth","getDay","handleDateSelect","selectedDate","handlePrevMonth","handleNextMonth","handlePrevYear","handleNextYear","switchToMonthView","switchToYearView","selectMonth","selectYear","handleTodayClick","todayDate","handleClear","handleInputChange","parsedDate","isNaN","parts","split","startPart","endPart","parsedStart","parsedStartDate","parsedEndDate","handleInputFocus","handleClickOutside","contains","generateDays","prevMonthDays","isCurrentMonth","remainingDays","generateMonths","months","generateYears","years","startYear","isDateSelectable","isDateInRange","isDateSelected","isStartDate","isEndDate","isDateInSelectedRange","isToday","getWeekNumber","valueOf","dayNr","setDate","firstThursday","DatePicker","readOnly","clearable","showTodayButton","showWeekNumbers","placement","inputClassName","rangeStartDate","useImperativeHandle","close","clear","focus","datepickerClassName","inputClasses","datepickerId","random","toString","calendarId","displayValue","onFocus","dateObj","isSelectable","isSelected","isTodayDate","dateValue","isInRange","isStartOfRange","isEndOfRange","weekNum","toLocaleDateString","monthObj","DropdownContext","createContext","trigger","Dropdown","_ref4","menu","offset","controlledIsOpen","closeOnClickOutside","closeOnEscape","maxHeight","minWidth","uncontrolledIsOpen","setUncontrolledIsOpen","dropdownRef","toggleRef","menuRef","dropdownId","nextIsOpen","handleKeyDown","focusableItems","querySelectorAll","currentIndex","findIndex","activeElement","preventDefault","handleToggleClick","stopPropagation","handleToggleKeyDown","firstItem","querySelector","handleHoverOpen","dropdownClasses","menuStyleProps","onMouseEnter","onKeyDown","Provider","useEdgePanel","position","mode","closeOnBackdropClick","containerRef","backdropRef","adjustBodyPadding","clientWidth","paddingProperty","charAt","body","classList","add","resetBodyPadding","remove","openPanel","transform","closePanel","handleEscapeKey","handleBackdropClick","currentTarget","generateEdgePanelClass","propIsOpen","EdgePanel","isOpenState","panelClass","useForm","generateFormClass","handleSubmit","handleReset","Form","onSubmit","onReset","method","encType","noValidate","autoComplete","formClass","useInput","invalid","valid","generateInputClass","validationClass","Input","onBlur","required","autoFocus","maxLength","minLength","pattern","step","ariaDescribedBy","inputClass","useTextarea","generateTextareaClass","Textarea","rows","cols","textareaClass","useHero","heroRef","videoRef","parallaxHandlerRef","alignment","imageColSize","contentColSize","showOverlay","fullViewportHeight","contentWidth","parallax","parallaxIntensity","hasBackgroundImage","backgroundImageSrc","hasForegroundImage","imageSrc","useGridLayout","applyParallaxEffect","element","safeIntensity","handleScroll","pageYOffset","bgElement","removeParallaxEffect","heroElement","generateHeroClassNames","baseClassName","classes","videoBackground","generateImageColClass","generateContentColClass","useRiver","center","breakout","reverse","generateRiverClassNames","generateContentClass","generateVisualClass","textContent","useNavbar","collapsible","isExpanded","setIsExpanded","generateNavbarClass","generateContainerStyle","maxWidth","generateCollapseClass","expanded","toggleExpanded","newState","onToggle","getExpandedState","controlled","useNav","generateNavClass","useNavItem","dropdown","megaMenu","generateNavItemClass","generateNavLinkClass","useNavDropdown","isInFixedBottomNavbar","generateDropdownMenuClass","alignmentClass","getIconClass","getIconName","getRandomValues","rnds8","Uint8Array","crypto","uuid","byteToHex","arr","TypeError","v","parseInt","v35","version","hashfunc","generateUUID","namespace","buf","_namespace","str","unescape","encodeURIComponent","bytes","charCodeAt","stringToBytes","set","err","DNS","URL","getOutputLength","inputLength8","safeAdd","x","y","lsw","md5cmn","t","num","cnt","md5ff","md5gg","md5hh","md5ii","msg","input","output","length32","hexTab","hex","md5ToHexEncodedArray","len","olda","oldb","oldc","oldd","wordsToMd5","length8","Uint32Array","bytesToWords","randomUUID","options","rnds","rng","z","ROTL","K","H","isArray","N","M","W","T","useTodo","showCompleted","setItems","inputText","setInputText","addTodo","newItem","uuidv4","prevItems","toggleTodo","updatedItem","deleteTodo","initialLength","onAddTodo","generateTodoClasses","generateItemClasses","getFilteredItems","useFormGroup","generateFormGroupClass","useSelect","generateSelectClass","CHECKBOX_CLASSES","MIXED","useCheckbox","indeterminate","checkboxRef","generateCheckboxClass","useRadio","generateRadioClass","useModal","isOpenProp","onOpen","setIsOpenState","updateOpen","useBreadcrumb","initialOptions","defaultOptions","divider","generateBreadcrumbClass","generateItemClass","isLast","isItemLink","parseItemsFromJson","jsonString","JSON","parse","useCard","elevationEffect","elevationClass","flipEffect","flipTrigger","focusEffect","clickable","cardRef","frontRef","backRef","isFlipped","setIsFlipped","isElevated","setIsElevated","isFocused","setIsFocused","isHovered","setIsHovered","handleMouseEnter","handleMouseLeave","handleFocus","handleBlur","getCardProps","tabxwIndex","onMouseLeave","Select","multiple","selectClass","selectedLabel","setSelectedLabel","bodyRef","nativeSelectRef","selectedOption","find","opt","display","option","handleToggle","handleItemClick","htmlFor","checked","Checkbox","checkboxClass","Radio","radioClass","Hero","subtitle","videoOptions","autoplay","loop","muted","heroStyle","renderVideoBackground","posterUrl","autoPlay","playsInline","poster","pop","renderContent","renderForegroundImage","List","listClasses","child","AvatarGroup","stacked","moreText","avatarGroupClasses","avatarChildren","Children","toArray","isValidElement","showMoreIndicator","visibleAvatars","hiddenAvatarCount","firstAvatar","avatarSize","moreClasses","cloneElement","useMessages","onSendMessage","shiftKey","Messages","messages","otherAvatar","selfAvatar","otherName","bodyHeight","messagesId","substr","inputId","isSelf","time","file","Modal","closeButton","modalRef","dialogRef","handleKeydown","modalClasses","Navbar","brand","containerWidth","navbarExpanded","setNavbarExpanded","collapseRef","innerWidth","navbarClass","containerStyle","collapseClass","PhotoViewerHeader","imagesLength","onZoomOut","onResetZoom","onZoomIn","onToggleFullscreen","isFullscreen","onRotate","onDownload","onShare","showInfo","onToggleInfo","currentImage","navigator","PhotoViewerNavigation","onPrev","onNext","enableKeyboardNav","PhotoViewerImage","imageRef","dragPosition","isDragging","rotationAngle","isTransitioning","onMouseDown","onMouseMove","onMouseUp","onWheel","onTouchStart","onTouchMove","onTouchEnd","onDoubleClick","internalContainerRef","effectiveContainerRef","isMounted","setIsMounted","handleWheelEvent","handleTouchStartEvent","handleTouchMoveEvent","handleTouchEndEvent","passive","cursor","opacity","touchAction","transition","transformOrigin","willChange","draggable","onContextMenu","PhotoViewerThumbnails","images","goToImage","thumbnail","PhotoViewerInfo","description","author","tags","tag","PhotoViewer","enableKeyboardNavigation","enableGestures","enableFullscreen","thumbnailPosition","onImageChange","imagePosition","setZoomLevel","setIsFullscreen","setRotationAngle","setShowInfo","closeModal","goToPrevious","goToNext","setCurrentIndex","handleMouseDown","handleMouseMove","handleMouseUp","handleWheel","handleTouchStart","handleTouchMove","handleTouchEnd","handleDoubleClick","resetImageState","isModalOpen","setIsModalOpen","setIsDragging","startDragPosition","setStartDragPosition","imageStates","setImageStates","setIsTransitioning","momentumZoom","setMomentumZoom","velocity","timestamp","touchPointsRef","lastDistanceRef","lastMidpointRef","lastWheelTime","momentumTimeoutRef","calculateBounds","rotation","minX","maxX","minY","maxY","naturalWidth","imageWidth","imageHeight","naturalHeight","containerRect","getBoundingClientRect","containerHeight","rotationRad","PI","cos","abs","sin","aspectRatio","displayWidth","displayHeight","scaledHeight","constrainPosition","bounds","updateImageBounds","currentState","newBounds","constrainedPosition","complete","openModal","zoom","newZoom","clampedZoom","setImagePosition","newPosition","normalizedRotation","testRect","isMac","platform","isTrackpadPinch","ctrlKey","hasHorizontalScroll","deltaX","zoomAmount","shouldPreventDefault","deltaY","currentTime","timeDelta","rect","applyMomentum","newVelocity","momentumZoomAmount","requestAnimationFrame","cursorX","clientX","left","cursorY","clientY","oldZoom","zoomFactor","touches","touch","dx","dy","sqrt","distance","zoomDelta","currentMidpoint","midpointX","midpointY","usePhotoViewer","processedImages","img","photoViewerClasses","handleFullscreenChange","fullscreenElement","handleToggleFullscreen","exitFullscreen","requestFullscreen","handleRotate","angle","handleDownload","link","download","click","async","share","usePopover","delay","currentPosition","setCurrentPosition","triggerRef","popoverRef","arrowRef","timeoutRef","popoverId","newIsOpen","handleTriggerMouseEnter","handleTriggerMouseLeave","handlePopoverMouseEnter","handlePopoverMouseLeave","updatePosition","triggerRect","popoverRect","viewportWidth","viewportHeight","innerHeight","isNearViewportEdge","right","spaceTop","spaceBottom","spaceLeft","spaceRight","bestPosition","spaces","space","absoluteTop","scrollY","absoluteLeft","scrollX","scrollTimeout","intervalId","PopoverContext","triggerType","Popover","content","createPortal","useRating","maxValue","allowHalf","internalValue","setInternalValue","hoverValue","setHoverValue","focusedIndex","setFocusedIndex","currentValue","starValue","newValue","setFocused","setRef","useForkRef","refA","refB","refValue","Rating","valueProp","defaultValue","useVanillaJS","restProps","internalRef","ratingInstance","starRect","then","default","RatingClass","destroy","updateOptions","ratingClasses","effectiveValue","renderStars","stars","roundedValue","round","componentId","starClass","focusable","clipPath","ProductReview","productName","productImage","initialRating","maxRating","ratingColor","rating","setRating","comment","setComment","submitted","setSubmitted","reviewRef","reviewInstance","ProductReviewClass","catch","containerClasses","toFixed","Event","Progress","progressValue","progressStyle","progressClasses","useProgress","River","contentColumns","riverRef","riverInstance","RiverClass","riverStyle","renderBackground","renderImage","paragraph","SectionIntro","skeleton","sectionIntroRef","sectionIntroInstance","SectionIntroClass","sectionIntroClasses","Steps","activeIndex","vertical","onStepChange","currentStep","setCurrentStep","stepsRef","stepsInstance","StepsClass","setActive","number","Tab","onTabChange","currentTab","setCurrentTab","tabRef","tabInstance","TabClass","handleTabClick","overflow","Testimonial","quote","testimonialRef","testimonialInstance","TestimonialClass","testimonialClasses","avatarSrc","avatarAlt","Todo","onToggleTodo","onDeleteTodo","localItems","setLocalItems","filteredItems","todoClass","newTodo","handleDelete","Toggle","initialOn","onToggleOn","onToggleOff","isOn","setIsOn","toggleInstance","ToggleClass","handleToggleOn","handleToggleOff","turnOn","turnOff","activeClass","contentIdAttr","positionAttr","triggerAttr","Tooltip","constructor","selector","$element","hideTimeout","$trigger","$content","_initialize","_initializeElements","_setPosition","_bindEvents","parentContainer","parentElement","customPosition","customTrigger","_handleTriggerEnter","_handleTriggerLeave","_handleTriggerClick","hide","isInitialized","isVisible","getElement","getTriggerElement","getPosition","setPosition","showEvent","CustomEvent","bubbles","cancelable","detail","tooltip","dispatchEvent","defaultPrevented","hideEvent","initializeAll","elements","tooltipRef","tooltipInstance","TooltipClass","Upload","maxSizeInMB","acceptedFileTypes","supportedFilesText","buttonText","helperText","onFileSelect","onFileUpload","onFileUploadComplete","onFileUploadError","uploadRef","uploadInstance","status","setStatus","currentFile","setCurrentFile","uploadProgress","setUploadProgress","timeLeft","setTimeLeft","errorMessage","setErrorMessage","successMessage","setSuccessMessage","dragCounter","UploadClass","progress","handleFiles","files","validFiles","validateFile","simulateUpload","endsWith","mainType","startsWith","uploadClasses","onDragEnter","onDragLeave","onDragOver","onDrop","dataTransfer","handleButtonClick","accept","cx","cy","hasClass","addClass","removeClass","toggleClass","force","ICON_PATHS","House","Package","Folder","Tag","CaretRight","CaretDown","User","Home","X","Calendar","CaretDoubleLeft","CaretDoubleRight","createPhosphorIcon","path","createIconElement","iconElement","alignItems","justifyContent","innerHTML","getAvailableIcons","components","utilities"],"sourceRoot":""}
1
+ {"version":3,"file":"js/atomix.react.cjs.js","mappings":"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","sources":["webpack://@shohojdhara/atomix/webpack/runtime/load script","webpack://@shohojdhara/atomix/./node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://@shohojdhara/atomix/./src/lib/constants/components.ts","webpack://@shohojdhara/atomix/./node_modules/react/jsx-runtime.js","webpack://@shohojdhara/atomix/external commonjs2 \"react\"","webpack://@shohojdhara/atomix/webpack/bootstrap","webpack://@shohojdhara/atomix/webpack/runtime/compat get default export","webpack://@shohojdhara/atomix/webpack/runtime/define property getters","webpack://@shohojdhara/atomix/webpack/runtime/ensure chunk","webpack://@shohojdhara/atomix/webpack/runtime/get javascript chunk filename","webpack://@shohojdhara/atomix/webpack/runtime/global","webpack://@shohojdhara/atomix/webpack/runtime/hasOwnProperty shorthand","webpack://@shohojdhara/atomix/webpack/runtime/make namespace object","webpack://@shohojdhara/atomix/webpack/runtime/publicPath","webpack://@shohojdhara/atomix/webpack/runtime/jsonp chunk loading","webpack://@shohojdhara/atomix/./src/lib/composables/useAccordion.ts","webpack://@shohojdhara/atomix/./src/components/Accordion/Accordion.tsx","webpack://@shohojdhara/atomix/external commonjs2 \"phosphor-react\"","webpack://@shohojdhara/atomix/./src/components/Icon/Icon.tsx","webpack://@shohojdhara/atomix/./src/components/Avatar/Avatar.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useBadge.ts","webpack://@shohojdhara/atomix/./src/components/Badge/Badge.tsx","webpack://@shohojdhara/atomix/./src/components/Breadcrumb/Breadcrumb.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useButton.ts","webpack://@shohojdhara/atomix/./src/components/Button/Button.tsx","webpack://@shohojdhara/atomix/./src/components/Button/index.ts","webpack://@shohojdhara/atomix/./src/components/Callout/Callout.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useCallout.ts","webpack://@shohojdhara/atomix/./src/components/Card/Card.tsx","webpack://@shohojdhara/atomix/./src/components/ColorModeToggle/ColorModeToggle.tsx","webpack://@shohojdhara/atomix/./src/components/Countdown/Countdown.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useDataTable.ts","webpack://@shohojdhara/atomix/./src/lib/composables/usePagination.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useSpinner.ts","webpack://@shohojdhara/atomix/./src/components/Spinner/Spinner.tsx","webpack://@shohojdhara/atomix/./src/components/Pagination/Pagination.tsx","webpack://@shohojdhara/atomix/./src/components/DataTable/DataTable.tsx","webpack://@shohojdhara/atomix/./src/components/DatePicker/utils.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useDatePicker.ts","webpack://@shohojdhara/atomix/./src/components/DatePicker/DatePicker.tsx","webpack://@shohojdhara/atomix/./src/components/Dropdown/Dropdown.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useEdgePanel.ts","webpack://@shohojdhara/atomix/./src/components/EdgePanel/EdgePanel.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useForm.ts","webpack://@shohojdhara/atomix/./src/components/Form/Form.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useInput.ts","webpack://@shohojdhara/atomix/./src/components/Form/Input.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useTextarea.ts","webpack://@shohojdhara/atomix/./src/components/Form/Textarea.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useHero.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useRiver.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useNavbar.ts","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/rng.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/regex.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/validate.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/stringify.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/parse.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/v35.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/md5.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/v3.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/native.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/v4.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/sha1.js","webpack://@shohojdhara/atomix/./node_modules/uuid/dist/esm-browser/v5.js","webpack://@shohojdhara/atomix/./src/lib/composables/useTodo.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useFormGroup.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useSelect.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useCheckbox.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useRadio.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useModal.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useBreadcrumb.ts","webpack://@shohojdhara/atomix/./src/lib/composables/useCard.ts","webpack://@shohojdhara/atomix/./src/components/Form/Select.tsx","webpack://@shohojdhara/atomix/./src/components/Form/Checkbox.tsx","webpack://@shohojdhara/atomix/./src/components/Form/Radio.tsx","webpack://@shohojdhara/atomix/./src/components/Hero/Hero.tsx","webpack://@shohojdhara/atomix/./src/components/List/List.tsx","webpack://@shohojdhara/atomix/./src/components/Avatar/AvatarGroup.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useMessages.ts","webpack://@shohojdhara/atomix/./src/components/Messages/Messages.tsx","webpack://@shohojdhara/atomix/./src/components/Modal/Modal.tsx","webpack://@shohojdhara/atomix/./src/components/Navbar/Navbar.tsx","webpack://@shohojdhara/atomix/./src/components/PhotoViewer/PhotoViewerHeader.tsx","webpack://@shohojdhara/atomix/./src/components/PhotoViewer/PhotoViewerNavigation.tsx","webpack://@shohojdhara/atomix/./src/components/PhotoViewer/PhotoViewerImage.tsx","webpack://@shohojdhara/atomix/./src/components/PhotoViewer/PhotoViewerThumbnails.tsx","webpack://@shohojdhara/atomix/./src/components/PhotoViewer/PhotoViewerInfo.tsx","webpack://@shohojdhara/atomix/./src/components/PhotoViewer/PhotoViewer.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/usePhotoViewer.ts","webpack://@shohojdhara/atomix/external commonjs2 \"react-dom\"","webpack://@shohojdhara/atomix/./src/lib/composables/usePopover.ts","webpack://@shohojdhara/atomix/./src/components/Popover/Popover.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useRating.ts","webpack://@shohojdhara/atomix/./src/lib/utils/useForkRef.ts","webpack://@shohojdhara/atomix/./src/components/Rating/Rating.tsx","webpack://@shohojdhara/atomix/./src/components/ProductReview/ProductReview.tsx","webpack://@shohojdhara/atomix/./src/components/Progress/Progress.tsx","webpack://@shohojdhara/atomix/./src/lib/composables/useProgress.ts","webpack://@shohojdhara/atomix/./src/components/River/River.tsx","webpack://@shohojdhara/atomix/./src/components/SectionIntro/SectionIntro.tsx","webpack://@shohojdhara/atomix/./src/components/Steps/Steps.tsx","webpack://@shohojdhara/atomix/./src/components/Tab/Tab.tsx","webpack://@shohojdhara/atomix/./src/components/Testimonial/Testimonial.tsx","webpack://@shohojdhara/atomix/./src/components/Todo/Todo.tsx","webpack://@shohojdhara/atomix/./src/components/Toggle/Toggle.tsx","webpack://@shohojdhara/atomix/./src/components/Tooltip/scripts/index.ts","webpack://@shohojdhara/atomix/./src/components/Tooltip/Tooltip.tsx","webpack://@shohojdhara/atomix/./src/components/Upload/Upload.tsx","webpack://@shohojdhara/atomix/./src/components/AtomixLogo/AtomixLogo.tsx","webpack://@shohojdhara/atomix/./src/lib/utils/dom.ts","webpack://@shohojdhara/atomix/./src/lib/utils/icons.ts","webpack://@shohojdhara/atomix/./src/index.ts"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"@shohojdhara/atomix:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","import { ThemeColor, Size } from '../types/components';\n\n/**\n * Default theme colors for components\n */\nexport const THEME_COLORS: ThemeColor[] = [\n 'primary',\n 'secondary',\n 'success',\n 'info',\n 'warning',\n 'error',\n 'light',\n 'dark'\n];\n\n/**\n * Default sizes for components\n */\nexport const SIZES: Size[] = ['sm', 'md', 'lg'];\n\n/**\n * CSS class prefixes\n */\nexport const CLASS_PREFIX = {\n COMPONENT: 'c-',\n UTILITY: 'u-',\n LAYOUT: 'l-',\n OBJECT: 'o-',\n};\n\n/**\n * Button-specific constants\n */\nexport const BUTTON = {\n BASE_CLASS: 'c-btn',\n ICON_CLASS: 'c-btn__icon',\n VARIANT_PREFIX: 'c-btn--',\n};\n\n/**\n * Callout-specific constants\n */\nexport const CALLOUT = {\n BASE_CLASS: 'c-callout',\n CONTENT_CLASS: 'c-callout__content',\n ICON_CLASS: 'c-callout__icon',\n MESSAGE_CLASS: 'c-callout__message',\n TITLE_CLASS: 'c-callout__title',\n TEXT_CLASS: 'c-callout__text',\n ACTIONS_CLASS: 'c-callout__actions',\n CLOSE_BTN_CLASS: 'c-callout__close-btn',\n VARIANT_PREFIX: 'c-callout--',\n CLASSES: {\n ONELINE: 'c-callout--oneline',\n TOAST: 'c-callout--toast',\n HIDE: 'is-hide'\n }\n};\n\n/**\n * Accordion-specific constants\n */\nexport const ACCORDION = {\n SELECTORS: {\n ACCORDION: '.c-accordion',\n HEADER: '.c-accordion__header',\n PANEL: '.c-accordion__panel',\n BODY: '.c-accordion__body'\n },\n CLASSES: {\n IS_OPEN: 'is-open',\n IS_ANIMATING: 'is-animating',\n IS_DISABLED: 'is-disabled'\n },\n ATTRIBUTES: {\n ARIA_EXPANDED: 'aria-expanded',\n ARIA_CONTROLS: 'aria-controls',\n ARIA_HIDDEN: 'aria-hidden',\n ROLE: 'role'\n },\n CSS_VARS: {\n PANEL_HEIGHT: '--panel-height'\n }\n};\n\n/**\n * Badge-specific constants\n */\nexport const BADGE = {\n BASE_CLASS: 'c-badge',\n ICON_CLASS: 'c-badge__icon',\n VARIANT_PREFIX: 'c-badge--',\n SIZE_PREFIX: 'c-badge--'\n};\n\n/**\n * List-specific constants\n */\nexport const LIST = {\n BASE_CLASS: 'c-list',\n ITEM_CLASS: 'c-list__item',\n VARIANT_PREFIX: 'c-list--',\n SIZE_PREFIX: 'c-list--',\n CLASSES: {\n ORDERED: 'c-list--ordered',\n INLINE: 'c-list--inline'\n }\n};\n\n/**\n * List Group-specific constants\n */\nexport const LIST_GROUP = {\n BASE_CLASS: 'c-list-group',\n ITEM_CLASS: 'c-list-group__item',\n VARIANT_PREFIX: 'c-list-group--',\n SIZE_PREFIX: 'c-list-group--',\n};\n\n/**\n * Breadcrumb-specific constants\n */\nexport const BREADCRUMB = {\n SELECTORS: {\n BREADCRUMB: '.c-breadcrumb',\n ITEM: '.c-breadcrumb__item',\n LINK: '.c-breadcrumb__link'\n },\n CLASSES: {\n BASE: 'c-breadcrumb',\n ITEM: 'c-breadcrumb__item',\n LINK: 'c-breadcrumb__link',\n ACTIVE: 'is-active'\n },\n DEFAULTS: {\n DIVIDER: '›'\n }\n};\n\n/**\n * Countdown-specific constants\n */\nexport const COUNTDOWN = {\n SELECTORS: {\n COUNTDOWN: '.c-countdown',\n TIME: '.c-countdown__time',\n TIME_COUNT: '.c-countdown__time-count',\n TIME_LABEL: '.c-countdown__time-label',\n SEPARATOR: '.c-countdown__separator'\n },\n CLASSES: {\n BASE: 'c-countdown',\n FOCUSED: 'c-countdown--focused'\n },\n DEFAULTS: {\n SEPARATOR: ':',\n SHOW: ['days', 'hours', 'minutes', 'seconds']\n }\n};\n\n/**\n * Hero-specific constants\n */\nexport const HERO = {\n SELECTORS: {\n HERO: '.c-hero',\n CONTAINER: '.c-hero__container',\n GRID: '.c-hero__grid',\n CONTENT: '.c-hero__content',\n SUBTITLE: '.c-hero__subtitle',\n TITLE: '.c-hero__title',\n TEXT: '.c-hero__text',\n ACTIONS: '.c-hero__actions',\n IMAGE: '.c-hero__image',\n BG: '.c-hero__bg',\n BG_IMAGE: '.c-hero__bg-image',\n OVERLAY: '.c-hero__overlay',\n IMAGE_WRAPPER: '.c-hero__image-wrapper'\n },\n CLASSES: {\n CENTER: 'c-hero--center',\n RIGHT: 'c-hero--right',\n LEFT: 'c-hero--left',\n FULL_VH: 'c-hero--full-vh'\n }\n};\n\n/**\n * Tooltip-specific constants\n */\nexport const TOOLTIP = {\n SELECTORS: {\n TOOLTIP: '.js-atomix-tooltip',\n TRIGGER: '.js-atomix-tooltip-trigger',\n CONTENT: '.js-atomix-tooltip-content',\n ARROW: '.c-tooltip__arrow'\n },\n CLASSES: {\n IS_ACTIVE: 'is-active',\n TOP: 'c-tooltip--top',\n BOTTOM: 'c-tooltip--bottom',\n LEFT: 'c-tooltip--left',\n RIGHT: 'c-tooltip--right',\n TOP_LEFT: 'c-tooltip--top-left',\n TOP_RIGHT: 'c-tooltip--top-right',\n BOTTOM_LEFT: 'c-tooltip--bottom-left',\n BOTTOM_RIGHT: 'c-tooltip--bottom-right'\n },\n ATTRIBUTES: {\n POSITION: 'data-tooltip-position',\n TRIGGER: 'data-tooltip-trigger',\n CONTENT_ID: 'data-tooltip-id'\n },\n DEFAULTS: {\n TRIGGER: 'hover',\n POSITION: 'top',\n OFFSET: 10,\n DELAY: 200\n }\n};\n\n/**\n * Popover-specific constants\n */\nexport const POPOVER = {\n SELECTORS: {\n POPOVER: '.js-atomix-popover',\n TRIGGER: '.js-atomix-popover-trigger',\n CONTENT: '.js-atomix-popover-content',\n CONTENT_INNER: '.c-popover__content-inner',\n ARROW: '.c-popover__arrow'\n },\n CLASSES: {\n IS_OPEN: 'is-open',\n TOP: 'c-popover--top',\n BOTTOM: 'c-popover--bottom',\n LEFT: 'c-popover--left',\n RIGHT: 'c-popover--right',\n AUTO: 'c-popover--auto'\n },\n ATTRIBUTES: {\n POSITION: 'data-popover-position',\n TRIGGER: 'data-popover-trigger',\n CONTENT_ID: 'data-popover-id'\n },\n DEFAULTS: {\n TRIGGER: 'click',\n POSITION: 'top',\n OFFSET: 12,\n DELAY: 0\n }\n};\n\n/**\n * Toggle-specific constants\n */\nexport const TOGGLE = {\n SELECTORS: {\n TOGGLE: '.c-toggle'\n },\n CLASSES: {\n IS_ON: 'is-on'\n }\n};\n\n/**\n * Tab-specific constants\n */\nexport const TAB = {\n SELECTORS: {\n TAB: '.js-atomix-tab',\n NAV_ITEMS: '.c-tabs__nav-item',\n NAV_BTN: '.c-tabs__nav-btn',\n PANELS: '.c-tabs__panel',\n PANEL_BODIES: '.c-tabs__panel-body'\n },\n CLASSES: {\n ACTIVE: 'is-active'\n },\n DEFAULTS: {\n ACTIVE_INDEX: 0\n }\n};\n\n/**\n * Steps-specific constants\n */\nexport const STEPS = {\n SELECTORS: {\n STEPS: '.c-steps',\n ITEM: '.c-steps__item',\n LINE: '.c-steps__line',\n CONTENT: '.c-steps__content',\n NUMBER: '.c-steps__number',\n TEXT: '.c-steps__text'\n },\n CLASSES: {\n ACTIVE: 'is-active',\n VERTICAL: 'c-steps--vertical',\n COMPLETED: 'is-completed'\n }\n};\n\n/**\n * Testimonial-specific constants\n */\nexport const TESTIMONIAL = {\n SELECTORS: {\n TESTIMONIAL: '.c-testimonial',\n QUOTE: '.c-testimonial__quote',\n AUTHOR: '.c-testimonial__author',\n AUTHOR_AVATAR: '.c-testimonial__author-avatar',\n AUTHOR_INFO: '.c-testimonial__info',\n AUTHOR_NAME: '.c-testimonial__author-name',\n AUTHOR_ROLE: '.c-testimonial__author-role'\n },\n CLASSES: {\n SMALL: 'c-testimonial--sm',\n LARGE: 'c-testimonial--lg'\n }\n};\n\n/**\n * Spinner-specific constants\n */\nexport const SPINNER = {\n SELECTORS: {\n SPINNER: '.c-spinner'\n },\n CLASSES: {\n PRIMARY: 'c-spinner--primary',\n SECONDARY: 'c-spinner--secondary',\n SUCCESS: 'c-spinner--success',\n INFO: 'c-spinner--info',\n WARNING: 'c-spinner--warning',\n DANGER: 'c-spinner--danger',\n LIGHT: 'c-spinner--light',\n DARK: 'c-spinner--dark',\n SMALL: 'c-spinner--sm',\n LARGE: 'c-spinner--lg'\n },\n VISUALLY_HIDDEN: 'u-visually-hidden'\n};\n\n/**\n * SectionIntro-specific constants\n */\nexport const SECTION_INTRO = {\n SELECTORS: {\n SECTION_INTRO: '.c-sectionintro',\n LABEL: '.c-sectionintro__label',\n TITLE: '.c-sectionintro__title',\n TEXT: '.c-sectionintro__text',\n ACTIONS: '.c-sectionintro__actions'\n },\n CLASSES: {\n CENTER: 'c-sectionintro--center',\n LARGE: 'c-sectionintro--lg',\n SMALL: 'c-sectionintro--sm'\n }\n};\n\n/**\n * River-specific constants\n */\nexport const RIVER = {\n SELECTORS: {\n RIVER: '.c-river',\n CONTAINER: '.c-river__container',\n ROW: '.c-river__row',\n CONTENT: '.c-river__content',\n CONTENT_COL: '.c-river__content-col',\n CONTENT_COL_TITLE: '.c-river__content-col--title',\n CONTENT_COL_TEXT: '.c-river__content-col--text',\n TITLE: '.c-river__title',\n TEXT: '.c-river__text',\n ACTIONS: '.c-river__actions',\n VISUAL: '.c-river__visual',\n IMAGE_WRAPPER: '.c-river__image-wrapper',\n IMAGE: '.c-river__image',\n BG: '.c-river__bg',\n BG_IMAGE: '.c-river__bg-image',\n OVERLAY: '.c-river__overlay'\n },\n CLASSES: {\n CENTER: 'c-river--center',\n BREAKOUT: 'c-river--breakout',\n REVERSE: 'c-river--reverse'\n },\n ATTRIBUTES: {\n CONTENT_WIDTH: '--river-content-width'\n }\n};\n\n/**\n * Upload-specific constants\n */\nexport const UPLOAD = {\n SELECTORS: {\n UPLOAD: '.c-upload',\n INNER: '.c-upload__inner',\n ICON: '.c-upload__icon',\n TITLE: '.c-upload__title',\n TEXT: '.c-upload__text',\n BUTTON: '.c-upload__btn',\n HELPER_TEXT: '.c-upload__helper-text',\n LOADER: '.c-upload__loader',\n LOADER_STATUS: '.c-upload__loader-status',\n LOADER_TITLE: '.c-upload__loader-title',\n LOADER_PROGRESS: '.c-upload__loader-progress',\n LOADER_PAR: '.c-upload__loader-par',\n LOADER_TIME: '.c-upload__loader-time',\n LOADER_CONTROL: '.c-upload__loader-control',\n LOADER_BAR: '.c-upload__loader-bar',\n LOADER_CLOSE: '.c-upload__loader-close'\n },\n CLASSES: {\n DISABLED: 'c-upload--disabled',\n ERROR: 'c-upload--error',\n SUCCESS: 'c-upload--success',\n LOADING: 'c-upload--loading',\n DRAGGING: 'c-upload--dragging'\n },\n ATTRIBUTES: {\n PERCENTAGE: '--upload-loader-percentage'\n }\n};\n\n/**\n * Navbar-specific constants\n */\nexport const NAVBAR = {\n SELECTORS: {\n NAVBAR: '.c-navbar',\n CONTAINER: '.c-navbar__container',\n BRAND: '.c-navbar__brand',\n COLLAPSE: '.c-navbar__collapse',\n TOGGLER: '.c-navbar__toggler'\n },\n CLASSES: {\n FIXED: 'c-navbar--fixed',\n FIXED_BOTTOM: 'c-navbar--fixed-bottom',\n EXPANDED: 'is-expanded'\n }\n};\n\n/**\n * Nav-specific constants\n */\nexport const NAV = {\n SELECTORS: {\n NAV: '.c-nav',\n ITEM: '.c-nav__item',\n LINK: '.c-nav__link',\n DROPDOWN: '.c-nav__item--dropdown',\n DROPDOWN_MENU: '.c-nav__dropdown-menu',\n MEGA_MENU: '.c-nav__mega-menu',\n ICON: '.c-nav__icon'\n },\n CLASSES: {\n END: 'c-nav--end',\n CENTER: 'c-nav--center',\n ACTIVE: 'is-active',\n DISABLED: 'is-disabled'\n }\n};\n\n/**\n * EdgePanel-specific constants\n */\n/**\n * Rating-specific constants\n */\nexport const RATING = {\n SELECTORS: {\n RATING: '.c-rating',\n STAR: '.c-rating__star',\n STAR_FULL: '.c-rating__star-full',\n STAR_HALF: '.c-rating__star-half'\n },\n CLASSES: {\n FULL: 'c-rating__star--full',\n HALF: 'c-rating__star--half',\n SMALL: 'c-rating--sm',\n LARGE: 'c-rating--lg'\n },\n ATTRIBUTES: {\n READONLY: 'data-readonly',\n VALUE: 'data-value'\n }\n};\n\nexport const EDGE_PANEL = {\n SELECTORS: {\n PANEL: '.c-edge-panel',\n BACKDROP: '.c-edge-panel__backdrop',\n CONTAINER: '.c-edge-panel__container',\n HEADER: '.c-edge-panel__header',\n BODY: '.c-edge-panel__body',\n CLOSE: '.c-edge-panel__close'\n },\n CLASSES: {\n BASE: 'c-edge-panel',\n START: 'c-edge-panel--start',\n END: 'c-edge-panel--end',\n TOP: 'c-edge-panel--top',\n BOTTOM: 'c-edge-panel--bottom',\n IS_OPEN: 'is-open'\n },\n TRANSFORM_VALUES: {\n start: 'translateX(-100%)',\n end: 'translateX(100%)',\n top: 'translateY(-100%)',\n bottom: 'translateY(100%)'\n },\n ANIMATION_DURATION: 300\n};\n\n/**\n * DataTable-specific constants\n */\nexport const DATA_TABLE_CLASSES = {\n base: 'c-data-table',\n container: 'c-data-table-container',\n tableWrapper: 'c-data-table-wrapper',\n header: 'c-data-table__header',\n headerCell: 'c-data-table__header-cell',\n headerContent: 'c-data-table__header-content',\n sortable: 'c-data-table__header-cell--sortable',\n sortIcon: 'c-data-table__sort-icon',\n row: 'c-data-table__row',\n cell: 'c-data-table__cell',\n loadingCell: 'c-data-table__loading-cell',\n loadingIndicator: 'c-data-table__loading-indicator',\n emptyCell: 'c-data-table__empty-cell',\n toolbar: 'c-data-table-toolbar',\n search: 'c-data-table-search',\n searchInput: 'c-data-table-search__input',\n pagination: 'c-data-table__pagination-container',\n striped: 'c-data-table--striped',\n bordered: 'c-data-table--bordered',\n dense: 'c-data-table--dense',\n loading: 'c-data-table--loading',\n open: 'is-open',\n};\n\n/**\n * DataTable-specific selectors\n */\nexport const DATA_TABLE_SELECTORS = {\n TABLE: '.c-data-table',\n HEADER: '.c-data-table__header',\n HEADER_CELL: '.c-data-table__header-cell',\n ROW: '.c-data-table__row',\n CELL: '.c-data-table__cell',\n PAGINATION: '.c-data-table__pagination',\n PAGINATION_BUTTON: '.c-data-table__pagination-button',\n SEARCH_INPUT: '.c-data-table__search-input',\n};\n\n/**\n * Pagination-specific constants\n */\nexport const PAGINATION_DEFAULTS = {\n currentPage: 1,\n totalPages: 1,\n siblingCount: 1,\n showFirstLastButtons: true,\n showPrevNextButtons: true,\n size: 'md' as Size,\n};\n\n/**\n * Todo-specific constants\n */\nexport const TODO = {\n SELECTORS: {\n TODO: '.c-todo',\n TITLE: '.c-todo__title',\n LIST: '.c-todo__list',\n ITEM: '.c-todo__item',\n ITEM_CONTENT: '.c-todo__item-content',\n ITEM_TEXT: '.c-todo__item-text',\n ITEM_ACTIONS: '.c-todo__item-actions',\n CHECKBOX: '.c-todo__checkbox',\n DELETE_BUTTON: '.c-todo__delete-btn',\n FORM: '.c-todo__form',\n INPUT: '.c-todo__input',\n ADD_BUTTON: '.c-todo__add-btn'\n },\n CLASSES: {\n BASE: 'c-todo',\n ITEM: 'c-todo__item',\n COMPLETED: 'c-todo__item--completed',\n SMALL: 'c-todo--sm',\n LARGE: 'c-todo--lg'\n }\n};\n\n/**\n * Form-specific constants\n */\nexport const FORM = {\n SELECTORS: {\n FORM: '.c-form',\n GROUP: '.c-form-group',\n LABEL: '.c-form-group__label',\n HELPER: '.c-form-group__helper',\n FIELD: '.c-form-group__field',\n REQUIRED: '.c-form-group__required'\n },\n CLASSES: {\n BASE: 'c-form',\n DISABLED: 'c-form--disabled'\n }\n};\n\n/**\n * Form Group-specific constants\n */\nexport const FORM_GROUP = {\n SELECTORS: {\n GROUP: '.c-form-group',\n LABEL: '.c-form-group__label',\n FIELD: '.c-form-group__field',\n HELPER: '.c-form-group__helper',\n REQUIRED: '.c-form-group__required'\n },\n CLASSES: {\n BASE: 'c-form-group',\n SMALL: 'c-form-group--sm',\n LARGE: 'c-form-group--lg',\n INVALID: 'c-form-group--invalid',\n VALID: 'c-form-group--valid',\n DISABLED: 'c-form-group--disabled'\n }\n};\n\n/**\n * Input-specific constants\n */\nexport const INPUT = {\n SELECTORS: {\n INPUT: '.c-input'\n },\n CLASSES: {\n BASE: 'c-input',\n SMALL: 'c-input--sm',\n LARGE: 'c-input--lg',\n INVALID: 'is-invalid',\n VALID: 'is-valid',\n DISABLED: 'is-disabled'\n }\n};\n\n/**\n * Radio-specific constants\n */\nexport const RADIO = {\n SELECTORS: {\n RADIO: '.c-radio',\n INPUT: '.c-radio__input',\n LABEL: '.c-radio__label'\n },\n CLASSES: {\n BASE: 'c-radio',\n INVALID: 'is-error',\n VALID: 'is-valid',\n DISABLED: 'is-disabled'\n }\n};\n\n/**\n * Checkbox-specific constants - extend existing checkbox constants\n */\n// Update existing CHECKBOX constants if needed\n\n/**\n * Card-specific constants\n */\nexport const CARD = {\n SELECTORS: {\n CARD: '.c-card',\n HEADER: '.c-card__header',\n BODY: '.c-card__body',\n IMAGE: '.c-card__image',\n TITLE: '.c-card__title',\n TEXT: '.c-card__text',\n ACTIONS: '.c-card__actions',\n ICON: '.c-card__icon',\n FOOTER: '.c-card__footer'\n },\n CLASSES: {\n BASE: 'c-card',\n ROW: 'c-card--row',\n FLAT: 'c-card--flat',\n ACTIVE: 'is-active',\n FLIPPED: 'is-flipped',\n FOCUSED: 'is-focused',\n CLICKABLE: 'is-clickable'\n },\n DEFAULTS: {\n HOVER: true\n }\n};\n\n/**\n * Select-specific constants\n */\nexport const SELECT = {\n SELECTORS: {\n SELECT: '.c-select',\n SELECTED: '.c-select__selected',\n SELECT_BODY: '.c-select__body',\n SELECT_PANEL: '.c-select__panel',\n SELECT_ITEMS: '.c-select__items',\n SELECT_ITEM: '.c-select__item',\n ITEM_LABEL: '.c-select__item-label',\n ITEM_INPUT: '.c-select__item-input',\n OPTION: 'option'\n },\n CLASSES: {\n BASE: 'c-select',\n SELECTED: 'c-select__selected',\n SELECT_BODY: 'c-select__body',\n SELECT_PANEL: 'c-select__panel',\n SELECT_ITEMS: 'c-select__items',\n SELECT_ITEM: 'c-select__item',\n TOGGLE_ICON: 'c-select__toggle-icon',\n ICON_CARET: 'icon-atomix-caret-down',\n SMALL: 'c-select--sm',\n LARGE: 'c-select--lg',\n INVALID: 'is-invalid',\n VALID: 'is-valid',\n DISABLED: 'is-disabled',\n IS_OPEN: 'is-open'\n }\n};\n\n/**\n * Textarea-specific constants\n */\nexport const TEXTAREA = {\n SELECTORS: {\n TEXTAREA: '.c-textarea'\n },\n CLASSES: {\n BASE: 'c-input c-input--textarea',\n SMALL: 'c-input--sm',\n LARGE: 'c-input--lg',\n INVALID: 'is-invalid',\n VALID: 'is-valid',\n DISABLED: 'is-disabled'\n }\n};\n\n/**\n * Avatar-specific constants\n */\nexport const AVATAR = {\n SELECTORS: {\n AVATAR: '.c-avatar',\n IMAGE: '.c-avatar__image',\n INITIALS: '.c-avatar__initials',\n ICON: '.c-avatar__icon'\n },\n CLASSES: {\n BASE: 'c-avatar',\n XS: 'c-avatar--xs',\n SM: 'c-avatar--sm',\n MD: 'c-avatar--md',\n LG: 'c-avatar--lg',\n XL: 'c-avatar--xl',\n CIRCLE: 'c-avatar--circle'\n }\n};\n\n/**\n * Avatar Group-specific constants\n */\nexport const AVATAR_GROUP = {\n SELECTORS: {\n GROUP: '.c-avatar-group',\n MORE: '.c-avatar-group__more'\n },\n CLASSES: {\n BASE: 'c-avatar-group',\n STACKED: 'c-avatar-group--stacked',\n MORE: 'c-avatar-group__more'\n }\n};\n\n/**\n * Modal component constants\n */\nexport const MODAL = {\n SELECTORS: {\n MODAL: '.c-modal',\n OPEN_BUTTON: '.js-modal-open',\n CLOSE_BUTTONS: '.js-modal-close',\n DIALOG: '.c-modal__dialog',\n BACKDROP: '.c-modal__backdrop'\n },\n CLASSES: {\n IS_OPEN: 'is-open'\n },\n DEFAULT_OPTIONS: {\n openELm: '.js-modal-open',\n closeELms: '.js-modal-close',\n modalDialogELm: '.c-modal__dialog',\n backdropELm: '.c-modal__backdrop',\n backdrop: true,\n keyboard: true\n }\n};\n\n/**\n * Messages-specific constants\n */\nexport const MESSAGES = {\n SELECTORS: {\n MESSAGES: '.c-messages',\n BODY: '.c-messages__body',\n CONTENT: '.c-messages__content',\n AVATAR: '.c-messages__avatar',\n ITEMS: '.c-messages__items',\n TEXT: '.c-messages__text',\n FILE: '.c-messages__file',\n IMAGE: '.c-messages__image',\n FORM: '.c-messages__form',\n INPUT: '.c-messages__input',\n },\n CLASSES: {\n BASE: 'c-messages',\n BODY: 'c-messages__body',\n CONTENT: 'c-messages__content',\n CONTENT_SELF: 'c-messages__content--self',\n AVATAR: 'c-messages__avatar',\n ITEMS: 'c-messages__items',\n NAME: 'c-messages__name',\n TEXT: 'c-messages__text',\n TIME: 'c-messages__time',\n FILE: 'c-messages__file',\n FILE_ICON: 'c-messages__file-icon',\n FILE_DETAILS: 'c-messages__file-details',\n FILE_NAME: 'c-messages__file-name',\n FILE_SIZE: 'c-messages__file-size',\n IMAGE: 'c-messages__image',\n FORM: 'c-messages__form',\n INPUT_GROUP: 'c-messages__input-group',\n INPUT: 'c-messages__input',\n OPTIONS: 'c-messages__options',\n OPTION: 'c-messages__option c-btn',\n OPTION_ICON: 'c-messages__option-icon',\n SUBMIT: 'c-messages__submit',\n },\n};\n\n/**\n * Dropdown-specific constants\n */\nexport const DROPDOWN = {\n SELECTORS: {\n DROPDOWN: '.c-dropdown',\n TOGGLE: '.c-dropdown__toggle',\n MENU: '.c-dropdown__menu',\n MENU_WRAPPER: '.c-dropdown__menu-wrapper',\n MENU_INNER: '.c-dropdown__menu-inner',\n MENU_ITEM: '.c-dropdown__menu-item',\n DIVIDER: '.c-dropdown__divider',\n HEADER: '.c-dropdown__header'\n },\n CLASSES: {\n IS_OPEN: 'is-open',\n IS_ACTIVE: 'is-active',\n IS_DISABLED: 'is-disabled'\n },\n DEFAULTS: {\n PLACEMENT: 'bottom-start',\n TRIGGER: 'click',\n OFFSET: 4,\n MIN_WIDTH: 180,\n ANIMATION_DURATION: '0.25s',\n ANIMATION_TIMING: 'cubic-bezier(0.16, 1, 0.3, 1)'\n }\n};\n\n/**\n * DatePicker-specific constants\n */\n/**\n * Progress-specific constants\n */\nexport const PROGRESS = {\n SELECTORS: {\n PROGRESS: '.c-progress',\n BAR: '.c-progress__bar',\n },\n CLASSES: {\n BASE: 'c-progress',\n BAR: 'c-progress__bar',\n SM: 'c-progress--sm',\n MD: 'c-progress--md',\n LG: 'c-progress--lg',\n },\n ATTRIBUTES: {\n ARIA_VALUEMIN: 'aria-valuemin',\n ARIA_VALUEMAX: 'aria-valuemax',\n ARIA_VALUENOW: 'aria-valuenow',\n ARIA_LABEL: 'aria-label',\n },\n CSS_VARS: {\n PERCENTAGE: '--atomix-progress-percentage',\n },\n DEFAULTS: {\n ARIA_LABEL: 'Progress bar',\n }\n};\n\nexport const DATEPICKER = {\n SELECTORS: {\n DATEPICKER: '.c-datepicker',\n INPUT: '.c-datepicker__input',\n CALENDAR: '.c-datepicker__calendar',\n DAY: '.c-datepicker__day',\n MONTH: '.c-datepicker__month',\n YEAR: '.c-datepicker__year',\n HEADER: '.c-datepicker__header',\n BODY: '.c-datepicker__body',\n FOOTER: '.c-datepicker__footer',\n WEEKDAYS: '.c-datepicker__weekdays',\n TODAY_BUTTON: '.c-datepicker__today-button',\n CLEAR_BUTTON: '.c-datepicker__clear-button',\n CLOSE_BUTTON: '.c-datepicker__close-button',\n NAV_BUTTON: '.c-datepicker__nav-button',\n VIEW_SWITCH: '.c-datepicker__view-switch'\n },\n CLASSES: {\n IS_OPEN: 'is-open',\n IS_DISABLED: 'is-disabled',\n IS_SELECTED: 'is-selected',\n IS_TODAY: 'is-today',\n INLINE: 'c-datepicker--inline'\n },\n ATTRIBUTES: {\n FORMAT: 'data-format',\n MIN_DATE: 'data-min-date',\n MAX_DATE: 'data-max-date',\n INLINE: 'data-inline',\n PLACEMENT: 'data-placement',\n CLEARABLE: 'data-clearable',\n SHOW_TODAY: 'data-show-today-button',\n SHOW_WEEK_NUMBERS: 'data-show-week-numbers'\n },\n DEFAULTS: {\n FORMAT: 'MM/dd/yyyy',\n PLACEMENT: 'bottom-start',\n CLEARABLE: true,\n SHOW_TODAY_BUTTON: true,\n SHOW_WEEK_NUMBERS: false,\n INLINE: false\n }\n};\n\n/**\n * PhotoViewer component constants\n */\nexport const PHOTOVIEWER = {\n SELECTOR: '.c-photo-viewer',\n CLASS: 'c-photo-viewer',\n DEFAULTS: {\n startIndex: 0,\n zoomLevel: 1,\n fullscreen: false,\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","module.exports = require(\"react\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \".atomix.react.cjs.js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/^blob:/, \"\").replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl + \"../\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk_shohojdhara_atomix\"] = self[\"webpackChunk_shohojdhara_atomix\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","import { AccordionProps, AccordionState, IconPosition, ElementRefs } from '../types/components';\nimport { useState, useEffect, useRef } from 'react';\nimport { ACCORDION } from '../constants/components';\n\n/**\n * Accordion functionality hook result\n */\ninterface UseAccordionResult {\n /** Current accordion state */\n state: AccordionState;\n /** Toggle the accordion open/closed */\n toggle: () => void;\n /** Update the panel height based on content */\n updatePanelHeight: () => void;\n /** Reference to the panel element */\n panelRef: React.RefObject<HTMLDivElement>;\n /** Reference to the content element */\n contentRef: React.RefObject<HTMLDivElement>;\n /** Generate accordion class names based on state */\n generateClassNames: (baseClassName?: string) => string;\n /** Generate header class names */\n generateHeaderClassNames: () => string;\n}\n\n/**\n * Accordion functionality hook\n * @param initialProps - Initial accordion properties\n * @returns Accordion state and methods\n */\nexport function useAccordion(initialProps?: Partial<AccordionProps> & { isOpen?: boolean; onOpenChange?: (open: boolean) => void }): UseAccordionResult {\n // Default accordion properties\n const defaultProps: Partial<AccordionProps> & { isOpen?: boolean; onOpenChange?: (open: boolean) => void } = {\n defaultOpen: false,\n disabled: false,\n iconPosition: 'right' as IconPosition,\n ...initialProps\n };\n\n // Controlled/uncontrolled open state\n const isControlled = typeof defaultProps.isOpen === 'boolean';\n const [internalOpen, setInternalOpen] = useState(defaultProps.defaultOpen || false);\n const isOpen = isControlled ? defaultProps.isOpen! : internalOpen;\n\n const [panelHeight, setPanelHeight] = useState<string>(isOpen ? 'auto' : '0px');\n\n const panelRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n\n /**\n * Toggle accordion open/closed state\n */\n const toggle = (): void => {\n if (!defaultProps.disabled) {\n if (isControlled) {\n defaultProps.onOpenChange && defaultProps.onOpenChange(!isOpen);\n } else {\n setInternalOpen(prev => !prev);\n }\n }\n };\n\n /**\n * Update panel height based on content\n */\n const updatePanelHeight = (): void => {\n if (contentRef.current && panelRef.current) {\n const height = isOpen ? `${contentRef.current.clientHeight}px` : '0px';\n panelRef.current.style.setProperty(ACCORDION.CSS_VARS.PANEL_HEIGHT, height);\n setPanelHeight(height);\n }\n };\n\n /**\n * Effect to update panel height when open state changes\n */\n useEffect(() => {\n updatePanelHeight();\n }, [isOpen]);\n\n /**\n * Effect to handle window resize and update panel height\n */\n useEffect(() => {\n const handleResize = (): void => {\n if (isOpen) {\n updatePanelHeight();\n }\n };\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [isOpen]);\n\n /**\n * Generate accordion class names based on state\n */\n const generateClassNames = (baseClassName: string = ''): string => {\n const openClass = isOpen ? ACCORDION.CLASSES.IS_OPEN : '';\n const disabledClass = defaultProps.disabled ? ACCORDION.CLASSES.IS_DISABLED : '';\n return `c-accordion ${openClass} ${disabledClass} ${baseClassName}`.trim();\n };\n\n /**\n * Generate header class names\n */\n const generateHeaderClassNames = (): string => {\n const iconPositionClass = defaultProps.iconPosition === 'left' ? 'c-accordion__header--icon-left' : '';\n return `c-accordion__header ${iconPositionClass}`.trim();\n };\n\n return {\n state: { isOpen, panelHeight },\n toggle,\n updatePanelHeight,\n panelRef,\n contentRef,\n generateClassNames,\n generateHeaderClassNames\n };\n} ","import React, { ReactNode, useId } from 'react';\nimport { ACCORDION } from '../../lib/constants/components';\nimport { useAccordion } from '../../lib/composables/useAccordion';\nimport { AccordionProps as AccordionPropsType } from '../../lib/types/components';\n\n/**\n * Accordion component for showing/hiding content panels\n * @see AccordionProps in types/components.ts\n */\nexport type AccordionProps = AccordionPropsType & { \n /**\n * Controlled open state (overrides defaultOpen)\n */\n isOpen?: boolean;\n /**\n * Callback when open state changes (for controlled mode)\n */\n onOpenChange?: (open: boolean) => void;\n};\n\nconst Accordion: React.FC<AccordionProps> = ({\n title,\n children,\n defaultOpen = false,\n isOpen: controlledOpen,\n onOpenChange,\n disabled = false,\n iconPosition = 'right',\n icon,\n className = '',\n}) => {\n // Generate unique IDs for accessibility\n const instanceId = useId();\n const buttonId = `accordion-header-${instanceId}`;\n const panelId = `accordion-panel-${instanceId}`;\n\n // Use composable hook for logic/state\n const {\n state,\n toggle,\n updatePanelHeight,\n panelRef,\n contentRef,\n generateClassNames,\n generateHeaderClassNames\n } = useAccordion({\n defaultOpen,\n disabled,\n iconPosition,\n isOpen: controlledOpen,\n onOpenChange\n });\n\n // Default icon\n const defaultIcon = (\n <i className=\"c-accordion__icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </i>\n );\n\n return (\n <div className={generateClassNames(className)}>\n <button\n id={buttonId}\n className={generateHeaderClassNames()}\n onClick={toggle}\n aria-expanded={state.isOpen}\n aria-controls={panelId}\n disabled={disabled}\n type=\"button\"\n >\n <span className=\"c-accordion__title\">{title}</span>\n {icon || defaultIcon}\n </button>\n <div\n id={panelId}\n className={ACCORDION.SELECTORS.PANEL.replace('.', '')}\n ref={panelRef}\n role=\"region\"\n aria-labelledby={buttonId}\n >\n <div className={ACCORDION.SELECTORS.BODY.replace('.', '')} ref={contentRef}>\n {children}\n </div>\n </div>\n </div>\n );\n};\n\n// Set display name for debugging\nAccordion.displayName = 'Accordion';\n\n// Default export (primary)\nexport default Accordion;\n\n// Named export for compatibility\nexport { Accordion };","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"phosphor-react\");","import React from 'react';\nimport * as PhosphorIcons from 'phosphor-react';\n\nexport type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type IconWeight = 'thin' | 'light' | 'regular' | 'bold' | 'fill' | 'duotone';\n\n// We need to filter out non-icon exports from the Phosphor package\ntype PhosphorIconsType = Exclude<keyof typeof PhosphorIcons, 'Icon' | 'IconContext' | 'IconBase' | 'IconProps' | 'createIcon' | 'default' | 'SSR'>;\n\ninterface IconProps {\n /**\n * Icon name from Phosphor Icons\n */\n name: PhosphorIconsType;\n \n /**\n * Icon size\n */\n size?: IconSize | number;\n \n /**\n * Icon weight/style\n */\n weight?: IconWeight;\n \n /**\n * Icon color\n */\n color?: string;\n \n /**\n * Additional CSS class names\n */\n className?: string;\n \n /**\n * Alt text for accessibility\n */\n alt?: string;\n}\n\n// Map string sizes to pixel values\nconst sizeMap: Record<IconSize, number> = {\n xs: 16,\n sm: 20,\n md: 24,\n lg: 32,\n xl: 40\n};\n\n/**\n * Icon component that displays a Phosphor icon\n */\nconst Icon: React.FC<IconProps> = ({\n name,\n size = 'md',\n weight = 'regular',\n color,\n className = '',\n alt\n}) => {\n // Get the icon component from Phosphor\n const IconComponent = PhosphorIcons[name] as React.FC<\n PhosphorIcons.IconProps & { ref?: React.Ref<SVGSVGElement> }\n >;\n \n if (!IconComponent) {\n console.warn(`Icon \"${name}\" not found in Phosphor Icons`);\n return null;\n }\n \n // Convert string size to pixel value if needed\n const pixelSize = typeof size === 'string' ? sizeMap[size as IconSize] || 24 : size;\n \n return (\n <span className={`c-icon c-icon--${size} ${className}`} aria-hidden={!alt} title={alt}>\n <IconComponent\n size={pixelSize}\n weight={weight}\n color={color}\n aria-label={alt}\n />\n </span>\n );\n};\n\nexport type { IconProps };\n\n// Set display name for debugging\nIcon.displayName = 'Icon';\n\n// Default export (primary)\nexport default Icon;\n\n// Named export for compatibility\nexport { Icon };","import React, { useState } from 'react';\nimport { AvatarProps } from '../../lib/types/components';\nimport { AVATAR } from '../../lib/constants/components';\nimport { Icon } from '../Icon';\n\nconst Avatar: React.FC<AvatarProps> = ({\n src,\n alt = 'Avatar',\n initials,\n icon,\n size = 'md',\n circle = false,\n className = '',\n disabled = false,\n onClick,\n}) => {\n const [imageError, setImageError] = useState(false);\n\n const handleImageError = () => {\n setImageError(true);\n };\n\n // Generate CSS classes\n const avatarClasses = [\n AVATAR.CLASSES.BASE,\n size !== 'md' && `c-avatar--${size}`,\n circle && AVATAR.CLASSES.CIRCLE,\n disabled && 'is-disabled',\n className,\n ].filter(Boolean).join(' ');\n\n // Handle click event\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!disabled && onClick) {\n onClick(e);\n }\n };\n\n return (\n <div \n className={avatarClasses}\n onClick={onClick ? handleClick : undefined}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick && !disabled ? 0 : undefined}\n aria-disabled={disabled || undefined}\n >\n {src && !imageError ? (\n <img \n src={src} \n alt={alt} \n className=\"c-avatar__image\" \n onError={handleImageError}\n />\n ) : initials ? (\n <span className=\"c-avatar__initials\">{initials}</span>\n ) : icon ? (\n <span className=\"c-avatar__icon\">{icon}</span>\n ) : (\n <span className=\"c-avatar__icon\">\n <Icon name=\"User\" size={size === 'xs' ? 'xs' : size === 'sm' ? 'sm' : 'md'} />\n </span>\n )}\n </div>\n );\n};\n\n\nexport type { AvatarProps };\n\n// Set display name for debugging\nAvatar.displayName = 'Avatar';\n\n// Default export (primary)\nexport default Avatar;\n\n// Named export for compatibility\nexport { Avatar };","import { BadgeProps } from '../types/components';\nimport { BADGE } from '../constants/components';\n\n/**\n * Badge state and functionality\n * @param initialProps - Initial badge properties\n * @returns Badge state and methods\n */\nexport function useBadge(initialProps?: Partial<BadgeProps>) {\n // Default badge properties\n const defaultProps: Partial<BadgeProps> = {\n variant: 'primary',\n size: 'md',\n disabled: false,\n ...initialProps\n };\n\n /**\n * Generate badge class based on properties\n * @param props - Badge properties\n * @returns Class string\n */\n const generateBadgeClass = (props: Partial<BadgeProps>): string => {\n const {\n variant = defaultProps.variant,\n size = defaultProps.size,\n disabled = defaultProps.disabled,\n className = '',\n } = props;\n\n const sizeClass = size === 'md' ? '' : `${BADGE.SIZE_PREFIX}${size}`;\n const variantClass = variant ? `${BADGE.VARIANT_PREFIX}${variant}` : '';\n const disabledClass = disabled ? 'c-badge--disabled' : '';\n \n return `${BADGE.BASE_CLASS} ${variantClass} ${sizeClass} ${disabledClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateBadgeClass,\n };\n} ","import React from 'react';\nimport { BadgeProps } from '../../lib/types/components';\nimport { useBadge } from '../../lib/composables/useBadge';\nimport { BADGE } from '../../lib/constants/components';\n\nconst Badge: React.FC<BadgeProps> = ({\n label,\n variant = 'primary',\n size = 'md',\n disabled = false,\n icon,\n className = '',\n}) => {\n const { generateBadgeClass } = useBadge({ \n variant, size, disabled \n });\n \n const badgeClass = generateBadgeClass({ \n variant, size, disabled, className \n });\n \n return (\n <span\n className={badgeClass}\n aria-disabled={disabled}\n >\n {icon && <span className={BADGE.ICON_CLASS}>{icon}</span>}\n <span>{label}</span>\n </span>\n );\n}; \n\nexport type { BadgeProps };\n\n// Set display name for debugging\nBadge.displayName = 'Badge';\n\n// Default export (primary)\nexport default Badge;\n\n// Named export for compatibility\nexport { Badge };","import React, { ReactNode } from 'react';\nimport { BREADCRUMB } from '../../lib/constants/components';\n\nexport interface BreadcrumbItem {\n /**\n * Text to display\n */\n label: string;\n \n /**\n * URL for the breadcrumb item\n */\n href?: string;\n \n /**\n * Whether this item is active (current page)\n */\n active?: boolean;\n \n /**\n * Optional icon to display before the label\n */\n icon?: ReactNode;\n \n /**\n * Optional click handler\n */\n onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;\n}\n\nexport interface BreadcrumbProps {\n /**\n * Array of breadcrumb items\n */\n items: BreadcrumbItem[];\n \n /**\n * Custom divider character or element\n */\n divider?: ReactNode;\n \n /**\n * Additional className\n */\n className?: string;\n \n /**\n * Aria label for the navigation\n */\n ariaLabel?: string;\n}\nconst Breadcrumb: React.FC<BreadcrumbProps> = ({\n items,\n divider,\n className = '',\n ariaLabel = 'Breadcrumb'\n}) => {\n const breadcrumbClasses = [\n BREADCRUMB.CLASSES.BASE,\n className\n ].filter(Boolean).join(' ');\n \n return (\n <nav aria-label={ariaLabel}>\n <ol className={breadcrumbClasses}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const itemClasses = [\n BREADCRUMB.CLASSES.ITEM,\n item.active || isLast ? BREADCRUMB.CLASSES.ACTIVE : ''\n ].filter(Boolean).join(' ');\n \n const linkContent = (\n <>\n {item.icon && <span className=\"c-breadcrumb__icon\">{item.icon}</span>}\n {item.label}\n </>\n );\n \n return (\n <li key={index} className={itemClasses}>\n {item.href && !item.active ? (\n <a\n href={item.href}\n className={BREADCRUMB.CLASSES.LINK}\n onClick={item.onClick}\n >\n {linkContent}\n </a>\n ) : (\n <span className={BREADCRUMB.CLASSES.LINK}>\n {linkContent}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n\n// Set display name for debugging\nBreadcrumb.displayName = 'Breadcrumb';\n\n// Default export (primary)\nexport default Breadcrumb;\n\n// Named export for compatibility\nexport { Breadcrumb };","import { ButtonProps } from '../types/components';\n\n/**\n * Button state and functionality\n * @param initialProps - Initial button properties\n * @returns Button state and methods\n */\nexport function useButton(initialProps?: Partial<ButtonProps>) {\n // Default button properties\n const defaultProps: Partial<ButtonProps> = {\n variant: 'primary',\n size: 'md',\n disabled: false,\n rounded: false,\n ...initialProps\n };\n\n /**\n * Generate button class based on properties\n * @param props - Button properties\n * @returns Class string\n */\n const generateButtonClass = (props: Partial<ButtonProps>): string => {\n const {\n variant = defaultProps.variant,\n size = defaultProps.size,\n disabled = defaultProps.disabled,\n rounded = defaultProps.rounded,\n iconOnly = false,\n className = '',\n } = props;\n\n const sizeClass = size === 'md' ? '' : `c-btn--${size}`;\n const iconOnlyClass = iconOnly ? 'c-btn--icon' : '';\n const roundedClass = rounded ? 'c-btn--rounded' : '';\n const disabledClass = disabled ? 'c-btn--disabled' : '';\n \n return `c-btn c-btn--${variant} ${sizeClass} ${iconOnlyClass} ${roundedClass} ${disabledClass} ${className}`.trim();\n };\n\n /**\n * Handle button click with disabled check\n * @param handler - Click handler function\n * @returns Function that respects disabled state\n */\n const handleClick = (handler?: () => void) => {\n return () => {\n if (!defaultProps.disabled && handler) {\n handler();\n }\n };\n };\n\n return {\n defaultProps,\n generateButtonClass,\n handleClick,\n };\n} ","import React, { forwardRef, ElementType } from 'react';\nimport { ButtonProps } from '../../lib/types/components';\nimport { useButton } from '../../lib/composables/useButton';\nimport { BUTTON } from '../../lib/constants/components';\n\ntype ButtonAsProp = {\n as?: ElementType;\n to?: string;\n href?: string;\n [key: string]: any;\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps & ButtonAsProp>(({\n label,\n children,\n onClick,\n variant = 'primary',\n size = 'md',\n disabled = false,\n icon,\n iconOnly = false,\n rounded = false,\n className = '',\n as: Component = 'button',\n ...props\n}, ref) => {\n const { generateButtonClass, handleClick } = useButton({ \n variant, size, disabled, rounded \n });\n \n const buttonClass = generateButtonClass({ \n variant, size, disabled, rounded, iconOnly, className \n });\n \n // Handle the case when the button is rendered as a link or another component\n const buttonProps = {\n ref,\n className: buttonClass,\n onClick: handleClick(onClick),\n disabled,\n 'aria-disabled': disabled,\n ...props,\n };\n\n return (\n <Component {...buttonProps}>\n {icon && <span className=\"button__icon\">{icon}</span>}\n {!iconOnly && <span className=\"button__label\">{label || children}</span>}\n </Component>\n );\n});\n\n// Add displayName for better debugging\nButton.displayName = 'Button';\n","import { Button } from './Button';\nimport type { ButtonProps } from '../../lib/types/components';\n\nexport { Button };\nexport type { ButtonProps };\nexport default Button; ","import React from 'react';\nimport { CalloutProps } from '../../lib/types/components';\nimport { useCallout } from '../../lib/composables/useCallout';\nimport { Icon } from '../Icon/Icon';\n\n/**\n * Callout component for displaying important messages, notifications, or alerts\n */\n const Callout: React.FC<CalloutProps> = ({\n title,\n children,\n icon,\n variant = 'primary',\n onClose,\n actions,\n oneLine = false,\n toast = false,\n className,\n ...props\n}) => {\n const { generateCalloutClass, handleClose } = useCallout({\n variant,\n oneLine,\n toast,\n className\n });\n\n // Determine appropriate ARIA attributes based on variant\n const getAriaAttributes = () => {\n const baseAttributes: Record<string, string> = {\n role: 'region',\n };\n \n // For toast notifications or alerts, use appropriate role and live region\n if (toast) {\n baseAttributes.role = 'alert';\n baseAttributes['aria-live'] = 'polite';\n } else if (['warning', 'error'].includes(variant)) {\n baseAttributes.role = 'alert';\n baseAttributes['aria-live'] = 'assertive';\n } else if (['info', 'success'].includes(variant)) {\n baseAttributes.role = 'status';\n baseAttributes['aria-live'] = 'polite';\n }\n \n return baseAttributes;\n };\n\n return (\n <div className={generateCalloutClass({ variant, oneLine, toast, className })} {...getAriaAttributes()} {...props}>\n <div className=\"c-callout__content\">\n {icon && <div className=\"c-callout__icon\">{icon}</div>}\n <div className=\"c-callout__message\">\n {title && <div className=\"c-callout__title\">{title}</div>}\n {children && <div className=\"c-callout__text\">{children}</div>}\n </div>\n </div>\n \n {actions && <div className=\"c-callout__actions\">{actions}</div>}\n \n {onClose && (\n <button \n className=\"c-callout__close-btn\" \n onClick={handleClose(onClose)}\n aria-label=\"Close\"\n >\n <Icon name=\"X\" size=\"md\" />\n </button>\n )}\n </div>\n );\n};\n\nexport type { CalloutProps };\n\n// Set display name for debugging\nCallout.displayName = 'Callout';\n\n// Default export (primary)\nexport default Callout;\n\n// Named export for compatibility\nexport { Callout };","import { CalloutProps } from '../types/components';\n\n/**\n * Callout state and functionality\n * @param initialProps - Initial callout properties\n * @returns Callout state and methods\n */\nexport function useCallout(initialProps?: Partial<CalloutProps>) {\n // Default callout properties\n const defaultProps: Partial<CalloutProps> = {\n variant: 'primary',\n oneLine: false,\n toast: false,\n ...initialProps\n };\n\n /**\n * Generate callout class based on properties\n * @param props - Callout properties\n * @returns Class string\n */\n const generateCalloutClass = (props: Partial<CalloutProps>): string => {\n const {\n variant = defaultProps.variant,\n oneLine = defaultProps.oneLine,\n toast = defaultProps.toast,\n className = '',\n } = props;\n\n const oneLineClass = oneLine ? 'c-callout--oneline' : '';\n const toastClass = toast ? 'c-callout--toast' : '';\n const variantClass = variant ? `c-callout--${variant}` : '';\n \n return `c-callout ${variantClass} ${oneLineClass} ${toastClass} ${className}`.trim();\n };\n\n /**\n * Handle callout close with callback\n * @param handler - Close handler function\n * @returns Function that calls the handler\n */\n const handleClose = (handler?: () => void) => {\n return () => {\n if (handler) {\n handler();\n }\n };\n };\n\n return {\n defaultProps,\n generateCalloutClass,\n handleClose,\n };\n}","import React, { forwardRef, Ref } from 'react';\nimport { CARD } from '../../lib/constants/components';\nimport { CardProps } from '../../lib/types/components';\n\n const Card = forwardRef<HTMLDivElement, CardProps>(({\n header,\n image,\n imageAlt = '',\n title,\n text,\n actions,\n icon,\n footer,\n row = false,\n flat = false,\n active = false,\n className = '',\n children,\n onClick,\n ...rest\n}, ref) => {\n const cardClasses = [\n CARD.CLASSES.BASE,\n row ? CARD.CLASSES.ROW : '',\n flat ? CARD.CLASSES.FLAT : '',\n active ? CARD.CLASSES.ACTIVE : '',\n className\n ].filter(Boolean).join(' ');\n\n return (\n <div\n ref={ref}\n className={cardClasses}\n onClick={onClick}\n {...rest}\n >\n {(image || icon || header) && (\n <div className={CARD.SELECTORS.HEADER.substring(1)}>\n {header}\n {image && (\n <img\n src={image}\n alt={imageAlt}\n className={CARD.SELECTORS.IMAGE.substring(1)}\n />\n )}\n\n {icon && (\n <div className={CARD.SELECTORS.ICON.substring(1)}>\n {icon}\n </div>\n )}\n </div>\n )}\n\n <div className={CARD.SELECTORS.BODY.substring(1)}>\n {title && (\n <h3 className={CARD.SELECTORS.TITLE.substring(1)}>\n {title}\n </h3>\n )}\n\n {text && (\n <p className={CARD.SELECTORS.TEXT.substring(1)}>\n {text}\n </p>\n )}\n\n {children}\n </div>\n\n {actions && (\n <div className={CARD.SELECTORS.ACTIONS.substring(1)}>\n {actions}\n </div>\n )}\n\n {footer && (\n <div className={CARD.SELECTORS.FOOTER.substring(1)}>\n {footer}\n </div>\n )}\n </div>\n );\n});\n\n\nexport type { CardProps };\n\n// Set display name for debugging\nCard.displayName = 'Badge';\n\n// Default export (primary)\nexport default Card;\n\n// Named export for compatibility\nexport { Card };","import React, { useEffect, useState } from 'react';\n\ninterface ColorModeToggleProps {\n className?: string;\n}\n\nconst ColorModeToggle: React.FC<ColorModeToggleProps> = ({ className = '' }) => {\n const [colorMode, setColorMode] = useState<'light' | 'dark'>('light');\n \n // Initialize color mode from localStorage or system preference\n useEffect(() => {\n // Check if color mode is already set in localStorage\n const storedColorMode = localStorage.getItem('atomix-color-mode');\n \n if (storedColorMode === 'light' || storedColorMode === 'dark') {\n setColorMode(storedColorMode);\n } else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n // Use system preference if no stored preference\n setColorMode('dark');\n }\n }, []);\n \n // Update the document theme attribute when colorMode changes\n useEffect(() => {\n document.documentElement.setAttribute('data-atomix-theme', colorMode);\n localStorage.setItem('atomix-color-mode', colorMode);\n }, [colorMode]);\n \n // Listen for system color scheme changes\n useEffect(() => {\n const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n \n const handleSystemThemeChange = (event: MediaQueryListEvent) => {\n // Only update if user hasn't explicitly set a preference\n if (!localStorage.getItem('atomix-color-mode')) {\n setColorMode(event.matches ? 'dark' : 'light');\n }\n };\n \n // Add event listener for system theme changes\n if (darkModeMediaQuery.addEventListener) {\n darkModeMediaQuery.addEventListener('change', handleSystemThemeChange);\n } else {\n // Fallback for older browsers\n darkModeMediaQuery.addListener(handleSystemThemeChange);\n }\n \n // Clean up event listener\n return () => {\n if (darkModeMediaQuery.removeEventListener) {\n darkModeMediaQuery.removeEventListener('change', handleSystemThemeChange);\n } else {\n // Fallback for older browsers\n darkModeMediaQuery.removeListener(handleSystemThemeChange);\n }\n };\n }, []);\n \n const toggleColorMode = () => {\n setColorMode(prevMode => prevMode === 'light' ? 'dark' : 'light');\n };\n \n return (\n <button \n className={`c-color-mode-toggle ${className}`}\n onClick={toggleColorMode}\n aria-label={`Switch to ${colorMode === 'light' ? 'dark' : 'light'} mode`}\n title={`Switch to ${colorMode === 'light' ? 'dark' : 'light'} mode`}\n >\n {colorMode === 'light' ? (\n <svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\">\n <path d=\"M9.37 5.51c-.18.64-.27 1.31-.27 1.99 0 4.08 3.32 7.4 7.4 7.4.68 0 1.35-.09 1.99-.27C17.45 17.19 14.93 19 12 19c-3.86 0-7-3.14-7-7 0-2.93 1.81-5.45 4.37-6.49zM12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9 9-4.03 9-9c0-.46-.04-.92-.1-1.36-.98 1.37-2.58 2.26-4.4 2.26-2.98 0-5.4-2.42-5.4-5.4 0-1.81.89-3.42 2.26-4.4-.44-.06-.9-.1-1.36-.1z\" />\n </svg>\n ) : (\n <svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\">\n <path d=\"M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zM2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1zm18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1zM11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1zm0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1zM5.99 4.58c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41L5.99 4.58zm12.37 12.37c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41l-1.06-1.06zm1.06-10.96c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41.39.39 1.03.39 1.41 0l1.06-1.06zM7.05 18.36c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41.39.39 1.03.39 1.41 0l1.06-1.06z\" />\n </svg>\n )}\n </button>\n );\n}; \n\nexport type { ColorModeToggleProps };\n\n// Set display name for debugging\nColorModeToggle.displayName = 'ColorModeToggle';\n\n// Default export (primary)\nexport default ColorModeToggle;\n\n// Named export for compatibility\nexport { ColorModeToggle };\n","import React, { useEffect, useState } from 'react';\n\ninterface CountdownProps {\n /** Target date/time as a Date or ISO string */\n target: Date | string;\n /** Show days, hours, minutes, seconds */\n show?: Array<'days' | 'hours' | 'minutes' | 'seconds'>;\n /** Separator string */\n separator?: string;\n /** Focused style */\n focused?: boolean;\n /** Custom className */\n className?: string;\n /** Optional callback when countdown reaches zero */\n onComplete?: () => void;\n}\n\nfunction getTimeParts(diff: number) {\n const totalSeconds = Math.max(0, Math.floor(diff / 1000));\n const days = Math.floor(totalSeconds / 86400);\n const hours = Math.floor((totalSeconds % 86400) / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n return { days, hours, minutes, seconds };\n}\n\nconst Countdown: React.FC<CountdownProps> = ({\n target,\n show = ['days', 'hours', 'minutes', 'seconds'],\n separator = ':',\n focused = false,\n className = '',\n onComplete,\n}) => {\n const targetDate = typeof target === 'string' ? new Date(target) : target;\n const [now, setNow] = useState(() => new Date());\n const [completed, setCompleted] = useState(false);\n\n useEffect(() => {\n if (completed) return;\n const interval = setInterval(() => {\n setNow(new Date());\n }, 1000);\n return () => clearInterval(interval);\n }, [completed]);\n\n const diff = targetDate.getTime() - now.getTime();\n const { days, hours, minutes, seconds } = getTimeParts(diff);\n\n useEffect(() => {\n if (diff <= 0 && !completed) {\n setCompleted(true);\n if (onComplete) onComplete();\n }\n }, [diff, completed, onComplete]);\n\n const timeParts = [];\n if (show.includes('days')) timeParts.push({ label: 'Days', value: days });\n if (show.includes('hours')) timeParts.push({ label: 'Hours', value: hours });\n if (show.includes('minutes')) timeParts.push({ label: 'Minutes', value: minutes });\n if (show.includes('seconds')) timeParts.push({ label: 'Seconds', value: seconds });\n\n return (\n <div className={`c-countdown${focused ? ' c-countdown--focused' : ''} ${className}`.trim()}>\n {timeParts.map((part, idx) => (\n <React.Fragment key={part.label}>\n <div className=\"c-countdown__time\">\n <span className=\"c-countdown__time-count\">{String(part.value).padStart(2, '0')}</span>\n <span className=\"c-countdown__time-label\">{part.label}</span>\n </div>\n {idx < timeParts.length - 1 && (\n <span className=\"c-countdown__separator\">{separator}</span>\n )}\n </React.Fragment>\n ))}\n </div>\n );\n};\n\n\nexport type { CountdownProps };\n\n// Set display name for debugging\nCountdown.displayName = 'Badge';\n\n// Default export (primary)\nexport default Countdown;\n\n// Named export for compatibility\nexport { Countdown };","import { useState, useEffect, useCallback, useMemo } from 'react';\nimport { DataTableColumn, SortConfig } from '../types/components';\n\nexport interface UseDataTableProps {\n /**\n * Data array to display\n */\n data: any[];\n \n /**\n * Column definitions\n */\n columns: DataTableColumn[];\n \n /**\n * Whether the table is sortable\n */\n sortable?: boolean;\n \n /**\n * Whether the table is paginated\n */\n paginated?: boolean;\n \n /**\n * Number of rows per page\n */\n pageSize?: number;\n \n /**\n * Callback when sorting changes\n */\n onSort?: (sortConfig: SortConfig) => void;\n \n /**\n * Initial sort configuration\n */\n initialSortConfig?: SortConfig;\n}\n\nexport interface UseDataTableReturn {\n /**\n * Data to display (filtered, sorted, paginated)\n */\n displayData: any[];\n \n /**\n * Current sort configuration\n */\n sortConfig: SortConfig | null;\n \n /**\n * Current page number\n */\n currentPage: number;\n \n /**\n * Total number of pages\n */\n totalPages: number;\n \n /**\n * Handle sort column click\n */\n handleSort: (key: string) => void;\n \n /**\n * Handle page change\n */\n handlePageChange: (page: number) => void;\n \n /**\n * Handle search input\n */\n handleSearch: (query: string) => void;\n}\n\n/**\n * Hook for managing DataTable state and behavior\n */\nexport function useDataTable({\n data = [],\n columns = [],\n sortable = false,\n paginated = false,\n pageSize = 10,\n onSort,\n initialSortConfig,\n}: UseDataTableProps): UseDataTableReturn {\n // Sort state\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(initialSortConfig || null);\n \n // Pagination state\n const [currentPage, setCurrentPage] = useState<number>(1);\n \n // Search state\n const [searchQuery, setSearchQuery] = useState<string>('');\n \n // Handle sorting\n const handleSort = useCallback((key: string) => {\n if (!sortable) return;\n \n let direction: 'asc' | 'desc' = 'asc';\n \n if (sortConfig && sortConfig.key === key && sortConfig.direction === 'asc') {\n direction = 'desc';\n }\n \n const newSortConfig = { key, direction };\n setSortConfig(newSortConfig);\n \n if (onSort) {\n onSort(newSortConfig);\n }\n }, [sortable, sortConfig, onSort]);\n \n // Handle page change\n const handlePageChange = useCallback((page: number) => {\n if (page < 1 || page > Math.ceil(data.length / pageSize)) return;\n setCurrentPage(page);\n }, [data.length, pageSize]);\n \n // Handle search\n const handleSearch = useCallback((query: string) => {\n setSearchQuery(query);\n setCurrentPage(1); // Reset to first page when searching\n }, []);\n \n // Filter data based on search query\n const filteredData = useMemo(() => {\n if (!searchQuery) return data;\n \n const lowercaseQuery = searchQuery.toLowerCase();\n \n return data.filter(row => {\n return columns.some(column => {\n const value = row[column.key];\n if (value == null) return false;\n return String(value).toLowerCase().includes(lowercaseQuery);\n });\n });\n }, [data, columns, searchQuery]);\n \n // Sort data\n const sortedData = useMemo(() => {\n if (!sortConfig || !sortable) return filteredData;\n \n return [...filteredData].sort((a, b) => {\n const aValue = a[sortConfig.key];\n const bValue = b[sortConfig.key];\n \n if (aValue == null) return sortConfig.direction === 'asc' ? -1 : 1;\n if (bValue == null) return sortConfig.direction === 'asc' ? 1 : -1;\n \n if (typeof aValue === 'string' && typeof bValue === 'string') {\n return sortConfig.direction === 'asc' \n ? aValue.localeCompare(bValue) \n : bValue.localeCompare(aValue);\n }\n \n return sortConfig.direction === 'asc' \n ? (aValue > bValue ? 1 : -1) \n : (aValue > bValue ? -1 : 1);\n });\n }, [filteredData, sortConfig, sortable]);\n \n // Paginate data\n const paginatedData = useMemo(() => {\n if (!paginated) return sortedData;\n \n const startIndex = (currentPage - 1) * pageSize;\n return sortedData.slice(startIndex, startIndex + pageSize);\n }, [sortedData, paginated, currentPage, pageSize]);\n \n // Calculate total pages\n const totalPages = useMemo(() => {\n if (!paginated) return 1;\n return Math.max(1, Math.ceil(sortedData.length / pageSize));\n }, [sortedData.length, paginated, pageSize]);\n \n // Reset to first page when data changes\n useEffect(() => {\n setCurrentPage(1);\n }, [data]);\n \n // Reset current page if it's out of bounds\n useEffect(() => {\n if (currentPage > totalPages) {\n setCurrentPage(Math.max(1, totalPages));\n }\n }, [currentPage, totalPages]);\n \n return {\n displayData: paginatedData,\n sortConfig,\n currentPage,\n totalPages,\n handleSort,\n handlePageChange,\n handleSearch,\n };\n}\n\nexport default useDataTable; ","import { useState, useMemo } from 'react';\nimport { PaginationProps } from '../types/components';\n\nexport const DOTS = '...';\n\nconst range = (start: number, end: number) => {\n const length = end - start + 1;\n return Array.from({ length }, (_, idx) => idx + start);\n};\n\nexport const usePagination = ({\n currentPage,\n totalPages,\n siblingCount = 1,\n onPageChange,\n}: Omit<PaginationProps, 'className'>) => {\n const paginationRange = useMemo(() => {\n const totalPageNumbers = siblingCount + 5; // siblingCount + firstPage + lastPage + currentPage + 2*DOTS\n\n /*\n Case 1: If the number of pages is less than the page numbers we want to show in our\n paginationComponent, we return the range [1..totalPages]\n */\n if (totalPageNumbers >= totalPages) {\n return range(1, totalPages);\n }\n\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);\n const rightSiblingIndex = Math.min(\n currentPage + siblingCount,\n totalPages\n );\n\n const shouldShowLeftDots = leftSiblingIndex > 2;\n const shouldShowRightDots = rightSiblingIndex < totalPages - 2;\n\n const firstPageIndex = 1;\n const lastPageIndex = totalPages;\n\n /*\n \tCase 2: No left dots to show, but rights dots to be shown\n */\n if (!shouldShowLeftDots && shouldShowRightDots) {\n let leftItemCount = 3 + 2 * siblingCount;\n let leftRange = range(1, leftItemCount);\n\n return [...leftRange, DOTS, totalPages];\n }\n\n /*\n \tCase 3: No right dots to show, but left dots to be shown\n */\n if (shouldShowLeftDots && !shouldShowRightDots) {\n let rightItemCount = 3 + 2 * siblingCount;\n let rightRange = range(\n totalPages - rightItemCount + 1,\n totalPages\n );\n return [firstPageIndex, DOTS, ...rightRange];\n }\n\n /*\n \tCase 4: Both left and right dots to be shown\n */\n if (shouldShowLeftDots && shouldShowRightDots) {\n let middleRange = range(leftSiblingIndex, rightSiblingIndex);\n return [firstPageIndex, DOTS, ...middleRange, DOTS, lastPageIndex];\n }\n\n // This case should ideally not be reached if logic is correct\n return []; \n\n }, [totalPages, siblingCount, currentPage]);\n\n const goToPage = (page: number) => {\n if (page >= 1 && page <= totalPages && page !== currentPage) {\n onPageChange(page);\n }\n };\n\n const nextPage = () => {\n goToPage(currentPage + 1);\n };\n\n const prevPage = () => {\n goToPage(currentPage - 1);\n };\n\n const firstPage = () => {\n goToPage(1);\n };\n\n const lastPage = () => {\n goToPage(totalPages);\n };\n\n return {\n paginationRange,\n currentPage,\n totalPages,\n goToPage,\n nextPage,\n prevPage,\n firstPage,\n lastPage,\n DOTS,\n };\n};\n","import { SpinnerProps } from '../types/components';\n\n/**\n * Spinner state and functionality\n * @param initialProps - Initial spinner properties\n * @returns Spinner state and methods\n */\nexport function useSpinner(initialProps?: Partial<SpinnerProps>) {\n // Default spinner properties\n const defaultProps: Partial<SpinnerProps> = {\n variant: 'primary',\n size: 'md',\n fullscreen: false,\n ...initialProps\n };\n\n /**\n * Generate spinner class based on properties\n * @param props - Spinner properties\n * @returns Class string\n */\n const generateSpinnerClass = (props: Partial<SpinnerProps>): string => {\n const {\n variant = defaultProps.variant,\n size = defaultProps.size,\n fullscreen = defaultProps.fullscreen,\n className = '',\n } = props;\n\n const baseClass = 'c-spinner';\n const variantClass = variant ? `${baseClass}--${variant}` : '';\n const sizeClass = size !== 'md' ? `${baseClass}--${size}` : '';\n const fullscreenClass = fullscreen ? `${baseClass}--fullscreen` : '';\n \n return `${baseClass} ${variantClass} ${sizeClass} ${fullscreenClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateSpinnerClass,\n };\n} ","import React from 'react';\nimport { SpinnerProps } from '../../lib/types/components';\nimport { useSpinner } from '../../lib/composables/useSpinner';\nimport { SPINNER } from '../../lib/constants/components';\n\nconst Spinner: React.FC<SpinnerProps> = ({\n size = 'md',\n variant = 'primary',\n fullscreen = false,\n className = '',\n}) => {\n const { generateSpinnerClass } = useSpinner({ \n size, variant, fullscreen \n });\n \n const spinnerClass = generateSpinnerClass({ \n size, variant, fullscreen, className \n });\n \n return (\n <div className={spinnerClass} role=\"status\">\n <span className={SPINNER.VISUALLY_HIDDEN}>Loading...</span>\n </div>\n );\n};\n\nexport type { SpinnerProps };\n\n// Set display name for debugging\nSpinner.displayName = 'Spinner';\n\n// Default export (primary)\nexport default Spinner;\n\nexport { Spinner };","import React from 'react';\nimport { PaginationProps } from '../../lib/types/components';\nimport { usePagination, DOTS } from '../../lib/composables/usePagination';\nimport { PAGINATION_DEFAULTS } from '../../lib/constants/components';\nimport { Icon, IconProps } from '../Icon';\n\n// @TODO: Add Search functionality for pagination\n\n/**\n * Navigation button types for pagination\n */\ntype NavButtonType = 'first' | 'prev' | 'next' | 'last';\n\n/**\n * Props for the PaginationNavButton component\n */\ninterface PaginationNavButtonProps {\n type: NavButtonType;\n onClick: () => void;\n disabled: boolean;\n label: string;\n iconName: IconProps['name'];\n}\n\n/**\n * PaginationNavButton component for rendering first, previous, next, and last buttons\n */\nconst PaginationNavButton: React.FC<PaginationNavButtonProps> = ({ \n type, \n onClick, \n disabled, \n label,\n iconName\n}) => (\n <li \n className={`c-pagination__item c-pagination__item--${type} ${disabled ? 'is-disabled' : ''}`}\n aria-disabled={disabled}\n >\n <button \n type=\"button\"\n className=\"c-pagination__link\"\n onClick={onClick} \n disabled={disabled}\n aria-label={label}\n >\n <Icon name={iconName} size=\"sm\" aria-hidden=\"true\" />\n </button>\n </li>\n);\n\n/**\n * Pagination component\n */\nconst Pagination: React.FC<PaginationProps> = ({\n currentPage = PAGINATION_DEFAULTS.currentPage,\n totalPages = PAGINATION_DEFAULTS.totalPages,\n onPageChange,\n siblingCount = PAGINATION_DEFAULTS.siblingCount,\n showFirstLastButtons = PAGINATION_DEFAULTS.showFirstLastButtons,\n showPrevNextButtons = PAGINATION_DEFAULTS.showPrevNextButtons,\n size = PAGINATION_DEFAULTS.size,\n className = '',\n ariaLabel = 'Pagination',\n}) => {\n const {\n paginationRange,\n goToPage,\n nextPage,\n prevPage,\n firstPage,\n lastPage,\n } = usePagination({\n currentPage,\n totalPages,\n siblingCount,\n onPageChange,\n });\n\n // Don't render pagination with a single page or no pages\n if (currentPage === 0 || paginationRange.length < 2) {\n return null;\n }\n\n return (\n <nav \n className={`c-pagination c-pagination--${size} ${className}`} \n aria-label={ariaLabel}\n >\n <ul className=\"c-pagination__items\">\n {showFirstLastButtons && (\n <PaginationNavButton \n type=\"first\"\n onClick={firstPage}\n disabled={currentPage === 1}\n label=\"Go to first page\"\n iconName=\"SkipBack\"\n />\n )}\n \n {showPrevNextButtons && (\n <PaginationNavButton \n type=\"prev\"\n onClick={prevPage}\n disabled={currentPage === 1}\n label=\"Go to previous page\"\n iconName=\"CaretLeft\"\n />\n )}\n \n {paginationRange.map((pageNumber, index) => {\n if (pageNumber === DOTS) {\n return (\n <li \n key={`dots-${index}`} \n className=\"c-pagination__item c-pagination__item--dots\"\n aria-hidden=\"true\"\n >\n &#8230;\n </li>\n );\n }\n\n const isActive = pageNumber === currentPage;\n \n return (\n <li \n key={pageNumber}\n className={`c-pagination__item ${isActive ? 'is-active' : ''}`}\n aria-current={isActive ? 'page' : undefined}\n >\n <button \n type=\"button\"\n className=\"c-pagination__link\"\n onClick={() => goToPage(pageNumber as number)}\n aria-label={`Page ${pageNumber}`}\n aria-current={isActive ? 'page' : undefined}\n >\n {pageNumber}\n </button>\n </li>\n );\n })}\n \n {showPrevNextButtons && (\n <PaginationNavButton \n type=\"next\"\n onClick={nextPage}\n disabled={currentPage === totalPages}\n label=\"Go to next page\"\n iconName=\"CaretRight\"\n />\n )}\n \n {showFirstLastButtons && (\n <PaginationNavButton \n type=\"last\"\n onClick={lastPage}\n disabled={currentPage === totalPages}\n label=\"Go to last page\"\n iconName=\"SkipForward\"\n />\n )}\n </ul>\n </nav>\n );\n};\n\n\nexport type { PaginationProps };\n\n// Set display name for debugging\nPagination.displayName = 'Pagination';\n\n// Default export (primary)\nexport default Pagination;\n\n// Named export for compatibility\nexport { Pagination };","import React, { useRef } from 'react';\nimport { DataTableProps } from '../../lib/types/components';\nimport { useDataTable } from './scripts';\nimport { DATA_TABLE_CLASSES } from '../../lib/constants/components';\nimport { Spinner } from '../Spinner';\nimport { Icon } from '../Icon';\nimport { Pagination } from '../Pagination';\n\n/**\n * DataTable - A flexible and accessible data table component\n * \n * @example\n * ```tsx\n * <DataTable \n * data={users}\n * columns={columns}\n * sortable={true}\n * onRowClick={handleRowClick}\n * />\n * ```\n */\nconst DataTable: React.FC<DataTableProps> = ({\n data = [],\n columns = [],\n className,\n sortable = false,\n filterable = false,\n paginated = false,\n pageSize = 10,\n striped = false,\n bordered = false,\n dense = false,\n loading = false,\n emptyMessage = 'No data available',\n onRowClick,\n onSort,\n ...props\n}) => {\n const tableRef = useRef<HTMLTableElement>(null);\n \n const {\n displayData,\n sortConfig,\n currentPage,\n totalPages,\n handleSort,\n handlePageChange,\n handleSearch,\n } = useDataTable({\n data,\n columns,\n sortable,\n paginated,\n pageSize,\n onSort,\n });\n \n // Generate component classes\n const tableClass = [\n DATA_TABLE_CLASSES.base,\n striped && DATA_TABLE_CLASSES.striped,\n bordered && DATA_TABLE_CLASSES.bordered,\n dense && DATA_TABLE_CLASSES.dense,\n loading && DATA_TABLE_CLASSES.loading,\n className\n ].filter(Boolean).join(' ');\n \n const renderHeader = () => {\n return (\n <thead className={DATA_TABLE_CLASSES.header}>\n <tr>\n {columns.map((column, index) => (\n <th \n key={`header-${index}`}\n className={`${DATA_TABLE_CLASSES.headerCell} ${column.sortable !== false && sortable ? DATA_TABLE_CLASSES.sortable : ''}`}\n onClick={() => column.sortable !== false && sortable ? handleSort(column.key) : null}\n aria-sort={sortConfig?.key === column.key ? (sortConfig.direction === 'asc' ? 'ascending' : 'descending') : undefined}\n >\n <div className={DATA_TABLE_CLASSES.headerContent}>\n <span>{column.title}</span>\n {column.sortable !== false && sortable && (\n <span className={DATA_TABLE_CLASSES.sortIcon}>\n {sortConfig?.key === column.key ? (\n sortConfig.direction === 'asc' ? \n <Icon name=\"CaretUp\" size=\"sm\" /> : \n <Icon name=\"CaretDown\" size=\"sm\" />\n ) : null}\n </span>\n )}\n </div>\n </th>\n ))}\n </tr>\n </thead>\n );\n };\n \n const renderBody = () => {\n if (loading) {\n return (\n <tbody>\n <tr>\n <td \n colSpan={columns.length} \n className={DATA_TABLE_CLASSES.loadingCell}\n >\n <div className={DATA_TABLE_CLASSES.loadingIndicator}>\n <Spinner size=\"md\" variant=\"primary\" />\n </div>\n </td>\n </tr>\n </tbody>\n );\n }\n \n if (displayData.length === 0) {\n return (\n <tbody>\n <tr>\n <td \n colSpan={columns.length} \n className={DATA_TABLE_CLASSES.emptyCell}\n >\n {emptyMessage}\n </td>\n </tr>\n </tbody>\n );\n }\n \n return (\n <tbody>\n {displayData.map((row: any, rowIndex: number) => (\n <tr \n key={`row-${rowIndex}`}\n className={DATA_TABLE_CLASSES.row}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n tabIndex={onRowClick ? 0 : undefined}\n role={onRowClick ? 'button' : undefined}\n >\n {columns.map((column, colIndex) => (\n <td \n key={`cell-${rowIndex}-${colIndex}`}\n className={DATA_TABLE_CLASSES.cell}\n >\n {column.render ? column.render(row[column.key], row) : row[column.key]}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n );\n };\n \n const renderPagination = () => {\n if (!paginated || totalPages <= 1) return null;\n \n return (\n <div className={DATA_TABLE_CLASSES.pagination}>\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={handlePageChange}\n showFirstLastButtons={true}\n showPrevNextButtons={true}\n size=\"sm\"\n ariaLabel=\"Data table pagination\"\n className=\"c-data-table__pagination\"\n />\n </div>\n );\n };\n \n const renderToolbar = () => {\n if (!filterable) return null;\n \n return (\n <div className={DATA_TABLE_CLASSES.toolbar}>\n <div className={DATA_TABLE_CLASSES.search}>\n <input\n type=\"text\"\n placeholder=\"Search...\"\n className={`${DATA_TABLE_CLASSES.searchInput} c-input`}\n onChange={(e) => handleSearch(e.target.value)}\n aria-label=\"Search table\"\n />\n </div>\n </div>\n );\n };\n \n return (\n <div className={DATA_TABLE_CLASSES.container} {...props}>\n {renderToolbar()}\n <div className={DATA_TABLE_CLASSES.tableWrapper}>\n <table \n ref={tableRef}\n className={tableClass}\n >\n {renderHeader()}\n {renderBody()}\n </table>\n </div>\n {renderPagination()}\n </div>\n );\n};\n\nexport type { DataTableProps };\n\n// Set display name for debugging\nDataTable.displayName = 'DataTable';\n\n// Default export (primary)\nexport default DataTable;\n\n// Named export for compatibility\nexport { DataTable };","/**\n * Get the name of a month by its index (0-11)\n */\nexport function getMonthName(month: number): string {\n const date = new Date();\n date.setMonth(month);\n \n return date.toLocaleString('default', { month: 'long' });\n}\n\n/**\n * Get the number of days in a month\n */\nexport function getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\n/**\n * Get the day of the week of the first day of a month (0-6, where 0 is Sunday)\n */\nexport function getFirstDayOfMonth(year: number, month: number): number {\n return new Date(year, month, 1).getDay();\n}\n\n/**\n * Format a date according to the specified format\n */\nexport function formatDate(date: Date, format: string): string {\n if (!date) return '';\n \n const day = date.getDate();\n const month = date.getMonth() + 1;\n const year = date.getFullYear();\n \n // Simple formatting for the most common patterns\n return format\n .replace('yyyy', year.toString())\n .replace('MM', month.toString().padStart(2, '0'))\n .replace('M', month.toString())\n .replace('dd', day.toString().padStart(2, '0'))\n .replace('d', day.toString());\n}\n\n/**\n * Format a date range for display\n */\nexport function formatDateRange(startDate: Date | null, endDate: Date | null, format: string): string {\n if (!startDate) return '';\n \n if (!endDate) {\n return `${formatDate(startDate, format)} - Select end date`;\n }\n \n return `${formatDate(startDate, format)} - ${formatDate(endDate, format)}`;\n}\n\n/**\n * Parse a date string according to the specified format\n */\nexport function parseDate(dateStr: string, format: string): Date | null {\n if (!dateStr) return null;\n \n // Simple parsing for common formats\n const normalized = format.toLowerCase();\n \n if (normalized === 'mm/dd/yyyy') {\n const parts = dateStr.split('/');\n if (parts.length !== 3) return null;\n \n const month = parseInt(parts[0], 10) - 1;\n const day = parseInt(parts[1], 10);\n const year = parseInt(parts[2], 10);\n \n if (isNaN(month) || isNaN(day) || isNaN(year)) return null;\n \n return new Date(year, month, day);\n }\n \n if (normalized === 'dd/mm/yyyy') {\n const parts = dateStr.split('/');\n if (parts.length !== 3) return null;\n \n const day = parseInt(parts[0], 10);\n const month = parseInt(parts[1], 10) - 1;\n const year = parseInt(parts[2], 10);\n \n if (isNaN(month) || isNaN(day) || isNaN(year)) return null;\n \n return new Date(year, month, day);\n }\n \n if (normalized === 'yyyy-mm-dd') {\n const parts = dateStr.split('-');\n if (parts.length !== 3) return null;\n \n const year = parseInt(parts[0], 10);\n const month = parseInt(parts[1], 10) - 1;\n const day = parseInt(parts[2], 10);\n \n if (isNaN(month) || isNaN(day) || isNaN(year)) return null;\n \n return new Date(year, month, day);\n }\n \n // Fallback to native parsing\n const parsedDate = new Date(dateStr);\n return isNaN(parsedDate.getTime()) ? null : parsedDate;\n}\n\n/**\n * Try to parse a date range string (e.g. \"01/01/2023 - 01/15/2023\")\n */\nexport function parseDateRange(rangeStr: string, format: string): { startDate: Date | null, endDate: Date | null } {\n if (!rangeStr) return { startDate: null, endDate: null };\n \n const parts = rangeStr.split('-');\n if (parts.length !== 2) return { startDate: null, endDate: null };\n \n const startDateStr = parts[0].trim();\n const endDateStr = parts[1].trim();\n \n const startDate = parseDate(startDateStr, format);\n const endDate = parseDate(endDateStr, format);\n \n return { startDate, endDate };\n}\n\n/**\n * Check if a date is within a min and max range\n */\nexport function isDateInRange(date: Date, minDate?: Date, maxDate?: Date): boolean {\n if (!date) return false;\n \n if (minDate && date < minDate) return false;\n if (maxDate && date > maxDate) return false;\n \n return true;\n}\n\n/**\n * Check if a date is between startDate and endDate (inclusive)\n */\nexport function isDateInSelectedRange(date: Date, startDate: Date | null, endDate: Date | null): boolean {\n if (!date || !startDate || !endDate) return false;\n \n // Handle case where end date is before start date\n if (endDate < startDate) {\n return date >= endDate && date <= startDate;\n }\n \n return date >= startDate && date <= endDate;\n}\n","import { useState, useRef, useCallback, useEffect } from 'react';\nimport { DatePickerViewMode, DatePickerSelectionMode, DateRange } from '../../components/DatePicker/types';\nimport { \n getMonthName, \n getDaysInMonth, \n getFirstDayOfMonth, \n formatDate, \n isDateInRange\n} from '../../components/DatePicker/utils';\n\ninterface UseDatePickerProps {\n /**\n * The currently selected date value\n */\n value?: Date | null;\n \n /**\n * Callback function when date is changed\n */\n onChange?: (date: Date | null) => void;\n \n /**\n * Selection mode - single date or date range\n */\n selectionMode?: DatePickerSelectionMode;\n \n /**\n * The start date of the range\n */\n startDate?: Date | null;\n \n /**\n * The end date of the range\n */\n endDate?: Date | null;\n \n /**\n * Callback function when date range is changed\n */\n onRangeChange?: (range: DateRange) => void;\n \n /**\n * Format for the date display\n */\n format?: string;\n \n /**\n * Minimum selectable date\n */\n minDate?: Date;\n \n /**\n * Maximum selectable date\n */\n maxDate?: Date;\n \n /**\n * Whether the datepicker is in inline mode\n */\n inline?: boolean;\n}\n\ninterface DateObject {\n day: number;\n month: number;\n year: number;\n isCurrentMonth: boolean;\n}\n\ninterface MonthObject {\n month: number;\n name: string;\n}\n\nexport function useDatePicker({\n value,\n onChange,\n selectionMode = 'single',\n startDate,\n endDate,\n onRangeChange,\n format = 'MM/dd/yyyy',\n minDate,\n maxDate,\n inline = false\n}: UseDatePickerProps = {}) {\n const [isOpen, setIsOpen] = useState(inline);\n const [inputValue, setInputValue] = useState(value ? formatDate(value, format) : '');\n const [rangeInputValue, setRangeInputValue] = useState(\n startDate && endDate \n ? `${formatDate(startDate, format)} - ${formatDate(endDate, format)}`\n : startDate \n ? `${formatDate(startDate, format)} - Select end date` \n : ''\n );\n const [viewDate, setViewDate] = useState(value || startDate || new Date());\n const [viewMode, setViewMode] = useState<DatePickerViewMode>('days');\n const [rangeSelectionState, setRangeSelectionState] = useState<'start' | 'end'>(\n !startDate || (startDate && endDate) ? 'start' : 'end'\n );\n \n const datePickerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n \n const today = new Date();\n const currentMonth = viewDate.getMonth();\n const currentYear = viewDate.getFullYear();\n const daysInMonth = getDaysInMonth(currentYear, currentMonth);\n const firstDayOfMonth = getFirstDayOfMonth(currentYear, currentMonth);\n \n // Update input value when value or range dates change externally\n useEffect(() => {\n if (selectionMode === 'single') {\n setInputValue(value ? formatDate(value, format) : '');\n } else {\n setRangeInputValue(\n startDate && endDate \n ? `${formatDate(startDate, format)} - ${formatDate(endDate, format)}`\n : startDate \n ? `${formatDate(startDate, format)} - Select end date` \n : ''\n );\n setRangeSelectionState(!startDate || (startDate && endDate) ? 'start' : 'end');\n }\n }, [value, startDate, endDate, format, selectionMode]);\n \n // Handle date selection\n const handleDateSelect = useCallback((day: number) => {\n const selectedDate = new Date(currentYear, currentMonth, day);\n \n if (minDate && selectedDate < minDate) return;\n if (maxDate && selectedDate > maxDate) return;\n \n if (selectionMode === 'single') {\n if (onChange) {\n onChange(selectedDate);\n }\n \n setInputValue(formatDate(selectedDate, format));\n if (!inline) {\n setIsOpen(false);\n }\n } else {\n // Range selection mode\n if (rangeSelectionState === 'start') {\n // Selecting start date\n if (onRangeChange) {\n onRangeChange({\n startDate: selectedDate,\n endDate: null\n });\n }\n setRangeInputValue(`${formatDate(selectedDate, format)} - Select end date`);\n setRangeSelectionState('end');\n } else {\n // Selecting end date\n if (!startDate) return;\n \n // Make sure end date is after start date\n if (selectedDate < startDate) {\n if (onRangeChange) {\n onRangeChange({\n startDate: selectedDate,\n endDate: startDate\n });\n }\n setRangeInputValue(`${formatDate(selectedDate, format)} - ${formatDate(startDate, format)}`);\n } else {\n if (onRangeChange) {\n onRangeChange({\n startDate,\n endDate: selectedDate\n });\n }\n setRangeInputValue(`${formatDate(startDate, format)} - ${formatDate(selectedDate, format)}`);\n }\n \n if (!inline) {\n setIsOpen(false);\n }\n setRangeSelectionState('start');\n }\n }\n }, [\n currentYear, \n currentMonth, \n minDate, \n maxDate, \n onChange, \n onRangeChange, \n format, \n inline, \n selectionMode, \n rangeSelectionState, \n startDate\n ]);\n \n // Calendar navigation\n const handlePrevMonth = useCallback(() => {\n setViewDate(new Date(currentYear, currentMonth - 1, 1));\n }, [currentYear, currentMonth]);\n \n const handleNextMonth = useCallback(() => {\n setViewDate(new Date(currentYear, currentMonth + 1, 1));\n }, [currentYear, currentMonth]);\n \n const handlePrevYear = useCallback(() => {\n setViewDate(new Date(currentYear - 1, currentMonth, 1));\n }, [currentYear, currentMonth]);\n \n const handleNextYear = useCallback(() => {\n setViewDate(new Date(currentYear + 1, currentMonth, 1));\n }, [currentYear, currentMonth]);\n \n // Handle view mode changes\n const switchToMonthView = useCallback(() => {\n setViewMode('months');\n }, []);\n \n const switchToYearView = useCallback(() => {\n setViewMode('years');\n }, []);\n \n const selectMonth = useCallback((month: number) => {\n setViewDate(new Date(currentYear, month, 1));\n setViewMode('days');\n }, [currentYear]);\n \n const selectYear = useCallback((year: number) => {\n setViewDate(new Date(year, currentMonth, 1));\n setViewMode('months');\n }, [currentMonth]);\n \n // Handle today button click\n const handleTodayClick = useCallback(() => {\n const todayDate = new Date();\n setViewDate(todayDate);\n \n if (selectionMode === 'single') {\n handleDateSelect(todayDate.getDate());\n } else {\n // For range mode, just navigate to today\n setViewDate(new Date());\n }\n }, [handleDateSelect, selectionMode]);\n \n // Handle clear button click\n const handleClear = useCallback(() => {\n if (selectionMode === 'single') {\n setInputValue('');\n if (onChange) {\n onChange(null);\n }\n } else {\n setRangeInputValue('');\n setRangeSelectionState('start');\n if (onRangeChange) {\n onRangeChange({\n startDate: null,\n endDate: null\n });\n }\n }\n }, [onChange, onRangeChange, selectionMode]);\n \n // Handle input change\n const handleInputChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n if (selectionMode === 'single') {\n setInputValue(e.target.value);\n \n // Try to parse the date\n const parsedDate = new Date(e.target.value);\n if (!isNaN(parsedDate.getTime())) {\n if (onChange) {\n onChange(parsedDate);\n }\n setViewDate(parsedDate);\n }\n } else {\n setRangeInputValue(e.target.value);\n \n // Attempt to parse range input (not fully implemented - would need complex parsing)\n // This is a simplified implementation that would need improvement\n const parts = e.target.value.split('-');\n if (parts.length === 2) {\n const startPart = parts[0].trim();\n const endPart = parts[1].trim();\n \n const parsedStart = new Date(startPart);\n if (!isNaN(parsedStart.getTime())) {\n setViewDate(parsedStart);\n }\n \n // Attempt to parse both dates\n if (startPart && endPart) {\n const parsedStartDate = new Date(startPart);\n const parsedEndDate = new Date(endPart);\n \n if (!isNaN(parsedStartDate.getTime()) && !isNaN(parsedEndDate.getTime())) {\n if (onRangeChange) {\n onRangeChange({\n startDate: parsedStartDate,\n endDate: parsedEndDate\n });\n }\n }\n }\n }\n }\n }, [onChange, onRangeChange, selectionMode]);\n \n // Handle input focus\n const handleInputFocus = useCallback(() => {\n if (!inline) {\n setIsOpen(true);\n }\n }, [inline]);\n \n // Handle click outside\n const handleClickOutside = useCallback((event: MouseEvent) => {\n if (\n datePickerRef.current && \n !datePickerRef.current.contains(event.target as Node) &&\n inputRef.current &&\n !inputRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n }, []);\n \n // Add/remove event listeners\n useEffect(() => {\n if (isOpen && !inline) {\n document.addEventListener('mousedown', handleClickOutside);\n } else {\n document.removeEventListener('mousedown', handleClickOutside);\n }\n \n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen, handleClickOutside, inline]);\n \n // Generate days for the calendar\n const generateDays = useCallback((): DateObject[] => {\n const days: DateObject[] = [];\n const prevMonthDays = getDaysInMonth(\n currentMonth === 0 ? currentYear - 1 : currentYear,\n currentMonth === 0 ? 11 : currentMonth - 1\n );\n \n // Add previous month's days\n for (let i = firstDayOfMonth - 1; i >= 0; i--) {\n days.push({\n day: prevMonthDays - i,\n month: currentMonth === 0 ? 11 : currentMonth - 1,\n year: currentMonth === 0 ? currentYear - 1 : currentYear,\n isCurrentMonth: false\n });\n }\n \n // Add current month's days\n for (let i = 1; i <= daysInMonth; i++) {\n days.push({\n day: i,\n month: currentMonth,\n year: currentYear,\n isCurrentMonth: true\n });\n }\n \n // Add next month's days\n const remainingDays = 42 - days.length;\n for (let i = 1; i <= remainingDays; i++) {\n days.push({\n day: i,\n month: currentMonth === 11 ? 0 : currentMonth + 1,\n year: currentMonth === 11 ? currentYear + 1 : currentYear,\n isCurrentMonth: false\n });\n }\n \n return days;\n }, [daysInMonth, firstDayOfMonth, currentMonth, currentYear]);\n \n // Generate months for month picker\n const generateMonths = useCallback((): MonthObject[] => {\n const months: MonthObject[] = [];\n for (let i = 0; i < 12; i++) {\n months.push({\n month: i,\n name: getMonthName(i)\n });\n }\n return months;\n }, []);\n \n // Generate years for year picker\n const generateYears = useCallback((): number[] => {\n const years: number[] = [];\n const startYear = currentYear - 6;\n for (let i = 0; i < 12; i++) {\n years.push(startYear + i);\n }\n return years;\n }, [currentYear]);\n \n // Check if a date is selectable\n const isDateSelectable = useCallback((year: number, month: number, day: number): boolean => {\n const date = new Date(year, month, day);\n return isDateInRange(date, minDate, maxDate);\n }, [minDate, maxDate]);\n \n // Check if a date is selected\n const isDateSelected = useCallback((year: number, month: number, day: number): boolean => {\n if (selectionMode === 'single') {\n if (!value) return false;\n \n return (\n value.getFullYear() === year &&\n value.getMonth() === month &&\n value.getDate() === day\n );\n } else {\n if (!startDate && !endDate) return false;\n \n const date = new Date(year, month, day);\n \n if (startDate && !endDate) {\n return (\n startDate.getFullYear() === year &&\n startDate.getMonth() === month &&\n startDate.getDate() === day\n );\n }\n \n if (startDate && endDate) {\n // Return true if the date is the start date or end date\n const isStartDate = (\n startDate.getFullYear() === year &&\n startDate.getMonth() === month &&\n startDate.getDate() === day\n );\n \n const isEndDate = (\n endDate.getFullYear() === year &&\n endDate.getMonth() === month &&\n endDate.getDate() === day\n );\n \n return isStartDate || isEndDate;\n }\n \n return false;\n }\n }, [value, selectionMode, startDate, endDate]);\n \n // Check if a date is in range (between startDate and endDate)\n const isDateInSelectedRange = useCallback((year: number, month: number, day: number): boolean => {\n if (selectionMode !== 'range' || !startDate || !endDate) return false;\n \n const date = new Date(year, month, day);\n return date > startDate && date < endDate;\n }, [selectionMode, startDate, endDate]);\n \n // Check if a date is today\n const isToday = useCallback((year: number, month: number, day: number): boolean => {\n return (\n today.getFullYear() === year &&\n today.getMonth() === month &&\n today.getDate() === day\n );\n }, [today]);\n \n // Calculate week number for a date\n const getWeekNumber = useCallback((date: Date): number => {\n const target = new Date(date.valueOf());\n const dayNr = (date.getDay() + 6) % 7;\n target.setDate(target.getDate() - dayNr + 3);\n const firstThursday = target.valueOf();\n target.setMonth(0, 1);\n if (target.getDay() !== 4) {\n target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n }\n return 1 + Math.ceil((firstThursday - target.valueOf()) / 604800000);\n }, []);\n \n return {\n // State\n isOpen,\n inputValue,\n rangeInputValue,\n viewDate,\n viewMode,\n currentMonth,\n currentYear,\n selectionMode,\n rangeSelectionState,\n \n // Refs\n datePickerRef,\n inputRef,\n \n // Range state\n startDate,\n endDate,\n \n // Action handlers\n setIsOpen,\n handleDateSelect,\n handlePrevMonth,\n handleNextMonth,\n handlePrevYear,\n handleNextYear,\n handleTodayClick,\n handleClear,\n handleInputChange,\n handleInputFocus,\n \n // View mode handlers\n switchToMonthView,\n switchToYearView,\n selectMonth,\n selectYear,\n \n // Data generators\n generateDays,\n generateMonths,\n generateYears,\n \n // State checkers\n isDateSelectable,\n isDateSelected,\n isDateInSelectedRange,\n isToday,\n getWeekNumber,\n };\n} ","import React, { forwardRef, useImperativeHandle } from 'react';\nimport { DatePickerProps, DatePickerRef } from './types';\nimport { useDatePicker } from '../../lib/composables/useDatePicker';\nimport { formatDate } from './utils';\nimport Icon from '../Icon';\n\n/**\n * DatePicker component for selecting dates from a calendar interface.\n * Supports various display modes, date ranges, and customization options.\n */\nconst DatePicker = forwardRef<DatePickerRef, DatePickerProps>(({\n value,\n onChange,\n selectionMode = 'single',\n startDate,\n endDate,\n onRangeChange,\n format = 'MM/dd/yyyy',\n minDate,\n maxDate,\n placeholder = 'Select date...',\n disabled = false,\n readOnly = false,\n clearable = true,\n showTodayButton = true,\n showWeekNumbers = false,\n inline = false,\n id,\n name,\n className = '',\n placement = 'bottom-start',\n inputClassName = '',\n size = 'md',\n ...props\n}, ref) => {\n const {\n // State\n isOpen,\n inputValue,\n rangeInputValue,\n viewMode,\n currentMonth,\n currentYear,\n selectionMode: activeSelectionMode,\n rangeSelectionState,\n \n // Refs\n datePickerRef,\n inputRef,\n \n // Range state\n startDate: rangeStartDate,\n endDate: rangeEndDate,\n \n // Action handlers\n setIsOpen,\n handleDateSelect,\n handlePrevMonth,\n handleNextMonth,\n handlePrevYear,\n handleNextYear,\n handleTodayClick,\n handleClear,\n handleInputChange,\n handleInputFocus,\n \n // View mode handlers\n switchToMonthView,\n switchToYearView,\n selectMonth,\n selectYear,\n \n // Data generators\n generateDays,\n generateMonths,\n generateYears,\n \n // State checkers\n isDateSelectable,\n isDateSelected,\n isDateInSelectedRange,\n isToday,\n getWeekNumber,\n } = useDatePicker({\n value,\n onChange,\n selectionMode,\n startDate,\n endDate,\n onRangeChange,\n format,\n minDate,\n maxDate,\n inline\n });\n \n // Expose the ref API\n useImperativeHandle(ref, () => ({\n open: () => setIsOpen(true),\n close: () => setIsOpen(false),\n clear: handleClear,\n focus: () => inputRef.current?.focus()\n }));\n \n // Prepare class names\n const datepickerClassName = `c-datepicker ${className} ${inline ? 'c-datepicker--inline' : ''}`.trim();\n const inputClasses = `c-datepicker__input c-input c-input--${size} ${inputClassName}`.trim();\n \n // Create unique ID for accessibility\n const datepickerId = id || `datepicker-${Math.random().toString(36).substring(2, 9)}`;\n const calendarId = `${datepickerId}-calendar`;\n \n // Get the appropriate input value based on selection mode\n const displayValue = selectionMode === 'single' ? inputValue : rangeInputValue;\n \n // Helper function to get placeholder based on selection mode\n const getPlaceholder = () => {\n if (selectionMode === 'single') {\n return placeholder;\n } else {\n return rangeSelectionState === 'start' \n ? 'Select start date...' \n : (rangeStartDate ? `${formatDate(rangeStartDate, format)} - Select end date...` : 'Select date range...');\n }\n };\n \n return (\n <div className={datepickerClassName} ref={datePickerRef} {...props}>\n {!inline && (\n <div className=\"c-datepicker__input-wrapper\">\n <input\n id={datepickerId}\n name={name}\n ref={inputRef}\n type=\"text\"\n className={inputClasses}\n placeholder={getPlaceholder()}\n value={displayValue}\n onChange={handleInputChange}\n onFocus={handleInputFocus}\n disabled={disabled}\n readOnly={readOnly}\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-controls={calendarId}\n />\n {clearable && displayValue && (\n <button\n type=\"button\"\n className=\"c-datepicker__clear-button\"\n onClick={handleClear}\n aria-label=\"Clear date\"\n >\n <Icon name=\"X\" size=\"sm\" />\n </button>\n )}\n <span className=\"c-datepicker__calendar-icon\" aria-hidden=\"true\">\n <Icon name=\"Calendar\" size=\"sm\" color=\"var(--atomix-secondary-text-emphasis)\" />\n </span>\n </div>\n )}\n \n {(isOpen || inline) && (\n <div \n id={calendarId}\n className={`c-datepicker__calendar c-datepicker__calendar--${placement}`}\n role=\"dialog\"\n aria-modal={!inline ? \"true\" : undefined}\n aria-label=\"Date picker\"\n >\n \n \n <div className=\"c-datepicker__header\">\n {viewMode === 'days' && (\n <>\n <button\n type=\"button\"\n className=\"c-datepicker__nav-button c-datepicker__nav-button--prev-year\"\n onClick={handlePrevYear}\n aria-label=\"Previous year\"\n >\n <Icon name=\"CaretDoubleLeft\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n className=\"c-datepicker__nav-button c-datepicker__nav-button--prev-month\"\n onClick={handlePrevMonth}\n aria-label=\"Previous month\"\n >\n <Icon name=\"CaretLeft\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n className=\"c-datepicker__view-switch\"\n onClick={switchToMonthView}\n aria-label=\"Switch to month view\"\n >\n {`${currentMonth + 1}/${currentYear}`}\n </button>\n <button\n type=\"button\"\n className=\"c-datepicker__nav-button c-datepicker__nav-button--next-month\"\n onClick={handleNextMonth}\n aria-label=\"Next month\"\n >\n <Icon name=\"CaretRight\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n className=\"c-datepicker__nav-button c-datepicker__nav-button--next-year\"\n onClick={handleNextYear}\n aria-label=\"Next year\"\n >\n <Icon name=\"CaretDoubleRight\" size=\"sm\" />\n </button>\n </>\n )}\n \n {viewMode === 'months' && (\n <>\n <button\n type=\"button\"\n className=\"c-datepicker__nav-button c-datepicker__nav-button--prev-year\"\n onClick={handlePrevYear}\n aria-label=\"Previous year\"\n >\n <Icon name=\"CaretLeft\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n className=\"c-datepicker__view-switch\"\n onClick={switchToYearView}\n aria-label=\"Switch to year view\"\n >\n {currentYear}\n </button>\n <button\n type=\"button\"\n className=\"c-datepicker__nav-button c-datepicker__nav-button--next-year\"\n onClick={handleNextYear}\n aria-label=\"Next year\"\n >\n <Icon name=\"CaretRight\" size=\"sm\" />\n </button>\n </>\n )}\n \n {viewMode === 'years' && (\n <>\n <button\n type=\"button\"\n className=\"c-datepicker__nav-button c-datepicker__nav-button--prev-year\"\n onClick={() => handlePrevYear()}\n aria-label=\"Previous year range\"\n >\n <Icon name=\"CaretLeft\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n className=\"c-datepicker__view-switch\"\n aria-label=\"Current year range\"\n >\n {currentYear - 6} - {currentYear + 5}\n </button>\n <button\n type=\"button\"\n className=\"c-datepicker__nav-button c-datepicker__nav-button--next-year\"\n onClick={() => handleNextYear()}\n aria-label=\"Next year range\"\n >\n <Icon name=\"CaretRight\" size=\"sm\" />\n </button>\n </>\n )}\n </div>\n \n <div className=\"c-datepicker__body\">\n {viewMode === 'days' && (\n <>\n <div className=\"c-datepicker__weekdays\" role=\"row\">\n {showWeekNumbers && <div className=\"c-datepicker__weekday c-datepicker__weeknumber\" role=\"columnheader\">#</div>}\n <div className=\"c-datepicker__weekday\" role=\"columnheader\">Su</div>\n <div className=\"c-datepicker__weekday\" role=\"columnheader\">Mo</div>\n <div className=\"c-datepicker__weekday\" role=\"columnheader\">Tu</div>\n <div className=\"c-datepicker__weekday\" role=\"columnheader\">We</div>\n <div className=\"c-datepicker__weekday\" role=\"columnheader\">Th</div>\n <div className=\"c-datepicker__weekday\" role=\"columnheader\">Fr</div>\n <div className=\"c-datepicker__weekday\" role=\"columnheader\">Sa</div>\n </div>\n \n <div \n className=\"c-datepicker__days\" \n role=\"grid\"\n aria-labelledby={`${datepickerId}-month-year`}\n >\n {generateDays().map((dateObj, index) => {\n const isSelectable = isDateSelectable(dateObj.year, dateObj.month, dateObj.day);\n const isSelected = isDateSelected(dateObj.year, dateObj.month, dateObj.day);\n const isTodayDate = isToday(dateObj.year, dateObj.month, dateObj.day);\n const dateValue = new Date(dateObj.year, dateObj.month, dateObj.day);\n \n // Check if date is in range (for range selection)\n const isInRange = isDateInSelectedRange(dateObj.year, dateObj.month, dateObj.day);\n \n // Determine if the day is start or end of range\n const isStartOfRange = selectionMode === 'range' && startDate && \n dateObj.day === startDate.getDate() && \n dateObj.month === startDate.getMonth() && \n dateObj.year === startDate.getFullYear();\n \n const isEndOfRange = selectionMode === 'range' && endDate && \n dateObj.day === endDate.getDate() && \n dateObj.month === endDate.getMonth() && \n dateObj.year === endDate.getFullYear();\n \n // Add week number if enabled\n if (showWeekNumbers && index % 7 === 0) {\n const weekNum = getWeekNumber(dateValue);\n \n return (\n <React.Fragment key={`week-${index}`}>\n <div \n className=\"c-datepicker__weeknumber\"\n aria-label={`Week ${weekNum}`}\n >\n {weekNum}\n </div>\n <button\n type=\"button\"\n className={`c-datepicker__day \n ${!dateObj.isCurrentMonth ? 'c-datepicker__day--outside' : ''} \n ${isSelected ? 'c-datepicker__day--selected' : ''} \n ${isStartOfRange ? 'c-datepicker__day--start-range' : ''}\n ${isEndOfRange ? 'c-datepicker__day--end-range' : ''}\n ${isInRange ? 'c-datepicker__day--in-range' : ''}\n ${isTodayDate ? 'c-datepicker__day--today' : ''} \n ${!isSelectable ? 'c-datepicker__day--disabled' : ''}`}\n onClick={() => isSelectable && handleDateSelect(dateObj.day)}\n disabled={!isSelectable}\n tabIndex={dateObj.isCurrentMonth ? 0 : -1}\n aria-label={dateValue.toLocaleDateString()}\n aria-selected={isSelected ? 'true' : 'false'}\n role=\"gridcell\"\n >\n {dateObj.day}\n </button>\n </React.Fragment>\n );\n }\n \n return (\n <button\n key={`day-${index}`}\n type=\"button\"\n className={`c-datepicker__day \n ${!dateObj.isCurrentMonth ? 'c-datepicker__day--outside' : ''} \n ${isSelected ? 'c-datepicker__day--selected' : ''} \n ${isStartOfRange ? 'c-datepicker__day--start-range' : ''}\n ${isEndOfRange ? 'c-datepicker__day--end-range' : ''}\n ${isInRange ? 'c-datepicker__day--in-range' : ''}\n ${isTodayDate ? 'c-datepicker__day--today' : ''} \n ${!isSelectable ? 'c-datepicker__day--disabled' : ''}`}\n onClick={() => isSelectable && handleDateSelect(dateObj.day)}\n disabled={!isSelectable}\n tabIndex={dateObj.isCurrentMonth ? 0 : -1}\n aria-label={dateValue.toLocaleDateString()}\n aria-selected={isSelected ? 'true' : 'false'}\n role=\"gridcell\"\n >\n {dateObj.day}\n </button>\n );\n })}\n </div>\n </>\n )}\n \n {viewMode === 'months' && (\n <div className=\"c-datepicker__months\" role=\"grid\">\n {generateMonths().map((monthObj, index) => {\n const isSelected = value && value.getMonth() === monthObj.month && value.getFullYear() === currentYear;\n \n return (\n <button\n key={`month-${index}`}\n type=\"button\"\n className={`c-datepicker__month ${isSelected ? 'c-datepicker__month--selected' : ''}`}\n onClick={() => selectMonth(monthObj.month)}\n aria-selected={isSelected ? 'true' : 'false'}\n role=\"gridcell\"\n >\n {monthObj.name.substring(0, 3)}\n </button>\n );\n })}\n </div>\n )}\n \n {viewMode === 'years' && (\n <div className=\"c-datepicker__years\" role=\"grid\">\n {generateYears().map((year, index) => {\n const isSelected = value && value.getFullYear() === year;\n \n return (\n <button\n key={`year-${index}`}\n type=\"button\"\n className={`c-datepicker__year ${isSelected ? 'c-datepicker__year--selected' : ''}`}\n onClick={() => selectYear(year)}\n aria-selected={isSelected ? 'true' : 'false'}\n role=\"gridcell\"\n >\n {year}\n </button>\n );\n })}\n </div>\n )}\n </div>\n \n {viewMode === 'days' && (\n <div className=\"c-datepicker__footer\">\n {selectionMode === 'range' && (\n <div className=\"c-datepicker__range-status c-badge c-badge--sm c-badge--info u-w-100\">\n Selecting {rangeSelectionState === 'start' ? 'start' : 'end'} date\n </div>\n )}\n\n {showTodayButton && (\n <button\n type=\"button\"\n className=\"c-datepicker__today-button c-btn c-btn--sm c-btn--outline-primary\"\n onClick={handleTodayClick}\n aria-label=\"Go to today\"\n >\n Today\n </button>\n )} \n \n {!inline && (\n <button\n type=\"button\"\n className=\"c-datepicker__close-button c-btn c-btn--sm c-btn--outline-error\"\n onClick={() => setIsOpen(false)}\n aria-label=\"Close calendar\"\n >\n Close\n </button>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n );\n});\n\nDatePicker.displayName = 'DatePicker';\n\n\nexport {DatePicker};\n\nexport type { DatePickerProps, DatePickerRef } from './types';\n\nexport default DatePicker;\n","import React, { useRef, useState, useCallback, createContext, useContext, useEffect } from 'react';\nimport { DROPDOWN } from '../../lib/constants/components';\nimport type { \n DropdownProps, \n DropdownItemProps, \n DropdownDividerProps, \n DropdownHeaderProps \n} from '../../lib/types/components';\n\n// Context type definition\ntype DropdownContextType = {\n isOpen: boolean;\n close: () => void;\n id: string;\n trigger: string;\n};\n\n// Create context for dropdown state management\nconst DropdownContext = createContext<DropdownContextType>({\n isOpen: false,\n close: () => {},\n id: '',\n trigger: 'click'\n});\n\n/**\n * DropdownItem component for menu items\n */\nexport const DropdownItem: React.FC<DropdownItemProps> = ({\n children,\n href,\n active = false,\n disabled = false,\n icon,\n onClick,\n className = '',\n ...props\n}) => {\n const { close } = useContext(DropdownContext);\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n\n if (onClick) {\n onClick(e);\n }\n\n // Always close the dropdown when an item is clicked\n close();\n };\n\n const itemClasses = [\n 'c-dropdown__menu-item',\n active ? 'is-active' : '',\n disabled ? 'is-disabled' : '',\n className\n ].filter(Boolean).join(' ');\n\n if (href && !disabled) {\n return (\n <li>\n <a \n href={href} \n className={itemClasses}\n onClick={handleClick}\n role=\"menuitem\"\n tabIndex={0}\n {...props}\n >\n {icon && <span className=\"c-dropdown__menu-item-icon\">{icon}</span>}\n {children}\n </a>\n </li>\n );\n }\n\n return (\n <li>\n <button \n type=\"button\"\n className={itemClasses}\n onClick={handleClick}\n disabled={disabled}\n role=\"menuitem\"\n tabIndex={0}\n {...props}\n >\n {icon && <span className=\"c-dropdown__menu-item-icon\">{icon}</span>}\n {children}\n </button>\n </li>\n );\n};\n\n/**\n * DropdownDivider component for separating groups of items\n */\nexport const DropdownDivider: React.FC<DropdownDividerProps> = ({ className = '' }) => {\n return <li className={`c-dropdown__divider ${className}`} role=\"separator\" />;\n};\n\n/**\n * DropdownHeader component for section headers\n */\nexport const DropdownHeader: React.FC<DropdownHeaderProps> = ({ children, className = '' }) => {\n return (\n <li className={`c-dropdown__header ${className}`}>\n {children}\n </li>\n );\n};\n\n/**\n * Dropdown component for creating dropdown menus\n */\nconst Dropdown: React.FC<DropdownProps> = ({\n children, \n menu,\n placement = 'bottom-start',\n trigger = 'click', \n offset = DROPDOWN.DEFAULTS.OFFSET,\n isOpen: controlledIsOpen,\n onOpenChange,\n closeOnClickOutside = true,\n closeOnEscape = true,\n maxHeight,\n minWidth = DROPDOWN.DEFAULTS.MIN_WIDTH,\n variant,\n className = '',\n ...props\n}) => {\n // Set up controlled vs uncontrolled state\n const [uncontrolledIsOpen, setUncontrolledIsOpen] = useState(false);\n const isControlled = controlledIsOpen !== undefined;\n const isOpen = isControlled ? controlledIsOpen : uncontrolledIsOpen;\n \n // Create refs\n const dropdownRef = useRef<HTMLDivElement>(null);\n const toggleRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n \n // Generate unique ID\n const dropdownId = useRef(`dropdown-${Math.random().toString(36).substring(2, 9)}`).current;\n \n // State change handlers\n const setIsOpen = useCallback((nextIsOpen: boolean) => {\n if (!isControlled) {\n setUncontrolledIsOpen(nextIsOpen);\n }\n if (onOpenChange) {\n onOpenChange(nextIsOpen);\n }\n }, [isControlled, onOpenChange]);\n \n const toggle = useCallback(() => setIsOpen(!isOpen), [isOpen, setIsOpen]);\n \n const close = useCallback(() => {\n setIsOpen(false);\n // Return focus to the toggle button after closing\n setTimeout(() => {\n toggleRef.current?.focus();\n }, 0);\n }, [setIsOpen]);\n \n // Click outside handler\n useEffect(() => {\n if (!isOpen || !closeOnClickOutside) return;\n \n const handleClickOutside = (e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\n close();\n }\n };\n \n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen, closeOnClickOutside, close]);\n \n // Escape key handler\n useEffect(() => {\n if (!isOpen || !closeOnEscape) return;\n \n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n close();\n }\n };\n \n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, closeOnEscape, close]);\n \n // Keyboard navigation\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (!menuRef.current) return;\n \n const focusableItems = menuRef.current.querySelectorAll<HTMLElement>('[role=\"menuitem\"]:not([disabled])');\n if (!focusableItems.length) return;\n \n const currentIndex = Array.from(focusableItems).findIndex(item => item === document.activeElement);\n \n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (currentIndex < focusableItems.length - 1) {\n focusableItems[currentIndex + 1].focus();\n } else {\n focusableItems[0].focus();\n }\n break;\n \n case 'ArrowUp':\n e.preventDefault();\n if (currentIndex > 0) {\n focusableItems[currentIndex - 1].focus();\n } else {\n focusableItems[focusableItems.length - 1].focus();\n }\n break;\n \n case 'Home':\n e.preventDefault();\n focusableItems[0].focus();\n break;\n \n case 'End':\n e.preventDefault();\n focusableItems[focusableItems.length - 1].focus();\n break;\n }\n }, []);\n \n // Event handlers\n const handleToggleClick = useCallback((e: React.MouseEvent) => {\n if (trigger === 'click') {\n e.preventDefault();\n e.stopPropagation();\n toggle();\n }\n }, [trigger, toggle]);\n \n const handleToggleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') && !isOpen) {\n e.preventDefault();\n setIsOpen(true);\n \n // Only focus the first menu item when using keyboard navigation\n if (e.key === 'ArrowDown' && menuRef.current) {\n setTimeout(() => {\n const firstItem = menuRef.current?.querySelector<HTMLElement>('[role=\"menuitem\"]');\n firstItem?.focus();\n }, 100);\n }\n } else if (e.key === 'Escape' && isOpen) {\n e.preventDefault();\n close();\n }\n }, [isOpen, setIsOpen, close]);\n \n // Hover handlers for trigger=\"hover\"\n const handleHoverOpen = useCallback(() => {\n if (trigger === 'hover') {\n setIsOpen(true);\n }\n }, [trigger, setIsOpen]);\n \n // Build class names\n const dropdownClasses = [\n 'c-dropdown',\n trigger === 'click' ? 'c-dropdown--onclick' : '',\n variant ? `c-dropdown--${variant}` : '',\n isOpen ? 'is-open' : '',\n className\n ].filter(Boolean).join(' ');\n \n // Menu styles\n const menuStyleProps: React.CSSProperties = {};\n if (maxHeight) menuStyleProps.maxHeight = maxHeight;\n if (minWidth !== undefined) {\n menuStyleProps.minWidth = typeof minWidth === 'number' ? `${minWidth}px` : minWidth;\n }\n\n return (\n <div \n ref={dropdownRef} \n className={dropdownClasses}\n onMouseEnter={trigger === 'hover' ? handleHoverOpen : undefined}\n {...props}\n >\n <div \n ref={toggleRef}\n className=\"c-dropdown__toggle\"\n onClick={handleToggleClick}\n onKeyDown={handleToggleKeyDown}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n aria-controls={dropdownId}\n tabIndex={0}\n >\n {children}\n </div>\n \n <div \n ref={menuRef}\n id={dropdownId}\n className={`c-dropdown__menu-wrapper c-dropdown__menu-wrapper--${placement} ${isOpen ? 'is-open' : ''}`}\n role=\"menu\"\n aria-orientation=\"vertical\"\n aria-hidden={!isOpen}\n onKeyDown={handleKeyDown}\n >\n <div className=\"c-dropdown__menu-inner\" style={menuStyleProps}>\n <DropdownContext.Provider value={{ isOpen, close, id: dropdownId, trigger }}>\n <ul className=\"c-dropdown__menu\">\n {menu}\n </ul>\n </DropdownContext.Provider>\n </div>\n </div>\n </div>\n );\n}; \n\n\n\nexport type { DropdownProps, DropdownItemProps, DropdownDividerProps, DropdownHeaderProps };\n\n// Set display name for debugging\nDropdown.displayName = 'Dropdown';\n\n// Default export (primary)\nexport default Dropdown;\n\n// Named export for compatibility\nexport { Dropdown };","import { useEffect, useRef, useState, useCallback } from 'react';\nimport { EdgePanelProps } from '../types/components';\nimport { EDGE_PANEL } from '../constants/components';\n\n/**\n * EdgePanel state and functionality\n * @param initialProps - Initial EdgePanel properties\n * @returns EdgePanel state and methods\n */\nexport function useEdgePanel(initialProps?: Partial<EdgePanelProps>) {\n // Default EdgePanel properties\n const defaultProps: Partial<EdgePanelProps> = {\n position: 'start',\n mode: 'slide',\n isOpen: false,\n backdrop: true,\n closeOnBackdropClick: true,\n closeOnEscape: true,\n ...initialProps\n };\n\n const [isOpen, setIsOpen] = useState(defaultProps.isOpen || false);\n const containerRef = useRef<HTMLDivElement>(null);\n const backdropRef = useRef<HTMLDivElement>(null);\n\n /**\n * Generate EdgePanel class based on properties\n * @param props - EdgePanel properties\n * @returns Class string\n */\n const generateEdgePanelClass = (props: Partial<EdgePanelProps>): string => {\n const {\n position = defaultProps.position,\n className = '',\n isOpen: propIsOpen,\n } = props;\n\n const baseClass = EDGE_PANEL.CLASSES.BASE;\n const positionClass = position ? `${baseClass}--${position}` : '';\n const openClass = (propIsOpen ?? isOpen) ? EDGE_PANEL.CLASSES.IS_OPEN : '';\n \n return `${baseClass} ${positionClass} ${openClass} ${className}`.trim();\n };\n \n /**\n * Adjust body padding in push mode\n */\n const adjustBodyPadding = useCallback(() => {\n if (!containerRef.current || defaultProps.mode !== 'push') return;\n \n const { position } = defaultProps;\n const size = position === 'top' || position === 'bottom'\n ? containerRef.current.clientHeight\n : containerRef.current.clientWidth;\n\n // Map position to CSS padding property\n let paddingProperty: string;\n switch (position) {\n case 'start':\n paddingProperty = 'paddingLeft';\n break;\n case 'end':\n paddingProperty = 'paddingRight';\n break;\n default:\n // For top/bottom, capitalize first letter\n paddingProperty = `padding${position!.charAt(0).toUpperCase() + position!.slice(1)}`;\n }\n \n document.body.style[paddingProperty as any] = `${size}px`;\n document.body.classList.add('is-pushed');\n }, [defaultProps.mode, defaultProps.position]);\n \n /**\n * Reset body padding\n */\n const resetBodyPadding = useCallback(() => {\n if (defaultProps.mode !== 'push') return;\n \n const { position } = defaultProps;\n \n // Map position to CSS padding property\n let paddingProperty: string;\n switch (position) {\n case 'start':\n paddingProperty = 'paddingLeft';\n break;\n case 'end':\n paddingProperty = 'paddingRight';\n break;\n default:\n // For top/bottom, capitalize first letter\n paddingProperty = `padding${position!.charAt(0).toUpperCase() + position!.slice(1)}`;\n }\n \n document.body.style[paddingProperty as any] = '';\n document.body.classList.remove('is-pushed');\n }, [defaultProps.mode, defaultProps.position]);\n\n /**\n * Open the panel\n */\n const openPanel = useCallback(() => {\n setIsOpen(true);\n document.body.classList.add('is-edgepanel-open');\n \n if (containerRef.current) {\n const { mode } = defaultProps;\n \n // Only add animation if not in 'none' mode\n if (mode !== 'none') {\n // Add animation class first\n containerRef.current.classList.add('is-animating');\n \n // Force a reflow before starting the animation\n void containerRef.current.offsetHeight;\n \n // Remove animation class after animation completes\n const container = containerRef.current;\n setTimeout(() => {\n if (container) {\n container.classList.remove('is-animating');\n }\n }, EDGE_PANEL.ANIMATION_DURATION);\n }\n \n // Then set transform\n containerRef.current.style.transform = 'translate(0)';\n \n // If push mode, adjust body padding\n if (defaultProps.mode === 'push') {\n adjustBodyPadding();\n }\n }\n \n if (defaultProps.onOpenChange) {\n defaultProps.onOpenChange(true);\n }\n }, [defaultProps, adjustBodyPadding]);\n\n /**\n * Close the panel\n */\n const closePanel = useCallback(() => {\n if (containerRef.current) {\n const { position, mode } = defaultProps;\n \n // Only add animation if not in 'none' mode\n if (mode !== 'none') {\n // Add animation class first\n containerRef.current.classList.add('is-animating-out');\n \n // Capture container for setTimeout\n const container = containerRef.current;\n \n setTimeout(() => {\n if (container) {\n container.classList.remove('is-animating-out');\n }\n }, EDGE_PANEL.ANIMATION_DURATION);\n }\n \n // Then set transform\n containerRef.current.style.transform = position ? EDGE_PANEL.TRANSFORM_VALUES[position] : '';\n \n // Reset body padding if push mode\n if (defaultProps.mode === 'push') {\n resetBodyPadding();\n }\n \n // Wait for animation to complete before hiding\n const hideDelay = mode === 'none' ? 0 : EDGE_PANEL.ANIMATION_DURATION;\n \n setTimeout(() => {\n setIsOpen(false);\n document.body.classList.remove('is-edgepanel-open');\n \n if (defaultProps.onOpenChange) {\n defaultProps.onOpenChange(false);\n }\n }, hideDelay);\n } else {\n setIsOpen(false);\n document.body.classList.remove('is-edgepanel-open');\n \n if (defaultProps.onOpenChange) {\n defaultProps.onOpenChange(false);\n }\n }\n }, [defaultProps, resetBodyPadding]);\n\n /**\n * Handle Escape key press\n */\n const handleEscapeKey = useCallback((event: KeyboardEvent) => {\n if (defaultProps.closeOnEscape && event.key === 'Escape' && isOpen) {\n closePanel();\n }\n }, [closePanel, defaultProps.closeOnEscape, isOpen]);\n\n /**\n * Handle backdrop click\n */\n const handleBackdropClick = useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n if (defaultProps.closeOnBackdropClick && event.target === event.currentTarget) {\n closePanel();\n }\n }, [closePanel, defaultProps.closeOnBackdropClick]);\n\n /**\n * Set up event listeners for keyboard events\n */\n useEffect(() => {\n if (isOpen && defaultProps.closeOnEscape) {\n document.addEventListener('keydown', handleEscapeKey);\n }\n \n return () => {\n document.removeEventListener('keydown', handleEscapeKey);\n };\n }, [isOpen, handleEscapeKey, defaultProps.closeOnEscape]);\n\n /**\n * Set initial transform values\n */\n useEffect(() => {\n if (containerRef.current) {\n const { position, mode } = defaultProps;\n \n if (!isOpen && (mode === 'slide' || mode === 'push') && position) {\n containerRef.current.style.transform = EDGE_PANEL.TRANSFORM_VALUES[position];\n }\n }\n }, [defaultProps.mode, defaultProps.position, isOpen]);\n\n /**\n * Sync with prop changes\n */\n useEffect(() => {\n if (defaultProps.isOpen !== undefined && defaultProps.isOpen !== isOpen) {\n if (defaultProps.isOpen) {\n openPanel();\n } else {\n closePanel();\n }\n }\n }, [defaultProps.isOpen, closePanel, isOpen, openPanel]);\n\n return {\n isOpen,\n containerRef,\n backdropRef,\n generateEdgePanelClass,\n openPanel,\n closePanel,\n handleBackdropClick\n };\n} ","import React from 'react';\nimport { EdgePanelProps } from '../../lib/types/components';\nimport { useEdgePanel } from '../../lib/composables/useEdgePanel';\nimport { EDGE_PANEL } from '../../lib/constants/components';\nimport { Icon } from '../Icon/Icon';\nconst EdgePanel: React.FC<EdgePanelProps> = ({\n title,\n children,\n position = 'start',\n mode = 'slide',\n isOpen = false,\n onOpenChange,\n backdrop = true,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n className = '',\n}) => {\n const {\n isOpen: isOpenState,\n containerRef,\n backdropRef,\n generateEdgePanelClass,\n closePanel,\n handleBackdropClick\n } = useEdgePanel({\n position,\n mode,\n isOpen,\n onOpenChange,\n backdrop,\n closeOnBackdropClick,\n closeOnEscape,\n });\n\n const panelClass = generateEdgePanelClass({\n position,\n isOpen,\n className,\n });\n\n // If not open and not controlled by parent, don't render\n if (!isOpenState && isOpen === false) {\n return null;\n }\n\n return (\n <div className={panelClass} data-position={position} data-mode={mode}>\n {backdrop && (\n <div \n ref={backdropRef}\n className=\"c-edge-panel__backdrop\"\n onClick={handleBackdropClick}\n />\n )}\n <div ref={containerRef} className=\"c-edge-panel__container\">\n <div className=\"c-edge-panel__header\">\n <h4>{title}</h4>\n <button \n className=\"c-edge-panel__close c-btn c-btn--icon\" \n onClick={closePanel}\n aria-label=\"Close panel\"\n >\n <Icon name=\"X\" />\n </button>\n </div>\n <div className=\"c-edge-panel__body\">\n {children}\n </div>\n </div>\n </div>\n );\n}; \n\n\n\nexport type { EdgePanelProps } from '../../lib/types/components';\n\n// Set display name for debugging\nEdgePanel.displayName = 'EdgePanel';\n\n// Default export (primary)\nexport default EdgePanel;\n\n// Named export for compatibility\nexport { EdgePanel };","import { FormProps } from '../types/components';\nimport { FORM } from '../constants/components';\n\n/**\n * Form state and functionality\n * @param initialProps - Initial form properties\n * @returns Form state and methods\n */\nexport function useForm(initialProps?: Partial<FormProps>) {\n // Default form properties\n const defaultProps: Partial<FormProps> = {\n disabled: false,\n ...initialProps\n };\n\n /**\n * Generate form class based on properties\n * @param props - Form properties\n * @returns Class string\n */\n const generateFormClass = (props: Partial<FormProps>): string => {\n const {\n disabled = defaultProps.disabled,\n className = '',\n } = props;\n\n const disabledClass = disabled ? FORM.CLASSES.DISABLED : '';\n \n return `${FORM.CLASSES.BASE} ${disabledClass} ${className}`.trim();\n };\n\n /**\n * Handle form submission with disabled check\n * @param handler - Submit handler function\n * @returns Function that respects disabled state\n */\n const handleSubmit = (handler?: (event: React.FormEvent<HTMLFormElement>) => void) => {\n return (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!defaultProps.disabled && handler) {\n handler(event);\n }\n };\n };\n\n /**\n * Handle form reset with disabled check\n * @param handler - Reset handler function\n * @returns Function that respects disabled state\n */\n const handleReset = (handler?: (event: React.FormEvent<HTMLFormElement>) => void) => {\n return (event: React.FormEvent<HTMLFormElement>) => {\n if (!defaultProps.disabled && handler) {\n handler(event);\n }\n };\n };\n\n return {\n defaultProps,\n generateFormClass,\n handleSubmit,\n handleReset,\n };\n} ","import React from 'react';\nimport { FormProps } from '../../lib/types/components';\nimport { useForm } from '../../lib/composables/useForm';\n\n/**\n * Form - A component for creating form layouts\n */\nconst Form: React.FC<FormProps> = ({\n children,\n onSubmit,\n onReset,\n className = '',\n disabled = false,\n id,\n method = 'post',\n encType,\n noValidate = false,\n autoComplete = 'on',\n}) => {\n const { generateFormClass, handleSubmit, handleReset } = useForm({ \n disabled \n });\n \n const formClass = generateFormClass({ className, disabled });\n \n return (\n <form\n id={id}\n className={formClass}\n onSubmit={handleSubmit(onSubmit)}\n onReset={handleReset(onReset)}\n method={method}\n encType={encType}\n noValidate={noValidate}\n autoComplete={autoComplete}\n >\n {children}\n </form>\n );\n};\n\nexport type { FormProps };\n\n// Set display name for debugging\nForm.displayName = 'Form';\n\n// Default export (primary)\nexport default Form;\n\n// Named export for compatibility\nexport { Form };","import { InputProps, ThemeColor } from '../types/components';\nimport { INPUT } from '../constants/components';\n\n/**\n * Input state and functionality\n * @param initialProps - Initial input properties\n * @returns Input state and methods\n */\nexport function useInput(initialProps?: Partial<InputProps>) {\n // Default input properties\n const defaultProps: Partial<InputProps> = {\n size: 'md',\n disabled: false,\n invalid: false,\n valid: false,\n ...initialProps\n };\n\n /**\n * Generate input class based on properties\n * @param props - Input properties\n * @returns Class string\n */\n const generateInputClass = (props: Partial<InputProps> & { type?: string }): string => {\n const {\n size = defaultProps.size,\n variant = defaultProps.variant,\n disabled = defaultProps.disabled,\n invalid = defaultProps.invalid,\n valid = defaultProps.valid,\n className = '',\n type,\n } = props;\n\n const sizeClass = size === 'md' ? '' : (\n size === 'sm' ? INPUT.CLASSES.SMALL : INPUT.CLASSES.LARGE\n );\n \n const variantClass = variant ? `c-input--${variant}` : '';\n \n const textareaClass = type === 'textarea' ? 'c-input--textarea' : '';\n \n let validationClass = '';\n if (invalid) {\n validationClass = INPUT.CLASSES.INVALID;\n } else if (valid) {\n validationClass = INPUT.CLASSES.VALID;\n }\n \n const disabledClass = disabled ? INPUT.CLASSES.DISABLED : '';\n \n return `${INPUT.CLASSES.BASE} ${sizeClass} ${variantClass} ${textareaClass} ${validationClass} ${disabledClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateInputClass,\n };\n} ","import React from 'react';\nimport { InputProps } from '../../lib/types/components';\nimport { useInput } from '../../lib/composables/useInput';\n\n/**\n * Input - A component for text input fields\n */\n const Input: React.FC<InputProps> = ({\n type = 'text',\n value,\n onChange,\n onBlur,\n onFocus,\n placeholder,\n className = '',\n disabled = false,\n required = false,\n readOnly = false,\n id,\n name,\n autoComplete,\n autoFocus = false,\n size = 'md',\n variant,\n invalid = false,\n valid = false,\n maxLength,\n minLength,\n pattern,\n min,\n max,\n step,\n ariaLabel,\n ariaDescribedBy,\n}) => {\n const { generateInputClass } = useInput({ \n size, variant, disabled, invalid, valid\n });\n \n const inputClass = generateInputClass({ \n className, size, variant, disabled, invalid, valid, type\n });\n \n return (\n <input\n type={type}\n className={inputClass}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n onFocus={onFocus}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n readOnly={readOnly}\n id={id}\n name={name}\n autoComplete={autoComplete}\n autoFocus={autoFocus}\n maxLength={maxLength}\n minLength={minLength}\n pattern={pattern}\n min={min}\n max={max}\n step={step}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n aria-invalid={invalid}\n />\n );\n};\n\nexport type { InputProps };\n\n// Set display name for debugging\nInput.displayName = 'Input';\n\n// Default export (primary)\nexport default Input;\n\n// Named export for compatibility\nexport { Input };","import { TextareaProps } from '../types/components';\nimport { TEXTAREA } from '../constants/components';\n\n/**\n * Textarea state and functionality\n * @param initialProps - Initial textarea properties\n * @returns Textarea state and methods\n */\nexport function useTextarea(initialProps?: Partial<TextareaProps>) {\n // Default textarea properties\n const defaultProps: Partial<TextareaProps> = {\n size: 'md',\n disabled: false,\n invalid: false,\n valid: false,\n ...initialProps\n };\n\n /**\n * Generate textarea class based on properties\n * @param props - Textarea properties\n * @returns Class string\n */\n const generateTextareaClass = (props: Partial<TextareaProps>): string => {\n const {\n size = defaultProps.size,\n variant = defaultProps.variant,\n disabled = defaultProps.disabled,\n invalid = defaultProps.invalid,\n valid = defaultProps.valid,\n className = '',\n } = props;\n\n const sizeClass = size === 'md' ? '' : (\n size === 'sm' ? TEXTAREA.CLASSES.SMALL : TEXTAREA.CLASSES.LARGE\n );\n \n const variantClass = variant ? `c-input--${variant}` : '';\n \n let validationClass = '';\n if (invalid) {\n validationClass = TEXTAREA.CLASSES.INVALID;\n } else if (valid) {\n validationClass = TEXTAREA.CLASSES.VALID;\n }\n \n const disabledClass = disabled ? TEXTAREA.CLASSES.DISABLED : '';\n \n return `${TEXTAREA.CLASSES.BASE} ${sizeClass} ${variantClass} ${validationClass} ${disabledClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateTextareaClass,\n };\n} ","import React from 'react';\nimport { TextareaProps } from '../../lib/types/components';\nimport { useTextarea } from '../../lib/composables/useTextarea';\n\n/**\n * Textarea - A component for multiline text input\n */\nconst Textarea: React.FC<TextareaProps> = ({\n value,\n onChange,\n onBlur,\n onFocus,\n placeholder,\n className = '',\n disabled = false,\n required = false,\n readOnly = false,\n id,\n name,\n rows = 4,\n cols,\n maxLength,\n minLength,\n size = 'md',\n variant,\n invalid = false,\n valid = false,\n autoFocus = false,\n ariaLabel,\n ariaDescribedBy,\n}) => {\n const { generateTextareaClass } = useTextarea({ \n size, variant, disabled, invalid, valid\n });\n \n const textareaClass = generateTextareaClass({ \n className, size, variant, disabled, invalid, valid\n });\n \n return (\n <textarea\n className={textareaClass}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n onFocus={onFocus}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n readOnly={readOnly}\n id={id}\n name={name}\n rows={rows}\n cols={cols}\n maxLength={maxLength}\n minLength={minLength}\n autoFocus={autoFocus}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n aria-invalid={invalid}\n />\n );\n};\n\nexport type { TextareaProps };\n\n// Set display name for debugging\nTextarea.displayName = 'Textarea';\n\n// Default export (primary)\nexport default Textarea;\n\n// Named export for compatibility\nexport { Textarea };","import { useEffect, useRef } from 'react';\nimport { HeroProps, HeroAlignment } from '../types/components';\nimport { HERO } from '../constants/components';\n\n/**\n * Hero hook result interface\n */\ninterface UseHeroResult {\n /**\n * Generate hero class names based on props\n */\n generateHeroClassNames: (baseClassName?: string) => string;\n \n /**\n * Generate image column class based on size\n */\n generateImageColClass: (size?: number) => string;\n \n /**\n * Generate content column class based on size\n */\n generateContentColClass: (size?: number) => string;\n \n /**\n * Determine if the hero has a background image\n */\n hasBackgroundImage: boolean;\n \n /**\n * Determine if the hero has a foreground image\n */\n hasForegroundImage: boolean;\n \n /**\n * Determine if content should be displayed in a grid\n */\n useGridLayout: boolean;\n \n /**\n * Reference to the hero element\n */\n heroRef: React.RefObject<HTMLDivElement>;\n \n /**\n * Reference to the video element\n */\n videoRef: React.RefObject<HTMLVideoElement>;\n \n /**\n * Apply parallax effect\n */\n applyParallaxEffect: (element: HTMLElement, intensity: number) => void;\n \n /**\n * Remove parallax effect\n */\n removeParallaxEffect: (element: HTMLElement) => void;\n}\n\n/**\n * Hook for Hero component functionality\n * @param initialProps - Initial hero props\n * @returns Hero methods\n */\nexport function useHero(initialProps?: Partial<HeroProps>): UseHeroResult {\n const heroRef = useRef<HTMLDivElement>(null);\n const videoRef = useRef<HTMLVideoElement>(null);\n const parallaxHandlerRef = useRef<((event: Event) => void) | null>(null);\n \n const defaultProps: Partial<HeroProps> = {\n alignment: 'left',\n imageColSize: 7,\n contentColSize: 5,\n imageAlt: 'Hero image',\n showOverlay: true,\n fullViewportHeight: false,\n contentWidth: undefined,\n parallax: false,\n parallaxIntensity: 0.5,\n ...initialProps\n };\n\n /**\n * Check if the hero has a background image\n */\n const hasBackgroundImage = !!defaultProps.backgroundImageSrc;\n \n /**\n * Check if the hero has a foreground image\n */\n const hasForegroundImage = !!defaultProps.imageSrc;\n \n /**\n * Check if content should be displayed in a grid\n */\n const useGridLayout = hasForegroundImage && defaultProps.alignment !== 'center';\n \n /**\n * Apply parallax effect to hero background\n */\n const applyParallaxEffect = (element: HTMLElement, intensity: number = 0.5): void => {\n if (!element) return;\n \n // Ensure intensity is between 0 and 1\n const safeIntensity = Math.max(0, Math.min(1, intensity));\n \n // Add parallax class\n element.classList.add('c-hero--parallax');\n \n // Handle scroll event\n const handleScroll = (): void => {\n const scrollPosition = window.pageYOffset;\n const offset = scrollPosition * safeIntensity;\n \n // Apply transform to background\n const bgElement = element.querySelector(HERO.SELECTORS.BG);\n if (bgElement) {\n (bgElement as HTMLElement).style.transform = `translateY(${offset}px)`;\n }\n };\n \n // Store the handler for cleanup\n parallaxHandlerRef.current = handleScroll;\n \n // Add event listener\n window.addEventListener('scroll', handleScroll);\n \n // Initial call\n handleScroll();\n };\n \n /**\n * Remove parallax effect from hero\n */\n const removeParallaxEffect = (element: HTMLElement): void => {\n if (!element) return;\n \n // Remove class\n element.classList.remove('c-hero--parallax');\n \n // Remove transform\n const bgElement = element.querySelector(HERO.SELECTORS.BG);\n if (bgElement) {\n (bgElement as HTMLElement).style.transform = '';\n }\n \n // Remove event listener\n if (parallaxHandlerRef.current) {\n window.removeEventListener('scroll', parallaxHandlerRef.current);\n parallaxHandlerRef.current = null;\n }\n };\n \n // Apply parallax effect if enabled\n useEffect(() => {\n const heroElement = heroRef.current;\n \n if (heroElement && defaultProps.parallax && hasBackgroundImage) {\n applyParallaxEffect(heroElement, defaultProps.parallaxIntensity);\n }\n \n return () => {\n if (heroElement && parallaxHandlerRef.current) {\n removeParallaxEffect(heroElement);\n }\n };\n }, [defaultProps.parallax, defaultProps.parallaxIntensity, hasBackgroundImage]);\n\n /**\n * Generate hero class names based on props\n * @param baseClassName - Additional class names\n * @returns Combined class names string\n */\n const generateHeroClassNames = (baseClassName: string = ''): string => {\n const classes = [\n HERO.SELECTORS.HERO.replace('.', '')\n ];\n\n // Add alignment class\n if (defaultProps.alignment === 'center') {\n classes.push(HERO.CLASSES.CENTER);\n } else if (defaultProps.alignment === 'right') {\n classes.push(HERO.CLASSES.RIGHT);\n } else if (defaultProps.alignment === 'left') {\n classes.push(HERO.CLASSES.LEFT);\n }\n \n // Add full viewport height class if needed\n if (defaultProps.fullViewportHeight) {\n classes.push(HERO.CLASSES.FULL_VH);\n }\n \n // Add parallax class if enabled\n if (defaultProps.parallax) {\n classes.push('c-hero--parallax');\n }\n \n // Add video background class if provided\n if (defaultProps.videoBackground) {\n classes.push('c-hero--video');\n }\n\n if (baseClassName) {\n classes.push(baseClassName);\n }\n\n return classes.join(' ');\n };\n\n /**\n * Determine content column order based on alignment\n */\n const contentFirst = defaultProps.alignment === 'left';\n\n /**\n * Generate image column class based on size\n * @param size - Column size (1-12)\n * @returns Column class\n */\n const generateImageColClass = (size: number = defaultProps.imageColSize || 7): string => {\n const classes = [`o-grid__col o-grid__col--md-${size}`];\n \n // Add responsive margin if needed for mobile view\n if (defaultProps.alignment === 'left') {\n classes.push('u-mt-5 u-mt-md-0');\n }\n \n return classes.join(' ');\n };\n\n /**\n * Generate content column class based on size\n * @param size - Column size (1-12)\n * @returns Column class\n */\n const generateContentColClass = (size: number = defaultProps.contentColSize || 5): string => {\n return `o-grid__col o-grid__col--md-${size}`;\n };\n\n return {\n generateHeroClassNames,\n generateImageColClass,\n generateContentColClass,\n hasBackgroundImage,\n hasForegroundImage,\n useGridLayout,\n heroRef,\n videoRef,\n applyParallaxEffect,\n removeParallaxEffect\n };\n} ","import { ReactNode } from 'react';\nimport { RIVER } from '../constants/components';\n\n/**\n * River content column interface\n */\nexport interface RiverContentColumn {\n /**\n * Column type (title or text)\n */\n type: 'title' | 'text';\n \n /**\n * Content for the column\n */\n content: ReactNode;\n}\n\n/**\n * River properties interface\n */\nexport interface RiverProps {\n /**\n * Title of the river section\n */\n title?: ReactNode;\n \n /**\n * Text content (can be a string or array of paragraphs)\n */\n text?: string | string[];\n \n /**\n * Action buttons/links\n */\n actions?: ReactNode;\n \n /**\n * Image source URL\n */\n imageSrc?: string;\n \n /**\n * Image alt text\n */\n imageAlt?: string;\n \n /**\n * Whether to use the center layout\n */\n center?: boolean;\n \n /**\n * Whether to use the breakout layout\n */\n breakout?: boolean;\n \n /**\n * Whether to use the reverse layout (image on right)\n */\n reverse?: boolean;\n \n /**\n * Use content columns instead of simple title/text structure\n */\n contentColumns?: RiverContentColumn[];\n \n /**\n * Additional CSS class\n */\n className?: string;\n \n /**\n * Background image source\n */\n backgroundImageSrc?: string;\n \n /**\n * Whether to show the background overlay\n */\n showOverlay?: boolean;\n \n /**\n * Custom width for the river content\n */\n contentWidth?: string;\n}\n\n/**\n * River hook result interface\n */\ninterface UseRiverResult {\n /**\n * Generate river class names based on props\n */\n generateRiverClassNames: (baseClassName?: string) => string;\n \n /**\n * Generate content class names\n */\n generateContentClass: () => string;\n \n /**\n * Generate visual/image class names\n */\n generateVisualClass: () => string;\n \n /**\n * Determine if the river has a background image\n */\n hasBackgroundImage: boolean;\n \n /**\n * Determine if the river has a foreground image\n */\n hasForegroundImage: boolean;\n \n /**\n * Convert text to array if it's a string\n */\n textContent: string[];\n}\n\n/**\n * Hook for River component functionality\n * @param initialProps - Initial river props\n * @returns River methods and state\n */\nexport function useRiver(initialProps?: Partial<RiverProps>): UseRiverResult {\n const defaultProps: Partial<RiverProps> = {\n center: false,\n breakout: false,\n reverse: false,\n imageAlt: 'Image',\n showOverlay: true,\n ...initialProps\n };\n\n /**\n * Check if the river has a background image\n */\n const hasBackgroundImage = !!defaultProps.backgroundImageSrc;\n \n /**\n * Check if the river has a foreground image\n */\n const hasForegroundImage = !!defaultProps.imageSrc;\n \n /**\n * Convert text to array if it's a string\n */\n const textContent = typeof defaultProps.text === 'string' \n ? [defaultProps.text] \n : defaultProps.text || [];\n\n /**\n * Generate river class names based on props\n * @param baseClassName - Additional class names\n * @returns Combined class names string\n */\n const generateRiverClassNames = (baseClassName: string = ''): string => {\n const classes = [\n RIVER.SELECTORS.RIVER.replace('.', '')\n ];\n\n // Add layout classes\n if (defaultProps.center) {\n classes.push(RIVER.CLASSES.CENTER);\n }\n \n if (defaultProps.breakout) {\n classes.push(RIVER.CLASSES.BREAKOUT);\n }\n \n if (defaultProps.reverse) {\n classes.push(RIVER.CLASSES.REVERSE);\n }\n\n if (baseClassName) {\n classes.push(baseClassName);\n }\n\n return classes.join(' ');\n };\n\n /**\n * Generate content class names\n */\n const generateContentClass = (): string => {\n return RIVER.SELECTORS.CONTENT.replace('.', '');\n };\n\n /**\n * Generate visual/image class names\n */\n const generateVisualClass = (): string => {\n return RIVER.SELECTORS.VISUAL.replace('.', '');\n };\n\n return {\n generateRiverClassNames,\n generateContentClass,\n generateVisualClass,\n hasBackgroundImage,\n hasForegroundImage,\n textContent\n };\n} ","import { useState } from 'react';\nimport { NavbarProps, NavProps, NavItemProps, NavDropdownProps } from '../types/components';\nimport { NAVBAR, NAV } from '../constants/components';\nimport React from 'react';\nimport { Icon } from '../../components/Icon';\n\n/**\n * Navbar state and functionality\n * @param initialProps - Initial navbar properties\n * @returns Navbar state and methods\n */\nexport function useNavbar(initialProps?: Partial<NavbarProps>) {\n // Default navbar properties\n const defaultProps: Partial<NavbarProps> = {\n position: 'static',\n collapsible: true,\n ...initialProps\n };\n\n // Local expanded state for when not controlled externally\n const [isExpanded, setIsExpanded] = useState(false);\n\n /**\n * Generate navbar class based on properties\n * @param props - Navbar properties\n * @returns Class string\n */\n const generateNavbarClass = (props: Partial<NavbarProps>): string => {\n const {\n position = defaultProps.position,\n variant,\n collapsible = defaultProps.collapsible,\n className = '',\n } = props;\n\n const positionClass = position !== 'static' ? `c-navbar--${position}` : '';\n const variantClass = variant ? `c-navbar--${variant}` : '';\n const collapsibleClass = collapsible ? 'c-navbar--collapsible' : '';\n \n return `c-navbar ${positionClass} ${variantClass} ${collapsibleClass} ${className}`.trim();\n };\n\n /**\n * Generate container style\n * @param width - Container width\n * @returns Style object\n */\n const generateContainerStyle = (width?: string) => {\n return width ? { maxWidth: width } : {};\n };\n\n /**\n * Generate collapse class based on expanded state\n * @param expanded - Whether the collapse is expanded\n * @returns Class string\n */\n const generateCollapseClass = (expanded: boolean): string => {\n return `c-navbar__collapse ${expanded ? 'is-expanded' : ''}`.trim();\n };\n\n /**\n * Toggle expanded state\n */\n const toggleExpanded = () => {\n const newState = !isExpanded;\n setIsExpanded(newState);\n \n if (defaultProps.onToggle) {\n defaultProps.onToggle(newState);\n }\n };\n\n /**\n * Get current expanded state\n * @param controlled - External expanded value if controlled\n * @returns Current expanded state\n */\n const getExpandedState = (controlled?: boolean): boolean => {\n return typeof controlled !== 'undefined' ? controlled : isExpanded;\n };\n\n return {\n defaultProps,\n isExpanded,\n setIsExpanded,\n generateNavbarClass,\n generateContainerStyle,\n generateCollapseClass,\n toggleExpanded,\n getExpandedState\n };\n}\n\n/**\n * Nav state and functionality\n * @param initialProps - Initial nav properties\n * @returns Nav state and methods\n */\nexport function useNav(initialProps?: Partial<NavProps>) {\n // Default nav properties\n const defaultProps: Partial<NavProps> = {\n alignment: 'start',\n ...initialProps\n };\n\n /**\n * Generate nav class based on properties\n * @param props - Nav properties\n * @returns Class string\n */\n const generateNavClass = (props: Partial<NavProps>): string => {\n const {\n alignment = defaultProps.alignment,\n className = '',\n } = props;\n\n const alignmentClass = alignment !== 'start' ? `c-nav--${alignment}` : '';\n \n return `c-nav ${alignmentClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateNavClass\n };\n}\n\n/**\n * Nav item state and functionality\n * @param initialProps - Initial nav item properties\n * @returns Nav item state and methods\n */\nexport function useNavItem(initialProps?: Partial<NavItemProps & { megaMenu?: boolean }>) {\n // Default nav item properties\n const defaultProps: Partial<NavItemProps & { megaMenu?: boolean }> = {\n dropdown: false,\n megaMenu: false,\n active: false,\n ...initialProps\n };\n\n /**\n * Generate nav item class based on properties\n * @param props - Nav item properties\n * @returns Class string\n */\n const generateNavItemClass = (props: Partial<NavItemProps & { megaMenu?: boolean }>): string => {\n const {\n dropdown = defaultProps.dropdown,\n megaMenu = defaultProps.megaMenu,\n active = defaultProps.active,\n disabled = defaultProps.disabled,\n className = '',\n } = props;\n\n // Apply dropdown class only for regular dropdowns, not mega menus\n const dropdownClass = dropdown && !megaMenu ? NAV.SELECTORS.DROPDOWN.replace('.', '') : '';\n // Add a custom class for mega menu items if needed\n const megaMenuClass = megaMenu ? 'c-nav__item--mega-menu' : '';\n const activeClass = active ? NAV.CLASSES.ACTIVE : '';\n const disabledClass = disabled ? NAV.CLASSES.DISABLED : '';\n \n return `c-nav__item ${dropdownClass} ${megaMenuClass} ${activeClass} ${disabledClass} ${className}`.trim();\n };\n\n /**\n * Generate nav link class based on properties\n * @param active - Whether link is active\n * @param disabled - Whether link is disabled\n * @param className - Additional class names\n * @returns Class string\n */\n const generateNavLinkClass = (active = false, disabled = false, className = ''): string => {\n const activeClass = active ? NAV.CLASSES.ACTIVE : '';\n const disabledClass = disabled ? 'c-nav__link--disabled' : '';\n \n return `c-nav__link ${activeClass} ${disabledClass} ${className}`.trim();\n };\n\n /**\n * Handle nav item click with disabled check\n * @param handler - Click handler function\n * @returns Function that respects disabled state\n */\n const handleClick = (handler?: () => void) => {\n return (e: React.MouseEvent) => {\n if (defaultProps.disabled || !handler) {\n e.preventDefault();\n return;\n }\n \n handler();\n };\n };\n\n return {\n defaultProps,\n generateNavItemClass,\n generateNavLinkClass,\n handleClick\n };\n}\n\n/**\n * Nav dropdown state and functionality\n * @param initialProps - Initial dropdown properties\n * @returns Dropdown state and methods\n */\nexport function useNavDropdown(initialProps?: Partial<NavDropdownProps>) {\n // Default dropdown properties\n const defaultProps: Partial<NavDropdownProps> = {\n alignment: 'start',\n megaMenu: false,\n ...initialProps\n };\n\n /**\n * Generate dropdown menu class based on properties\n * @param props - Dropdown properties\n * @returns Class string\n */\n const generateDropdownMenuClass = (props: Partial<NavDropdownProps>): string => {\n const {\n alignment = defaultProps.alignment,\n megaMenu = defaultProps.megaMenu,\n className = '',\n } = props;\n\n // Select the base class based on mega menu or regular dropdown\n const baseClass = megaMenu ? NAV.SELECTORS.MEGA_MENU.replace('.', '') : NAV.SELECTORS.DROPDOWN_MENU.replace('.', '');\n \n // Add alignment class if not default 'start'\n let alignmentClass = '';\n if (alignment === 'center') {\n alignmentClass = `${baseClass}--center`;\n } else if (alignment === 'end') {\n alignmentClass = `${baseClass}--end`;\n }\n \n return `${baseClass} ${alignmentClass} ${className}`.trim();\n };\n\n /**\n * Detect whether we're in a fixed-bottom navbar\n * @returns Boolean indicating if in fixed-bottom navbar\n */\n const isInFixedBottomNavbar = (): boolean => {\n // This would need to be called in the component itself\n // because it requires DOM access\n return document.querySelector('.c-navbar--fixed-bottom') !== null;\n };\n \n /**\n * Get the appropriate icon name based on navbar position\n * @param isMegaMenu - Whether it's a mega menu\n * @returns Icon name for the new Icon component\n */\n const getIconName = (isMegaMenu: boolean = false): string => {\n const isFixedBottom = isInFixedBottomNavbar();\n return isFixedBottom ? 'CaretUp' : 'CaretDown';\n };\n\n // Keeping this for backward compatibility\n const getIconClass = (isMegaMenu: boolean = false): string => {\n console.warn('getIconClass is deprecated. Please use the Icon component directly with the getIconName function.');\n const isFixedBottom = isInFixedBottomNavbar();\n return `c-nav__icon ${isFixedBottom ? 'icon-lux-caret-up' : 'icon-lux-caret-down'}`;\n };\n\n return {\n defaultProps,\n generateDropdownMenuClass,\n isInFixedBottomNavbar,\n getIconClass,\n getIconName\n };\n} ","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","import { unsafeStringify } from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function v35(name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n var _namespace;\n\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (let i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n const output = [];\n const length32 = input.length * 32;\n const hexTab = '0123456789abcdef';\n\n for (let i = 0; i < length32; i += 8) {\n const x = input[i >> 5] >>> i % 32 & 0xff;\n const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n let a = 1732584193;\n let b = -271733879;\n let c = -1732584194;\n let d = 271733878;\n\n for (let i = 0; i < x.length; i += 16) {\n const olda = a;\n const oldb = b;\n const oldc = c;\n const oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n const length8 = input.length * 8;\n const output = new Uint32Array(getOutputLength(length8));\n\n for (let i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n const lsw = (x & 0xffff) + (y & 0xffff);\n const msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import v35 from './v35.js';\nimport md5 from './md5.js';\nconst v3 = v35('v3', 0x30, md5);\nexport default v3;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (let i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n const l = bytes.length / 4 + 2;\n const N = Math.ceil(l / 16);\n const M = new Array(N);\n\n for (let i = 0; i < N; ++i) {\n const arr = new Uint32Array(16);\n\n for (let j = 0; j < 16; ++j) {\n arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];\n }\n\n M[i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (let i = 0; i < N; ++i) {\n const W = new Uint32Array(80);\n\n for (let t = 0; t < 16; ++t) {\n W[t] = M[i][t];\n }\n\n for (let t = 16; t < 80; ++t) {\n W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n }\n\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n let e = H[4];\n\n for (let t = 0; t < 80; ++t) {\n const s = Math.floor(t / 20);\n const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nconst v5 = v35('v5', 0x50, sha1);\nexport default v5;","import { useState } from 'react';\nimport { TodoProps, Size } from '../types/components';\nimport { TodoItem } from '../../components/Todo/scripts/types';\nimport { v4 as uuidv4 } from 'uuid';\nimport { TODO, SIZES } from '../constants/components';\n\n/**\n * Todo composable hook - manages todo items state and operations\n * @param initialProps - Initial todo properties\n * @returns Todo state and methods\n */\nexport function useTodo(initialProps?: Partial<TodoProps>) {\n // Default todo properties\n const defaultProps: Partial<TodoProps> = {\n items: [],\n title: 'Todo List',\n size: 'md',\n placeholder: 'Add a new todo',\n showCompleted: true,\n ...initialProps\n };\n\n // State\n const [items, setItems] = useState<TodoItem[]>(defaultProps.items || []);\n const [inputText, setInputText] = useState<string>('');\n\n /**\n * Generate todo classes based on properties\n * @param props - Todo properties\n * @returns Class string for the todo component\n */\n const generateTodoClasses = (props: Partial<TodoProps>): string => {\n const {\n size = defaultProps.size,\n className = '',\n disabled = false\n } = props;\n\n const sizeClass = size === 'md' ? '' : `c-todo--${size}`;\n const disabledClass = disabled ? 'c-todo--disabled' : '';\n \n return `${TODO.CLASSES.BASE} ${sizeClass} ${disabledClass} ${className}`.trim();\n };\n\n /**\n * Generate todo item classes based on completion status\n * @param item - Todo item\n * @returns Class string for the todo item\n */\n const generateItemClasses = (item: TodoItem): string => {\n const completedClass = item.completed ? TODO.CLASSES.COMPLETED : '';\n return `${TODO.CLASSES.ITEM} ${completedClass}`.trim();\n };\n\n /**\n * Add a new todo item\n * @param text - Text for the new todo\n * @returns The new todo item\n */\n const addTodo = (text: string): TodoItem | null => {\n if (!text.trim()) return null;\n \n const newItem: TodoItem = {\n id: uuidv4(),\n text: text.trim(),\n completed: false\n };\n \n setItems(prevItems => [...prevItems, newItem]);\n setInputText('');\n return newItem;\n };\n\n /**\n * Toggle the completed state of a todo item\n * @param id - ID of the todo item to toggle\n * @returns Updated todo item or null if not found\n */\n const toggleTodo = (id: string): TodoItem | null => {\n let updatedItem: TodoItem | null = null;\n \n setItems(prevItems => {\n return prevItems.map(item => {\n if (item.id === id) {\n updatedItem = { ...item, completed: !item.completed };\n return updatedItem;\n }\n return item;\n });\n });\n \n return updatedItem;\n };\n\n /**\n * Delete a todo item\n * @param id - ID of the todo item to delete\n * @returns Boolean indicating successful deletion\n */\n const deleteTodo = (id: string): boolean => {\n const initialLength = items.length;\n \n setItems(prevItems => prevItems.filter(item => item.id !== id));\n \n return items.length !== initialLength;\n };\n\n /**\n * Handle form submission for adding a new todo\n * @param event - Form submit event\n * @param onAddTodo - Optional callback when a todo is added\n */\n const handleSubmit = (event: React.FormEvent, onAddTodo?: (text: string) => void) => {\n event.preventDefault();\n if (!inputText.trim()) return;\n \n const newItem = addTodo(inputText);\n \n if (newItem && onAddTodo) {\n onAddTodo(newItem.text);\n }\n };\n\n /**\n * Get filtered items based on showCompleted prop\n * @param showCompleted - Whether to show completed items\n * @returns Filtered todo items\n */\n const getFilteredItems = (showCompleted: boolean = true): TodoItem[] => {\n if (showCompleted) return items;\n return items.filter(item => !item.completed);\n };\n\n return {\n items,\n inputText,\n setInputText,\n addTodo,\n toggleTodo,\n deleteTodo,\n handleSubmit,\n generateTodoClasses,\n generateItemClasses,\n getFilteredItems\n };\n} ","import { FormGroupProps } from '../types/components';\nimport { FORM_GROUP } from '../constants/components';\n\n/**\n * Form Group state and functionality\n * @param initialProps - Initial form group properties\n * @returns Form Group state and methods\n */\nexport function useFormGroup(initialProps?: Partial<FormGroupProps>) {\n // Default form group properties\n const defaultProps: Partial<FormGroupProps> = {\n size: 'md',\n disabled: false,\n invalid: false,\n valid: false,\n ...initialProps\n };\n\n /**\n * Generate form group class based on properties\n * @param props - Form group properties\n * @returns Class string\n */\n const generateFormGroupClass = (props: Partial<FormGroupProps>): string => {\n const {\n size = defaultProps.size,\n disabled = defaultProps.disabled,\n invalid = defaultProps.invalid,\n valid = defaultProps.valid,\n className = '',\n } = props;\n\n const sizeClass = size === 'md' ? '' : (\n size === 'sm' ? FORM_GROUP.CLASSES.SMALL : FORM_GROUP.CLASSES.LARGE\n );\n \n const validationClass = invalid \n ? FORM_GROUP.CLASSES.INVALID \n : valid \n ? FORM_GROUP.CLASSES.VALID \n : '';\n \n const disabledClass = disabled ? FORM_GROUP.CLASSES.DISABLED : '';\n \n return `${FORM_GROUP.CLASSES.BASE} ${sizeClass} ${validationClass} ${disabledClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateFormGroupClass,\n };\n} ","import { SelectProps } from '../types/components';\nimport { SELECT } from '../constants/components';\n\n/**\n * Select state and functionality\n * @param initialProps - Initial select properties\n * @returns Select state and methods\n */\nexport function useSelect(initialProps?: Partial<SelectProps>) {\n // Default select properties\n const defaultProps: Partial<SelectProps> = {\n size: 'md',\n disabled: false,\n invalid: false,\n valid: false,\n ...initialProps\n };\n\n /**\n * Generate select class based on properties\n * @param props - Select properties\n * @returns Class string\n */\n const generateSelectClass = (props: Partial<SelectProps>): string => {\n const {\n size = defaultProps.size,\n disabled = defaultProps.disabled,\n invalid = defaultProps.invalid,\n valid = defaultProps.valid,\n className = '',\n } = props;\n\n const sizeClass = size === 'md' ? '' : (\n size === 'sm' ? SELECT.CLASSES.SMALL : SELECT.CLASSES.LARGE\n );\n \n let validationClass = '';\n if (invalid) {\n validationClass = SELECT.CLASSES.INVALID;\n } else if (valid) {\n validationClass = SELECT.CLASSES.VALID;\n }\n \n const disabledClass = disabled ? SELECT.CLASSES.DISABLED : '';\n \n return `${SELECT.CLASSES.BASE} ${sizeClass} ${validationClass} ${disabledClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateSelectClass,\n };\n} ","import { useRef, useEffect } from 'react';\nimport { CheckboxProps } from '../types/components';\n\n// Define checkbox class constants\nconst CHECKBOX_CLASSES = {\n BASE: 'c-checkbox',\n INVALID: 'is-error',\n VALID: 'is-valid',\n DISABLED: 'is-disabled',\n MIXED: 'c-checkbox--mixed'\n};\n\n/**\n * Checkbox state and functionality\n * @param initialProps - Initial checkbox properties\n * @returns Checkbox state and methods\n */\nexport function useCheckbox(initialProps?: Partial<CheckboxProps>) {\n // Default checkbox properties\n const defaultProps: Partial<CheckboxProps> = {\n disabled: false,\n invalid: false,\n valid: false,\n indeterminate: false,\n ...initialProps\n };\n \n // Ref for the checkbox input element\n const checkboxRef = useRef<HTMLInputElement>(null);\n \n // Handle indeterminate state\n useEffect(() => {\n if (checkboxRef.current) {\n checkboxRef.current.indeterminate = Boolean(defaultProps.indeterminate);\n }\n }, [defaultProps.indeterminate]);\n\n /**\n * Generate checkbox class based on properties\n * @param props - Checkbox properties\n * @returns Class string\n */\n const generateCheckboxClass = (props: Partial<CheckboxProps>): string => {\n const {\n disabled = defaultProps.disabled,\n invalid = defaultProps.invalid,\n valid = defaultProps.valid,\n indeterminate = defaultProps.indeterminate,\n className = '',\n } = props;\n\n let validationClass = '';\n if (invalid) {\n validationClass = CHECKBOX_CLASSES.INVALID;\n } else if (valid) {\n validationClass = CHECKBOX_CLASSES.VALID;\n }\n \n const disabledClass = disabled ? CHECKBOX_CLASSES.DISABLED : '';\n const indeterminateClass = indeterminate ? CHECKBOX_CLASSES.MIXED : '';\n \n return `${CHECKBOX_CLASSES.BASE} ${validationClass} ${disabledClass} ${indeterminateClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateCheckboxClass,\n checkboxRef,\n };\n} ","import { RadioProps } from '../types/components';\nimport { RADIO } from '../constants/components';\n\n/**\n * Radio state and functionality\n * @param initialProps - Initial radio properties\n * @returns Radio state and methods\n */\nexport function useRadio(initialProps?: Partial<RadioProps>) {\n // Default radio properties\n const defaultProps: Partial<RadioProps> = {\n disabled: false,\n invalid: false,\n valid: false,\n ...initialProps\n };\n\n /**\n * Generate radio class based on properties\n * @param props - Radio properties\n * @returns Class string\n */\n const generateRadioClass = (props: Partial<RadioProps>): string => {\n const {\n disabled = defaultProps.disabled,\n invalid = defaultProps.invalid,\n valid = defaultProps.valid,\n className = '',\n } = props;\n\n let validationClass = '';\n if (invalid) {\n validationClass = RADIO.CLASSES.INVALID;\n } else if (valid) {\n validationClass = RADIO.CLASSES.VALID;\n }\n \n const disabledClass = disabled ? RADIO.CLASSES.DISABLED : '';\n \n return `${RADIO.CLASSES.BASE} ${validationClass} ${disabledClass} ${className}`.trim();\n };\n\n return {\n defaultProps,\n generateRadioClass,\n };\n} ","import { useState, useCallback, useEffect } from 'react';\n\nexport interface UseModalProps {\n /**\n * Whether the modal is open\n */\n isOpen?: boolean;\n \n /**\n * Callback when modal state changes\n */\n onOpenChange?: (isOpen: boolean) => void;\n \n /**\n * Callback when modal opens\n */\n onOpen?: () => void;\n \n /**\n * Callback when modal closes\n */\n onClose?: () => void;\n}\n\nexport interface UseModalReturn {\n /**\n * Current open state\n */\n isOpen: boolean;\n \n /**\n * Function to open the modal\n */\n open: () => void;\n \n /**\n * Function to close the modal\n */\n close: () => void;\n \n /**\n * Function to toggle the modal\n */\n toggle: () => void;\n}\n\n/**\n * Hook for managing modal state\n */\nexport function useModal({\n isOpen: isOpenProp,\n onOpenChange,\n onOpen,\n onClose\n}: UseModalProps = {}): UseModalReturn {\n // For uncontrolled usage\n const [isOpenState, setIsOpenState] = useState(false);\n \n // Determine if we're in controlled or uncontrolled mode\n const isControlled = isOpenProp !== undefined;\n const isOpen = isControlled ? !!isOpenProp : isOpenState;\n \n // Update internal state when prop changes (for controlled mode)\n useEffect(() => {\n if (isControlled) {\n setIsOpenState(!!isOpenProp);\n }\n }, [isOpenProp, isControlled]);\n \n const updateOpen = useCallback((nextIsOpen: boolean) => {\n // For uncontrolled mode, update internal state\n if (!isControlled) {\n setIsOpenState(nextIsOpen);\n }\n \n // Call the change handler in either mode\n if (onOpenChange) {\n onOpenChange(nextIsOpen);\n }\n \n // Call the specific handler\n if (nextIsOpen && onOpen) {\n onOpen();\n } else if (!nextIsOpen && onClose) {\n onClose();\n }\n }, [isControlled, onOpenChange, onOpen, onClose]);\n \n const open = useCallback(() => {\n updateOpen(true);\n }, [updateOpen]);\n \n const close = useCallback(() => {\n updateOpen(false);\n }, [updateOpen]);\n \n const toggle = useCallback(() => {\n updateOpen(!isOpen);\n }, [isOpen, updateOpen]);\n \n return {\n isOpen,\n open,\n close,\n toggle\n };\n} ","import { BreadcrumbItem, BreadcrumbOptions } from '../../components/Breadcrumb/scripts/types';\nimport { BREADCRUMB } from '../constants/components';\n\n/**\n * Breadcrumb state and functionality\n * @param initialOptions - Initial breadcrumb options\n * @returns Breadcrumb state and methods\n */\nexport function useBreadcrumb(initialOptions?: Partial<BreadcrumbOptions>) {\n // Default breadcrumb options\n const defaultOptions: BreadcrumbOptions = {\n items: [],\n divider: BREADCRUMB.DEFAULTS.DIVIDER,\n className: '',\n ariaLabel: 'Breadcrumb',\n ...initialOptions\n };\n\n /**\n * Generate breadcrumb class based on options\n * @param options - Breadcrumb options\n * @returns Class string\n */\n const generateBreadcrumbClass = (options: Partial<BreadcrumbOptions>): string => {\n const { className = '' } = options;\n \n return [BREADCRUMB.CLASSES.BASE, className]\n .filter(Boolean)\n .join(' ')\n .trim();\n };\n\n /**\n * Generate breadcrumb item class\n * @param item - Breadcrumb item\n * @param isLast - Whether this is the last item\n * @returns Class string\n */\n const generateItemClass = (item: BreadcrumbItem, isLast: boolean): string => {\n return [\n BREADCRUMB.CLASSES.ITEM,\n (item.active || isLast) ? BREADCRUMB.CLASSES.ACTIVE : ''\n ]\n .filter(Boolean)\n .join(' ')\n .trim();\n };\n\n /**\n * Check if an item should be rendered as a link\n * @param item - Breadcrumb item\n * @param isLast - Whether this is the last item\n * @returns Whether item should be a link\n */\n const isItemLink = (item: BreadcrumbItem, isLast: boolean): boolean => {\n return Boolean(item.href && !item.active && !isLast);\n };\n\n /**\n * Parse items from a JSON string\n * @param jsonString - JSON string of items\n * @returns Array of breadcrumb items\n */\n const parseItemsFromJson = (jsonString: string): BreadcrumbItem[] => {\n try {\n return JSON.parse(jsonString) as BreadcrumbItem[];\n } catch (error) {\n console.error('Error parsing breadcrumb items:', error);\n return [];\n }\n };\n\n return {\n defaultOptions,\n generateBreadcrumbClass,\n generateItemClass,\n isItemLink,\n parseItemsFromJson\n };\n} ","import { RefObject, useCallback, useEffect, useRef, useState } from 'react';\nimport { UseCardOptions, UseCardReturn } from '../types/components';\nimport { CARD } from '../constants/components';\n\n/**\n * Hook for managing Card component state and behaviors\n * \n * @param options - Configuration options for the card\n * @returns Card state and handlers\n */\nexport const useCard = (options: UseCardOptions = {}): UseCardReturn => {\n const {\n elevationEffect = false,\n elevationClass = CARD.CLASSES.ACTIVE,\n flipEffect = false,\n flipTrigger = 'click',\n focusEffect = false,\n clickable = false,\n onClick\n } = options;\n\n const cardRef = useRef<HTMLDivElement>(null);\n const frontRef = useRef<HTMLDivElement>(null);\n const backRef = useRef<HTMLDivElement>(null);\n\n const [isFlipped, setIsFlipped] = useState(false);\n const [isElevated, setIsElevated] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n\n // Handle click events\n const handleClick = useCallback((event: React.MouseEvent) => {\n if (flipEffect && flipTrigger === 'click') {\n setIsFlipped(prev => !prev);\n }\n\n if (onClick) {\n onClick(event);\n }\n }, [flipEffect, flipTrigger, onClick]);\n\n // Handle keyboard events for accessibility\n const handleKeyDown = useCallback((event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n \n if (flipEffect && flipTrigger === 'click') {\n setIsFlipped(prev => !prev);\n }\n\n if (onClick) {\n onClick(event as unknown as React.MouseEvent);\n }\n }\n }, [flipEffect, flipTrigger, onClick]);\n\n // Handle mouse enter events\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n \n if (elevationEffect) {\n setIsElevated(true);\n }\n\n if (flipEffect && flipTrigger === 'hover') {\n setIsFlipped(true);\n }\n }, [elevationEffect, flipEffect, flipTrigger]);\n\n // Handle mouse leave events\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n \n if (elevationEffect) {\n setIsElevated(false);\n }\n\n if (flipEffect && flipTrigger === 'hover') {\n setIsFlipped(false);\n }\n }, [elevationEffect, flipEffect, flipTrigger]);\n\n // Handle focus events\n const handleFocus = useCallback(() => {\n setIsFocused(true);\n }, []);\n\n // Handle blur events\n const handleBlur = useCallback(() => {\n setIsFocused(false);\n }, []);\n\n // Get all card props combined\n const getCardProps = useCallback(() => {\n const className = [\n CARD.CLASSES.BASE,\n isElevated ? elevationClass : '',\n isFlipped ? CARD.CLASSES.FLIPPED : '',\n isFocused && focusEffect ? CARD.CLASSES.FOCUSED : '',\n clickable ? CARD.CLASSES.CLICKABLE : ''\n ].filter(Boolean).join(' ');\n\n return {\n className,\n ref: cardRef,\n tabxwIndex: clickable || flipEffect ? 0 : -1,\n role: clickable ? 'button' : undefined,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onFocus: handleFocus,\n onBlur: handleBlur,\n onClick: handleClick,\n onKeyDown: handleKeyDown\n };\n }, [isElevated, isFlipped, isFocused, elevationClass, focusEffect, clickable, handleMouseEnter, handleMouseLeave, handleFocus, handleBlur, handleClick, handleKeyDown, flipEffect]);\n\n return {\n cardRef,\n frontRef,\n backRef,\n isFlipped,\n isElevated,\n isFocused,\n isHovered,\n handleClick,\n handleKeyDown,\n handleMouseEnter,\n handleMouseLeave,\n handleFocus,\n handleBlur,\n getCardProps\n };\n};","import React, { useRef, useEffect, useState } from 'react';\nimport { SelectProps } from '../../lib/types/components';\nimport { useSelect } from '../../lib/composables';\nimport { SELECT } from '../../lib/constants/components';\n\n/**\n * Select - A component for dropdown selection\n */\nconst Select: React.FC<SelectProps> = ({\n options = [],\n value,\n onChange,\n onBlur,\n onFocus,\n placeholder = 'Select an option',\n className = '',\n disabled = false,\n required = false,\n id,\n name,\n size = 'md',\n invalid = false,\n valid = false,\n multiple = false,\n ariaLabel,\n ariaDescribedBy,\n}) => {\n const { generateSelectClass } = useSelect({ \n size, disabled, invalid, valid\n });\n \n const selectClass = generateSelectClass({ \n className, size, disabled, invalid, valid\n });\n\n const [isOpen, setIsOpen] = useState(false);\n const [selectedLabel, setSelectedLabel] = useState(placeholder);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const bodyRef = useRef<HTMLDivElement>(null);\n const nativeSelectRef = useRef<HTMLSelectElement>(null);\n\n // Update selected label when value changes\n useEffect(() => {\n if (value) {\n const selectedOption = options.find(opt => opt.value === value);\n if (selectedOption) {\n setSelectedLabel(selectedOption.label);\n }\n } else {\n setSelectedLabel(placeholder);\n }\n }, [value, options, placeholder]);\n\n // Handle click outside to close dropdown\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n if (bodyRef.current) {\n bodyRef.current.style.height = '0px';\n }\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, []);\n\n // Toggle dropdown\n const handleToggle = () => {\n if (!disabled) {\n if (!isOpen && bodyRef.current && panelRef.current) {\n bodyRef.current.style.height = `${panelRef.current.clientHeight}px`;\n } else if (bodyRef.current) {\n bodyRef.current.style.height = '0px';\n }\n setIsOpen(!isOpen);\n }\n };\n\n // Handle item selection\n const handleItemClick = (option: { value: string, label: string }) => {\n setSelectedLabel(option.label);\n setIsOpen(false);\n if (bodyRef.current) {\n bodyRef.current.style.height = '0px';\n }\n \n if (nativeSelectRef.current) {\n nativeSelectRef.current.value = option.value;\n }\n \n if (onChange) {\n // Create a synthetic event\n const event = {\n target: {\n name,\n value: option.value\n }\n } as React.ChangeEvent<HTMLSelectElement>;\n onChange(event);\n }\n };\n\n return (\n <div \n className={`${selectClass} ${isOpen ? SELECT.CLASSES.IS_OPEN : ''}`} \n ref={dropdownRef}\n aria-expanded={isOpen}\n >\n {/* Native select for accessibility and form submission */}\n <select\n ref={nativeSelectRef}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n onFocus={onFocus}\n disabled={disabled}\n required={required}\n id={id}\n name={name}\n multiple={multiple}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n aria-invalid={invalid}\n style={{ display: 'none' }}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((option) => (\n <option \n key={option.value} \n value={option.value} \n disabled={option.disabled}\n >\n {option.label}\n </option>\n ))}\n </select>\n \n {/* Custom Select UI */}\n <div \n className={SELECT.CLASSES.SELECTED}\n onClick={handleToggle}\n aria-disabled={disabled}\n >\n {selectedLabel}\n </div>\n \n <i className={`${SELECT.CLASSES.ICON_CARET} ${SELECT.CLASSES.TOGGLE_ICON}`} />\n \n <div className={SELECT.CLASSES.SELECT_BODY} ref={bodyRef} style={{ height: 0 }}>\n <div className={SELECT.CLASSES.SELECT_PANEL} ref={panelRef}>\n <ul className={SELECT.CLASSES.SELECT_ITEMS}>\n {options.map((option, index) => (\n <li \n key={option.value}\n className={SELECT.CLASSES.SELECT_ITEM}\n data-value={option.value}\n onClick={() => !option.disabled && handleItemClick(option)}\n >\n <label htmlFor={`SelectItem${index}`} className=\"c-checkbox\">\n <input \n type=\"checkbox\" \n id={`SelectItem${index}`} \n className=\"c-checkbox__input c-select__item-input\" \n checked={value === option.value}\n readOnly\n disabled={option.disabled}\n />\n <div className=\"c-select__item-label\">{option.label}</div>\n </label>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </div>\n );\n};\n\nexport type { SelectProps };\n\n// Set display name for debugging\nSelect.displayName = 'Select';\n\n// Default export (primary)\nexport default Select;\n\n// Named export for compatibility\nexport { Select };","import React from 'react';\nimport { CheckboxProps } from '../../lib/types/components';\nimport { useCheckbox } from '../../lib/composables/useCheckbox';\n\n/**\n * Checkbox - A component for checkbox inputs\n */\n const Checkbox: React.FC<CheckboxProps> = ({\n label,\n checked = false,\n onChange,\n className = '',\n disabled = false,\n required = false,\n id,\n name,\n value,\n invalid = false,\n valid = false,\n indeterminate = false,\n ariaLabel,\n ariaDescribedBy,\n}) => {\n const { generateCheckboxClass, checkboxRef } = useCheckbox({\n indeterminate, disabled, invalid, valid\n });\n \n const checkboxClass = generateCheckboxClass({\n className, disabled, invalid, valid, indeterminate\n });\n \n return (\n <div className={checkboxClass}>\n <input\n ref={checkboxRef}\n type=\"checkbox\"\n className=\"c-checkbox__input\"\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n required={required}\n id={id}\n name={name}\n value={value}\n aria-label={!label ? ariaLabel : undefined}\n aria-describedby={ariaDescribedBy}\n aria-invalid={invalid}\n />\n {label && (\n <label className=\"c-checkbox__label\" htmlFor={id}>\n {label}\n </label>\n )}\n </div>\n );\n};\n\n\nexport type { CheckboxProps };\n\n// Set display name for debugging\nCheckbox.displayName = 'Checkbox';\n\n// Default export (primary)\nexport default Checkbox;\n\n// Named export for compatibility\nexport { Checkbox };","import React from 'react';\nimport { RadioProps } from '../../lib/types/components';\nimport { useRadio } from '../../lib/composables/useRadio';\n\n/**\n * Radio - A component for radio button inputs\n */\nconst Radio: React.FC<RadioProps> = ({\n label,\n checked = false,\n onChange,\n className = '',\n disabled = false,\n required = false,\n id,\n name,\n value,\n invalid = false,\n valid = false,\n ariaLabel,\n ariaDescribedBy,\n}) => {\n const { generateRadioClass } = useRadio({\n disabled, invalid, valid\n });\n \n const radioClass = generateRadioClass({\n className, disabled, invalid, valid\n });\n \n return (\n <div className={radioClass}>\n <input\n type=\"radio\"\n className=\"c-radio__input\"\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n required={required}\n id={id}\n name={name}\n value={value}\n aria-label={!label ? ariaLabel : undefined}\n aria-describedby={ariaDescribedBy}\n aria-invalid={invalid}\n />\n {label && (\n <label className=\"c-radio__label\" htmlFor={id}>\n {label}\n </label>\n )}\n </div>\n );\n};\n\nexport type { RadioProps };\n\n// Set display name for debugging\nRadio.displayName = 'Radio';\n\n// Default export (primary)\nexport default Radio;\n\n// Named export for compatibility\nexport { Radio };","import React, { CSSProperties, useEffect } from 'react';\nimport { HeroProps, HeroAlignment } from '../../lib/types/components';\nimport { useHero } from '../../lib/composables/useHero';\nimport { HERO } from '../../lib/constants/components';\n\n const Hero: React.FC<HeroProps> = ({\n title,\n subtitle,\n text,\n imageSrc,\n imageAlt = 'Hero image',\n alignment = 'left',\n backgroundImageSrc,\n showOverlay = true,\n fullViewportHeight = false,\n actions,\n imageColSize = 7,\n contentColSize = 5,\n contentWidth,\n className = '',\n parallax = false,\n parallaxIntensity = 0.5,\n videoBackground,\n videoOptions = {\n autoplay: true,\n loop: true,\n muted: true\n }\n}) => {\n const { \n generateHeroClassNames, \n generateImageColClass, \n generateContentColClass,\n hasBackgroundImage,\n hasForegroundImage,\n useGridLayout,\n heroRef,\n videoRef\n } = useHero({\n alignment,\n imageColSize,\n contentColSize,\n imageSrc,\n backgroundImageSrc,\n showOverlay,\n fullViewportHeight,\n contentWidth,\n parallax,\n parallaxIntensity,\n videoBackground\n });\n\n // Create custom style for hero element with content width if provided\n const heroStyle: React.CSSProperties | undefined = contentWidth ? {\n '--atomix-hero-content-width': contentWidth\n } as React.CSSProperties : undefined;\n\n const renderVideoBackground = () => {\n if (!videoBackground) return null;\n \n const { autoplay, loop, muted, posterUrl } = videoOptions;\n \n return (\n <video \n ref={videoRef}\n className=\"c-hero__video\"\n autoPlay={autoplay}\n loop={loop}\n muted={muted}\n playsInline\n poster={posterUrl}\n >\n <source src={videoBackground} type={`video/${videoBackground.split('.').pop() || 'mp4'}`} />\n Your browser does not support the video tag.\n </video>\n );\n };\n\n const renderBackground = () => {\n if (!hasBackgroundImage && !videoBackground) return null;\n \n return (\n <div className={HERO.SELECTORS.BG.replace('.', '')}>\n {backgroundImageSrc && (\n <img\n src={backgroundImageSrc}\n alt=\"Background\"\n className={HERO.SELECTORS.BG_IMAGE.replace('.', '')}\n />\n )}\n {renderVideoBackground()}\n {showOverlay && <div className={HERO.SELECTORS.OVERLAY.replace('.', '')}></div>}\n </div>\n );\n };\n\n const renderContent = () => (\n <div className={HERO.SELECTORS.CONTENT.replace('.', '')}>\n {subtitle && <p className={HERO.SELECTORS.SUBTITLE.replace('.', '')}>{subtitle}</p>}\n <h1 className={HERO.SELECTORS.TITLE.replace('.', '')}>{title}</h1>\n {text && <p className={HERO.SELECTORS.TEXT.replace('.', '')}>{text}</p>}\n {actions && <div className={HERO.SELECTORS.ACTIONS.replace('.', '')}>{actions}</div>}\n </div>\n );\n\n const renderForegroundImage = () => {\n if (!hasForegroundImage) return null;\n \n if (alignment === 'center') {\n return (\n <div className={HERO.SELECTORS.IMAGE_WRAPPER.replace('.', '')}>\n <img\n src={imageSrc}\n alt={imageAlt}\n className={HERO.SELECTORS.IMAGE.replace('.', '')}\n />\n </div>\n );\n }\n \n return (\n <div className={generateImageColClass()}>\n <img\n src={imageSrc}\n alt={imageAlt}\n className={HERO.SELECTORS.IMAGE.replace('.', '')}\n />\n </div>\n );\n };\n\n const renderGridContent = () => {\n // For left-aligned content, render content first then image\n if (alignment === 'left') {\n return (\n <>\n <div className={generateContentColClass()}>\n {renderContent()}\n </div>\n {renderForegroundImage()}\n </>\n );\n }\n \n // For right-aligned or default, render image first then content\n return (\n <>\n {renderForegroundImage()}\n <div className={generateContentColClass()}>\n {renderContent()}\n </div>\n </>\n );\n };\n\n return (\n <div \n ref={heroRef}\n className={generateHeroClassNames(className)} \n style={heroStyle}\n data-parallax={parallax ? 'true' : undefined}\n data-parallax-intensity={parallax ? parallaxIntensity : undefined}\n >\n {renderBackground()}\n <div className={`${HERO.SELECTORS.CONTAINER.replace('.', '')} o-container`}>\n {useGridLayout ? (\n <div className={`${HERO.SELECTORS.GRID.replace('.', '')} o-grid`}>\n {renderGridContent()}\n </div>\n ) : (\n <>\n {renderContent()}\n {renderForegroundImage()}\n </>\n )}\n </div>\n </div>\n );\n}; \n\nexport type { HeroProps };\n\n// Set display name for debugging\nHero.displayName = 'Hero';\n\n// Default export (primary)\nexport default Hero;\n\n// Named export for compatibility\nexport { Hero };","import React from 'react';\nimport { ListProps } from '../../lib/types/components';\nimport { LIST } from '../../lib/constants/components';\n\nconst List: React.FC<ListProps> = ({\n children,\n variant = 'default',\n className = '',\n ...props\n}) => {\n // Generate CSS classes\n const listClasses = [\n LIST.BASE_CLASS,\n variant !== 'default' && `c-list--${variant}`,\n className,\n ].filter(Boolean).join(' ');\n\n // Determine the HTML element based on variant\n const ListElement = ['number', 'text'].includes(variant) ? 'ol' : 'ul';\n\n return (\n <ListElement className={listClasses} {...props}>\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return <li className=\"c-list__item\">{child}</li>;\n }\n return <li className=\"c-list__item\">{child}</li>;\n })}\n </ListElement>\n );\n};\n\n\n\nexport type { ListProps };\n\n// Set display name for debugging\nList.displayName = 'List';\n\n// Default export (primary)\nexport default List;\n\n// Named export for compatibility\nexport { List };","import React, { Children, cloneElement, isValidElement } from 'react';\nimport { AvatarGroupProps, AvatarProps } from '../../lib/types/components';\nimport { AVATAR_GROUP, AVATAR } from '../../lib/constants/components';\nimport { Avatar } from './Avatar';\n\nconst AvatarGroup: React.FC<AvatarGroupProps> = ({\n children,\n max,\n stacked = false,\n className = '',\n moreText,\n}) => {\n // Generate CSS classes\n const avatarGroupClasses = [\n AVATAR_GROUP.CLASSES.BASE,\n stacked && AVATAR_GROUP.CLASSES.STACKED,\n className,\n ].filter(Boolean).join(' ');\n\n // Get valid Avatar children\n const avatarChildren = Children.toArray(children).filter(\n child => isValidElement(child) && child.type === Avatar\n );\n\n // Determine if we need to show the \"more\" indicator\n const showMoreIndicator = max !== undefined && avatarChildren.length > max;\n const visibleAvatars = showMoreIndicator \n ? avatarChildren.slice(0, max) \n : avatarChildren;\n const hiddenAvatarCount = avatarChildren.length - (max || 0);\n\n // Extract size and shape from first avatar to ensure consistent styling\n const firstAvatar = isValidElement<AvatarProps>(avatarChildren[0]) \n ? avatarChildren[0].props \n : null;\n const avatarSize = firstAvatar?.size || 'md';\n const isCircle = firstAvatar?.circle || false;\n\n // Generate more indicator classes\n const moreClasses = [\n AVATAR.CLASSES.BASE,\n AVATAR_GROUP.CLASSES.MORE,\n avatarSize !== 'md' && `c-avatar--${avatarSize}`,\n isCircle && 'c-avatar--circle',\n ].filter(Boolean).join(' ');\n\n return (\n <div className={avatarGroupClasses}>\n {visibleAvatars.map((child, index) => {\n if (isValidElement<AvatarProps>(child)) {\n // Clone the Avatar element to ensure proper styling\n return cloneElement(child, {\n key: index,\n ...child.props,\n });\n }\n return null;\n })}\n\n {showMoreIndicator && (\n <div className={moreClasses}>\n {moreText || `+${hiddenAvatarCount}`}\n </div>\n )}\n </div>\n );\n};\n\nexport type { AvatarGroupProps, AvatarProps }\n\n// Set display name for debugging\nAvatarGroup.displayName = 'Accordion';\n\n// Default export (primary)\nexport default AvatarGroup;\n\n// Named export for compatibility\nexport { AvatarGroup };","import { useState } from 'react';\nimport { MessageItem } from '../types/components';\n\ninterface UseMessagesProps {\n /**\n * Initial messages\n */\n initialMessages?: MessageItem[];\n \n /**\n * Callback when a message is sent\n */\n onSendMessage?: (text: string) => void;\n}\n\ninterface UseMessagesReturn {\n /**\n * Current input value\n */\n inputValue: string;\n \n /**\n * Set input value\n */\n setInputValue: (value: string) => void;\n \n /**\n * Handle input change\n */\n handleInputChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n \n /**\n * Handle form submission\n */\n handleSubmit: (e: React.FormEvent) => void;\n \n /**\n * Handle key down events\n */\n handleKeyDown: (e: React.KeyboardEvent) => void;\n}\n\n/**\n * Hook for managing Messages component state and behavior\n */\nexport const useMessages = ({\n onSendMessage\n}: UseMessagesProps = {}): UseMessagesReturn => {\n const [inputValue, setInputValue] = useState('');\n \n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n };\n \n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (inputValue.trim() && onSendMessage) {\n onSendMessage(inputValue.trim());\n setInputValue('');\n }\n };\n \n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSubmit(e);\n }\n };\n \n return {\n inputValue,\n setInputValue,\n handleInputChange,\n handleSubmit,\n handleKeyDown\n };\n};\n\nexport default useMessages; ","import React from 'react';\nimport { Icon } from '../Icon';\nimport { Avatar } from '../Avatar';\nimport { MESSAGES } from '../../lib/constants/components';\nimport { MessagesProps } from '../../lib/types/components';\nimport { useMessages } from '../../lib/composables/useMessages';\n\n/**\n * Messages component for displaying a chat interface with messages, images, and file attachments\n */\nconst Messages: React.FC<MessagesProps> = ({\n messages = [],\n otherAvatar,\n selfAvatar,\n otherName,\n width = '100%',\n onSendMessage,\n placeholder = 'Type a message',\n className = '',\n bodyHeight,\n disabled = false,\n id,\n}) => {\n const {\n inputValue,\n handleInputChange,\n handleSubmit,\n handleKeyDown\n } = useMessages({ onSendMessage });\n \n // Generate unique ID for accessibility\n const messagesId = id || `messages-${Math.random().toString(36).substr(2, 9)}`;\n const inputId = `${messagesId}-input`;\n \n return (\n <div \n className={`${MESSAGES.CLASSES.BASE} ${disabled ? 'is-disabled' : ''} ${className}`}\n style={{ '--atomix-messages-width': width } as React.CSSProperties}\n id={messagesId}\n aria-label=\"Chat messages\"\n role=\"log\"\n aria-live=\"polite\"\n >\n <div \n className={MESSAGES.CLASSES.BODY}\n style={bodyHeight ? { '--atomix-messages-body-height': bodyHeight } as React.CSSProperties : undefined}\n >\n {messages.map((message) => (\n <div \n key={message.id} \n className={`${MESSAGES.CLASSES.CONTENT} ${message.isSelf ? MESSAGES.CLASSES.CONTENT_SELF : ''}`}\n aria-label={`${message.isSelf ? 'You' : otherName || 'Other person'} sent a message at ${message.time}`}\n >\n <Avatar \n src={message.isSelf ? selfAvatar : otherAvatar}\n size=\"xl\"\n circle\n className={MESSAGES.CLASSES.AVATAR}\n alt={message.isSelf ? 'Your avatar' : `${otherName || 'Other person'}'s avatar`}\n />\n <div className={MESSAGES.CLASSES.ITEMS}>\n {!message.isSelf && otherName && (\n <div className={MESSAGES.CLASSES.NAME}>{otherName}</div>\n )}\n \n {message.text && (\n <div className={MESSAGES.CLASSES.TEXT}>\n {message.text}\n <span className={MESSAGES.CLASSES.TIME} aria-label={`Sent at ${message.time}`}>\n {message.time}\n </span>\n </div>\n )}\n \n {message.image && (\n <img \n className={MESSAGES.CLASSES.IMAGE} \n src={message.image} \n alt=\"Message attachment\" \n loading=\"lazy\"\n />\n )}\n \n {message.file && (\n <div \n className={MESSAGES.CLASSES.FILE}\n aria-label={`File attachment: ${message.file.name}, size: ${message.file.size}`}\n >\n <span className={MESSAGES.CLASSES.FILE_ICON}>\n <Icon name=\"File\" aria-hidden=\"true\" />\n </span>\n <div className={MESSAGES.CLASSES.FILE_DETAILS}>\n <div className={MESSAGES.CLASSES.FILE_NAME}>{message.file.name}</div>\n <div className={MESSAGES.CLASSES.FILE_SIZE}>{message.file.size}</div>\n </div>\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n \n <form \n className={MESSAGES.CLASSES.FORM} \n onSubmit={handleSubmit}\n aria-label=\"Message input form\"\n >\n <div className={MESSAGES.CLASSES.INPUT_GROUP}>\n <label htmlFor={inputId} className=\"u-visually-hidden\">\n Type a message\n </label>\n <input\n id={inputId}\n type=\"text\"\n className={MESSAGES.CLASSES.INPUT}\n placeholder={placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n aria-label=\"Message input\"\n />\n <div className={MESSAGES.CLASSES.OPTIONS} aria-label=\"Message options\">\n <button \n type=\"button\"\n className={MESSAGES.CLASSES.OPTION}\n aria-label=\"Attach file\"\n disabled={disabled}\n >\n <Icon name=\"PaperclipHorizontal\" aria-hidden=\"true\" className={MESSAGES.CLASSES.OPTION_ICON}/>\n </button>\n <button \n type=\"button\"\n className={MESSAGES.CLASSES.OPTION}\n aria-label=\"Attach image\"\n disabled={disabled}\n >\n <Icon name=\"Image\" aria-hidden=\"true\" className={MESSAGES.CLASSES.OPTION_ICON}/>\n </button>\n <button \n type=\"button\"\n className={MESSAGES.CLASSES.OPTION}\n aria-label=\"Insert link\"\n disabled={disabled}\n >\n <Icon name=\"Link\" aria-hidden=\"true\" className={MESSAGES.CLASSES.OPTION_ICON}/>\n </button>\n </div>\n </div>\n <button \n type=\"submit\" \n className={MESSAGES.CLASSES.SUBMIT}\n aria-label=\"Send message\"\n disabled={disabled}\n >\n <Icon name=\"PaperPlaneTilt\" aria-hidden=\"true\" size={24}/>\n </button>\n </form>\n </div>\n );\n};\n\nexport type { MessagesProps };\n\n// Set display name for debugging\nMessages.displayName = 'Messages';\n\n// Default export (primary)\nexport default Messages;\n\n// Named export for compatibility\nexport { Messages };","import React, { useEffect, useRef, useState, useCallback } from 'react';\nimport { ModalProps } from '../../lib/types/components';\nimport { MODAL } from '../../lib/constants/components';\n\n/**\n * Hook for managing modal state\n */\nfunction useModal({\n isOpen: isOpenProp,\n onOpenChange,\n onOpen,\n onClose\n}: {\n isOpen?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n onOpen?: () => void;\n onClose?: () => void;\n} = {}) {\n // For uncontrolled usage\n const [isOpenState, setIsOpenState] = useState(false);\n \n // Determine if we're in controlled or uncontrolled mode\n const isControlled = isOpenProp !== undefined;\n const isOpen = isControlled ? !!isOpenProp : isOpenState;\n \n // Update internal state when prop changes (for controlled mode)\n useEffect(() => {\n if (isControlled) {\n setIsOpenState(!!isOpenProp);\n }\n }, [isOpenProp, isControlled]);\n \n const updateOpen = useCallback((nextIsOpen: boolean) => {\n // For uncontrolled mode, update internal state\n if (!isControlled) {\n setIsOpenState(nextIsOpen);\n }\n \n // Call the change handler in either mode\n if (onOpenChange) {\n onOpenChange(nextIsOpen);\n }\n \n // Call the specific handler\n if (nextIsOpen && onOpen) {\n onOpen();\n } else if (!nextIsOpen && onClose) {\n onClose();\n }\n }, [isControlled, onOpenChange, onOpen, onClose]);\n \n const open = useCallback(() => {\n updateOpen(true);\n }, [updateOpen]);\n \n const close = useCallback(() => {\n updateOpen(false);\n }, [updateOpen]);\n \n const toggle = useCallback(() => {\n updateOpen(!isOpen);\n }, [isOpen, updateOpen]);\n \n return {\n isOpen,\n open,\n close,\n toggle\n };\n}\n\n/**\n * Modal component for displaying overlay content\n */\nconst Modal: React.FC<ModalProps> = ({\n children,\n isOpen = false,\n onOpenChange,\n onClose,\n onOpen,\n title,\n subtitle,\n size = 'md',\n backdrop = true,\n keyboard = true,\n className = '',\n closeButton = true,\n footer,\n ...props\n}) => {\n const modalRef = useRef<HTMLDivElement>(null);\n const dialogRef = useRef<HTMLDivElement>(null);\n const backdropRef = useRef<HTMLDivElement>(null);\n \n const {\n isOpen: isOpenState,\n open,\n close\n } = useModal({\n isOpen,\n onOpenChange,\n onClose,\n onOpen\n });\n\n // Handle keyboard events for Escape key\n useEffect(() => {\n if (!keyboard) return;\n \n const handleKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpenState) {\n close();\n }\n };\n \n document.addEventListener('keydown', handleKeydown);\n return () => {\n document.removeEventListener('keydown', handleKeydown);\n };\n }, [isOpenState, close, keyboard]);\n \n // Handle backdrop click\n const handleBackdropClick = (event: React.MouseEvent<HTMLDivElement>) => {\n if (backdrop && event.target === event.currentTarget) {\n close();\n }\n };\n \n // Assemble classes\n const modalClasses = [\n 'c-modal',\n isOpenState ? MODAL.CLASSES.IS_OPEN : '',\n size ? `c-modal--${size}` : '',\n className\n ].filter(Boolean).join(' ');\n \n return (\n <div \n ref={modalRef}\n className={modalClasses}\n style={{ display: isOpenState ? 'block' : 'none' }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-hidden={!isOpenState}\n {...props}\n >\n <div \n ref={backdropRef} \n className=\"c-modal__backdrop\"\n onClick={handleBackdropClick}\n />\n <div \n ref={dialogRef} \n className=\"c-modal__dialog\"\n >\n <div className=\"c-modal__content\">\n {(title || closeButton) && (\n <div className=\"c-modal__header\">\n <div className=\"c-modal__header-content\">\n {title && <h3 className=\"c-modal__title\">{title}</h3>}\n {subtitle && <p className=\"c-modal__sub\">{subtitle}</p>}\n </div>\n {closeButton && (\n <button \n type=\"button\" \n className=\"c-modal__close c-btn js-modal-close\" \n onClick={close}\n aria-label=\"Close modal\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.0672 15.1828C16.1253 15.2409 16.1713 15.3098 16.2028 15.3857C16.2342 15.4615 16.2504 15.5429 16.2504 15.625C16.2504 15.7071 16.2342 15.7884 16.2028 15.8643C16.1713 15.9402 16.1253 16.0091 16.0672 16.0672C16.0091 16.1252 15.9402 16.1713 15.8643 16.2027C15.7885 16.2342 15.7071 16.2503 15.625 16.2503C15.5429 16.2503 15.4616 16.2342 15.3857 16.2027C15.3098 16.1713 15.2409 16.1252 15.1828 16.0672L10 10.8836L4.8172 16.0672C4.69992 16.1844 4.54086 16.2503 4.37501 16.2503C4.20916 16.2503 4.0501 16.1844 3.93282 16.0672C3.81555 15.9499 3.74966 15.7908 3.74966 15.625C3.74966 15.4591 3.81555 15.3001 3.93282 15.1828L9.11642 9.99998L3.93282 4.81717C3.81555 4.69989 3.74966 4.54083 3.74966 4.37498C3.74966 4.20913 3.81555 4.05007 3.93282 3.93279C4.0501 3.81552 4.20916 3.74963 4.37501 3.74963C4.54086 3.74963 4.69992 3.81552 4.8172 3.93279L10 9.11639L15.1828 3.93279C15.3001 3.81552 15.4592 3.74963 15.625 3.74963C15.7909 3.74963 15.9499 3.81552 16.0672 3.93279C16.1845 4.05007 16.2504 4.20913 16.2504 4.37498C16.2504 4.54083 16.1845 4.69989 16.0672 4.81717L10.8836 9.99998L16.0672 15.1828Z\" fill=\"#141414\"/>\n </svg>\n </button>\n )}\n </div>\n )}\n \n <div className=\"c-modal__body\">\n {children}\n </div>\n \n {footer && (\n <div className=\"c-modal__footer\">\n {footer}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nModal.displayName = 'Modal';\n\nexport type { ModalProps };\n\n// Set display name for debugging\nModal.displayName = 'Modal';\n\n// Default export (primary)\nexport default Modal;\n\n// Named export for compatibility\nexport { Modal };","import React, { useState, useEffect, useRef } from 'react';\nimport { NavbarProps } from '../../lib/types/components';\nimport { useNavbar } from '../../lib/composables/useNavbar';\nimport { NAVBAR } from '../../lib/constants/components';\n\nconst Navbar: React.FC<NavbarProps> = ({\n brand,\n children,\n variant,\n position = 'static',\n containerWidth,\n collapsible = true,\n expanded,\n onToggle,\n className = '',\n disabled = false\n}) => {\n const { generateNavbarClass, generateContainerStyle, generateCollapseClass } = useNavbar({ \n position, collapsible, expanded, onToggle\n });\n \n // Use controlled or uncontrolled expanded state\n const [navbarExpanded, setNavbarExpanded] = useState(expanded || false);\n \n // Ref for the collapse element to handle responsive behavior\n const collapseRef = useRef<HTMLDivElement>(null);\n \n // Update local state when external state changes\n useEffect(() => {\n if (typeof expanded !== 'undefined') {\n setNavbarExpanded(expanded);\n }\n }, [expanded]);\n \n // Handle resize to reset mobile menu state when switching to desktop\n useEffect(() => {\n const handleResize = () => {\n const isMobile = window.innerWidth < 768; // MD breakpoint\n if (!isMobile && collapsible) {\n // Reset expanded state on desktop\n if (typeof onToggle === 'function') {\n // Only update if different to avoid unnecessary renders\n if (expanded) onToggle(false);\n } else {\n setNavbarExpanded(false);\n }\n }\n };\n \n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, [collapsible, expanded, onToggle]);\n \n // Generate the navbar class\n const navbarClass = generateNavbarClass({ \n position, variant, collapsible, className\n });\n \n // Generate the container style\n const containerStyle = generateContainerStyle(containerWidth);\n \n // Generate collapse class\n const collapseClass = generateCollapseClass(navbarExpanded);\n \n // Handle toggler click\n const handleToggleClick = () => {\n if (disabled) return;\n \n const newState = !navbarExpanded;\n \n if (typeof onToggle === 'function') {\n // Controlled component\n onToggle(newState);\n } else {\n // Uncontrolled component\n setNavbarExpanded(newState);\n }\n };\n \n return (\n <nav className={navbarClass} aria-label=\"Main navigation\">\n <div className=\"c-navbar__container\" style={containerStyle}>\n {brand && (\n typeof brand === 'string' ? (\n <a href=\"/\" className=\"c-navbar__brand\">{brand}</a>\n ) : (\n <div className=\"c-navbar__brand\">{brand}</div>\n )\n )}\n \n {collapsible && (\n <button \n className=\"c-navbar__toggler\" \n onClick={handleToggleClick}\n aria-expanded={navbarExpanded}\n aria-label=\"Toggle navigation\"\n aria-controls=\"navbar-collapse\"\n disabled={disabled}\n type=\"button\"\n >\n <span className=\"c-navbar__toggler-icon\"></span>\n </button>\n )}\n \n <div \n id=\"navbar-collapse\"\n className={collapseClass}\n ref={collapseRef}\n >\n {children}\n </div>\n </div>\n </nav>\n );\n}; \n\n\nexport type { NavbarProps };\n\n// Set display name for debugging\nNavbar.displayName = 'Navbar';\n\n// Default export (primary)\nexport default Navbar;\n\n// Named export for compatibility\nexport { Navbar };","import React from \"react\";\nimport { ImageType } from \"../../lib/types/components\";\nimport { Button } from \"../Button/Button\";\nimport { Badge } from \"../Badge/Badge\";\nimport { Icon } from \"../Icon/Icon\";\n\n/**\n * Props for the PhotoViewerHeader component\n */\nexport interface PhotoViewerHeaderProps {\n /** Current image index */\n currentIndex: number;\n /** Total number of images */\n imagesLength: number;\n /** Callback to zoom out */\n onZoomOut: () => void;\n /** Callback to reset zoom */\n onResetZoom: () => void;\n /** Callback to zoom in */\n onZoomIn: () => void;\n /** Callback to toggle fullscreen */\n onToggleFullscreen: () => void;\n /** Callback to close the viewer */\n onClose: () => void;\n /** Whether fullscreen is active */\n isFullscreen: boolean;\n /** Current zoom level */\n zoomLevel: number;\n /** Callback to rotate image */\n onRotate: () => void;\n /** Callback to download image */\n onDownload: () => void;\n /** Callback to share image */\n onShare: () => void;\n /** Whether info panel is shown */\n showInfo: boolean;\n /** Callback to toggle info panel */\n onToggleInfo: () => void;\n /** Current image object */\n currentImage?: ImageType;\n}\n\n/**\n * PhotoViewerHeader component - displays controls and counter for the photo viewer\n *\n * @param props - PhotoViewerHeaderProps\n * @returns JSX.Element\n */\nexport const PhotoViewerHeader: React.FC<PhotoViewerHeaderProps> = ({\n currentIndex,\n imagesLength,\n onZoomOut,\n onResetZoom,\n onZoomIn,\n onToggleFullscreen,\n onClose,\n isFullscreen,\n zoomLevel,\n onRotate,\n onDownload,\n onShare,\n showInfo,\n onToggleInfo,\n currentImage,\n}) => (\n <div className=\"c-photo-viewer__header\">\n <Badge\n label={`${currentIndex + 1} / ${imagesLength}`}\n variant=\"light\"\n size=\"sm\"\n className=\"c-photo-viewer__counter-badge\"\n />\n <div className=\"c-photo-viewer__actions\">\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onZoomOut}\n disabled={zoomLevel <= 0.1}\n aria-label=\"Zoom out\"\n icon={<Icon name=\"Minus\" size=\"sm\" />}\n className=\"c-photo-viewer__action-button\"\n />\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onResetZoom}\n disabled={zoomLevel === 1}\n aria-label=\"Reset zoom\"\n icon={<Icon name=\"MagnifyingGlass\" size=\"sm\" />}\n className=\"c-photo-viewer__action-button\"\n />\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onZoomIn}\n disabled={zoomLevel >= 5}\n aria-label=\"Zoom in\"\n icon={<Icon name=\"Plus\" size=\"sm\" />}\n className=\"c-photo-viewer__action-button\"\n />\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onRotate}\n aria-label=\"Rotate image\"\n icon={<Icon name=\"ArrowsClockwise\" size=\"sm\" />}\n className=\"c-photo-viewer__action-button\"\n />\n {currentImage?.src && (\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onDownload}\n aria-label=\"Download image\"\n icon={<Icon name=\"DownloadSimple\" size=\"sm\" />}\n className=\"c-photo-viewer__action-button\"\n />\n )}\n {currentImage?.src &&\n typeof navigator !== \"undefined\" &&\n \"share\" in navigator && (\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onShare}\n aria-label=\"Share image\"\n icon={<Icon name=\"ShareNetwork\" size=\"sm\" />}\n className=\"c-photo-viewer__action-button\"\n />\n )}\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onToggleInfo}\n aria-label={showInfo ? \"Hide info\" : \"Show info\"}\n icon={<Icon name=\"Info\" size=\"sm\" />}\n className=\"c-photo-viewer__action-button\"\n />\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onToggleFullscreen}\n aria-label={isFullscreen ? \"Exit fullscreen\" : \"Enter fullscreen\"}\n icon={\n isFullscreen ? (\n <Icon name=\"ArrowsIn\" size=\"sm\" />\n ) : (\n <Icon name=\"ArrowsOut\" size=\"sm\" />\n )\n }\n className=\"c-photo-viewer__action-button\"\n />\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onClose}\n aria-label=\"Close photo viewer\"\n icon={<Icon name=\"X\" size=\"sm\" />}\n className=\"c-photo-viewer__action-button c-photo-viewer__close\"\n />\n </div>\n </div>\n);\n\nexport default PhotoViewerHeader;\n","import React, { useEffect } from 'react';\nimport { Button } from '../Button/Button';\nimport { Icon } from '../Icon/Icon';\n\n/**\n * Props for the PhotoViewerNavigation component\n */\nexport interface PhotoViewerNavigationProps {\n /** Whether to show navigation buttons */\n show: boolean;\n /** Callback to go to previous image */\n onPrev: () => void;\n /** Callback to go to next image */\n onNext: () => void;\n /** Current image index */\n currentIndex: number;\n /** Total number of images */\n imagesLength: number;\n /** Whether keyboard navigation is enabled */\n enableKeyboardNav: boolean;\n /** Callback to close the viewer */\n onClose: () => void;\n}\n\n/**\n * PhotoViewerNavigation component - handles navigation between images\n * \n * @param props - PhotoViewerNavigationProps\n * @returns JSX.Element\n */\nexport const PhotoViewerNavigation: React.FC<PhotoViewerNavigationProps> = ({\n show,\n onPrev,\n onNext,\n currentIndex,\n imagesLength,\n enableKeyboardNav,\n onClose,\n}) => {\n // Add keyboard navigation\n useEffect(() => {\n if (!enableKeyboardNav) return;\n \n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'ArrowLeft') onPrev();\n if (e.key === 'ArrowRight') onNext();\n if (e.key === 'Escape') onClose();\n };\n \n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [enableKeyboardNav, onPrev, onNext, onClose]);\n \n return show ? (\n <>\n <Button\n iconOnly\n size=\"md\"\n variant=\"light\"\n rounded\n onClick={onPrev}\n disabled={currentIndex === 0}\n aria-label=\"Previous image\"\n icon={<Icon name=\"CaretLeft\" size=\"md\" />}\n className=\"c-photo-viewer__nav-button c-photo-viewer__nav-button--prev\"\n />\n <Button\n iconOnly\n size=\"md\"\n variant=\"light\"\n rounded\n onClick={onNext}\n disabled={currentIndex === imagesLength - 1}\n aria-label=\"Next image\"\n icon={<Icon name=\"CaretRight\" size=\"md\" />}\n className=\"c-photo-viewer__nav-button c-photo-viewer__nav-button--next\"\n />\n </>\n ) : null;\n};\n\nexport default PhotoViewerNavigation;","import React, { useRef, useEffect, useState } from 'react';\n\n/**\n * Props for the PhotoViewerImage component\n */\nexport interface PhotoViewerImageProps {\n /** Ref to the image element */\n imageRef: React.RefObject<HTMLImageElement>;\n /** Ref to the container element */\n containerRef?: React.RefObject<HTMLDivElement>;\n /** Image source URL */\n src: string;\n /** Image alt text */\n alt?: string;\n /** Current zoom level */\n zoomLevel: number;\n /** Current drag position */\n dragPosition: { x: number; y: number };\n /** Whether image is being dragged */\n isDragging: boolean;\n /** Current rotation angle in degrees */\n rotationAngle: number;\n /** Whether image is transitioning */\n isTransitioning?: boolean;\n /** Mouse down event handler */\n onMouseDown: (event: React.MouseEvent<HTMLDivElement | HTMLImageElement, MouseEvent>) => void;\n /** Mouse move event handler */\n onMouseMove: (event: React.MouseEvent<HTMLDivElement | HTMLImageElement, MouseEvent>) => void;\n /** Mouse up event handler */\n onMouseUp: (event: React.MouseEvent<HTMLDivElement | HTMLImageElement, MouseEvent>) => void;\n /** Wheel event handler for zoom */\n onWheel: (event: React.WheelEvent<HTMLDivElement>) => void;\n /** Touch start event handler */\n onTouchStart: (event: React.TouchEvent<HTMLDivElement | HTMLImageElement>) => void;\n /** Touch move event handler */\n onTouchMove: (event: React.TouchEvent<HTMLDivElement | HTMLImageElement>) => void;\n /** Touch end event handler */\n onTouchEnd: (event: React.TouchEvent<HTMLDivElement | HTMLImageElement>) => void;\n /** Double click event handler */\n onDoubleClick?: (event: React.MouseEvent<HTMLDivElement | HTMLImageElement, MouseEvent>) => void;\n}\n\n/**\n * PhotoViewerImage component - displays the main image with zoom and pan capabilities\n * \n * @param props - PhotoViewerImageProps\n * @returns JSX.Element\n */\nexport const PhotoViewerImage: React.FC<PhotoViewerImageProps> = ({\n imageRef,\n containerRef,\n src,\n alt,\n zoomLevel,\n dragPosition,\n isDragging,\n rotationAngle,\n isTransitioning = false,\n onMouseDown,\n onMouseMove,\n onMouseUp,\n onWheel,\n onTouchStart,\n onTouchMove,\n onTouchEnd,\n onDoubleClick,\n}) => {\n const internalContainerRef = useRef<HTMLDivElement>(null);\n const effectiveContainerRef = containerRef || internalContainerRef;\n const [isMounted, setIsMounted] = useState(false);\n \n // Track mounting state\n useEffect(() => {\n setIsMounted(true);\n return () => setIsMounted(false);\n }, []);\n\n // Add double-click to zoom\n const handleDoubleClick = (e: React.MouseEvent<HTMLDivElement | HTMLImageElement, MouseEvent>) => {\n if (isMounted && onDoubleClick) onDoubleClick(e);\n };\n \n // Add non-passive event listeners to prevent page scrolling/zooming\n useEffect(() => {\n const container = effectiveContainerRef.current;\n if (!container) return;\n \n const handleWheelEvent = (e: WheelEvent) => {\n // Only call if mounted and handler exists\n if (isMounted && container && onWheel) {\n onWheel(e as unknown as React.WheelEvent<HTMLDivElement>);\n }\n };\n \n const handleTouchStartEvent = (e: TouchEvent) => {\n // Only call if mounted and handler exists\n if (isMounted && container && onTouchStart) {\n onTouchStart(e as unknown as React.TouchEvent<HTMLDivElement>);\n }\n };\n \n const handleTouchMoveEvent = (e: TouchEvent) => {\n // Only call if mounted and handler exists\n if (isMounted && container && onTouchMove) {\n onTouchMove(e as unknown as React.TouchEvent<HTMLDivElement>);\n }\n };\n \n const handleTouchEndEvent = (e: TouchEvent) => {\n // Only call if mounted and handler exists\n if (isMounted && container && onTouchEnd) {\n onTouchEnd(e as unknown as React.TouchEvent<HTMLDivElement>);\n }\n };\n \n // Only add event listeners if mounted\n if (isMounted) {\n container.addEventListener('wheel', handleWheelEvent, { passive: false });\n container.addEventListener('touchstart', handleTouchStartEvent, { passive: false });\n container.addEventListener('touchmove', handleTouchMoveEvent, { passive: false });\n container.addEventListener('touchend', handleTouchEndEvent, { passive: false });\n }\n \n // Clean up\n return () => {\n container.removeEventListener('wheel', handleWheelEvent);\n container.removeEventListener('touchstart', handleTouchStartEvent);\n container.removeEventListener('touchmove', handleTouchMoveEvent);\n container.removeEventListener('touchend', handleTouchEndEvent);\n };\n }, [isMounted, onWheel, onTouchStart, onTouchMove, onTouchEnd, effectiveContainerRef]);\n \n return (\n <div\n ref={effectiveContainerRef}\n className={`c-photo-viewer__image-container ${isTransitioning ? 'is-transitioning' : ''}`}\n style={{\n cursor: isDragging ? 'grabbing' : zoomLevel > 1 ? 'grab' : 'default',\n opacity: isTransitioning ? 0.7 : 1,\n touchAction: 'none', // Prevent browser touch behaviors\n }}\n onMouseDown={onMouseDown}\n onMouseMove={onMouseMove}\n onMouseUp={onMouseUp}\n onMouseLeave={onMouseUp}\n onDoubleClick={handleDoubleClick}\n >\n <img\n ref={imageRef}\n src={src}\n alt={alt}\n className=\"c-photo-viewer__image\"\n style={{\n transform: `scale(${zoomLevel}) translate(${dragPosition.x}px, ${dragPosition.y}px) rotate(${rotationAngle}deg)`,\n transition: isDragging \n ? 'none' \n : isTransitioning \n ? 'opacity 0.15s ease-out' \n : 'transform 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n transformOrigin: 'center center',\n willChange: isDragging ? 'transform' : 'auto',\n touchAction: 'none', // Prevent image-specific touch behaviors\n }}\n draggable={false}\n onContextMenu={(e) => e.preventDefault()} // Prevent context menu on long press\n />\n </div>\n );\n};\n\nexport default PhotoViewerImage;","import React from 'react';\nimport { ImageType } from '../../lib/types/components';\nimport { Button } from '../Button/Button';\n\n/**\n * Props for the PhotoViewerThumbnails component\n */\nexport interface PhotoViewerThumbnailsProps {\n /** Array of images to display thumbnails for */\n images: ImageType[];\n /** Current active image index */\n currentIndex: number;\n /** Callback to navigate to a specific image */\n goToImage: (index: number) => void;\n}\n\n/**\n * PhotoViewerThumbnails component - displays thumbnail navigation for images\n * \n * @param props - PhotoViewerThumbnailsProps\n * @returns JSX.Element\n */\nexport const PhotoViewerThumbnails: React.FC<PhotoViewerThumbnailsProps> = ({ \n images, \n currentIndex, \n goToImage \n}) => images.length > 1 ? (\n <div className=\"c-photo-viewer__thumbnails\">\n {images.map((image: ImageType, index: number) => {\n const thumbnailSrc = image.thumbnail || image.src;\n return (\n <Button\n key={index}\n variant=\"light\"\n className={`c-photo-viewer__thumbnail ${index === currentIndex ? 'is-active' : ''}`}\n onClick={() => goToImage(index)}\n aria-label={`View image ${index + 1}`}\n aria-current={index === currentIndex}\n >\n <img \n loading=\"lazy\"\n src={thumbnailSrc} \n alt={image.alt || `Thumbnail ${index + 1}`} \n className=\"c-photo-viewer__thumbnail-img\" \n />\n </Button>\n );\n })}\n </div>\n) : null;\n\nexport default PhotoViewerThumbnails;","import React from 'react';\nimport { ImageType } from '../../lib/types/components';\nimport { Button } from '../Button/Button';\nimport { Badge } from '../Badge/Badge';\nimport { Icon } from '../Icon/Icon';\n\n/**\n * Props for the PhotoViewerInfo component\n */\nexport interface PhotoViewerInfoProps {\n /** Whether to show the info panel */\n show: boolean;\n /** Image object to display info for */\n image?: ImageType;\n /** Callback to close the info panel */\n onClose: () => void;\n}\n\n/**\n * PhotoViewerInfo component - displays image metadata and information\n * \n * @param props - PhotoViewerInfoProps\n * @returns JSX.Element\n */\nexport const PhotoViewerInfo: React.FC<PhotoViewerInfoProps> = ({ show, image, onClose }) => {\n if (!show || !image) return null;\n \n return (\n <div className=\"c-photo-viewer__info-panel\">\n <Button\n iconOnly\n size=\"sm\"\n variant=\"light\"\n rounded\n onClick={onClose}\n aria-label=\"Close info panel\"\n icon={<Icon name=\"X\" size=\"sm\" />}\n className=\"c-photo-viewer__info-close\"\n />\n <div className=\"c-photo-viewer__info-content\">\n {image.title && <h3 className=\"c-photo-viewer__info-title\">{image.title}</h3>}\n {image.description && <p className=\"c-photo-viewer__info-description\">{image.description}</p>}\n {image.date && <p className=\"c-photo-viewer__info-meta\">Date: {image.date}</p>}\n {image.author && <p className=\"c-photo-viewer__info-meta\">By: {image.author}</p>}\n {image.tags && image.tags.length > 0 && (\n <div className=\"c-photo-viewer__info-tags\">\n {image.tags.map((tag: string, index: number) => (\n <Badge key={index} label={tag} variant=\"light\" size=\"sm\" className=\"c-photo-viewer__info-tag\" />\n ))}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default PhotoViewerInfo;","import React, { useMemo, useEffect } from \"react\";\nimport { PhotoViewerProps, ImageType } from \"../../lib/types/components\";\nimport { usePhotoViewer } from \"../../lib/composables/usePhotoViewer\";\nimport { PhotoViewerHeader } from \"./PhotoViewerHeader\";\nimport { PhotoViewerNavigation } from \"./PhotoViewerNavigation\";\nimport { PhotoViewerImage } from \"./PhotoViewerImage\";\nimport { PhotoViewerThumbnails } from \"./PhotoViewerThumbnails\";\nimport { PhotoViewerInfo } from \"./PhotoViewerInfo\";\n\n/**\n * PhotoViewer component - A comprehensive image viewer with zoom, pan, navigation, and metadata display\n *\n * Features:\n * - Image navigation with keyboard support\n * - Zoom and pan functionality\n * - Touch gestures for mobile devices\n * - Fullscreen mode\n * - Image rotation\n * - Download and share capabilities\n * - Thumbnail navigation\n * - Image metadata display\n * - Responsive design\n *\n * @param props - PhotoViewerProps\n * @returns JSX.Element\n */\nconst PhotoViewer: React.FC<PhotoViewerProps> = ({\n images,\n startIndex = 0,\n className = \"\",\n disabled = false,\n enableKeyboardNavigation = true,\n enableGestures = true,\n enableFullscreen = true,\n thumbnailPosition = \"bottom\",\n onImageChange,\n onClose,\n}) => {\n // Use the external composable hook with enhanced features\n const {\n currentIndex,\n zoomLevel,\n imagePosition: dragPosition,\n isDragging,\n isFullscreen,\n rotationAngle,\n showInfo,\n imageRef,\n containerRef,\n isTransitioning,\n setZoomLevel,\n setImagePosition: setDragPosition,\n setIsDragging,\n setIsFullscreen,\n setRotationAngle,\n setShowInfo,\n closeModal,\n goToPrevious,\n goToNext,\n setCurrentIndex: goToImage,\n handleMouseDown,\n handleMouseMove,\n handleMouseUp,\n handleWheel,\n handleTouchStart,\n handleTouchMove,\n handleTouchEnd,\n handleDoubleClick,\n resetImageState,\n } = usePhotoViewer({\n images,\n startIndex,\n enableGestures,\n onImageChange,\n onClose: onClose || (() => {}),\n });\n\n // Process images to handle both string arrays and object arrays, ensuring ImageType structure\n const processedImages: ImageType[] = useMemo(() => {\n return images.map((img) => (typeof img === \"string\" ? { src: img } : img));\n }, [images]);\n\n // Current image object\n const currentImage: ImageType | undefined = processedImages[currentIndex];\n\n // Handle fullscreen toggle with bounds update\n const handleToggleFullscreen = () => {\n if (!enableFullscreen) return;\n\n if (!isFullscreen) {\n const element = document.documentElement;\n if (element.requestFullscreen) {\n element.requestFullscreen();\n }\n } else {\n if (document.exitFullscreen) {\n document.exitFullscreen();\n }\n }\n setIsFullscreen(!isFullscreen);\n };\n\n // Handle image rotation with bounds update\n const handleRotate = () => {\n setRotationAngle((angle: number) => (angle + 90) % 360);\n };\n\n // Handle image download\n const handleDownload = () => {\n if (!currentImage?.src) return;\n\n const link = document.createElement(\"a\");\n link.href = currentImage.src;\n link.download = currentImage.title || `image-${currentIndex + 1}`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n };\n\n // Handle image sharing\n const handleShare = async () => {\n if (!navigator.share || !currentImage?.src) return;\n\n try {\n await navigator.share({\n title: currentImage.title || \"Shared Image\",\n text: currentImage.description || \"Check out this image\",\n url: currentImage.src,\n });\n } catch (error) {\n console.error(\"Error sharing:\", error);\n }\n };\n\n // Memoize class names\n const photoViewerClasses = useMemo(\n () =>\n [\n \"c-photo-viewer\",\n `c-photo-viewer--thumbnails-${thumbnailPosition}`,\n isDragging ? \"c-photo-viewer--dragging\" : \"\",\n isFullscreen ? \"c-photo-viewer--fullscreen\" : \"\",\n showInfo ? \"c-photo-viewer--info-open\" : \"\",\n disabled ? \"is-disabled\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \"),\n [\n isDragging,\n isFullscreen,\n showInfo,\n disabled,\n thumbnailPosition,\n className,\n ],\n );\n\n // Listen for fullscreen changes\n useEffect(() => {\n const handleFullscreenChange = () => {\n setIsFullscreen(!!document.fullscreenElement);\n };\n\n document.addEventListener(\"fullscreenchange\", handleFullscreenChange);\n return () =>\n document.removeEventListener(\"fullscreenchange\", handleFullscreenChange);\n }, [setIsFullscreen]);\n\n // Add/remove is-open-photoviewer class on body\n useEffect(() => {\n document.body.classList.add(\"is-open-photoviewer\");\n\n return () => {\n document.body.classList.remove(\"is-open-photoviewer\");\n };\n }, []);\n\n // Early return for empty images array\n if (!images.length) return null;\n\n return (\n <div\n className={photoViewerClasses}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Photo viewer\"\n >\n <div className=\"c-photo-viewer__backdrop\" onClick={closeModal} />\n <div className=\"c-photo-viewer__container\">\n <PhotoViewerHeader\n currentIndex={currentIndex}\n imagesLength={images.length}\n onZoomOut={() => setZoomLevel((z: number) => Math.max(z - 0.25, 0.1))}\n onResetZoom={() => {\n resetImageState();\n }}\n onZoomIn={() => setZoomLevel((z: number) => Math.min(z + 0.25, 5))}\n onToggleFullscreen={handleToggleFullscreen}\n onClose={onClose || closeModal}\n isFullscreen={isFullscreen}\n zoomLevel={zoomLevel}\n onRotate={handleRotate}\n onDownload={handleDownload}\n onShare={handleShare}\n showInfo={showInfo}\n onToggleInfo={() => setShowInfo(!showInfo)}\n currentImage={currentImage}\n />\n <div className=\"c-photo-viewer__content\">\n <PhotoViewerNavigation\n show={images.length > 1}\n onPrev={goToPrevious}\n onNext={goToNext}\n currentIndex={currentIndex}\n imagesLength={images.length}\n enableKeyboardNav={enableKeyboardNavigation}\n onClose={onClose || closeModal}\n />\n {currentImage?.src && (\n <PhotoViewerImage\n imageRef={imageRef}\n containerRef={containerRef}\n src={currentImage.src}\n alt={currentImage?.alt || `Image ${currentIndex + 1}`}\n zoomLevel={zoomLevel}\n dragPosition={dragPosition}\n isDragging={isDragging}\n rotationAngle={rotationAngle}\n isTransitioning={isTransitioning}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onWheel={handleWheel}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n onDoubleClick={handleDoubleClick}\n />\n )}\n </div>\n {thumbnailPosition !== \"none\" && (\n <PhotoViewerThumbnails\n images={processedImages}\n currentIndex={currentIndex}\n goToImage={goToImage}\n />\n )}\n <PhotoViewerInfo\n show={showInfo}\n image={currentImage}\n onClose={() => setShowInfo(false)}\n />\n </div>\n </div>\n );\n};\n\nexport type { PhotoViewerProps };\n\n// Set display name for debugging\nPhotoViewer.displayName = 'PhotoViewer';\n\n// Default export (primary)\nexport default PhotoViewer;\n\n// Named export for compatibility\nexport { PhotoViewer };\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\n\ninterface UsePhotoViewerProps {\n images: (string | { src: string; [key: string]: any })[];\n startIndex?: number;\n enableGestures?: boolean;\n onImageChange?: (index: number) => void;\n onClose?: () => void;\n}\n\ninterface ImageState {\n zoomLevel: number;\n position: { x: number; y: number };\n rotation: number;\n bounds: {\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n };\n}\n\nexport const usePhotoViewer = ({ \n images, \n startIndex = 0, \n enableGestures = true, \n onImageChange, \n onClose \n}: UsePhotoViewerProps) => {\n const [currentIndex, setCurrentIndex] = useState(startIndex);\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [startDragPosition, setStartDragPosition] = useState({ x: 0, y: 0 });\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [showInfo, setShowInfo] = useState(false);\n const [imageStates, setImageStates] = useState<Record<number, ImageState>>({});\n const [isTransitioning, setIsTransitioning] = useState(false);\n const [isMounted, setIsMounted] = useState(false);\n const [momentumZoom, setMomentumZoom] = useState({ velocity: 0, timestamp: 0 });\n \n // Ref for the image element\n const imageRef = useRef<HTMLImageElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n \n // Track touch points for pinch zoom\n const touchPointsRef = useRef<{ x: number; y: number }[]>([]);\n const lastDistanceRef = useRef<number | null>(null);\n const lastMidpointRef = useRef<{ x: number; y: number } | null>(null);\n const lastWheelTime = useRef<number>(0);\n const momentumTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Calculate dragging bounds based on zoom level and image dimensions\n const calculateBounds = useCallback((zoomLevel: number, rotation: number) => {\n if (!isMounted || !imageRef.current || !containerRef.current) {\n return { minX: 0, maxX: 0, minY: 0, maxY: 0 };\n }\n\n const image = imageRef.current;\n const container = containerRef.current;\n \n // Additional safety check for DOM readiness\n if (!image.naturalWidth && !image.width) {\n return { minX: 0, maxX: 0, minY: 0, maxY: 0 };\n }\n \n // Get natural image dimensions\n const imageWidth = image.naturalWidth || image.width || 800;\n const imageHeight = image.naturalHeight || image.height || 600;\n \n // Get container dimensions with null check\n try {\n const containerRect = container.getBoundingClientRect();\n if (!containerRect || containerRect.width === 0 || containerRect.height === 0) {\n return { minX: 0, maxX: 0, minY: 0, maxY: 0 };\n }\n const containerWidth = containerRect.width;\n const containerHeight = containerRect.height;\n \n // Calculate image display dimensions considering rotation\n const rotationRad = (rotation * Math.PI) / 180;\n const cos = Math.abs(Math.cos(rotationRad));\n const sin = Math.abs(Math.sin(rotationRad));\n \n // Calculate the actual display size of the image\n const aspectRatio = imageWidth / imageHeight;\n let displayWidth, displayHeight;\n \n if (containerWidth / containerHeight > aspectRatio) {\n displayHeight = Math.min(containerHeight * 0.9, imageHeight);\n displayWidth = displayHeight * aspectRatio;\n } else {\n displayWidth = Math.min(containerWidth * 0.9, imageWidth);\n displayHeight = displayWidth / aspectRatio;\n }\n \n // Account for rotation in bounds calculation\n const rotatedWidth = displayWidth * cos + displayHeight * sin;\n const rotatedHeight = displayWidth * sin + displayHeight * cos;\n \n // Calculate scaled dimensions\n const scaledWidth = rotatedWidth * zoomLevel;\n const scaledHeight = rotatedHeight * zoomLevel;\n \n // Calculate bounds - how far we can drag\n const maxX = Math.max(0, (scaledWidth - containerWidth) / 2);\n const maxY = Math.max(0, (scaledHeight - containerHeight) / 2);\n \n return {\n minX: -maxX,\n maxX: maxX,\n minY: -maxY,\n maxY: maxY\n };\n } catch (error) {\n console.warn('PhotoViewer: Error calculating bounds', error);\n return { minX: 0, maxX: 0, minY: 0, maxY: 0 };\n }\n }, [isMounted]);\n\n // Constrain position within bounds\n const constrainPosition = useCallback((position: { x: number; y: number }, bounds: ImageState['bounds']) => {\n return {\n x: Math.max(bounds.minX, Math.min(bounds.maxX, position.x)),\n y: Math.max(bounds.minY, Math.min(bounds.maxY, position.y))\n };\n }, []);\n\n // Mount tracking and ensure the current index is within bounds\n useEffect(() => {\n setIsMounted(true);\n if (startIndex < 0 || startIndex >= images.length) {\n setCurrentIndex(0);\n } else {\n setCurrentIndex(startIndex);\n }\n return () => setIsMounted(false);\n }, [images, startIndex]);\n\n // Handle modal open/close body class\n useEffect(() => {\n if (isModalOpen) {\n document.body.classList.add('is-open-photoviewer');\n } else {\n document.body.classList.remove('is-open-photoviewer');\n }\n }, [isModalOpen]);\n\n // Initialize state for current image when index changes\n useEffect(() => {\n if (isModalOpen) {\n setImageStates(prev => {\n if (!prev[currentIndex]) {\n return {\n ...prev,\n [currentIndex]: {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n }\n };\n }\n return prev;\n });\n }\n }, [isModalOpen, currentIndex]);\n \n // Call onImageChange callback when current index changes\n useEffect(() => {\n if (onImageChange) {\n onImageChange(currentIndex);\n }\n }, [currentIndex, onImageChange]);\n\n // Update bounds when image loads or dimensions change\n useEffect(() => {\n const image = imageRef.current;\n const container = containerRef.current;\n \n const updateImageBounds = () => {\n if (!isMounted || !image || !container) return;\n \n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n const newBounds = calculateBounds(currentState.zoomLevel, currentState.rotation);\n const constrainedPosition = constrainPosition(currentState.position, newBounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n bounds: newBounds,\n position: constrainedPosition\n }\n };\n });\n };\n \n if (image && container && image.complete && isMounted) {\n updateImageBounds();\n } else if (image && container && isMounted) {\n image.addEventListener('load', updateImageBounds);\n return () => image.removeEventListener('load', updateImageBounds);\n }\n }, [currentIndex, calculateBounds, constrainPosition, isMounted]);\n\n // Handle window resize\n useEffect(() => {\n const handleResize = () => {\n if (!isMounted || !imageRef.current || !containerRef.current) return;\n \n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n const newBounds = calculateBounds(currentState.zoomLevel, currentState.rotation);\n const constrainedPosition = constrainPosition(currentState.position, newBounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n bounds: newBounds,\n position: constrainedPosition\n }\n };\n });\n };\n \n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [currentIndex, calculateBounds, constrainPosition, isMounted]);\n\n const openModal = useCallback(() => {\n setIsModalOpen(true);\n }, []);\n\n const closeModal = useCallback(() => {\n setIsModalOpen(false);\n if (onClose) onClose();\n }, [onClose]);\n\n const goToPrevious = useCallback(() => {\n if (currentIndex > 0) {\n setIsTransitioning(true);\n setTimeout(() => {\n setCurrentIndex(prev => prev - 1);\n setIsTransitioning(false);\n }, 150);\n }\n }, [currentIndex]);\n\n const goToNext = useCallback(() => {\n if (currentIndex < images.length - 1) {\n setIsTransitioning(true);\n setTimeout(() => {\n setCurrentIndex(prev => prev + 1);\n setIsTransitioning(false);\n }, 150);\n }\n }, [currentIndex, images.length]);\n\n const setZoomLevel = useCallback((zoom: number | ((prev: number) => number)) => {\n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n const newZoom = typeof zoom === 'function' ? zoom(currentState.zoomLevel) : zoom;\n const clampedZoom = Math.max(0.1, Math.min(5, newZoom));\n \n const newBounds = calculateBounds(clampedZoom, currentState.rotation);\n const constrainedPosition = constrainPosition(currentState.position, newBounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n zoomLevel: clampedZoom,\n bounds: newBounds,\n position: constrainedPosition\n }\n };\n });\n }, [isMounted, currentIndex, calculateBounds, constrainPosition]);\n\n const setImagePosition = useCallback((position: { x: number; y: number } | ((prev: { x: number; y: number }) => { x: number; y: number })) => {\n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n const newPosition = typeof position === 'function' ? position(currentState.position) : position;\n const constrainedPosition = constrainPosition(newPosition, currentState.bounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n position: constrainedPosition\n }\n };\n });\n }, [currentIndex, constrainPosition]);\n\n const setRotationAngle = useCallback((rotation: number | ((prev: number) => number)) => {\n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n const newRotation = typeof rotation === 'function' ? rotation(currentState.rotation) : rotation;\n const normalizedRotation = ((newRotation % 360) + 360) % 360;\n \n const newBounds = calculateBounds(currentState.zoomLevel, normalizedRotation);\n const constrainedPosition = constrainPosition(currentState.position, newBounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n rotation: normalizedRotation,\n bounds: newBounds,\n position: constrainedPosition\n }\n };\n });\n }, [isMounted, currentIndex, calculateBounds, constrainPosition]);\n\n // Handle mouse wheel for zooming with proper bounds\n const handleWheel = useCallback((event: React.WheelEvent<HTMLDivElement>) => {\n if (!isMounted || !event || !event.currentTarget) return;\n \n // Additional safety check for the target element\n const target = event.currentTarget;\n if (!target || typeof target.getBoundingClientRect !== 'function') return;\n \n // Storybook-specific safety check - ensure DOM is ready\n if (typeof window !== 'undefined' && window.location?.href?.includes('storybook')) {\n try {\n // Test if getBoundingClientRect works before proceeding\n const testRect = target.getBoundingClientRect();\n if (!testRect || testRect.width === 0 || testRect.height === 0) return;\n } catch (e) {\n return;\n }\n }\n \n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n // Advanced gesture detection for different input methods\n const isMac = /Mac|iPod|iPhone|iPad/.test(navigator.platform);\n const isTrackpadPinch = event.ctrlKey && isMac;\n const hasHorizontalScroll = Math.abs(event.deltaX) > 0;\n const isTrackpadScroll = !event.ctrlKey && hasHorizontalScroll && isMac;\n const isMagicMouse = !event.ctrlKey && !hasHorizontalScroll && isMac;\n const isRegularMouse = !isMac;\n \n // Handle different input methods with appropriate sensitivity\n let zoomAmount: number;\n let shouldPreventDefault = false;\n \n if (isTrackpadPinch) {\n // MacBook trackpad pinch zoom - natural, high sensitivity\n zoomAmount = event.deltaY * -0.02;\n shouldPreventDefault = true;\n } else if (isTrackpadScroll) {\n // MacBook trackpad scroll with two fingers\n if (currentState.zoomLevel > 1) {\n // Only zoom when already zoomed in, otherwise allow natural scroll\n zoomAmount = event.deltaY * -0.003;\n shouldPreventDefault = true;\n } else {\n return prev; // Allow page scroll when not zoomed\n }\n } else if (isMagicMouse) {\n // Apple Magic Mouse - less sensitive\n zoomAmount = event.deltaY * -0.004;\n shouldPreventDefault = true;\n } else if (isRegularMouse) {\n // Regular mouse wheel - medium sensitivity\n zoomAmount = event.deltaY * -0.006;\n shouldPreventDefault = true;\n } else {\n // Fallback for other input methods\n zoomAmount = event.deltaY * -0.005;\n shouldPreventDefault = true;\n }\n \n if (shouldPreventDefault) {\n event.preventDefault();\n event.stopPropagation();\n }\n \n // Add momentum for trackpad gestures\n const currentTime = Date.now();\n const timeDelta = currentTime - lastWheelTime.current;\n lastWheelTime.current = currentTime;\n \n // Calculate velocity for momentum (trackpad specific)\n if (isTrackpadPinch && timeDelta < 100) {\n const velocity = Math.abs(zoomAmount) / timeDelta;\n setMomentumZoom({ velocity, timestamp: currentTime });\n \n // Clear any existing momentum timeout\n if (momentumTimeoutRef.current) {\n clearTimeout(momentumTimeoutRef.current);\n }\n \n // Apply momentum decay after gesture ends\n momentumTimeoutRef.current = setTimeout(() => {\n const decayFactor = 0.95;\n const minVelocity = 0.001;\n \n const applyMomentum = () => {\n setMomentumZoom(prev => {\n if (prev.velocity < minVelocity) return prev;\n \n const newVelocity = prev.velocity * decayFactor;\n const momentumZoomAmount = newVelocity * (zoomAmount > 0 ? 1 : -1);\n \n // Apply momentum zoom\n setImageStates(current => {\n const state = current[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n const newZoom = Math.max(0.1, Math.min(5, state.zoomLevel + momentumZoomAmount));\n if (newZoom === state.zoomLevel) return current;\n \n const newBounds = calculateBounds(newZoom, state.rotation);\n const constrainedPosition = constrainPosition(state.position, newBounds);\n \n return {\n ...current,\n [currentIndex]: {\n ...state,\n zoomLevel: newZoom,\n bounds: newBounds,\n position: constrainedPosition\n }\n };\n });\n \n if (newVelocity >= minVelocity) {\n requestAnimationFrame(applyMomentum);\n }\n \n return { velocity: newVelocity, timestamp: Date.now() };\n });\n };\n \n requestAnimationFrame(applyMomentum);\n }, 50);\n }\n \n // Safe getBoundingClientRect call with error handling\n let rect;\n try {\n rect = target.getBoundingClientRect();\n } catch (error) {\n console.warn('PhotoViewer: Error getting bounding rect', error);\n return prev;\n }\n \n if (!rect || rect.width === 0 || rect.height === 0) return prev;\n \n const centerX = rect.width / 2;\n const centerY = rect.height / 2;\n const cursorX = event.clientX - rect.left - centerX;\n const cursorY = event.clientY - rect.top - centerY;\n \n const oldZoom = currentState.zoomLevel;\n const newZoom = Math.max(0.1, Math.min(5, oldZoom + zoomAmount));\n \n if (newZoom !== oldZoom) {\n const zoomFactor = newZoom / oldZoom;\n const newBounds = calculateBounds(newZoom, currentState.rotation);\n \n // Calculate new position to zoom towards cursor\n const newPosition = {\n x: currentState.position.x + cursorX * (1 - zoomFactor) * 0.5,\n y: currentState.position.y + cursorY * (1 - zoomFactor) * 0.5\n };\n \n const constrainedPosition = constrainPosition(newPosition, newBounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n zoomLevel: newZoom,\n bounds: newBounds,\n position: constrainedPosition\n }\n };\n }\n return prev;\n });\n }, [isMounted, currentIndex, calculateBounds, constrainPosition]);\n\n // Handle double click to zoom with smart zoom levels\n const handleDoubleClick = useCallback((event: React.MouseEvent) => {\n if (!isMounted || !event || !event.currentTarget) return;\n \n const target = event.currentTarget;\n if (!target || typeof target.getBoundingClientRect !== 'function') return;\n \n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n let rect;\n try {\n rect = target.getBoundingClientRect();\n } catch (error) {\n console.warn('PhotoViewer: Error getting bounding rect in double click', error);\n return prev;\n }\n \n if (!rect || rect.width === 0 || rect.height === 0) return prev;\n \n const centerX = rect.width / 2;\n const centerY = rect.height / 2;\n const cursorX = event.clientX - rect.left - centerX;\n const cursorY = event.clientY - rect.top - centerY;\n \n let newZoom: number;\n let newPosition = { x: 0, y: 0 };\n \n if (currentState.zoomLevel < 1.5) {\n newZoom = 2;\n // Zoom towards cursor\n newPosition = {\n x: -cursorX * 0.5,\n y: -cursorY * 0.5\n };\n } else if (currentState.zoomLevel < 3) {\n newZoom = 4;\n newPosition = {\n x: -cursorX * 0.75,\n y: -cursorY * 0.75\n };\n } else {\n newZoom = 1;\n newPosition = { x: 0, y: 0 };\n }\n \n const newBounds = calculateBounds(newZoom, currentState.rotation);\n const constrainedPosition = constrainPosition(newPosition, newBounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n zoomLevel: newZoom,\n bounds: newBounds,\n position: constrainedPosition\n }\n };\n });\n }, [isMounted, currentIndex, calculateBounds, constrainPosition]);\n\n // Handle mouse down for panning\n const handleMouseDown = useCallback((event: React.MouseEvent<HTMLDivElement | HTMLImageElement, MouseEvent>) => {\n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n if (currentState.zoomLevel > 1) {\n event.preventDefault();\n setIsDragging(true);\n setStartDragPosition({ \n x: event.clientX - currentState.position.x, \n y: event.clientY - currentState.position.y \n });\n }\n return prev;\n });\n }, [currentIndex]);\n\n // Handle mouse move for panning with bounds\n const handleMouseMove = useCallback((event: React.MouseEvent<HTMLDivElement | HTMLImageElement, MouseEvent>) => {\n if (!isDragging) return;\n \n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n const newPosition = {\n x: event.clientX - startDragPosition.x,\n y: event.clientY - startDragPosition.y\n };\n \n const constrainedPosition = constrainPosition(newPosition, currentState.bounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n position: constrainedPosition\n }\n };\n });\n }, [isDragging, startDragPosition, currentIndex, constrainPosition]);\n\n // Handle mouse up for panning\n const handleMouseUp = useCallback(() => {\n setIsDragging(false);\n }, []);\n \n // Touch handlers for mobile gestures with bounds\n const handleTouchStart = useCallback((event: React.TouchEvent<HTMLImageElement | HTMLDivElement>) => {\n if (!enableGestures) return;\n \n const touches = event.touches;\n \n // Always prevent default for multi-touch to stop page zoom\n if (touches.length > 1) {\n event.preventDefault();\n event.stopPropagation();\n }\n \n touchPointsRef.current = Array.from(touches).map(touch => ({\n x: touch.clientX,\n y: touch.clientY\n }));\n \n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n if (touches.length === 1 && currentState.zoomLevel > 1) {\n setIsDragging(true);\n setStartDragPosition({\n x: touches[0].clientX - currentState.position.x,\n y: touches[0].clientY - currentState.position.y\n });\n } else if (touches.length === 2) {\n const dx = touches[0].clientX - touches[1].clientX;\n const dy = touches[0].clientY - touches[1].clientY;\n lastDistanceRef.current = Math.sqrt(dx * dx + dy * dy);\n \n lastMidpointRef.current = {\n x: (touches[0].clientX + touches[1].clientX) / 2,\n y: (touches[0].clientY + touches[1].clientY) / 2\n };\n }\n return prev;\n });\n }, [enableGestures, currentIndex]);\n\n // Handle touch move for dragging and pinch zoom with bounds\n const handleTouchMove = useCallback((event: React.TouchEvent<HTMLImageElement | HTMLDivElement>) => {\n if (!enableGestures) return;\n \n const touches = event.touches;\n \n // Always prevent default for multi-touch gestures to stop page zoom\n if (touches.length > 1) {\n event.preventDefault();\n event.stopPropagation();\n }\n \n setImageStates(prev => {\n const currentState = prev[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n \n // Prevent default for single touch when zoomed in to avoid conflicts\n if (currentState.zoomLevel > 1 && touches.length === 1) {\n event.preventDefault();\n }\n \n if (touches.length === 1 && isDragging && currentState.zoomLevel > 1) {\n const newPosition = {\n x: touches[0].clientX - startDragPosition.x,\n y: touches[0].clientY - startDragPosition.y\n };\n const constrainedPosition = constrainPosition(newPosition, currentState.bounds);\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n position: constrainedPosition\n }\n };\n } else if (touches.length === 2 && lastDistanceRef.current !== null) {\n const dx = touches[0].clientX - touches[1].clientX;\n const dy = touches[0].clientY - touches[1].clientY;\n const distance = Math.sqrt(dx * dx + dy * dy);\n \n const zoomDelta = (distance - lastDistanceRef.current) * 0.005;\n lastDistanceRef.current = distance;\n \n const currentMidpoint = {\n x: (touches[0].clientX + touches[1].clientX) / 2,\n y: (touches[0].clientY + touches[1].clientY) / 2\n };\n \n const oldZoom = currentState.zoomLevel;\n const newZoom = Math.max(0.1, Math.min(5, oldZoom + zoomDelta));\n \n if (newZoom !== oldZoom && lastMidpointRef.current) {\n let rect;\n try {\n rect = event.currentTarget.getBoundingClientRect();\n } catch (error) {\n console.warn('PhotoViewer: Error getting bounding rect in touch move', error);\n return prev;\n }\n \n if (!rect || rect.width === 0 || rect.height === 0) return prev;\n \n const centerX = rect.width / 2;\n const centerY = rect.height / 2;\n const midpointX = currentMidpoint.x - rect.left - centerX;\n const midpointY = currentMidpoint.y - rect.top - centerY;\n \n const zoomFactor = newZoom / oldZoom;\n const newBounds = calculateBounds(newZoom, currentState.rotation);\n \n const newPosition = {\n x: currentState.position.x + midpointX * (1 - zoomFactor) * 0.5,\n y: currentState.position.y + midpointY * (1 - zoomFactor) * 0.5\n };\n \n const constrainedPosition = constrainPosition(newPosition, newBounds);\n \n lastMidpointRef.current = currentMidpoint;\n \n return {\n ...prev,\n [currentIndex]: {\n ...currentState,\n zoomLevel: newZoom,\n bounds: newBounds,\n position: constrainedPosition\n }\n };\n }\n \n lastMidpointRef.current = currentMidpoint;\n }\n return prev;\n });\n }, [isMounted, enableGestures, isDragging, startDragPosition, currentIndex, constrainPosition, calculateBounds]);\n\n // Handle touch end\n const handleTouchEnd = useCallback(() => {\n setIsDragging(false);\n lastDistanceRef.current = null;\n lastMidpointRef.current = null;\n }, []);\n\n // Get current state values without causing re-renders\n const currentState = imageStates[currentIndex] || {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n };\n\n return {\n currentIndex,\n isModalOpen,\n zoomLevel: currentState.zoomLevel,\n imagePosition: currentState.position,\n isDragging,\n isFullscreen,\n rotationAngle: currentState.rotation,\n showInfo,\n imageRef,\n containerRef,\n isTransitioning,\n setCurrentIndex,\n setZoomLevel,\n setImagePosition,\n setIsDragging,\n setIsFullscreen,\n setRotationAngle,\n setShowInfo,\n openModal,\n closeModal,\n goToPrevious,\n goToNext,\n handleWheel,\n handleMouseDown,\n handleMouseMove,\n handleMouseUp,\n handleTouchStart,\n handleTouchMove,\n handleTouchEnd,\n handleDoubleClick,\n resetImageState: () => {\n setImageStates(prev => ({\n ...prev,\n [currentIndex]: {\n zoomLevel: 1,\n position: { x: 0, y: 0 },\n rotation: 0,\n bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 }\n }\n }));\n }\n };\n};","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"react-dom\");","import { useState, useRef, useEffect, RefObject } from 'react';\n\ntype PopoverPosition = 'top' | 'bottom' | 'left' | 'right';\ntype PopoverTrigger = 'click' | 'hover';\n\ninterface UsePopoverProps {\n position?: PopoverPosition | 'auto';\n trigger?: PopoverTrigger;\n offset?: number;\n delay?: number;\n defaultOpen?: boolean;\n isOpen?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n closeOnClickOutside?: boolean;\n closeOnEscape?: boolean;\n id?: string;\n}\n\ninterface UsePopoverResult {\n isOpen: boolean;\n setIsOpen: (isOpen: boolean) => void;\n triggerRef: RefObject<HTMLElement>;\n popoverRef: RefObject<HTMLDivElement>;\n arrowRef: RefObject<HTMLDivElement>;\n popoverId: string;\n currentPosition: PopoverPosition;\n updatePosition: () => void;\n}\n\n/**\n * Hook for managing popover state and positioning logic\n */\nexport const usePopover = ({\n position = 'top',\n trigger = 'click',\n offset = 12,\n delay = 0,\n defaultOpen = false,\n isOpen: controlledIsOpen,\n onOpenChange,\n closeOnClickOutside = true,\n closeOnEscape = true,\n id,\n}: UsePopoverProps): UsePopoverResult => {\n const [isOpen, setIsOpenState] = useState(defaultOpen);\n const [currentPosition, setCurrentPosition] = useState<PopoverPosition>(position === 'auto' ? 'top' : position as PopoverPosition);\n const triggerRef = useRef<HTMLElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const arrowRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<number | null>(null);\n const popoverId = id || `popover-${Math.random().toString(36).slice(2, 11)}`;\n\n // Use controlled state if provided\n const isControlled = controlledIsOpen !== undefined;\n const isOpenState = isControlled ? controlledIsOpen : isOpen;\n\n // Define setIsOpen function before using it in useEffect\n const setIsOpen = (newIsOpen: boolean) => {\n if (!isControlled) {\n setIsOpenState(newIsOpen);\n }\n if (onOpenChange) {\n onOpenChange(newIsOpen);\n }\n };\n\n // Handle hover events if trigger is hover\n useEffect(() => {\n if (trigger !== 'hover' || !triggerRef.current || !popoverRef.current) return;\n\n const handleTriggerMouseEnter = () => {\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n\n if (delay > 0) {\n timeoutRef.current = window.setTimeout(() => {\n setIsOpen(true);\n }, delay);\n } else {\n setIsOpen(true);\n }\n };\n\n const handleTriggerMouseLeave = () => {\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n\n timeoutRef.current = window.setTimeout(() => {\n if (!popoverRef.current?.matches(':hover')) {\n setIsOpen(false);\n }\n }, 100);\n };\n\n const handlePopoverMouseEnter = () => {\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n };\n\n const handlePopoverMouseLeave = () => {\n setIsOpen(false);\n };\n\n // Add hover event listeners\n triggerRef.current.addEventListener('mouseenter', handleTriggerMouseEnter);\n triggerRef.current.addEventListener('mouseleave', handleTriggerMouseLeave);\n popoverRef.current.addEventListener('mouseenter', handlePopoverMouseEnter);\n popoverRef.current.addEventListener('mouseleave', handlePopoverMouseLeave);\n\n return () => {\n if (triggerRef.current) {\n triggerRef.current.removeEventListener('mouseenter', handleTriggerMouseEnter);\n triggerRef.current.removeEventListener('mouseleave', handleTriggerMouseLeave);\n }\n if (popoverRef.current) {\n popoverRef.current.removeEventListener('mouseenter', handlePopoverMouseEnter);\n popoverRef.current.removeEventListener('mouseleave', handlePopoverMouseLeave);\n }\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n }\n };\n }, [trigger, delay, isOpenState]);\n\n const updatePosition = (event?: Event) => {\n if (!triggerRef.current || !popoverRef.current) return;\n \n const triggerRect = triggerRef.current.getBoundingClientRect();\n const popoverRect = popoverRef.current.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n \n // Check if the trigger is near viewport edges\n const isNearViewportEdge = \n triggerRect.top < 50 || \n triggerRect.bottom > (viewportHeight - 50) ||\n triggerRect.left < 50 || \n triggerRect.right > (viewportWidth - 50);\n \n // If this is a scroll update and trigger isn't near edges, skip repositioning\n if (\n event?.type === 'scroll' && \n !isNearViewportEdge\n ) {\n return;\n }\n \n // Calculate space available in each direction\n const spaceTop = triggerRect.top;\n const spaceBottom = viewportHeight - triggerRect.bottom;\n const spaceLeft = triggerRect.left;\n const spaceRight = viewportWidth - triggerRect.right;\n \n // Determine best position based on available space\n let bestPosition: PopoverPosition = position === 'auto' ? 'top' : position as PopoverPosition;\n \n // If specified position is 'auto', find the position with most space\n if (position === 'auto') {\n const spaces = [\n { position: 'top', space: spaceTop },\n { position: 'right', space: spaceRight },\n { position: 'bottom', space: spaceBottom },\n { position: 'left', space: spaceLeft }\n ];\n \n // Sort by available space (descending)\n spaces.sort((a, b) => b.space - a.space);\n \n // Select position with most space\n bestPosition = spaces[0].position as PopoverPosition;\n } else {\n // Check if the preferred position has enough space\n const needsFlip = (\n (position === 'top' && spaceTop < popoverRect.height + offset && spaceBottom >= popoverRect.height + offset) ||\n (position === 'bottom' && spaceBottom < popoverRect.height + offset && spaceTop >= popoverRect.height + offset) ||\n (position === 'left' && spaceLeft < popoverRect.width + offset && spaceRight >= popoverRect.width + offset) ||\n (position === 'right' && spaceRight < popoverRect.width + offset && spaceLeft >= popoverRect.width + offset)\n );\n \n if (needsFlip) {\n // Flip to the opposite side\n const oppositePositions: Record<PopoverPosition | 'auto', PopoverPosition> = {\n 'top': 'bottom',\n 'bottom': 'top',\n 'left': 'right',\n 'right': 'left',\n 'auto': 'bottom'\n };\n bestPosition = oppositePositions[position as PopoverPosition | 'auto'];\n }\n }\n \n setCurrentPosition(bestPosition);\n \n // Calculate position based on the determined best position\n let top = 0;\n let left = 0;\n \n // Calculate viewport-relative position\n switch (bestPosition) {\n case 'top':\n top = triggerRect.top - popoverRect.height - offset;\n left = triggerRect.left + (triggerRect.width / 2) - (popoverRect.width / 2);\n break;\n case 'bottom':\n top = triggerRect.bottom + offset;\n left = triggerRect.left + (triggerRect.width / 2) - (popoverRect.width / 2);\n break;\n case 'left':\n top = triggerRect.top + (triggerRect.height / 2) - (popoverRect.height / 2);\n left = triggerRect.left - popoverRect.width - offset;\n break;\n case 'right':\n top = triggerRect.top + (triggerRect.height / 2) - (popoverRect.height / 2);\n left = triggerRect.right + offset;\n break;\n }\n \n // Constrain to viewport boundaries\n if (left < 0) {\n left = 5;\n } else if (left + popoverRect.width > viewportWidth) {\n left = viewportWidth - popoverRect.width - 5;\n }\n \n if (top < 0) {\n top = 5;\n } else if (top + popoverRect.height > viewportHeight) {\n top = viewportHeight - popoverRect.height - 5;\n }\n \n // Add scroll position to convert viewport coordinates to absolute position\n const absoluteTop = top + window.scrollY;\n const absoluteLeft = left + window.scrollX;\n \n // Apply position using absolute positioning to follow when scrolling\n popoverRef.current.style.position = 'absolute';\n popoverRef.current.style.top = `${absoluteTop}px`;\n popoverRef.current.style.left = `${absoluteLeft}px`;\n };\n\n // Position the popover\n useEffect(() => {\n if (!isOpenState || !triggerRef.current || !popoverRef.current) return;\n \n // Initial positioning\n updatePosition();\n \n // Update position on resize \n window.addEventListener('resize', updatePosition);\n \n // Update position on scroll, but throttled for performance\n let scrollTimeout: number | null = null;\n const handleScroll = (e: Event) => {\n if (scrollTimeout) {\n return;\n }\n \n scrollTimeout = window.setTimeout(() => {\n updatePosition(e);\n scrollTimeout = null;\n }, 100);\n };\n \n window.addEventListener('scroll', handleScroll, { passive: true });\n \n // Update position less frequently to handle content changes\n const intervalId = setInterval(() => {\n updatePosition();\n }, 500);\n \n return () => {\n window.removeEventListener('resize', updatePosition);\n window.removeEventListener('scroll', handleScroll);\n if (scrollTimeout) {\n window.clearTimeout(scrollTimeout);\n }\n clearInterval(intervalId);\n };\n }, [isOpenState, position, offset]);\n \n // Handle click outside to close popover\n useEffect(() => {\n if (!isOpenState || !closeOnClickOutside) return;\n \n const handleClickOutside = (event: MouseEvent) => {\n if (\n popoverRef.current && \n !popoverRef.current.contains(event.target as Node) &&\n triggerRef.current && \n !triggerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n \n document.addEventListener('mousedown', handleClickOutside);\n \n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpenState, closeOnClickOutside]);\n \n // Handle escape key to close popover\n useEffect(() => {\n if (!isOpenState || !closeOnEscape) return;\n \n const handleEscapeKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsOpen(false);\n }\n };\n \n document.addEventListener('keydown', handleEscapeKey);\n \n return () => {\n document.removeEventListener('keydown', handleEscapeKey);\n };\n }, [isOpenState, closeOnEscape]);\n\n // Clean up on unmount\n useEffect(() => {\n return () => {\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n return {\n isOpen: isOpenState,\n setIsOpen,\n triggerRef,\n popoverRef,\n arrowRef,\n popoverId,\n currentPosition,\n updatePosition,\n };\n};\n\nexport default usePopover; ","import React, { ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { POPOVER } from '../../lib/constants/components';\nimport { usePopover } from '../../lib/composables/usePopover';\nimport type { PopoverProps, PopoverTriggerProps } from '../../lib/types/components';\n\n// Context to share popover state between components\nconst PopoverContext = React.createContext<{\n isOpen: boolean;\n setIsOpen: (isOpen: boolean) => void;\n triggerRef: React.RefObject<HTMLElement>;\n popoverId: string;\n triggerType: 'click' | 'hover';\n}>({\n isOpen: false,\n setIsOpen: () => {},\n triggerRef: { current: null },\n popoverId: '',\n triggerType: 'click'\n});\n\n/**\n * Popover component for displaying floating content\n */\n const Popover: React.FC<PopoverProps> = ({\n content,\n position = 'top',\n trigger = 'click',\n className = '',\n delay = 0,\n offset = 12,\n defaultOpen = false,\n isOpen: controlledIsOpen,\n onOpenChange,\n closeOnClickOutside = true,\n closeOnEscape = true,\n id,\n children,\n}) => {\n const {\n isOpen,\n setIsOpen,\n triggerRef,\n popoverRef,\n arrowRef,\n popoverId,\n currentPosition,\n updatePosition\n } = usePopover({\n position,\n trigger,\n offset,\n delay,\n defaultOpen,\n isOpen: controlledIsOpen,\n onOpenChange,\n closeOnClickOutside,\n closeOnEscape,\n id\n });\n \n return (\n <PopoverContext.Provider\n value={{ isOpen, setIsOpen, triggerRef, popoverId, triggerType: trigger }}\n >\n {children}\n \n {typeof document !== 'undefined' && createPortal(\n <div\n ref={popoverRef}\n className={`c-popover c-popover--${currentPosition} ${isOpen ? POPOVER.CLASSES.IS_OPEN : ''} ${className}`}\n id={popoverId}\n role=\"tooltip\"\n aria-hidden={!isOpen}\n >\n <div className=\"c-popover__content\">\n <div className=\"c-popover__content-inner\">\n {content}\n </div>\n </div>\n <div ref={arrowRef} className=\"c-popover__arrow\"></div>\n </div>,\n document.body\n )}\n </PopoverContext.Provider>\n );\n};\n\n/**\n * PopoverTrigger component to wrap the element that triggers the popover\n */\nexport const PopoverTrigger: React.FC<PopoverTriggerProps> = ({\n children,\n trigger: triggerProp,\n}) => {\n const { isOpen, setIsOpen, triggerRef, popoverId, triggerType } = React.useContext(PopoverContext);\n \n // Determine which trigger type to use - prop from PopoverTrigger or from context\n const effectiveTrigger = triggerProp || triggerType;\n \n // Handle trigger events\n const handleClick = () => {\n setIsOpen(!isOpen);\n };\n \n const handleMouseEnter = () => {\n setIsOpen(true);\n };\n \n const handleMouseLeave = () => {\n setIsOpen(false);\n };\n \n // Clone the children element with additional props\n const child = React.Children.only(children) as React.ReactElement;\n \n const triggerProps: any = {\n ref: triggerRef,\n 'aria-describedby': popoverId,\n 'aria-expanded': isOpen,\n };\n \n if (effectiveTrigger === 'click') {\n triggerProps.onClick = handleClick;\n } else if (effectiveTrigger === 'hover') {\n triggerProps.onMouseEnter = handleMouseEnter;\n triggerProps.onMouseLeave = handleMouseLeave;\n }\n \n return React.cloneElement(child, triggerProps);\n}; \n\nexport type { PopoverProps, PopoverTriggerProps };\n\n// Set display name for debugging\nPopover.displayName = 'Popover';\n\n// Default export (primary)\nexport default Popover;\n\n// Named export for compatibility\nexport { Popover };","import { useState, useCallback } from 'react';\nimport type { RatingProps } from '../types/components';\n\n/**\n * Props for the useRating hook\n */\nexport type UseRatingProps = Pick<RatingProps, 'value' | 'maxValue' | 'allowHalf' | 'readOnly' | 'onChange'>;\n\nexport interface UseRatingReturn {\n /**\n * Current rating value (controlled or uncontrolled)\n */\n currentValue: number;\n \n /**\n * Value being hovered over\n */\n hoverValue: number | null;\n \n /**\n * Currently focused star index\n */\n focusedIndex: number | null;\n \n /**\n * Handle mouse enter on a star\n */\n handleMouseEnter: (starValue: number) => void;\n \n /**\n * Handle mouse leave from rating component\n */\n handleMouseLeave: () => void;\n \n /**\n * Handle click on a star\n */\n handleClick: (newValue: number) => void;\n \n /**\n * Handle keyboard navigation\n */\n handleKeyDown: (e: React.KeyboardEvent, index: number) => void;\n \n /**\n * Set focus on a specific star\n */\n setFocused: (index: number | null) => void;\n \n /**\n * Set hover value directly\n */\n setHoverValue: (value: number | null) => void;\n \n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n}\n\n/**\n * Hook for managing rating component state and interactions\n */\nexport const useRating = ({\n value = 0,\n maxValue = 5,\n allowHalf = false,\n readOnly = false,\n onChange\n}: UseRatingProps): UseRatingReturn => {\n // Determine if component is in controlled mode\n const isControlled = typeof onChange !== 'undefined';\n \n // Internal state for uncontrolled mode\n const [internalValue, setInternalValue] = useState<number>(value);\n const [hoverValue, setHoverValue] = useState<number | null>(null);\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n \n // Use controlled or uncontrolled value\n const currentValue = isControlled ? value : internalValue;\n \n // Handle mouse enter on star\n const handleMouseEnter = useCallback((starValue: number) => {\n if (readOnly) return;\n setHoverValue(starValue);\n }, [readOnly]);\n \n // Handle mouse leave from rating component\n const handleMouseLeave = useCallback(() => {\n if (readOnly) return;\n setHoverValue(null);\n }, [readOnly]);\n \n // Handle click on star\n const handleClick = useCallback((newValue: number) => {\n if (readOnly) return;\n \n if (!isControlled) {\n setInternalValue(newValue);\n }\n \n onChange?.(newValue);\n }, [readOnly, onChange, isControlled]);\n \n // Handle keyboard navigation\n const handleKeyDown = useCallback((e: React.KeyboardEvent, index: number) => {\n if (readOnly) return;\n \n const step = allowHalf ? 0.5 : 1;\n let newValue = currentValue;\n \n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n newValue = Math.min(maxValue, currentValue + step);\n e.preventDefault();\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n newValue = Math.max(0, currentValue - step);\n e.preventDefault();\n break;\n case 'Home':\n newValue = 0;\n e.preventDefault();\n break;\n case 'End':\n newValue = maxValue;\n e.preventDefault();\n break;\n case ' ':\n case 'Enter':\n newValue = index;\n e.preventDefault();\n break;\n default:\n return;\n }\n \n if (newValue !== currentValue) {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n }\n }, [currentValue, maxValue, allowHalf, readOnly, onChange, isControlled]);\n \n return {\n currentValue,\n hoverValue,\n focusedIndex,\n handleMouseEnter,\n handleMouseLeave,\n handleClick,\n handleKeyDown,\n setFocused: setFocusedIndex,\n setHoverValue,\n isControlled\n };\n};\n\nexport default useRating;\n","import React from 'react';\n\n/**\n * Utility to merge multiple React refs into one\n */\nexport function setRef<T>(\n ref: React.MutableRefObject<T | null> | ((instance: T | null) => void) | null,\n value: T | null\n): void {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n // This is safe because we're checking that ref exists first\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (ref as any).current = value;\n }\n}\n\n/**\n * Combines two React refs into a single ref function\n * This is used when you need to use and forward a ref at the same time\n */\nexport default function useForkRef<T>(\n refA: React.Ref<T> | null,\n refB: React.Ref<T> | null\n): React.RefCallback<T> | null {\n return React.useMemo(() => {\n if (refA == null && refB == null) {\n return null;\n }\n \n return (refValue: T | null) => {\n setRef(refA, refValue);\n setRef(refB, refValue);\n };\n }, [refA, refB]);\n}\n","import React, { useRef, useEffect, useCallback, forwardRef } from 'react';\nimport { THEME_COLORS, SIZES, RATING } from '../../lib/constants/components';\nimport { useRating } from '../../lib/composables/useRating';\nimport type { RatingProps } from '../../lib/types/components';\nimport useForkRef from '../../lib/utils/useForkRef';\n\n/**\n * Rating component for displaying and collecting star ratings\n * \n * @example\n * // Basic usage\n * <Rating value={3} onChange={handleRatingChange} />\n * \n * @example\n * // Read-only with custom color\n * <Rating value={4.5} readOnly color=\"warning\" />\n * \n * @example\n * // With half-star support\n * <Rating value={3.5} allowHalf maxValue={5} />\n */\nconst Rating = forwardRef<HTMLDivElement, RatingProps>(({\n value: valueProp = 0,\n defaultValue,\n maxValue = 5,\n allowHalf = false,\n readOnly = false,\n size = 'md',\n color,\n onChange,\n className = '',\n label,\n id,\n useVanillaJS = false,\n ...restProps\n}, ref) => {\n const internalRef = useRef<HTMLDivElement>(null);\n const ratingInstance = useRef<any>(null);\n \n // Use the rating hook for React-based implementation\n const {\n currentValue,\n hoverValue,\n focusedIndex,\n setHoverValue,\n setFocused,\n handleKeyDown\n } = useRating({\n value: valueProp !== undefined ? valueProp : defaultValue,\n maxValue,\n allowHalf,\n readOnly,\n onChange\n });\n \n // Handle mouse enter on star with half-star support\n const handleMouseEnter = useCallback((e: React.MouseEvent, starValue: number) => {\n if (readOnly) return;\n \n if (allowHalf) {\n // Get the star element's bounding rectangle\n const starRect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n // Calculate the x position within the star\n const starCenterX = starRect.left + starRect.width / 2;\n // If mouse is on the left half of the star, use half value\n const isHalfStar = e.clientX < starCenterX;\n const adjustedValue = isHalfStar ? starValue - 0.5 : starValue;\n setHoverValue(Math.max(0.5, adjustedValue)); // Ensure minimum of 0.5\n } else {\n setHoverValue(starValue);\n }\n }, [readOnly, allowHalf, setHoverValue]);\n \n // Handle mouse move on star for half-star precision\n const handleMouseMove = useCallback((e: React.MouseEvent, starValue: number) => {\n if (readOnly || !allowHalf) return;\n \n // Get the star element's bounding rectangle\n const starRect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n // Calculate the x position within the star\n const starCenterX = starRect.left + starRect.width / 2;\n // If mouse is on the left half of the star, use half value\n const isHalfStar = e.clientX < starCenterX;\n const adjustedValue = isHalfStar ? starValue - 0.5 : starValue;\n setHoverValue(Math.max(0.5, adjustedValue)); // Ensure minimum of 0.5\n }, [readOnly, allowHalf, setHoverValue]);\n \n // Handle mouse leave from rating component\n const handleMouseLeave = useCallback(() => {\n if (readOnly) return;\n setHoverValue(null);\n }, [readOnly, setHoverValue]);\n \n // Handle click on star with half-star support\n const handleClick = useCallback((e: React.MouseEvent, starValue: number) => {\n if (readOnly) return;\n \n let newValue = starValue;\n \n if (allowHalf) {\n // Get the star element's bounding rectangle\n const starRect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n // Calculate the x position within the star\n const starCenterX = starRect.left + starRect.width / 2;\n // If click is on the left half of the star, use half value\n const isHalfStar = e.clientX < starCenterX;\n newValue = isHalfStar ? starValue - 0.5 : starValue;\n newValue = Math.max(0.5, newValue); // Ensure minimum of 0.5\n }\n \n onChange?.(newValue);\n }, [readOnly, onChange, allowHalf]);\n \n // Use vanilla JS implementation if specified\n useEffect(() => {\n if (!useVanillaJS || typeof window === 'undefined' || !internalRef.current) return;\n\n // Dynamically import the rating script to avoid server-side rendering issues\n import('./scripts/bundle').then(({ default: RatingClass }) => {\n if (internalRef.current) {\n ratingInstance.current = new RatingClass(internalRef.current, {\n value: valueProp !== undefined ? valueProp : defaultValue,\n maxValue,\n allowHalf,\n readOnly,\n size,\n color,\n onChange\n });\n }\n });\n \n // Cleanup on unmount\n return () => {\n if (ratingInstance.current) {\n ratingInstance.current.destroy();\n }\n };\n }, [useVanillaJS, valueProp, defaultValue, maxValue, allowHalf, readOnly, size, color, onChange]);\n \n // Update vanilla JS implementation when props change\n useEffect(() => {\n if (!useVanillaJS || !ratingInstance.current) return;\n \n ratingInstance.current.updateOptions({\n value: valueProp !== undefined ? valueProp : defaultValue,\n maxValue,\n allowHalf,\n readOnly,\n size,\n color\n });\n }, [useVanillaJS, valueProp, defaultValue, maxValue, allowHalf, readOnly, size, color]);\n \n // Determine CSS classes\n const ratingClasses = [\n 'c-rating',\n size === 'sm' ? RATING.CLASSES.SMALL : '',\n size === 'lg' ? RATING.CLASSES.LARGE : '',\n color ? `c-rating--${color}` : '',\n className\n ].filter(Boolean).join(' ');\n \n // If using vanilla JS, just render the container\n if (useVanillaJS) {\n return (\n <div \n className={ratingClasses}\n ref={useForkRef(internalRef, ref)}\n id={id}\n {...restProps}\n >\n {/* Stars will be generated by the vanilla JS implementation */}\n </div>\n );\n }\n \n // React-based implementation\n // Determine the effective value (either hovered or actual)\n const effectiveValue = hoverValue !== null ? hoverValue : currentValue;\n \n // Generate stars\n const renderStars = () => {\n const stars = [];\n const roundedValue = allowHalf ? Math.floor(effectiveValue * 2) / 2 : Math.round(effectiveValue);\n const componentId = id || `rating-${Math.random().toString(36).substring(2, 9)}`;\n \n for (let i = 1; i <= maxValue; i++) {\n // For half-star support\n const isFullStar = i <= Math.floor(roundedValue);\n const isHalfStar = allowHalf && (i - 0.5 === roundedValue);\n \n const starClass = [\n 'c-rating__star',\n isFullStar ? RATING.CLASSES.FULL : '',\n isHalfStar ? RATING.CLASSES.HALF : '',\n color ? `c-rating__star--${color}` : '',\n focusedIndex === i ? 'c-rating__star--focused' : ''\n ].filter(Boolean).join(' ');\n \n const starId = `${componentId}-star-${i}`;\n \n stars.push(\n <div \n key={i}\n id={starId}\n className={starClass}\n data-value={i}\n role={readOnly ? 'presentation' : 'button'}\n tabIndex={readOnly ? -1 : 0}\n aria-label={`${i} ${i === 1 ? 'star' : 'stars'}`}\n aria-checked={i <= roundedValue}\n aria-setsize={maxValue}\n aria-posinset={i}\n onClick={(e) => handleClick(e, i)}\n onMouseEnter={(e) => handleMouseEnter(e, i)}\n onMouseMove={(e) => handleMouseMove(e, i)}\n onFocus={() => setFocused(i)}\n onBlur={() => setFocused(null)}\n onKeyDown={(e) => handleKeyDown(e, i)}\n >\n <svg \n viewBox=\"0 0 24 24\" \n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n {/* Empty star (outline) */}\n <path \n className=\"c-rating__star-outline\"\n d=\"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\"\n strokeWidth=\"1\"\n />\n \n {/* Full star */}\n <path \n className=\"c-rating__star-full\"\n d=\"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\"\n />\n \n {/* Half star with proper clipping */}\n <path \n className=\"c-rating__star-half\"\n d=\"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\"\n clipPath={`url(#half-star-clip-${componentId}-${i})`}\n />\n \n {/* Clipping path for half star */}\n <defs>\n <clipPath id={`half-star-clip-${componentId}-${i}`}>\n <rect x=\"0\" y=\"0\" width=\"12\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n </div>\n );\n }\n \n return stars;\n };\n \n return (\n <div \n className={ratingClasses}\n ref={useForkRef(internalRef, ref)}\n id={id}\n data-readonly={readOnly ? 'true' : 'false'}\n onMouseLeave={handleMouseLeave}\n role={readOnly ? 'img' : 'radiogroup'}\n aria-label={label || `Rating: ${currentValue} out of ${maxValue} stars`}\n {...restProps}\n >\n {renderStars()}\n </div>\n );\n});\n\nRating.displayName = 'Rating';\n\nexport type { RatingProps };\n\n// Set display name for debugging\nRating.displayName = 'Rating';\n\n// Default export (primary)\nexport default Rating;\n\n// Named export for compatibility\nexport { Rating };\n","import React, { useState, useRef, useEffect } from 'react';\nimport { Rating } from '../Rating';\nimport { Button } from '../Button';\nimport type { ThemeColor } from '../../lib/types/components';\n\ninterface ProductReviewProps {\n /**\n * Product name\n */\n productName: string;\n \n /**\n * Product image URL\n */\n productImage?: string;\n \n /**\n * Initial rating value (0-5)\n */\n initialRating?: number;\n \n /**\n * Maximum possible rating value\n */\n maxRating?: number;\n \n /**\n * Whether to allow half-star ratings\n */\n allowHalf?: boolean;\n \n /**\n * Color theme for the rating stars\n */\n ratingColor?: ThemeColor;\n \n /**\n * Callback when review is submitted\n */\n onSubmit?: (rating: number, comment: string) => void;\n \n /**\n * Additional CSS class\n */\n className?: string;\n}\n\n/**\n * ProductReview component for collecting user ratings and feedback\n */\nconst ProductReview: React.FC<ProductReviewProps> = ({\n productName,\n productImage,\n initialRating = 0,\n maxRating = 5,\n allowHalf = true,\n ratingColor = 'warning' as ThemeColor,\n onSubmit,\n className = '',\n}) => {\n const [rating, setRating] = useState<number>(initialRating);\n const [comment, setComment] = useState<string>('');\n const [submitted, setSubmitted] = useState<boolean>(false);\n const reviewRef = useRef<HTMLDivElement>(null);\n const reviewInstance = useRef<any>(null);\n \n useEffect(() => {\n // Only run on client-side\n if (typeof window === 'undefined' || !reviewRef.current) return;\n\n // Dynamically import the product review script to avoid server-side rendering issues\n import('./scripts/bundle').then(({ default: ProductReviewClass }) => {\n if (reviewRef.current) {\n reviewInstance.current = new ProductReviewClass(reviewRef.current, {\n productName,\n productImage,\n initialRating,\n maxRating,\n allowHalf,\n ratingColor,\n onSubmit\n });\n }\n }).catch(err => {\n console.warn('Failed to load ProductReview script:', err);\n });\n \n // Cleanup on unmount\n return () => {\n if (reviewInstance.current) {\n reviewInstance.current.destroy();\n }\n };\n }, [productName, productImage, initialRating, maxRating, allowHalf, ratingColor, onSubmit]);\n \n const handleSubmit = (e: React.FormEvent): void => {\n e.preventDefault();\n \n if (onSubmit) {\n onSubmit(rating, comment);\n }\n \n setSubmitted(true);\n };\n \n const containerClasses = ['c-product-review', className].filter(Boolean).join(' ');\n \n if (submitted) {\n return (\n <div className={containerClasses} ref={reviewRef}>\n <div className=\"c-product-review__success\">\n <h3>Thank you for your review!</h3>\n <p>Your feedback helps us improve our products.</p>\n <Button \n variant=\"secondary\" \n label=\"Write another review\"\n onClick={() => {\n setSubmitted(false);\n setRating(0);\n setComment('');\n }}\n />\n </div>\n </div>\n );\n }\n \n return (\n <div className={containerClasses} ref={reviewRef}>\n <div className=\"c-product-review__header\">\n <h3 className=\"c-product-review__title\">Review {productName}</h3>\n {productImage && (\n <div className=\"c-product-review__image-wrapper\">\n <img \n src={productImage} \n alt={productName} \n className=\"c-product-review__image\" \n />\n </div>\n )}\n </div>\n \n <form className=\"c-product-review__form\" onSubmit={handleSubmit}>\n <div className=\"c-product-review__rating-container\">\n <label className=\"c-product-review__label\">Your Rating</label>\n <div className=\"c-rating-container\">\n <Rating \n value={rating} \n onChange={setRating} \n allowHalf={allowHalf}\n maxValue={maxRating}\n size=\"lg\"\n color={ratingColor}\n />\n <span className=\"c-rating__value\">\n {rating > 0 ? rating.toFixed(1) : 'Select a rating'}\n </span>\n </div>\n </div>\n \n <div className=\"c-product-review__comment-container\">\n <label htmlFor=\"review-comment\" className=\"c-product-review__label\">\n Your Review\n </label>\n <textarea\n id=\"review-comment\"\n className=\"c-product-review__textarea\"\n value={comment}\n onChange={(e) => setComment(e.target.value)}\n placeholder=\"Share your experience with this product...\"\n rows={5}\n />\n </div>\n \n <div className=\"c-product-review__actions\">\n <Button \n variant=\"primary\" \n label=\"Submit Review\"\n disabled={rating === 0}\n onClick={() => handleSubmit(new Event('click') as unknown as React.FormEvent)}\n />\n </div>\n </form>\n </div>\n );\n};\n\nexport type { ProductReviewProps };\n\n// Set display name for debugging\nProductReview.displayName = 'ProductReview';\n\n// Default export (primary)\nexport default ProductReview;\n\n// Named export for compatibility\nexport { ProductReview };","import React, { forwardRef } from 'react';\nimport { ProgressProps } from '../../lib/types/components';\nimport { useProgress } from '../../lib/composables/useProgress';\nimport { PROGRESS } from '../../lib/constants/components';\n\nconst Progress = forwardRef<HTMLDivElement, ProgressProps>((\n {\n value,\n variant = 'primary',\n size = 'md',\n className = '',\n disabled = false,\n ariaLabel = PROGRESS.DEFAULTS.ARIA_LABEL,\n }, \n ref\n) => {\n const { progressValue, progressStyle, progressClasses } = useProgress({\n value,\n variant,\n size,\n className\n });\n\n return (\n <div\n ref={ref}\n className={progressClasses}\n style={progressStyle}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={progressValue}\n aria-label={ariaLabel}\n aria-disabled={disabled}\n >\n <div className={PROGRESS.CLASSES.BAR}></div>\n </div>\n );\n});\n\nexport type { ProgressProps };\n\n// Set display name for debugging\nProgress.displayName = 'Progress';\n\n// Default export (primary)\nexport default Progress;\n\n// Named export for compatibility\nexport { Progress };\n","import { ThemeColor } from '../types/components';\n\ninterface UseProgressProps {\n /**\n * Progress value from 0 to 100\n */\n value: number;\n \n /**\n * Optional color variant\n */\n variant?: ThemeColor;\n \n /**\n * Optional size\n */\n size?: 'sm' | 'md' | 'lg';\n \n /**\n * Optional className for custom styling\n */\n className?: string;\n}\n\ninterface UseProgressReturn {\n /**\n * Computed progress value clamped between 0 and 100\n */\n progressValue: number;\n \n /**\n * CSS properties for the progress component\n */\n progressStyle: React.CSSProperties;\n \n /**\n * CSS classes for the progress component\n */\n progressClasses: string;\n}\n\n/**\n * Hook for managing Progress component state and behavior\n */\nexport const useProgress = ({\n value,\n variant = 'primary',\n size = 'md',\n className = '',\n}: UseProgressProps): UseProgressReturn => {\n // Clamp value between 0 and 100\n const progressValue = Math.min(Math.max(value, 0), 100);\n\n // Create CSS custom properties\n const progressStyle = {\n '--atomix-progress-percentage': `${progressValue}%`,\n } as React.CSSProperties;\n\n // Generate class names\n const baseClass = 'c-progress';\n const variantClass = variant ? `${baseClass}--${variant}` : '';\n const sizeClass = size ? `${baseClass}--${size}` : '';\n const customClass = className || '';\n \n const progressClasses = [\n baseClass,\n variantClass,\n sizeClass,\n customClass\n ].filter(Boolean).join(' ');\n\n return {\n progressValue,\n progressStyle,\n progressClasses,\n };\n};\n","import React, { useRef, useEffect, ReactNode } from 'react';\nimport { RIVER } from '../../lib/constants/components';\nimport { useRiver, RiverProps, RiverContentColumn } from '../../lib/composables/useRiver';\n\n/**\n * River component for displaying content with image sections\n */\nconst River: React.FC<RiverProps> = ({\n title,\n text,\n actions,\n imageSrc,\n imageAlt = 'Image',\n center = false,\n breakout = false,\n reverse = false,\n contentColumns,\n backgroundImageSrc,\n showOverlay = true,\n contentWidth,\n className = '',\n}) => {\n const riverRef = useRef<HTMLDivElement>(null);\n const riverInstance = useRef<any>(null);\n \n const { \n generateRiverClassNames,\n generateContentClass,\n generateVisualClass,\n hasBackgroundImage,\n hasForegroundImage,\n textContent\n } = useRiver({\n title,\n text,\n imageSrc,\n imageAlt,\n center,\n breakout,\n reverse,\n backgroundImageSrc,\n showOverlay,\n contentWidth\n });\n \n useEffect(() => {\n // Only run on client-side\n if (typeof window === 'undefined' || !riverRef.current) return;\n\n // Dynamically import the river script to avoid server-side rendering issues\n import('./scripts').then(({ default: RiverClass }) => {\n if (riverRef.current) {\n riverInstance.current = new RiverClass(riverRef.current, {\n center,\n breakout,\n reverse,\n backgroundImageSrc,\n showOverlay\n });\n }\n });\n \n // Cleanup on unmount\n return () => {\n if (riverInstance.current) {\n riverInstance.current.destroy();\n }\n };\n }, [center, breakout, reverse, backgroundImageSrc, showOverlay]);\n \n // Create custom style for river element with content width if provided\n const riverStyle: React.CSSProperties | undefined = contentWidth ? {\n [RIVER.ATTRIBUTES.CONTENT_WIDTH]: contentWidth\n } as React.CSSProperties : undefined;\n \n const renderBackground = () => {\n if (!hasBackgroundImage) return null;\n \n return (\n <div className={RIVER.SELECTORS.BG.replace('.', '')}>\n <img\n src={backgroundImageSrc}\n alt=\"Background\"\n className={RIVER.SELECTORS.BG_IMAGE.replace('.', '')}\n />\n {showOverlay && <div className={RIVER.SELECTORS.OVERLAY.replace('.', '')}></div>}\n </div>\n );\n };\n \n const renderContent = () => (\n <div className={generateContentClass()}>\n {title && (\n <h2 className={RIVER.SELECTORS.TITLE.replace('.', '')}>{title}</h2>\n )}\n {textContent.map((paragraph, index) => (\n <p key={index} className={RIVER.SELECTORS.TEXT.replace('.', '')}>{paragraph}</p>\n ))}\n {actions && (\n <div className={RIVER.SELECTORS.ACTIONS.replace('.', '')}>\n {actions}\n </div>\n )}\n </div>\n );\n\n const renderImage = () => {\n if (!hasForegroundImage) return null;\n \n return (\n <div className={generateVisualClass()}>\n <div className={RIVER.SELECTORS.IMAGE_WRAPPER.replace('.', '')}>\n <img \n src={imageSrc} \n alt={imageAlt} \n className={RIVER.SELECTORS.IMAGE.replace('.', '')} \n />\n </div>\n </div>\n );\n };\n \n // Render with content columns (advanced layout)\n if (contentColumns && contentColumns.length > 0) {\n return (\n <div className={generateRiverClassNames(className)} ref={riverRef} style={riverStyle}>\n {renderBackground()}\n <div className={`${RIVER.SELECTORS.CONTAINER.replace('.', '')} o-container`}>\n <div className={RIVER.SELECTORS.ROW.replace('.', '')}>\n {!reverse && renderImage()}\n <div className={generateContentClass()}>\n {contentColumns.map((column, index) => (\n <div \n key={index}\n className={`${RIVER.SELECTORS.CONTENT_COL.replace('.', '')} ${RIVER.SELECTORS[`CONTENT_COL_${column.type.toUpperCase()}` as keyof typeof RIVER.SELECTORS].replace('.', '')}`}\n >\n {column.content}\n </div>\n ))}\n {actions && (\n <div className={RIVER.SELECTORS.ACTIONS.replace('.', '')}>\n {actions}\n </div>\n )}\n </div>\n {reverse && renderImage()}\n </div>\n </div>\n </div>\n );\n }\n \n // Render with standard layout\n return (\n <div className={generateRiverClassNames(className)} ref={riverRef} style={riverStyle}>\n {renderBackground()}\n <div className={`${RIVER.SELECTORS.CONTAINER.replace('.', '')} o-container`}>\n <div className={RIVER.SELECTORS.ROW.replace('.', '')}>\n {!reverse && renderImage()}\n {renderContent()}\n {reverse && renderImage()}\n </div>\n </div>\n </div>\n );\n};\n\nexport type { RiverProps };\n\n// Set display name for debugging\nRiver.displayName = 'River';\n\n// Default export (primary)\nexport default River;\n\n// Named export for compatibility\nexport { River };","import React, { useRef, useEffect, ReactNode } from 'react';\nimport { SECTION_INTRO } from '../../lib/constants/components';\n\ninterface SectionIntroProps {\n /**\n * The section title\n */\n title: ReactNode;\n \n /**\n * Optional subtitle or overline text\n */\n /**\n * Optional label text (equivalent to subtitle in the UI)\n */\n label?: ReactNode;\n \n /**\n * Optional description text\n */\n /**\n * Optional text content\n */\n text?: ReactNode;\n \n /**\n * Optional call to action elements\n */\n actions?: ReactNode;\n \n /**\n * Alignment of the content\n */\n alignment?: 'left' | 'center' | 'right';\n \n /**\n * Optional background image URL\n */\n backgroundImageSrc?: string;\n \n /**\n * Whether to show an overlay on the background\n */\n showOverlay?: boolean;\n \n /**\n * Optional foreground image URL\n */\n imageSrc?: string;\n \n /**\n * Alternative text for the image\n */\n imageAlt?: string;\n \n /**\n * Size variant\n */\n size?: 'sm' | 'md' | 'lg';\n \n /**\n * Whether to show a skeleton loading state\n */\n skeleton?: boolean;\n \n /**\n * Additional CSS class\n */\n className?: string;\n}\n\n/**\n * SectionIntro component for introducing content sections with titles, descriptions, and optional imagery\n */\nconst SectionIntro: React.FC<SectionIntroProps> = ({\n title,\n label,\n text,\n actions,\n alignment = 'left',\n backgroundImageSrc,\n showOverlay = false,\n imageSrc,\n imageAlt = 'Section image',\n size = 'md',\n skeleton = false,\n className = '',\n}) => {\n const sectionIntroRef = useRef<HTMLDivElement>(null);\n const sectionIntroInstance = useRef<any>(null);\n \n useEffect(() => {\n // Only run on client-side\n if (typeof window === 'undefined' || !sectionIntroRef.current) return;\n\n // Dynamically import the section intro script to avoid server-side rendering issues\n import('./scripts').then(({ default: SectionIntroClass }) => {\n if (sectionIntroRef.current) {\n sectionIntroInstance.current = new SectionIntroClass(sectionIntroRef.current, {\n alignment,\n backgroundImageSrc,\n showOverlay,\n size,\n skeleton\n });\n }\n });\n \n // Cleanup on unmount\n return () => {\n if (sectionIntroInstance.current) {\n sectionIntroInstance.current.destroy();\n }\n };\n }, [alignment, backgroundImageSrc, showOverlay, size, skeleton]);\n \n // Determine CSS classes\n const sectionIntroClasses = [\n 'c-sectionintro',\n alignment === 'center' ? SECTION_INTRO.CLASSES.CENTER : '',\n size === 'sm' ? SECTION_INTRO.CLASSES.SMALL : '',\n size === 'lg' ? SECTION_INTRO.CLASSES.LARGE : '',\n backgroundImageSrc ? 'c-sectionintro--has-bg' : '',\n className\n ].filter(Boolean).join(' ');\n \n // Render skeleton version\n if (skeleton) {\n return (\n <div className={sectionIntroClasses} ref={sectionIntroRef}>\n <div className=\"c-sectionintro__container o-container\">\n {label && (\n <div className=\"c-sectionintro__label\">\n <span className=\"c-skeleton u-w-25\"></span>\n </div>\n )}\n <div className=\"c-sectionintro__title\">\n <span className=\"c-skeleton\"></span>\n </div>\n {text && (\n <div className=\"c-sectionintro__text\">\n <span className=\"c-skeleton\"></span>\n <span className=\"c-skeleton\"></span>\n <span className=\"c-skeleton u-w-75\"></span>\n </div>\n )}\n {actions && (\n <div className=\"c-sectionintro__actions\">\n <span className=\"c-skeleton u-w-25\"></span>\n </div>\n )}\n {imageSrc && (\n <div className=\"c-sectionintro__image-wrapper\">\n <div className=\"c-sectionintro__image c-skeleton\"></div>\n </div>\n )}\n </div>\n </div>\n );\n }\n \n // Render background if provided\n const renderBackground = () => {\n if (!backgroundImageSrc) return null;\n \n return (\n <div className=\"c-sectionintro__bg\">\n <img\n src={backgroundImageSrc}\n alt=\"Background\"\n className=\"c-sectionintro__bg-image\"\n />\n {showOverlay && <div className=\"c-sectionintro__overlay\"></div>}\n </div>\n );\n };\n \n // Render normal version\n return (\n <div className={sectionIntroClasses} ref={sectionIntroRef}>\n {renderBackground()}\n <div className=\"c-sectionintro__container o-container\">\n {label && <div className=\"c-sectionintro__label\">{label}</div>}\n <h2 className=\"c-sectionintro__title\">{title}</h2>\n {text && <div className=\"c-sectionintro__text\">{text}</div>}\n {actions && <div className=\"c-sectionintro__actions\">{actions}</div>}\n {imageSrc && (\n <div className=\"c-sectionintro__image-wrapper\">\n <img\n src={imageSrc}\n alt={imageAlt}\n className=\"c-sectionintro__image\"\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport type { SectionIntroProps };\n\n// Set display name for debugging\nSectionIntro.displayName = 'SectionIntro';\n\n// Default export (primary)\nexport default SectionIntro;\n\n// Named export for compatibility\nexport { SectionIntro };\n","import React, { useRef, useEffect, useState, ReactNode } from 'react';\nimport { STEPS } from '../../lib/constants/components';\n\ninterface StepItem {\n /**\n * The number for the step\n */\n number: number | string | ReactNode;\n \n /**\n * The text label for the step\n */\n text: string;\n \n /**\n * Optional custom content for the step\n */\n content?: React.ReactNode;\n}\n\ninterface StepsProps {\n /**\n * Array of step items\n */\n items: StepItem[];\n \n /**\n * Current active step index (0-based)\n */\n activeIndex?: number;\n \n /**\n * Whether to display steps vertically\n */\n vertical?: boolean;\n \n /**\n * Called when active step changes\n */\n onStepChange?: (index: number) => void;\n \n /**\n * Additional CSS class\n */\n className?: string;\n}\n\n/**\n * Steps component for displaying a sequence of steps\n */\n const Steps: React.FC<StepsProps> = ({\n items,\n activeIndex = 0,\n vertical = false,\n onStepChange,\n className = '',\n}) => {\n const [currentStep, setCurrentStep] = useState(activeIndex);\n const stepsRef = useRef<HTMLDivElement>(null);\n const stepsInstance = useRef<any>(null);\n \n useEffect(() => {\n // Only run on client-side\n if (typeof window === 'undefined' || !stepsRef.current) return;\n\n // Dynamically import the steps script to avoid server-side rendering issues\n import('./scripts').then(({ default: StepsClass }) => {\n if (stepsRef.current) {\n stepsInstance.current = new StepsClass(stepsRef.current, {\n activeIndex: currentStep,\n vertical\n });\n }\n });\n \n // Cleanup on unmount\n return () => {\n if (stepsInstance.current) {\n stepsInstance.current.destroy();\n }\n };\n }, []);\n\n // Update steps when activeIndex prop changes\n useEffect(() => {\n if (currentStep !== activeIndex) {\n setCurrentStep(activeIndex);\n \n if (stepsInstance.current) {\n stepsInstance.current.setActive(activeIndex);\n }\n }\n }, [activeIndex]);\n \n // Method to go to next step\n const goToNextStep = () => {\n const nextIndex = currentStep + 1;\n if (nextIndex < items.length) {\n setCurrentStep(nextIndex);\n \n if (stepsInstance.current) {\n stepsInstance.current.next();\n }\n \n if (onStepChange) {\n onStepChange(nextIndex);\n }\n }\n };\n \n // Method to go to previous step\n const goToPreviousStep = () => {\n const prevIndex = currentStep - 1;\n if (prevIndex >= 0) {\n setCurrentStep(prevIndex);\n \n if (stepsInstance.current) {\n stepsInstance.current.previous();\n }\n \n if (onStepChange) {\n onStepChange(prevIndex);\n }\n }\n };\n \n return (\n <div \n className={`c-steps ${vertical ? STEPS.CLASSES.VERTICAL : ''} ${className}`}\n ref={stepsRef}\n role=\"navigation\"\n aria-label=\"Steps\"\n >\n {items.map((item, index) => (\n <div \n key={`step-${index}`}\n className={`c-steps__item ${index <= currentStep ? STEPS.CLASSES.ACTIVE : ''} ${index < currentStep ? STEPS.CLASSES.COMPLETED : ''}`}\n aria-current={index === currentStep ? 'step' : undefined}\n >\n <div className=\"c-steps__line\"></div>\n <div className=\"c-steps__content\">\n <div className=\"c-steps__number\">{item.number}</div>\n <div className=\"c-steps__text\">{item.text}</div>\n {item.content && <div className=\"c-steps__custom-content\">{item.content}</div>}\n </div>\n </div>\n ))}\n </div>\n );\n};\n\nexport type { StepsProps, StepItem };\n\n// Set display name for debugging\nSteps.displayName = 'Steps';\n\n// Default export (primary)\nexport default Steps;\n\n// Named export for compatibility\nexport { Steps };","import React, { useRef, useEffect, useState, ReactNode } from 'react';\nimport { TAB } from '../../lib/constants/components';\n\ninterface TabItemProps {\n /**\n * Label for the tab\n */\n label: string;\n \n /**\n * Content of the tab panel\n */\n content: ReactNode;\n \n /**\n * Whether the tab is initially active\n */\n isActive?: boolean;\n \n /**\n * Additional CSS class for the tab\n */\n className?: string;\n}\n\ninterface TabProps {\n /**\n * Array of tab items\n */\n items: TabItemProps[];\n \n /**\n * Initial active tab index\n */\n activeIndex?: number;\n \n /**\n * Callback when tab changes\n */\n onTabChange?: (index: number) => void;\n \n /**\n * Additional CSS class for the tab component\n */\n className?: string;\n}\n\n/**\n * Tab component for switching between different content panels\n */\nconst Tab: React.FC<TabProps> = ({\n items,\n activeIndex = TAB.DEFAULTS.ACTIVE_INDEX,\n onTabChange,\n className = '',\n}) => {\n const [currentTab, setCurrentTab] = useState(activeIndex);\n const tabRef = useRef<HTMLDivElement>(null);\n const tabInstance = useRef<any>(null);\n \n // Handle tab instance initialization and cleanup\n useEffect(() => {\n // Only run on client-side\n if (typeof window === 'undefined' || !tabRef.current) return;\n\n // Dynamically import the tab script to avoid server-side rendering issues\n import('./scripts').then(({ default: TabClass }) => {\n if (tabRef.current) {\n tabInstance.current = new TabClass(tabRef.current);\n }\n });\n \n // Cleanup on unmount\n return () => {\n if (tabInstance.current) {\n tabInstance.current.destroy();\n }\n };\n }, []);\n \n // Handle tab change\n const handleTabClick = (index: number) => {\n setCurrentTab(index);\n if (onTabChange) {\n onTabChange(index);\n }\n };\n \n return (\n <div className={`c-tabs js-atomix-tab ${className}`} ref={tabRef}>\n <ul className=\"c-tabs__nav\">\n {items.map((item, index) => (\n <li className=\"c-tabs__nav-item\" key={`tab-nav-${index}`}>\n <button \n className={`c-tabs__nav-btn ${index === currentTab ? TAB.CLASSES.ACTIVE : ''}`}\n onClick={() => handleTabClick(index)}\n data-tabindex={index}\n role=\"tab\"\n aria-selected={index === currentTab}\n aria-controls={`tab-panel-${index}`}\n >\n {item.label}\n </button>\n </li>\n ))}\n </ul>\n <div className=\"c-tabs__panels\">\n {items.map((item, index) => (\n <div \n className={`c-tabs__panel ${index === currentTab ? TAB.CLASSES.ACTIVE : ''}`}\n key={`tab-panel-${index}`}\n data-tabindex={index}\n id={`tab-panel-${index}`}\n role=\"tabpanel\"\n aria-labelledby={`tab-nav-${index}`}\n style={{ \n height: index === currentTab ? 'auto' : '0px',\n opacity: index === currentTab ? 1 : 0,\n overflow: 'hidden',\n transition: 'height 0.3s ease, opacity 0.3s ease'\n }}\n >\n <div className=\"c-tabs__panel-body\">\n {item.content}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}; \n\nexport type { TabProps, TabItemProps };\n\n// Set display name for debugging\nTab.displayName = 'Tab';\n\n// Default export (primary)\nexport default Tab;\n\nexport { Tab };","import React, { useRef, useEffect, ReactNode } from 'react';\nimport { TESTIMONIAL } from '../../lib/constants/components';\n\ninterface TestimonialAuthor {\n /**\n * The author's name\n */\n name: string;\n \n /**\n * The author's role or title\n */\n role: string;\n \n /**\n * The URL to the author's avatar image\n */\n avatarSrc?: string;\n \n /**\n * Alternative text for the avatar image\n */\n avatarAlt?: string;\n}\n\ninterface TestimonialProps {\n /**\n * The testimonial quote text or content\n */\n quote: ReactNode;\n \n /**\n * Author information\n */\n author?: TestimonialAuthor;\n \n /**\n * Size variant\n */\n size?: 'sm' | 'lg' | '';\n \n /**\n * Whether to show a skeleton loading state\n */\n skeleton?: boolean;\n \n /**\n * Additional CSS class\n */\n className?: string;\n}\n\n/**\n * Testimonial component for displaying customer quotes and feedback\n */\nconst Testimonial: React.FC<TestimonialProps> = ({\n quote,\n author,\n size = '',\n skeleton = false,\n className = '',\n}) => {\n const testimonialRef = useRef<HTMLDivElement>(null);\n const testimonialInstance = useRef<any>(null);\n \n useEffect(() => {\n // Only run on client-side\n if (typeof window === 'undefined' || !testimonialRef.current) return;\n\n // Dynamically import the testimonial script to avoid server-side rendering issues\n import('./scripts').then(({ default: TestimonialClass }) => {\n if (testimonialRef.current) {\n testimonialInstance.current = new TestimonialClass(testimonialRef.current, {\n size,\n skeleton\n });\n }\n });\n \n // Cleanup on unmount\n return () => {\n if (testimonialInstance.current) {\n testimonialInstance.current.destroy();\n }\n };\n }, [size, skeleton]);\n \n // Determine CSS classes\n const testimonialClasses = [\n 'c-testimonial',\n size === 'sm' ? TESTIMONIAL.CLASSES.SMALL : '',\n size === 'lg' ? TESTIMONIAL.CLASSES.LARGE : '',\n className\n ].filter(Boolean).join(' ');\n \n // Render skeleton version\n if (skeleton) {\n return (\n <div className={testimonialClasses} ref={testimonialRef}>\n <blockquote className=\"c-testimonial__quote\">\n <span className=\"c-skeleton\"></span>\n <span className=\"c-skeleton\"></span>\n <span className=\"c-skeleton u-w-75\"></span>\n <span className=\"c-skeleton u-w-25\"></span>\n </blockquote>\n <div className=\"c-testimonial__author\">\n <span className=\"c-testimonial__author-avatar c-avatar c-avatar--xxl c-avatar--circle c-skeleton\"></span>\n <div className=\"c-testimonial__info u-w-75\">\n <p className=\"c-testimonial__author-name\">\n <span className=\"c-skeleton u-w-25\"></span>\n </p>\n <p className=\"c-testimonial__author-role\">\n <span className=\"c-skeleton u-w-25\"></span>\n </p>\n </div>\n </div>\n </div>\n );\n }\n \n // Render normal version\n return (\n <div className={testimonialClasses} ref={testimonialRef}>\n <blockquote className=\"c-testimonial__quote\">\n {quote}\n </blockquote>\n {author && (\n <div className=\"c-testimonial__author\">\n {author.avatarSrc && (\n <img\n src={author.avatarSrc}\n alt={author.avatarAlt || ''}\n className=\"c-testimonial__author-avatar c-avatar c-avatar--xxl c-avatar--circle\"\n />\n )}\n <div className=\"c-testimonial__info\">\n <p className=\"c-testimonial__author-name\">{author.name}</p>\n <p className=\"c-testimonial__author-role\">{author.role}</p>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport type { TestimonialProps, TestimonialAuthor };\n\n// Set display name for debugging\nTestimonial.displayName = 'Testimonial';\n\n// Default export (primary)\nexport default Testimonial;\n\n// Named export for compatibility\nexport { Testimonial };","import React, { useState, useEffect } from 'react';\nimport { TodoProps } from '../../lib/types/components';\nimport { useTodo } from '../../lib/composables/useTodo';\nimport { Icon } from '../Icon';\nimport { TODO } from '../../lib/constants/components';\nimport { v4 as uuidv4 } from 'uuid';\n\nconst Todo: React.FC<TodoProps> = ({\n items = [],\n title = 'Todo List',\n onAddTodo,\n onToggleTodo,\n onDeleteTodo,\n size = 'md',\n placeholder = 'Add a new todo',\n showCompleted = true,\n className = '',\n disabled = false,\n}) => {\n const {\n inputText,\n setInputText,\n addTodo,\n generateTodoClasses,\n generateItemClasses,\n } = useTodo({ items, title, size, placeholder, showCompleted, disabled });\n\n // State to manage local items\n const [localItems, setLocalItems] = useState(items);\n \n // Update local items when props change\n useEffect(() => {\n setLocalItems(items);\n }, [items]);\n \n // Handle item toggle\n const handleToggle = (id: string) => {\n if (disabled) return;\n \n setLocalItems(prevItems => \n prevItems.map(item => \n item.id === id \n ? { ...item, completed: !item.completed } \n : item\n )\n );\n \n if (onToggleTodo) {\n onToggleTodo(id);\n }\n };\n \n // Handle item delete\n const handleDelete = (id: string) => {\n if (disabled) return;\n \n setLocalItems(prevItems => prevItems.filter(item => item.id !== id));\n \n if (onDeleteTodo) {\n onDeleteTodo(id);\n }\n };\n \n // Handle form submission\n const handleFormSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (disabled || !inputText.trim()) return;\n \n // Create a new todo item with a unique ID\n const newTodo = {\n id: uuidv4(),\n text: inputText.trim(),\n completed: false\n };\n \n // Update local state\n setLocalItems(prevItems => [...prevItems, newTodo]);\n \n // Call parent callback if provided\n if (onAddTodo) {\n onAddTodo(inputText);\n }\n \n // Clear the input field\n setInputText('');\n };\n \n // Filter items based on showCompleted prop\n const filteredItems = showCompleted \n ? localItems \n : localItems.filter(item => !item.completed);\n \n // Generate component classes\n const todoClass = generateTodoClasses({ size, className, disabled });\n \n return (\n <div className={todoClass}>\n {title && <h2 className=\"c-todo__title\">{title}</h2>}\n \n <form \n className=\"c-todo__form\"\n onSubmit={handleFormSubmit}\n >\n <div className=\"c-todo__form-group\">\n <input\n type=\"text\"\n className=\"c-todo__input c-input\"\n placeholder={placeholder}\n value={inputText}\n onChange={(e) => setInputText(e.target.value)}\n disabled={disabled}\n aria-label=\"Add a new todo\"\n />\n <button\n type=\"submit\"\n className=\"c-todo__add-btn c-btn c-btn--primary\"\n disabled={disabled || !inputText.trim()}\n aria-label=\"Add todo\"\n >\n <Icon name=\"Plus\" size=\"sm\" />\n </button>\n </div>\n </form>\n \n <ul className=\"c-todo__list\">\n {filteredItems.length === 0 ? (\n <li className=\"c-todo__empty\">No items to display</li>\n ) : (\n filteredItems.map(item => (\n <li \n key={item.id} \n className={generateItemClasses(item)}\n >\n <div className=\"c-todo__item-content\">\n <label className=\"c-todo__checkbox-label\">\n <input\n type=\"checkbox\"\n className=\"c-todo__checkbox c-checkbox\"\n checked={item.completed}\n onChange={() => handleToggle(item.id)}\n disabled={disabled}\n aria-label={`Mark \"${item.text}\" as ${item.completed ? 'incomplete' : 'complete'}`}\n />\n <span className=\"c-todo__item-text\">{item.text}</span>\n </label>\n \n <button\n type=\"button\"\n className=\"c-todo__delete-btn c-btn c-btn--error c-btn--sm\"\n onClick={() => handleDelete(item.id)}\n disabled={disabled}\n aria-label={`Delete \"${item.text}\"`}\n >\n <Icon name=\"Trash\" size=\"sm\" />\n </button>\n </div>\n </li>\n ))\n )}\n </ul>\n </div>\n );\n};\n\nexport type { TodoProps };\n\n// Set display name for debugging\nTodo.displayName = 'Todo';\n\n// Default export (primary)\nexport default Todo;\n\n// Named export for compatibility\nexport { Todo };","import React, { useRef, useEffect, useState } from 'react';\nimport { TOGGLE } from '../../lib/constants/components';\n\ninterface ToggleProps {\n /**\n * Whether the toggle is initially on\n */\n initialOn?: boolean;\n \n /**\n * Callback when the toggle is turned on\n */\n onToggleOn?: () => void;\n \n /**\n * Callback when the toggle is turned off\n */\n onToggleOff?: () => void;\n \n /**\n * Whether the toggle is disabled\n */\n disabled?: boolean;\n \n /**\n * Additional CSS class for the toggle\n */\n className?: string;\n}\n\n/**\n * Toggle component for switching between two states\n */\nconst Toggle: React.FC<ToggleProps> = ({\n initialOn = false,\n onToggleOn,\n onToggleOff,\n disabled = false,\n className = '',\n}) => {\n const [isOn, setIsOn] = useState(initialOn);\n const toggleRef = useRef<HTMLDivElement>(null);\n const toggleInstance = useRef<any>(null);\n \n useEffect(() => {\n // Only run on client-side\n if (typeof window === 'undefined' || !toggleRef.current) return;\n\n // Initialize toggle instance\n import('./scripts').then(({ default: ToggleClass }) => {\n if (toggleRef.current) {\n toggleInstance.current = new ToggleClass(toggleRef.current);\n }\n });\n \n // Add event listeners for custom events\n const handleToggleOn = () => {\n setIsOn(true);\n if (onToggleOn) onToggleOn();\n };\n \n const handleToggleOff = () => {\n setIsOn(false);\n if (onToggleOff) onToggleOff();\n };\n \n const element = toggleRef.current;\n element?.addEventListener('toggle:on', handleToggleOn);\n element?.addEventListener('toggle:off', handleToggleOff);\n \n // Set initial state if needed\n if (initialOn && toggleInstance.current) {\n toggleInstance.current.turnOn();\n }\n \n // Cleanup on unmount\n return () => {\n element?.removeEventListener('toggle:on', handleToggleOn);\n element?.removeEventListener('toggle:off', handleToggleOff);\n \n if (toggleInstance.current) {\n toggleInstance.current.destroy();\n }\n };\n }, [initialOn, onToggleOn, onToggleOff]);\n \n // Update the toggle when the isOn prop changes\n useEffect(() => {\n if (!toggleInstance.current) return;\n \n if (isOn) {\n toggleInstance.current.turnOn();\n } else {\n toggleInstance.current.turnOff();\n }\n }, [isOn]);\n \n return (\n <div \n className={`c-toggle ${isOn ? TOGGLE.CLASSES.IS_ON : ''} ${disabled ? 'is-disabled' : ''} ${className}`} \n ref={toggleRef}\n role=\"switch\"\n aria-checked={isOn}\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n >\n <div className=\"c-toggle__switch\"></div>\n </div>\n );\n}; \n\nexport type { ToggleProps };\n\n// Set display name for debugging\nToggle.displayName = 'Toggle';\n\n// Default export (primary)\nexport default Toggle;\n\nexport { Toggle };","import { TOOLTIP } from '../../../lib/constants/components';\n\n/**\n * Default options for the tooltip component\n */\nconst DEFAULT_OPTIONS = {\n trigger: TOOLTIP.DEFAULTS.TRIGGER,\n position: TOOLTIP.DEFAULTS.POSITION,\n offset: TOOLTIP.DEFAULTS.OFFSET,\n delay: TOOLTIP.DEFAULTS.DELAY,\n activeClass: TOOLTIP.CLASSES.IS_ACTIVE,\n contentIdAttr: TOOLTIP.ATTRIBUTES.CONTENT_ID,\n positionAttr: TOOLTIP.ATTRIBUTES.POSITION,\n triggerAttr: TOOLTIP.ATTRIBUTES.TRIGGER\n};\n\n/**\n * Interface for Tooltip options\n */\nexport interface TooltipOptions {\n trigger: string;\n position: string;\n offset: number;\n delay: number;\n activeClass: string;\n contentIdAttr: string;\n positionAttr: string;\n triggerAttr: string;\n [key: string]: any;\n}\n\n/**\n * Interface for Tooltip instance\n */\nexport interface TooltipInstance {\n show: () => void;\n hide: () => void;\n destroy: () => void;\n isInitialized: () => boolean;\n isVisible: () => boolean;\n getElement: () => HTMLElement | null;\n getTriggerElement: () => HTMLElement | null;\n getPosition: () => string;\n setPosition: (position: string) => void;\n}\n\n/**\n * Class representing a Tooltip component\n */\nexport class Tooltip implements TooltipInstance {\n private selector: string | Element;\n private $element: HTMLElement | null;\n private $trigger: HTMLElement | null;\n private $content: HTMLElement | null;\n private options: TooltipOptions;\n private timeout: number | null;\n private hideTimeout: number | null;\n private isActive: boolean = false;\n\n /**\n * Creates an instance of Tooltip\n * @param selector - CSS selector string or DOM Element\n * @param options - Custom options to override defaults\n */\n constructor(selector: string | Element, options = {}) {\n this.selector = selector || TOOLTIP.SELECTORS.TOOLTIP;\n this.$element = \n typeof selector === 'string' \n ? document.querySelector<HTMLElement>(selector)\n : selector as HTMLElement;\n this.options = { ...DEFAULT_OPTIONS, ...options } as TooltipOptions;\n this.timeout = null;\n this.hideTimeout = null;\n this.$trigger = null;\n this.$content = null;\n this._initialize();\n }\n\n /**\n * Initialize the tooltip component\n */\n private _initialize(): void {\n if (!this.$element) return;\n\n this._initializeElements();\n this._setPosition();\n this._bindEvents();\n }\n\n /**\n * Initialize DOM elements\n */\n private _initializeElements(): void {\n if (!this.$element) return;\n \n // Find the parent container that wraps both trigger and tooltip\n const parentContainer = this.$element.parentElement;\n if (!parentContainer) return;\n \n // Find the trigger as a sibling or within the same parent container\n this.$trigger = parentContainer.querySelector<HTMLElement>(TOOLTIP.SELECTORS.TRIGGER);\n this.$content = this.$element.querySelector<HTMLElement>(TOOLTIP.SELECTORS.CONTENT);\n \n // Check for custom position from data attribute\n const customPosition = this.$element.getAttribute(this.options.positionAttr);\n if (customPosition) {\n this.options.position = customPosition;\n }\n \n // Check for custom trigger from data attribute\n const customTrigger = this.$element.getAttribute(this.options.triggerAttr);\n if (customTrigger) {\n this.options.trigger = customTrigger;\n }\n }\n\n /**\n * Set tooltip position\n */\n private _setPosition(): void {\n if (!this.$content || !this.$element) return;\n \n // Reset any existing position classes\n this.$element.classList.remove(\n TOOLTIP.CLASSES.TOP, \n TOOLTIP.CLASSES.BOTTOM, \n TOOLTIP.CLASSES.LEFT, \n TOOLTIP.CLASSES.RIGHT, \n TOOLTIP.CLASSES.TOP_LEFT, \n TOOLTIP.CLASSES.TOP_RIGHT, \n TOOLTIP.CLASSES.BOTTOM_LEFT, \n TOOLTIP.CLASSES.BOTTOM_RIGHT\n );\n \n // Add the appropriate position class\n switch (this.options.position) {\n case 'top':\n this.$element.classList.add(TOOLTIP.CLASSES.TOP);\n break;\n case 'bottom':\n this.$element.classList.add(TOOLTIP.CLASSES.BOTTOM);\n break;\n case 'left':\n this.$element.classList.add(TOOLTIP.CLASSES.LEFT);\n break;\n case 'right':\n this.$element.classList.add(TOOLTIP.CLASSES.RIGHT);\n break;\n case 'top-left':\n this.$element.classList.add(TOOLTIP.CLASSES.TOP_LEFT);\n break;\n case 'top-right':\n this.$element.classList.add(TOOLTIP.CLASSES.TOP_RIGHT);\n break;\n case 'bottom-left':\n this.$element.classList.add(TOOLTIP.CLASSES.BOTTOM_LEFT);\n break;\n case 'bottom-right':\n this.$element.classList.add(TOOLTIP.CLASSES.BOTTOM_RIGHT);\n break;\n default:\n this.$element.classList.add(TOOLTIP.CLASSES.TOP);\n }\n \n // Calculate offset based on position\n const offset = this.options.offset;\n \n switch (this.options.position) {\n case 'top':\n case 'top-left':\n case 'top-right':\n this.$element.style.bottom = `${offset}px`;\n break;\n case 'bottom':\n case 'bottom-left':\n case 'bottom-right':\n this.$element.style.top = `${offset}px`;\n break;\n case 'left':\n this.$element.style.right = `${offset}px`;\n break;\n case 'right':\n this.$element.style.left = `${offset}px`;\n break;\n default:\n this.$element.style.bottom = `${offset}px`;\n }\n }\n\n /**\n * Bind event listeners\n */\n private _bindEvents(): void {\n if (!this.$trigger) return;\n \n if (this.options.trigger === 'hover') {\n this.$trigger.addEventListener('mouseenter', this._handleTriggerEnter.bind(this));\n this.$trigger.addEventListener('mouseleave', this._handleTriggerLeave.bind(this));\n } else if (this.options.trigger === 'click') {\n this.$trigger.addEventListener('click', this._handleTriggerClick.bind(this));\n }\n \n // Handle focus for accessibility\n this.$trigger.addEventListener('focus', this._handleTriggerEnter.bind(this));\n this.$trigger.addEventListener('blur', this._handleTriggerLeave.bind(this));\n }\n\n /**\n * Handle trigger mouseenter or focus event\n */\n private _handleTriggerEnter(): void {\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n \n if (this.timeout) return;\n \n this.timeout = window.setTimeout(() => {\n this.show();\n this.timeout = null;\n }, this.options.delay);\n }\n\n /**\n * Handle trigger mouseleave or blur event\n */\n private _handleTriggerLeave(): void {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n \n this.hideTimeout = window.setTimeout(() => {\n this.hide();\n this.hideTimeout = null;\n }, this.options.delay);\n }\n\n /**\n * Handle trigger click event\n */\n private _handleTriggerClick(): void {\n if (this.$element && this.$element.classList.contains(this.options.activeClass)) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n /**\n * Check if tooltip is initialized\n */\n public isInitialized(): boolean {\n return !!this.$element && !!this.$trigger;\n }\n\n /**\n * Check if tooltip is currently visible\n */\n public isVisible(): boolean {\n return this.isActive;\n }\n\n /**\n * Get tooltip element\n */\n public getElement(): HTMLElement | null {\n return this.$element;\n }\n\n /**\n * Get trigger element\n */\n public getTriggerElement(): HTMLElement | null {\n return this.$trigger;\n }\n\n /**\n * Get current position\n */\n public getPosition(): string {\n return this.options.position;\n }\n\n /**\n * Set tooltip position\n */\n public setPosition(position: string): void {\n if (this.options.position !== position) {\n this.options.position = position;\n this._setPosition();\n }\n }\n\n /**\n * Show the tooltip\n */\n public show(): void {\n if (!this.$element) return;\n \n // Dispatch custom event before showing\n const showEvent = new CustomEvent('tooltip:show', {\n bubbles: true,\n cancelable: true,\n detail: { tooltip: this }\n });\n \n this.$element.dispatchEvent(showEvent);\n \n // If event was canceled, don't show\n if (showEvent.defaultPrevented) return;\n \n this.$element.classList.add(this.options.activeClass);\n this.isActive = true;\n }\n\n /**\n * Hide the tooltip\n */\n public hide(): void {\n if (!this.$element) return;\n \n // Dispatch custom event before hiding\n const hideEvent = new CustomEvent('tooltip:hide', {\n bubbles: true,\n cancelable: true,\n detail: { tooltip: this }\n });\n \n this.$element.dispatchEvent(hideEvent);\n \n // If event was canceled, don't hide\n if (hideEvent.defaultPrevented) return;\n \n this.$element.classList.remove(this.options.activeClass);\n this.isActive = false;\n }\n\n /**\n * Destroy the tooltip\n */\n public destroy(): void {\n if (!this.$trigger) return;\n \n // Remove event listeners\n if (this.options.trigger === 'hover') {\n this.$trigger.removeEventListener('mouseenter', this._handleTriggerEnter.bind(this));\n this.$trigger.removeEventListener('mouseleave', this._handleTriggerLeave.bind(this));\n } else if (this.options.trigger === 'click') {\n this.$trigger.removeEventListener('click', this._handleTriggerClick.bind(this));\n }\n \n this.$trigger.removeEventListener('focus', this._handleTriggerEnter.bind(this));\n this.$trigger.removeEventListener('blur', this._handleTriggerLeave.bind(this));\n \n // Clear timeouts\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n \n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n \n // Hide tooltip\n if (this.$element) {\n this.$element.classList.remove(this.options.activeClass);\n }\n }\n\n /**\n * Initialize all tooltips in the document\n * @param selector - CSS selector for tooltip elements\n * @param options - Custom options\n */\n public static initializeAll(selector = TOOLTIP.SELECTORS.TOOLTIP, options = {}): Tooltip[] {\n const elements = document.querySelectorAll(selector);\n return Array.from(elements).map(element => new Tooltip(element, options));\n }\n}\n\n/**\n * Initialize all tooltips in the document\n * @param selector - CSS selector for tooltip elements\n * @param options - Custom options\n */\nexport function initializeTooltips(selector = TOOLTIP.SELECTORS.TOOLTIP, options = {}): TooltipInstance[] {\n return Tooltip.initializeAll(selector, options);\n} ","import React, { ReactNode, useRef, useEffect } from 'react';\nimport { TOOLTIP } from '../../lib/constants/components';\nimport { Tooltip as TooltipClass } from './scripts';\n\ninterface TooltipProps {\n /**\n * Content to be displayed in the tooltip\n */\n content: ReactNode;\n \n /**\n * The element that will trigger the tooltip\n */\n children: ReactNode;\n \n /**\n * The position of the tooltip relative to the trigger\n */\n position?: 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n \n /**\n * How the tooltip is triggered\n */\n trigger?: 'hover' | 'click';\n \n /**\n * Additional CSS class for the tooltip\n */\n className?: string;\n \n /**\n * Delay before showing the tooltip (in milliseconds)\n */\n delay?: number;\n \n /**\n * Offset from the trigger element (in pixels)\n */\n offset?: number;\n}\n\nconst Tooltip: React.FC<TooltipProps> = ({\n content,\n children,\n position = TOOLTIP.DEFAULTS.POSITION,\n trigger = TOOLTIP.DEFAULTS.TRIGGER,\n className = '',\n delay = TOOLTIP.DEFAULTS.DELAY,\n offset = TOOLTIP.DEFAULTS.OFFSET,\n}) => {\n const tooltipRef = useRef<HTMLDivElement>(null);\n const tooltipInstance = useRef<any>(null);\n \n useEffect(() => {\n if (tooltipRef.current) {\n // Initialize tooltip\n tooltipInstance.current = new TooltipClass(tooltipRef.current, {\n position,\n trigger,\n delay,\n offset,\n });\n }\n \n // Cleanup on unmount\n return () => {\n if (tooltipInstance.current) {\n tooltipInstance.current.destroy();\n }\n };\n }, [position, trigger, delay, offset]);\n \n return (\n <div className=\"u-position-relative u-d-inline-block\">\n <div className={`${TOOLTIP.SELECTORS.TRIGGER.substring(1)}${className ? ` ${className}` : ''}`}>\n {children}\n </div>\n <div \n className={`c-tooltip ${TOOLTIP.SELECTORS.TOOLTIP.substring(1)}`} \n ref={tooltipRef}\n data-tooltip-position={position}\n data-tooltip-trigger={trigger}\n >\n <div className={`c-tooltip__content ${TOOLTIP.SELECTORS.CONTENT.substring(1)}`}>\n <span className={TOOLTIP.SELECTORS.ARROW.substring(1)}></span>\n {content}\n </div>\n </div>\n </div>\n );\n}; \n\nexport type { TooltipProps };\n\n// Set display name for debugging\nTooltip.displayName = 'Tooltip';\n\n// Default export (primary)\nexport default Tooltip;\n\n// Named export for compatibility\nexport { Tooltip };","import React, { useRef, useEffect, useState } from 'react';\nimport { UPLOAD } from '../../lib/constants/components';\n\ninterface UploadProps {\n /**\n * Whether the upload component is disabled\n */\n disabled?: boolean;\n \n /**\n * Maximum file size in MB\n */\n maxSizeInMB?: number;\n \n /**\n * Accepted file types\n */\n acceptedFileTypes?: string[];\n \n /**\n * Whether multiple files can be selected\n */\n multiple?: boolean;\n \n /**\n * Text for the drag and drop section\n */\n title?: string;\n \n /**\n * Text describing supported file types\n */\n supportedFilesText?: string;\n \n /**\n * Text for the upload button\n */\n buttonText?: string;\n \n /**\n * Helper text displayed below the button\n */\n helperText?: string;\n \n /**\n * Icon component or class name\n */\n icon?: React.ReactNode;\n \n /**\n * Called when files are selected\n */\n onFileSelect?: (files: File[]) => void;\n \n /**\n * Called during file upload with progress\n */\n onFileUpload?: (file: File, progress: number) => void;\n \n /**\n * Called when file upload is complete\n */\n onFileUploadComplete?: (file: File) => void;\n \n /**\n * Called on file upload errors\n */\n onFileUploadError?: (file: File, error: string) => void;\n \n /**\n * Additional CSS class\n */\n className?: string;\n}\n\n/**\n * Upload status type\n */\ntype UploadStatus = 'idle' | 'loading' | 'success' | 'error';\n\n/**\n * Upload component for file uploads with drag and drop\n */\nconst Upload: React.FC<UploadProps> = ({\n disabled = false,\n maxSizeInMB = 5,\n acceptedFileTypes = ['application/pdf', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'image/jpeg', 'image/png'],\n multiple = false,\n title = 'Drag and Drop files here',\n supportedFilesText = 'Files supported: PDF, XSLS, JPEG, PNG, Scanner',\n buttonText = 'Choose File',\n helperText = `Maximum size: ${maxSizeInMB}MB`,\n icon = <i className=\"icon-lux-cloud-arrow-up-fill\"></i>,\n onFileSelect,\n onFileUpload,\n onFileUploadComplete,\n onFileUploadError,\n className = '',\n}) => {\n const uploadRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const uploadInstance = useRef<any>(null);\n \n const [status, setStatus] = useState<UploadStatus>('idle');\n const [isDragging, setIsDragging] = useState(false);\n const [currentFile, setCurrentFile] = useState<File | null>(null);\n const [uploadProgress, setUploadProgress] = useState(0);\n const [timeLeft, setTimeLeft] = useState<string | null>(null);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [successMessage, setSuccessMessage] = useState<string | null>(null);\n const dragCounter = useRef(0);\n \n useEffect(() => {\n // Only run on client-side\n if (typeof window === 'undefined' || !uploadRef.current) return;\n\n // Dynamically import the upload script to avoid server-side rendering issues\n import('./scripts').then(({ default: UploadClass }) => {\n if (uploadRef.current) {\n uploadInstance.current = new UploadClass(uploadRef.current, {\n disabled,\n maxSizeInMB,\n acceptedFileTypes,\n multiple,\n onFileSelect,\n onFileUpload: (file: File, progress: number) => {\n setUploadProgress(progress);\n setTimeLeft(`${Math.ceil((100 - progress) / 5)} seconds left`);\n if (onFileUpload) onFileUpload(file, progress);\n },\n onFileUploadComplete: (file: File) => {\n setStatus('success');\n setSuccessMessage('Upload successful');\n if (onFileUploadComplete) onFileUploadComplete(file);\n },\n onFileUploadError: (file: File, error: string) => {\n setStatus('error');\n setErrorMessage(error);\n if (onFileUploadError) onFileUploadError(file, error);\n }\n });\n }\n });\n \n // Cleanup on unmount\n return () => {\n if (uploadInstance.current) {\n uploadInstance.current.destroy();\n }\n };\n }, [disabled, maxSizeInMB, acceptedFileTypes, multiple, onFileSelect, onFileUpload, onFileUploadComplete, onFileUploadError]);\n \n // Handle file input change\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!e.target.files?.length) return;\n \n const files = Array.from(e.target.files);\n handleFiles(files);\n };\n \n // Handle button click\n const handleButtonClick = () => {\n if (inputRef.current && !disabled) {\n inputRef.current.click();\n }\n };\n \n // Handle drag enter\n const handleDragEnter = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n \n dragCounter.current++;\n if (dragCounter.current === 1) {\n setIsDragging(true);\n }\n };\n \n // Handle drag leave\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n \n dragCounter.current--;\n if (dragCounter.current === 0) {\n setIsDragging(false);\n }\n };\n \n // Handle drag over\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n };\n \n // Handle drop\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n \n dragCounter.current = 0;\n setIsDragging(false);\n \n if (!e.dataTransfer.files?.length) return;\n \n const files = Array.from(e.dataTransfer.files);\n handleFiles(files);\n };\n \n // Process files\n const handleFiles = (files: File[]) => {\n if (!files.length) return;\n \n // If multiple is not allowed, take only the first file\n const filesToProcess = multiple ? files : [files[0]];\n \n // Validate files\n const validFiles = filesToProcess.filter(file => validateFile(file));\n \n // Notify about file selection\n if (validFiles.length && onFileSelect) {\n onFileSelect(validFiles);\n }\n \n // Process the first valid file\n if (validFiles.length) {\n setCurrentFile(validFiles[0]);\n simulateUpload(validFiles[0]);\n }\n };\n \n // Validate file\n const validateFile = (file: File): boolean => {\n const maxSizeInBytes = maxSizeInMB * 1024 * 1024;\n \n // Check file size\n if (file.size > maxSizeInBytes) {\n setStatus('error');\n setErrorMessage(`File too large. Maximum size is ${maxSizeInMB}MB.`);\n return false;\n }\n \n // Check file type if acceptedFileTypes is provided\n if (acceptedFileTypes?.length) {\n const isAcceptedType = acceptedFileTypes.some(type => {\n // Handle wildcards like image/*\n if (type.endsWith('/*')) {\n const mainType = type.split('/')[0];\n return file.type.startsWith(`${mainType}/`);\n }\n return file.type === type;\n });\n \n if (!isAcceptedType) {\n setStatus('error');\n setErrorMessage('File type not supported.');\n return false;\n }\n }\n \n return true;\n };\n \n // Simulate upload (in a real component, this would be an actual upload)\n const simulateUpload = (file: File) => {\n setStatus('loading');\n setUploadProgress(0);\n \n // Simulate progress updates\n let progress = 0;\n const interval = setInterval(() => {\n progress += 5;\n \n if (progress < 100) {\n setUploadProgress(progress);\n setTimeLeft(`${Math.ceil((100 - progress) / 5)} seconds left`);\n \n if (onFileUpload) {\n onFileUpload(file, progress);\n }\n } else {\n clearInterval(interval);\n setStatus('success');\n setSuccessMessage('Upload successful');\n \n if (onFileUploadComplete) {\n onFileUploadComplete(file);\n }\n }\n }, 500);\n };\n \n // Handle close button click\n const handleClose = () => {\n setStatus('idle');\n setCurrentFile(null);\n setUploadProgress(0);\n setTimeLeft(null);\n setErrorMessage(null);\n setSuccessMessage(null);\n \n // Reset input\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n };\n \n // Determine CSS classes\n const uploadClasses = [\n 'c-upload',\n disabled ? UPLOAD.CLASSES.DISABLED : '',\n status === 'loading' ? UPLOAD.CLASSES.LOADING : '',\n status === 'success' ? UPLOAD.CLASSES.SUCCESS : '',\n status === 'error' ? UPLOAD.CLASSES.ERROR : '',\n isDragging ? UPLOAD.CLASSES.DRAGGING : '',\n className\n ].filter(Boolean).join(' ');\n \n // Update CSS variable for progress\n const style = uploadProgress > 0 ? {\n [UPLOAD.ATTRIBUTES.PERCENTAGE]: uploadProgress\n } as React.CSSProperties : {};\n \n return (\n <div \n className={uploadClasses} \n ref={uploadRef}\n style={style}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <div className=\"c-upload__inner\">\n <div className=\"c-upload__icon\">\n {icon}\n </div>\n <h3 className=\"c-upload__title\">{title}</h3>\n <p className=\"c-upload__text\">{supportedFilesText}</p>\n <button \n className=\"c-upload__btn c-btn c-btn--primary\" \n disabled={disabled}\n onClick={handleButtonClick}\n >\n {buttonText}\n </button>\n <p className=\"c-upload__helper-text\">{helperText}</p>\n <input\n ref={inputRef}\n type=\"file\"\n accept={acceptedFileTypes.join(',')}\n multiple={multiple}\n style={{ display: 'none' }}\n onChange={handleFileChange}\n />\n </div>\n \n {(status === 'loading' || status === 'success' || status === 'error') && currentFile && (\n <div className=\"c-upload__loader\">\n <div className=\"c-upload__loader-status\">\n <h5 className=\"c-upload__loader-title\">{currentFile.name}</h5>\n <div className=\"c-upload__loader-progress\">\n {status === 'loading' && uploadProgress < 100 && (\n <>\n <div className=\"c-upload__loader-par\">{uploadProgress}%</div>\n {timeLeft && <div className=\"c-upload__loader-time\">{timeLeft}</div>}\n </>\n )}\n {status === 'success' && successMessage}\n {status === 'error' && errorMessage}\n </div>\n </div>\n \n <div className=\"c-upload__loader-control\">\n {status === 'loading' && uploadProgress < 100 && (\n <div className=\"c-upload__loader-bar\">\n <svg>\n <circle cx=\"10\" cy=\"10\" r=\"10\"></circle>\n <circle cx=\"10\" cy=\"10\" r=\"10\"></circle>\n </svg>\n </div>\n )}\n <button \n className=\"c-upload__loader-close c-btn c-btn--icon\"\n onClick={handleClose}\n >\n {status === 'success' ? (\n <i className=\"icon-lux-check-circle-fill\"></i>\n ) : (\n <i className=\"icon-lux-x\"></i>\n )}\n </button>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport type { UploadProps };\n\n// Set display name for debugging\nUpload.displayName = 'Upload';\n\n// Default export (primary)\nexport default Upload;\n\n// Named export for compatibility\nexport { Upload };","import React from 'react';\n\nexport interface AtomixLogoProps extends React.SVGProps<SVGSVGElement> {\n height?: number | string;\n width?: number | string;\n color?: string;\n}\n\nexport const AtomixLogo: React.FC<AtomixLogoProps> = ({\n height = 24,\n width = 24,\n color = 'currentColor',\n ...props\n}) => {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"\n fill={color}\n />\n <path\n d=\"M12 6c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zm0 10c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4z\"\n fill={color}\n />\n </svg>\n );\n};\n\nexport default AtomixLogo;\n","/**\n * Check if element has a specific class\n * @param element - DOM element to check\n * @param className - Class name to check for\n * @returns Whether element has the class\n */\nexport function hasClass(element: HTMLElement, className: string): boolean {\n return element.classList.contains(className);\n}\n\n/**\n * Add class to element if not already present\n * @param element - DOM element to modify\n * @param className - Class name to add\n */\nexport function addClass(element: HTMLElement, className: string): void {\n if (!hasClass(element, className)) {\n element.classList.add(className);\n }\n}\n\n/**\n * Remove class from element if present\n * @param element - DOM element to modify\n * @param className - Class name to remove\n */\nexport function removeClass(element: HTMLElement, className: string): void {\n if (hasClass(element, className)) {\n element.classList.remove(className);\n }\n}\n\n/**\n * Toggle class on element\n * @param element - DOM element to modify\n * @param className - Class name to toggle\n * @param force - If true, adds class; if false, removes class\n */\nexport function toggleClass(\n element: HTMLElement, \n className: string, \n force?: boolean\n): void {\n element.classList.toggle(className, force);\n} ","/**\n * Icon path definitions for common Phosphor icons\n */\nconst ICON_PATHS: Record<string, string> = {\n House: 'M240 121.6V240h-48v-72a24 24 0 0 0-24-24h-80a24 24 0 0 0-24 24v72H16V121.6a16 16 0 0 1 5.4-12L111.4 29a16 16 0 0 1 21.2 0l90 80.6a16 16 0 0 1 5.4 12Z',\n Package: 'M223.68 66.15 135.68 18a15.88 15.88 0 0 0-15.36 0l-88 48.13a16 16 0 0 0-8.32 14v95.64a16 16 0 0 0 8.32 14l88 48.17a15.88 15.88 0 0 0 15.36 0l88-48.17a16 16 0 0 0 8.32-14V80.18a16 16 0 0 0-8.32-14.03ZM128 32.59l74.12 40.55-32 17.56-74.12-40.55ZM96 68.08l73.56 40.23-32.04 17.53L64 85.64ZM40 95.83l72 39.39v79.23l-72-39.4Zm144 79.22v-79.23l72-39.39v79.22Z',\n Folder: 'M216 72h-84.7L104.4 44.2A16.05 16.05 0 0 0 92.7 40H40a16 16 0 0 0-16 16v144.3a15.91 15.91 0 0 0 15.9 15.7h176.2a15.91 15.91 0 0 0 15.9-15.7V88a16 16 0 0 0-16-16Z',\n Tag: 'M246.15 128.6 183.06 65.5l.09-24.21A16.05 16.05 0 0 0 167 25.14l-24.1.09L79.4 88.85a16 16 0 0 0 0 22.63l67.26 67.27a16 16 0 0 0 22.63 0l76.86-76.86a16 16 0 0 0 0-23.29ZM160 152l-56-56 56-56 56 56Zm-16-72a16 16 0 1 1-16 16 16 16 0 0 1 16-16Z',\n CaretRight: 'M181.66 133.66l-80 80A8 8 0 0 1 88 208V48a8 8 0 0 1 13.66-5.66l80 80a8 8 0 0 1 0 11.32Z',\n CaretDown: 'M208 96v16a8 8 0 0 1-2.34 5.66l-80 80a8 8 0 0 1-11.32 0l-80-80A8 8 0 0 1 32 112V96a8 8 0 0 1 8-8h160a8 8 0 0 1 8 8Z',\n User: 'M230.92 212c-15.23-26.33-38.7-45.21-66.09-54.16a72 72 0 1 0-73.66 0c-27.39 8.94-50.86 27.82-66.09 54.16a8 8 0 1 0 13.85 8c18.84-32.56 52.14-52 89.07-52s70.23 19.44 89.07 52a8 8 0 1 0 13.85-8ZM72 96a56 56 0 1 1 56 56 56.06 56.06 0 0 1-56-56Z',\n Home: 'M224 115.55V208a16 16 0 0 1-16 16h-40a16 16 0 0 1-16-16v-40a8 8 0 0 0-8-8h-32a8 8 0 0 0-8 8v40a16 16 0 0 1-16 16H48a16 16 0 0 1-16-16v-92.45a16 16 0 0 1 5.17-11.78l80-75.48a16 16 0 0 1 21.66 0l80 75.48a16 16 0 0 1 5.17 11.78Z',\n // Added icons for DatePicker\n X: 'M205.66 194.34a8 8 0 0 1-11.32 11.32L128 139.31l-66.34 66.35a8 8 0 0 1-11.32-11.32L116.69 128 50.34 61.66a8 8 0 0 1 11.32-11.32L128 116.69l66.34-66.35a8 8 0 0 1 11.32 11.32L139.31 128l66.35 66.34Z',\n Calendar: 'M208 32h-24v-8a8 8 0 0 0-16 0v8H88v-8a8 8 0 0 0-16 0v8H48a16 16 0 0 0-16 16v160a16 16 0 0 0 16 16h160a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16ZM72 48v8a8 8 0 0 0 16 0v-8h80v8a8 8 0 0 0 16 0v-8h24v32H48V48Zm136 160H48V96h160v112Z',\n CaretDoubleLeft: 'M181.66 181.66a8 8 0 0 1-11.32 0L120 131.31V160a8 8 0 0 1-13.66 5.66l-48-48a8 8 0 0 1 0-11.32l48-48A8 8 0 0 1 120 64v28.69l50.34-50.35a8 8 0 0 1 11.32 11.32l-56 56a8 8 0 0 1-11.32 0L102.63 98 64 128l38.63 30L114.34 146.63a8 8 0 0 1 11.32 0l56 56a8 8 0 0 1 0 11.32Z',\n CaretDoubleRight: 'M74.34 181.66a8 8 0 0 0 11.32 0L136 131.31V160a8 8 0 0 0 13.66 5.66l48-48a8 8 0 0 0 0-11.32l-48-48A8 8 0 0 0 136 64v28.69L85.66 42.34a8 8 0 0 0-11.32 11.32l56 56a8 8 0 0 0 11.32 0l11.71-11.71L192 128l-38.63 30-11.71-11.71a8 8 0 0 0-11.32 0l-56 56a8 8 0 0 0 0 11.32Z'\n};\n\n/**\n * Create a Phosphor icon SVG element\n * @param name - Icon name\n * @param size - Icon size in pixels\n * @returns SVG element as HTML string\n */\nexport function createPhosphorIcon(name: string, size: number = 16): string {\n const path = ICON_PATHS[name] || '';\n \n if (!path) {\n console.warn(`Icon \"${name}\" not found in icon library`);\n }\n \n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\" fill=\"currentColor\" viewBox=\"0 0 256 256\">\n <path d=\"${path}\"></path>\n </svg>`;\n}\n\n/**\n * Create an icon element\n * @param name - Icon name\n * @param size - Icon size in pixels\n * @param className - Additional CSS class name\n * @returns Icon element\n */\nexport function createIconElement(\n name: string,\n size: number = 16,\n className: string = ''\n): HTMLSpanElement {\n const iconElement = document.createElement('span');\n iconElement.className = className || 'c-icon';\n iconElement.style.display = 'inline-flex';\n iconElement.style.alignItems = 'center';\n iconElement.style.justifyContent = 'center';\n iconElement.innerHTML = createPhosphorIcon(name, size);\n \n return iconElement;\n}\n\n/**\n * Get all available icon names\n * @returns Array of icon names\n */\nexport function getAvailableIcons(): string[] {\n return Object.keys(ICON_PATHS);\n} ","// Export all components explicitly\nexport * from './components';\n\n\n// Default export for backward compatibility\nimport * as components from './components';\nimport * as utilities from './lib';\n\nconst Atomix = {\n ...components,\n ...utilities,\n} as any;\n\nexport default Atomix;"],"names":["inProgress","dataWebpackPrefix","f","k","Symbol","for","l","m","Object","prototype","hasOwnProperty","n","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","p","key","ref","__self","__source","q","c","a","g","b","d","e","h","call","defaultProps","$$typeof","type","props","_owner","current","exports","Fragment","jsx","jsxs","THEME_COLORS","SIZES","CLASS_PREFIX","COMPONENT","UTILITY","LAYOUT","OBJECT","BUTTON","BASE_CLASS","ICON_CLASS","VARIANT_PREFIX","CALLOUT","CONTENT_CLASS","MESSAGE_CLASS","TITLE_CLASS","TEXT_CLASS","ACTIONS_CLASS","CLOSE_BTN_CLASS","CLASSES","ONELINE","TOAST","HIDE","ACCORDION","SELECTORS","HEADER","PANEL","BODY","IS_OPEN","IS_ANIMATING","IS_DISABLED","ATTRIBUTES","ARIA_EXPANDED","ARIA_CONTROLS","ARIA_HIDDEN","ROLE","CSS_VARS","PANEL_HEIGHT","BADGE","SIZE_PREFIX","LIST","ITEM_CLASS","ORDERED","INLINE","LIST_GROUP","BREADCRUMB","ITEM","LINK","BASE","ACTIVE","DEFAULTS","DIVIDER","COUNTDOWN","TIME","TIME_COUNT","TIME_LABEL","SEPARATOR","FOCUSED","SHOW","HERO","CONTAINER","GRID","CONTENT","SUBTITLE","TITLE","TEXT","ACTIONS","IMAGE","BG","BG_IMAGE","OVERLAY","IMAGE_WRAPPER","CENTER","RIGHT","LEFT","FULL_VH","TOOLTIP","TRIGGER","ARROW","IS_ACTIVE","TOP","BOTTOM","TOP_LEFT","TOP_RIGHT","BOTTOM_LEFT","BOTTOM_RIGHT","POSITION","CONTENT_ID","OFFSET","DELAY","POPOVER","CONTENT_INNER","AUTO","TOGGLE","IS_ON","TAB","NAV_ITEMS","NAV_BTN","PANELS","PANEL_BODIES","ACTIVE_INDEX","STEPS","LINE","NUMBER","VERTICAL","COMPLETED","TESTIMONIAL","QUOTE","AUTHOR","AUTHOR_AVATAR","AUTHOR_INFO","AUTHOR_NAME","AUTHOR_ROLE","SMALL","LARGE","SPINNER","PRIMARY","SECONDARY","SUCCESS","INFO","WARNING","DANGER","LIGHT","DARK","VISUALLY_HIDDEN","SECTION_INTRO","LABEL","RIVER","ROW","CONTENT_COL","CONTENT_COL_TITLE","CONTENT_COL_TEXT","VISUAL","BREAKOUT","REVERSE","CONTENT_WIDTH","UPLOAD","INNER","ICON","HELPER_TEXT","LOADER","LOADER_STATUS","LOADER_TITLE","LOADER_PROGRESS","LOADER_PAR","LOADER_TIME","LOADER_CONTROL","LOADER_BAR","LOADER_CLOSE","DISABLED","ERROR","LOADING","DRAGGING","PERCENTAGE","NAVBAR","BRAND","COLLAPSE","TOGGLER","FIXED","FIXED_BOTTOM","EXPANDED","NAV","DROPDOWN","DROPDOWN_MENU","MEGA_MENU","END","RATING","STAR","STAR_FULL","STAR_HALF","FULL","HALF","READONLY","VALUE","EDGE_PANEL","BACKDROP","CLOSE","START","TRANSFORM_VALUES","start","end","top","bottom","ANIMATION_DURATION","DATA_TABLE_CLASSES","base","container","tableWrapper","header","headerCell","headerContent","sortable","sortIcon","row","cell","loadingCell","loadingIndicator","emptyCell","toolbar","search","searchInput","pagination","striped","bordered","dense","loading","open","DATA_TABLE_SELECTORS","TABLE","HEADER_CELL","CELL","PAGINATION","PAGINATION_BUTTON","SEARCH_INPUT","PAGINATION_DEFAULTS","currentPage","totalPages","siblingCount","showFirstLastButtons","showPrevNextButtons","size","TODO","ITEM_CONTENT","ITEM_TEXT","ITEM_ACTIONS","CHECKBOX","DELETE_BUTTON","FORM","INPUT","ADD_BUTTON","GROUP","HELPER","FIELD","REQUIRED","FORM_GROUP","INVALID","VALID","RADIO","CARD","FOOTER","FLAT","FLIPPED","CLICKABLE","HOVER","SELECT","SELECTED","SELECT_BODY","SELECT_PANEL","SELECT_ITEMS","SELECT_ITEM","ITEM_LABEL","ITEM_INPUT","OPTION","TOGGLE_ICON","ICON_CARET","TEXTAREA","AVATAR","INITIALS","XS","SM","MD","LG","XL","CIRCLE","AVATAR_GROUP","MORE","STACKED","MODAL","OPEN_BUTTON","CLOSE_BUTTONS","DIALOG","DEFAULT_OPTIONS","openELm","closeELms","modalDialogELm","backdropELm","backdrop","keyboard","MESSAGES","ITEMS","FILE","CONTENT_SELF","NAME","FILE_ICON","FILE_DETAILS","FILE_NAME","FILE_SIZE","INPUT_GROUP","OPTIONS","OPTION_ICON","SUBMIT","MENU","MENU_WRAPPER","MENU_INNER","MENU_ITEM","PLACEMENT","MIN_WIDTH","ANIMATION_TIMING","PROGRESS","BAR","ARIA_VALUEMIN","ARIA_VALUEMAX","ARIA_VALUENOW","ARIA_LABEL","DATEPICKER","CALENDAR","DAY","MONTH","YEAR","WEEKDAYS","TODAY_BUTTON","CLEAR_BUTTON","CLOSE_BUTTON","NAV_BUTTON","VIEW_SWITCH","IS_SELECTED","IS_TODAY","FORMAT","MIN_DATE","MAX_DATE","CLEARABLE","SHOW_TODAY","SHOW_WEEK_NUMBERS","SHOW_TODAY_BUTTON","PHOTOVIEWER","SELECTOR","CLASS","startIndex","zoomLevel","fullscreen","module","require","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","__esModule","definition","o","defineProperty","enumerable","get","chunkId","Promise","all","keys","reduce","promises","u","globalThis","this","Function","window","obj","prop","url","done","push","script","needAttach","scripts","document","getElementsByTagName","i","length","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","forEach","fn","setTimeout","bind","target","head","appendChild","r","toStringTag","value","scriptUrl","importScripts","location","currentScript","tagName","toUpperCase","test","Error","replace","installedChunks","j","installedChunkData","promise","resolve","reject","error","errorType","realSrc","message","name","request","webpackJsonpCallback","parentChunkLoadingFunction","data","chunkIds","moreModules","runtime","some","id","chunkLoadingGlobal","self","useAccordion","initialProps","defaultOpen","disabled","iconPosition","isControlled","isOpen","internalOpen","setInternalOpen","useState","panelHeight","setPanelHeight","panelRef","useRef","contentRef","updatePanelHeight","height","clientHeight","style","setProperty","useEffect","handleResize","addEventListener","removeEventListener","state","toggle","onOpenChange","generateClassNames","arguments","trim","generateHeaderClassNames","Accordion","_ref","title","children","controlledOpen","icon","className","instanceId","useId","buttonId","panelId","defaultIcon","_jsx","xmlns","width","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","points","_jsxs","onClick","role","displayName","sizeMap","xs","sm","md","lg","xl","Icon","weight","color","alt","IconComponent","PhosphorIcons","Avatar","initials","circle","imageError","setImageError","avatarClasses","filter","Boolean","join","tabIndex","onError","handleImageError","useBadge","variant","generateBadgeClass","Badge","label","badgeClass","Breadcrumb","items","ariaLabel","breadcrumbClasses","map","item","index","itemClasses","active","linkContent","_Fragment","href","useButton","rounded","generateButtonClass","iconOnly","handleClick","handler","Button","forwardRef","as","Component","buttonProps","Callout","onClose","actions","oneLine","toast","generateCalloutClass","handleClose","useCallout","getAriaAttributes","baseAttributes","includes","Card","image","imageAlt","text","footer","flat","rest","cardClasses","substring","ColorModeToggle","colorMode","setColorMode","storedColorMode","localStorage","getItem","matchMedia","matches","documentElement","setItem","darkModeMediaQuery","handleSystemThemeChange","addListener","removeListener","toggleColorMode","prevMode","Countdown","show","separator","focused","onComplete","targetDate","Date","now","setNow","completed","setCompleted","interval","setInterval","clearInterval","diff","getTime","days","hours","minutes","seconds","totalSeconds","Math","max","floor","getTimeParts","timeParts","part","idx","React","String","padStart","useDataTable","columns","paginated","pageSize","onSort","initialSortConfig","sortConfig","setSortConfig","setCurrentPage","searchQuery","setSearchQuery","handleSort","useCallback","direction","newSortConfig","handlePageChange","page","ceil","handleSearch","query","filteredData","useMemo","lowercaseQuery","toLowerCase","column","sortedData","sort","aValue","bValue","localeCompare","paginatedData","slice","displayData","DOTS","range","Array","from","_","usePagination","onPageChange","paginationRange","leftSiblingIndex","rightSiblingIndex","min","shouldShowLeftDots","shouldShowRightDots","lastPageIndex","rightRange","middleRange","goToPage","nextPage","prevPage","firstPage","lastPage","useSpinner","generateSpinnerClass","baseClass","Spinner","spinnerClass","PaginationNavButton","iconName","Pagination","_ref2","pageNumber","isActive","DataTable","filterable","emptyMessage","onRowClick","tableRef","tableClass","placeholder","onChange","colSpan","rowIndex","colIndex","render","getMonthName","month","date","setMonth","toLocaleString","getDaysInMonth","year","getDate","formatDate","format","day","getMonth","getFullYear","useDatePicker","selectionMode","startDate","endDate","onRangeChange","minDate","maxDate","inline","setIsOpen","inputValue","setInputValue","rangeInputValue","setRangeInputValue","viewDate","setViewDate","viewMode","setViewMode","rangeSelectionState","setRangeSelectionState","datePickerRef","inputRef","today","currentMonth","currentYear","daysInMonth","firstDayOfMonth","getDay","handleDateSelect","selectedDate","handlePrevMonth","handleNextMonth","handlePrevYear","handleNextYear","switchToMonthView","switchToYearView","selectMonth","selectYear","handleTodayClick","todayDate","handleClear","handleInputChange","parsedDate","isNaN","parts","split","startPart","endPart","parsedStart","parsedStartDate","parsedEndDate","handleInputFocus","handleClickOutside","contains","generateDays","prevMonthDays","isCurrentMonth","remainingDays","generateMonths","months","generateYears","years","startYear","isDateSelectable","isDateInRange","isDateSelected","isStartDate","isEndDate","isDateInSelectedRange","isToday","getWeekNumber","valueOf","dayNr","setDate","firstThursday","DatePicker","readOnly","clearable","showTodayButton","showWeekNumbers","placement","inputClassName","rangeStartDate","useImperativeHandle","close","clear","focus","datepickerClassName","inputClasses","datepickerId","random","toString","calendarId","displayValue","onFocus","dateObj","isSelectable","isSelected","isTodayDate","dateValue","isInRange","isStartOfRange","isEndOfRange","weekNum","toLocaleDateString","monthObj","DropdownContext","createContext","trigger","Dropdown","_ref4","menu","offset","controlledIsOpen","closeOnClickOutside","closeOnEscape","maxHeight","minWidth","uncontrolledIsOpen","setUncontrolledIsOpen","dropdownRef","toggleRef","menuRef","dropdownId","nextIsOpen","handleKeyDown","focusableItems","querySelectorAll","currentIndex","findIndex","activeElement","preventDefault","handleToggleClick","stopPropagation","handleToggleKeyDown","firstItem","querySelector","handleHoverOpen","dropdownClasses","menuStyleProps","onMouseEnter","onKeyDown","Provider","useEdgePanel","position","mode","closeOnBackdropClick","containerRef","backdropRef","adjustBodyPadding","clientWidth","paddingProperty","charAt","body","classList","add","resetBodyPadding","remove","openPanel","transform","closePanel","handleEscapeKey","handleBackdropClick","currentTarget","generateEdgePanelClass","propIsOpen","EdgePanel","isOpenState","panelClass","useForm","generateFormClass","handleSubmit","handleReset","Form","onSubmit","onReset","method","encType","noValidate","autoComplete","formClass","useInput","invalid","valid","generateInputClass","validationClass","Input","onBlur","required","autoFocus","maxLength","minLength","pattern","step","ariaDescribedBy","inputClass","useTextarea","generateTextareaClass","Textarea","rows","cols","textareaClass","useHero","heroRef","videoRef","parallaxHandlerRef","alignment","imageColSize","contentColSize","showOverlay","fullViewportHeight","contentWidth","parallax","parallaxIntensity","hasBackgroundImage","backgroundImageSrc","hasForegroundImage","imageSrc","useGridLayout","applyParallaxEffect","element","safeIntensity","handleScroll","pageYOffset","bgElement","removeParallaxEffect","heroElement","generateHeroClassNames","baseClassName","classes","videoBackground","generateImageColClass","generateContentColClass","useRiver","center","breakout","reverse","generateRiverClassNames","generateContentClass","generateVisualClass","textContent","useNavbar","collapsible","isExpanded","setIsExpanded","generateNavbarClass","generateContainerStyle","maxWidth","generateCollapseClass","expanded","toggleExpanded","newState","onToggle","getExpandedState","controlled","useNav","generateNavClass","useNavItem","dropdown","megaMenu","generateNavItemClass","generateNavLinkClass","useNavDropdown","isInFixedBottomNavbar","generateDropdownMenuClass","alignmentClass","getIconClass","getIconName","getRandomValues","rnds8","Uint8Array","crypto","uuid","byteToHex","arr","TypeError","v","parseInt","v35","version","hashfunc","generateUUID","namespace","buf","_namespace","str","unescape","encodeURIComponent","bytes","charCodeAt","stringToBytes","set","err","DNS","URL","getOutputLength","inputLength8","safeAdd","x","y","lsw","md5cmn","t","num","cnt","md5ff","md5gg","md5hh","md5ii","msg","input","output","length32","hexTab","hex","md5ToHexEncodedArray","len","olda","oldb","oldc","oldd","wordsToMd5","length8","Uint32Array","bytesToWords","randomUUID","options","rnds","rng","z","ROTL","K","H","isArray","N","M","W","T","useTodo","showCompleted","setItems","inputText","setInputText","addTodo","newItem","uuidv4","prevItems","toggleTodo","updatedItem","deleteTodo","initialLength","onAddTodo","generateTodoClasses","generateItemClasses","getFilteredItems","useFormGroup","generateFormGroupClass","useSelect","generateSelectClass","CHECKBOX_CLASSES","MIXED","useCheckbox","indeterminate","checkboxRef","generateCheckboxClass","useRadio","generateRadioClass","useModal","isOpenProp","onOpen","setIsOpenState","updateOpen","useBreadcrumb","initialOptions","defaultOptions","divider","generateBreadcrumbClass","generateItemClass","isLast","isItemLink","parseItemsFromJson","jsonString","JSON","parse","useCard","elevationEffect","elevationClass","flipEffect","flipTrigger","focusEffect","clickable","cardRef","frontRef","backRef","isFlipped","setIsFlipped","isElevated","setIsElevated","isFocused","setIsFocused","isHovered","setIsHovered","handleMouseEnter","handleMouseLeave","handleFocus","handleBlur","getCardProps","tabxwIndex","onMouseLeave","Select","multiple","selectClass","selectedLabel","setSelectedLabel","bodyRef","nativeSelectRef","selectedOption","find","opt","display","option","handleToggle","handleItemClick","htmlFor","checked","Checkbox","checkboxClass","Radio","radioClass","Hero","subtitle","videoOptions","autoplay","loop","muted","heroStyle","renderVideoBackground","posterUrl","autoPlay","playsInline","poster","pop","renderContent","renderForegroundImage","List","listClasses","child","AvatarGroup","stacked","moreText","avatarGroupClasses","avatarChildren","Children","toArray","isValidElement","showMoreIndicator","visibleAvatars","hiddenAvatarCount","firstAvatar","avatarSize","moreClasses","cloneElement","useMessages","onSendMessage","shiftKey","Messages","messages","otherAvatar","selfAvatar","otherName","bodyHeight","messagesId","substr","inputId","isSelf","time","file","Modal","closeButton","modalRef","dialogRef","handleKeydown","modalClasses","Navbar","brand","containerWidth","navbarExpanded","setNavbarExpanded","collapseRef","innerWidth","navbarClass","containerStyle","collapseClass","PhotoViewerHeader","imagesLength","onZoomOut","onResetZoom","onZoomIn","onToggleFullscreen","isFullscreen","onRotate","onDownload","onShare","showInfo","onToggleInfo","currentImage","navigator","PhotoViewerNavigation","onPrev","onNext","enableKeyboardNav","PhotoViewerImage","imageRef","dragPosition","isDragging","rotationAngle","isTransitioning","onMouseDown","onMouseMove","onMouseUp","onWheel","onTouchStart","onTouchMove","onTouchEnd","onDoubleClick","internalContainerRef","effectiveContainerRef","isMounted","setIsMounted","handleWheelEvent","handleTouchStartEvent","handleTouchMoveEvent","handleTouchEndEvent","passive","cursor","opacity","touchAction","transition","transformOrigin","willChange","draggable","onContextMenu","PhotoViewerThumbnails","images","goToImage","thumbnail","PhotoViewerInfo","description","author","tags","tag","PhotoViewer","enableKeyboardNavigation","enableGestures","enableFullscreen","thumbnailPosition","onImageChange","imagePosition","setZoomLevel","setIsFullscreen","setRotationAngle","setShowInfo","closeModal","goToPrevious","goToNext","setCurrentIndex","handleMouseDown","handleMouseMove","handleMouseUp","handleWheel","handleTouchStart","handleTouchMove","handleTouchEnd","handleDoubleClick","resetImageState","isModalOpen","setIsModalOpen","setIsDragging","startDragPosition","setStartDragPosition","imageStates","setImageStates","setIsTransitioning","momentumZoom","setMomentumZoom","velocity","timestamp","touchPointsRef","lastDistanceRef","lastMidpointRef","lastWheelTime","momentumTimeoutRef","calculateBounds","rotation","minX","maxX","minY","maxY","naturalWidth","imageWidth","imageHeight","naturalHeight","containerRect","getBoundingClientRect","containerHeight","rotationRad","PI","cos","abs","sin","aspectRatio","displayWidth","displayHeight","scaledHeight","constrainPosition","bounds","updateImageBounds","currentState","newBounds","constrainedPosition","complete","openModal","zoom","newZoom","clampedZoom","setImagePosition","newPosition","normalizedRotation","testRect","isMac","platform","isTrackpadPinch","ctrlKey","hasHorizontalScroll","deltaX","zoomAmount","shouldPreventDefault","deltaY","currentTime","timeDelta","rect","applyMomentum","newVelocity","momentumZoomAmount","requestAnimationFrame","cursorX","clientX","left","cursorY","clientY","oldZoom","zoomFactor","touches","touch","dx","dy","sqrt","distance","zoomDelta","currentMidpoint","midpointX","midpointY","usePhotoViewer","processedImages","img","photoViewerClasses","handleFullscreenChange","fullscreenElement","handleToggleFullscreen","exitFullscreen","requestFullscreen","handleRotate","angle","handleDownload","link","download","click","async","share","usePopover","delay","currentPosition","setCurrentPosition","triggerRef","popoverRef","arrowRef","timeoutRef","popoverId","newIsOpen","handleTriggerMouseEnter","handleTriggerMouseLeave","handlePopoverMouseEnter","handlePopoverMouseLeave","updatePosition","triggerRect","popoverRect","viewportWidth","viewportHeight","innerHeight","isNearViewportEdge","right","spaceTop","spaceBottom","spaceLeft","spaceRight","bestPosition","spaces","space","absoluteTop","scrollY","absoluteLeft","scrollX","scrollTimeout","intervalId","PopoverContext","triggerType","Popover","content","createPortal","useRating","maxValue","allowHalf","internalValue","setInternalValue","hoverValue","setHoverValue","focusedIndex","setFocusedIndex","currentValue","starValue","newValue","setFocused","setRef","useForkRef","refA","refB","refValue","Rating","valueProp","defaultValue","useVanillaJS","restProps","internalRef","ratingInstance","starRect","then","default","RatingClass","destroy","updateOptions","ratingClasses","effectiveValue","renderStars","stars","roundedValue","round","componentId","starClass","focusable","clipPath","ProductReview","productName","productImage","initialRating","maxRating","ratingColor","rating","setRating","comment","setComment","submitted","setSubmitted","reviewRef","reviewInstance","ProductReviewClass","catch","containerClasses","toFixed","Event","Progress","progressValue","progressStyle","progressClasses","useProgress","River","contentColumns","riverRef","riverInstance","RiverClass","riverStyle","renderBackground","renderImage","paragraph","SectionIntro","skeleton","sectionIntroRef","sectionIntroInstance","SectionIntroClass","sectionIntroClasses","Steps","activeIndex","vertical","onStepChange","currentStep","setCurrentStep","stepsRef","stepsInstance","StepsClass","setActive","number","Tab","onTabChange","currentTab","setCurrentTab","tabRef","tabInstance","TabClass","handleTabClick","overflow","Testimonial","quote","testimonialRef","testimonialInstance","TestimonialClass","testimonialClasses","avatarSrc","avatarAlt","Todo","onToggleTodo","onDeleteTodo","localItems","setLocalItems","filteredItems","todoClass","newTodo","handleDelete","Toggle","initialOn","onToggleOn","onToggleOff","isOn","setIsOn","toggleInstance","ToggleClass","handleToggleOn","handleToggleOff","turnOn","turnOff","activeClass","contentIdAttr","positionAttr","triggerAttr","Tooltip","constructor","selector","$element","hideTimeout","$trigger","$content","_initialize","_initializeElements","_setPosition","_bindEvents","parentContainer","parentElement","customPosition","customTrigger","_handleTriggerEnter","_handleTriggerLeave","_handleTriggerClick","hide","isInitialized","isVisible","getElement","getTriggerElement","getPosition","setPosition","showEvent","CustomEvent","bubbles","cancelable","detail","tooltip","dispatchEvent","defaultPrevented","hideEvent","initializeAll","elements","tooltipRef","tooltipInstance","TooltipClass","Upload","maxSizeInMB","acceptedFileTypes","supportedFilesText","buttonText","helperText","onFileSelect","onFileUpload","onFileUploadComplete","onFileUploadError","uploadRef","uploadInstance","status","setStatus","currentFile","setCurrentFile","uploadProgress","setUploadProgress","timeLeft","setTimeLeft","errorMessage","setErrorMessage","successMessage","setSuccessMessage","dragCounter","UploadClass","progress","handleFiles","files","validFiles","validateFile","simulateUpload","endsWith","mainType","startsWith","uploadClasses","onDragEnter","onDragLeave","onDragOver","onDrop","dataTransfer","handleButtonClick","accept","cx","cy","hasClass","addClass","removeClass","toggleClass","force","ICON_PATHS","House","Package","Folder","Tag","CaretRight","CaretDown","User","Home","X","Calendar","CaretDoubleLeft","CaretDoubleRight","createPhosphorIcon","path","createIconElement","iconElement","alignItems","justifyContent","innerHTML","getAvailableIcons","components","utilities"],"sourceRoot":""}