@foi/design-system 0.0.14 → 0.0.16

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.
Files changed (45) hide show
  1. package/README.md +117 -18
  2. package/dist/{RadioGroup-DCJBoZc-.js → RadioGroup-BdWsLUz-.js} +4 -4
  3. package/dist/{RadioGroup-DCJBoZc-.js.map → RadioGroup-BdWsLUz-.js.map} +1 -1
  4. package/dist/{RadioGroup.context-QNk2hW_4.js → RadioGroup.context-BBa8PDLt.js} +4 -4
  5. package/dist/RadioGroup.context-BBa8PDLt.js.map +1 -0
  6. package/dist/{Switch-JF9P9VJf.js → Switch-BNFdKefE.js} +1394 -886
  7. package/dist/Switch-BNFdKefE.js.map +1 -0
  8. package/dist/{ThemeProvider-Q2Hjezbt.js → ThemeProvider-C47pyWG6.js} +2 -2
  9. package/dist/{ThemeProvider-Q2Hjezbt.js.map → ThemeProvider-C47pyWG6.js.map} +1 -1
  10. package/dist/atoms.d.ts +4 -2
  11. package/dist/atoms.mjs +3 -3
  12. package/dist/components/atoms/NumberField/NumberField.d.ts +5 -0
  13. package/dist/components/atoms/NumberField/NumberField.interface.d.ts +57 -0
  14. package/dist/components/atoms/NumberField/index.d.ts +4 -0
  15. package/dist/components/atoms/TextField/TextField.d.ts +5 -0
  16. package/dist/components/atoms/TextField/TextField.emotion.d.ts +2 -0
  17. package/dist/components/atoms/TextField/TextField.interface.d.ts +51 -0
  18. package/dist/components/atoms/TextField/index.d.ts +4 -0
  19. package/dist/{emotion-react-jsx-runtime.browser.esm-C4rLUMui.js → emotion-react-jsx-runtime.browser.esm-Ch-DwUYg.js} +2 -2
  20. package/dist/{emotion-react-jsx-runtime.browser.esm-C4rLUMui.js.map → emotion-react-jsx-runtime.browser.esm-Ch-DwUYg.js.map} +1 -1
  21. package/dist/hocs/ThemeProvider/components/NumberField.d.ts +38 -0
  22. package/dist/hocs/ThemeProvider/components/{Input.d.ts → TextField.d.ts} +1 -1
  23. package/dist/hocs/ThemeProvider/components/index.d.ts +3 -2
  24. package/dist/hocs/ThemeProvider/interfaces/Components.interface.d.ts +2 -1
  25. package/dist/hocs.mjs +1 -1
  26. package/dist/index.d.ts +4 -2
  27. package/dist/index.mjs +187 -187
  28. package/dist/index.mjs.map +1 -1
  29. package/dist/molecules.mjs +1 -1
  30. package/dist/theme/dark/components/NumberField.d.ts +60 -0
  31. package/dist/theme/dark/components/{Input.d.ts → TextField.d.ts} +1 -1
  32. package/dist/theme/dark/components/index.d.ts +58 -1
  33. package/dist/theme/dark/index.d.ts +58 -1
  34. package/dist/theme/index.d.ts +58 -1
  35. package/dist/{theme-Cxg9jdmX.js → theme-D01EcUA9.js} +81 -44
  36. package/dist/theme-D01EcUA9.js.map +1 -0
  37. package/dist/theme.mjs +1 -1
  38. package/package.json +1 -1
  39. package/dist/RadioGroup.context-QNk2hW_4.js.map +0 -1
  40. package/dist/Switch-JF9P9VJf.js.map +0 -1
  41. package/dist/components/atoms/Input/Input.d.ts +0 -10
  42. package/dist/components/atoms/Input/Input.interface.d.ts +0 -108
  43. package/dist/components/atoms/Input/index.d.ts +0 -4
  44. package/dist/theme-Cxg9jdmX.js.map +0 -1
  45. /package/dist/components/atoms/{Input/Input.emotion.d.ts → NumberField/NumberField.emotion.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Switch-BNFdKefE.js","names":[],"sources":["../src/components/atoms/Button/Button.emotion.ts","../src/components/atoms/Button/Button.tsx","../src/components/atoms/Button/index.tsx","../src/components/atoms/DatePicker/DatePicker.emotion.ts","../src/components/atoms/IconButton/IconButton.emotion.ts","../src/components/atoms/IconButton/IconButton.tsx","../src/components/atoms/IconButton/index.tsx","../src/components/atoms/DatePicker/DatePickerMenu/DatePickerMenu.emotion.ts","../src/components/atoms/DatePicker/DatePickerMenu/DatePickerMenu.tsx","../src/components/atoms/DatePicker/DatePickerMenu/index.tsx","../src/components/atoms/DatePicker/DatePicker.tsx","../src/components/atoms/DatePicker/index.tsx","../src/components/atoms/TextField/TextField.emotion.ts","../src/components/atoms/TextField/TextField.tsx","../src/components/atoms/TextField/index.tsx","../src/components/atoms/NumberField/NumberField.emotion.ts","../src/components/atoms/NumberField/NumberField.tsx","../src/components/atoms/NumberField/index.tsx","../src/components/atoms/Radio/Radio.emotion.ts","../src/components/atoms/Radio/Radio.tsx","../src/components/atoms/Radio/index.tsx","../src/components/atoms/Select/Select.emotion.ts","../src/components/atoms/Select/SelectMenu/SelectMenu.emotion.ts","../src/components/atoms/Select/SelectMenu/SelectMenu.tsx","../src/components/atoms/Select/SelectMenu/index.tsx","../src/components/atoms/Select/Select.tsx","../src/components/atoms/Select/index.tsx","../src/components/atoms/Slider/Slider.emotion.ts","../src/components/atoms/Slider/Slider.tsx","../src/components/atoms/Slider/index.tsx","../src/components/atoms/Switch/Switch.emotion.ts","../src/components/atoms/Switch/Switch.tsx","../src/components/atoms/Switch/index.tsx"],"sourcesContent":["import { css } from '@emotion/react';\nimport { getStyle } from '@utilities/emotion/styles';\n\nconst styles = (theme: Record<string, string>, event: string): string => {\n return `\n // UTILS\n ${getStyle(theme, 'color', `--BUTTON-EVENTS-${event}-COLOR-PRIMARY`)}\n\n // BACKGROUNDS\n ${getStyle(theme, 'background-color', `--BUTTON-EVENTS-${event}-BACKGROUND-COLOR`)}\n\n // BORDERS\n ${getStyle(theme, 'border-color', `--BUTTON-EVENTS-${event}-BORDER-COLOR`)}\n ${getStyle(theme, 'border-width', `--BUTTON-EVENTS-${event}-BORDER-WIDTH`)}\n ${getStyle(theme, 'border-style', `--BUTTON-EVENTS-${event}-BORDER-STYLE`)}\n\n // OUTLINE\n ${getStyle(theme, 'outline-color', `--BUTTON-EVENTS-${event}-OUTLINE-COLOR`)}\n ${getStyle(theme, 'outline-width', `--BUTTON-EVENTS-${event}-OUTLINE-WIDTH`)}\n ${getStyle(theme, 'outline-style', `--BUTTON-EVENTS-${event}-OUTLINE-STYLE`)}\n ${getStyle(theme, 'outline-offset', `--BUTTON-EVENTS-${event}-OUTLINE-OFFSET`)}\n `;\n};\n\nconst Style = (theme: Record<string, string>) => css`\n &.--BUTTON {\n width: 100%;\n height: 48px;\n ${getStyle(theme, 'border-radius', '--BUTTON-ROOT-BORDER-RADIUS')};\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 8px;\n text-transform: none;\n position: relative;\n text-decoration: none;\n cursor: pointer;\n padding: 13.5px 16px;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n\n // ENABLED\n ${styles(theme, 'ENABLED')};\n\n // HOVER\n &:hover {\n ${styles(theme, 'HOVER')};\n }\n\n // ACTIVE\n &.--BUTTON-active,\n &:active {\n ${styles(theme, 'ACTIVE')};\n }\n\n // FOCUS\n &:focus-visible {\n outline: none;\n ${styles(theme, 'FOCUS')};\n }\n\n // DISABLED\n &:disabled {\n pointer-events: none;\n ${styles(theme, 'DISABLED')};\n }\n\n // LOADING\n &.--BUTTON-loading {\n pointer-events: none;\n ${styles(theme, 'LOADING')};\n }\n\n .--BUTTON-iconStart,\n .--BUTTON-iconEnd {\n display: inline-flex;\n align-items: center;\n > svg {\n width: 20px;\n height: 20px;\n }\n }\n\n .--BUTTON-span {\n // FONT\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.875rem; // 14px\n font-weight: 500;\n line-height: 1.5;\n letter-spacing: 0.01em;\n }\n }\n`;\n\nexport default Style;\n","import React, { useState } from 'react';\n// Component Base\nimport emotion from './Button.emotion';\nimport type { ButtonProps } from './Button.interface';\n\nconst CLASS = '--BUTTON';\n\n/**\n * Buttons communicate actions that users can take. Place them in dialogs, forms, cards,\n * and toolbars.\n *\n * Supports optional leading/trailing icons and a `loading` state that visually signals\n * a pending operation.\n */\nconst Button = ({\n className,\n style,\n children = 'Click me!',\n type = 'button',\n loading = false,\n iconStart,\n iconEnd,\n ...rest\n}: ButtonProps) => {\n const [isActive, setIsActive] = useState<boolean>(false);\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === 'Enter' || event.key === 'Space') {\n setIsActive(true);\n }\n rest.onKeyDown?.(event);\n };\n\n const onKeyUp = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === 'Enter' || event.key === 'Space') {\n setIsActive(false);\n }\n rest.onKeyUp?.(event);\n };\n\n const onBlur = (event: React.FocusEvent<HTMLButtonElement>) => {\n setIsActive(false);\n rest.onBlur?.(event);\n };\n\n return (\n <button\n className={[CLASS, isActive ? `${CLASS}-active` : '', loading ? `${CLASS}-loading` : '', className || ''].join(\n ' ',\n )}\n css={emotion(style)}\n type={type}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onBlur={onBlur}\n data-testid={CLASS}\n {...rest}\n >\n {iconStart && <span className={`${CLASS}-iconStart`}>{iconStart}</span>}\n <span className={`${CLASS}-span`}>{children}</span>\n {iconEnd && <span className={`${CLASS}-iconEnd`}>{iconEnd}</span>}\n </button>\n );\n};\n\nexport default Button;\n","import { useCreateComponentStyles } from '@hocs/ThemeProvider/useThemeProvider.hook';\nimport { Component } from '@hocs/ThemeProvider/interfaces';\nimport type { ButtonStyleProps } from './Button.interface';\nimport ButtonBase from './Button';\n\nconst Button = ({ theme, variant = 'default', ...rest }: ButtonStyleProps) => {\n const { componentStyles } = useCreateComponentStyles([Component.BUTTON], theme, variant.toUpperCase());\n\n return <ButtonBase {...rest} style={componentStyles} />;\n};\n\nexport default Button;\n","import { css } from '@emotion/react';\nimport { getStyle } from '@utilities/emotion/styles';\n\nconst border = (theme: Record<string, string>, event: string): string => `\n ${getStyle(theme, 'border-color', `--DATEPICKER-EVENTS-${event}-BORDER-COLOR`)};\n ${getStyle(theme, 'border-width', `--DATEPICKER-EVENTS-${event}-BORDER-WIDTH`)};\n ${getStyle(theme, 'border-style', `--DATEPICKER-EVENTS-${event}-BORDER-STYLE`)};\n`;\n\nconst labelStyles = (theme: Record<string, string>, event: string, activateLabel = false): string => `\n ${getStyle(theme, 'color', `--DATEPICKER-EVENTS-${event}-COLOR-SECONDARY`)};\n ${activateLabel ? 'transform: translate(14px, -24px); font-size: 0.75rem;' : ''};\n`;\n\nconst legendStyles = (activate: boolean): string => `\n .--DATEPICKER-legend {\n max-width: ${activate ? '100%' : '0px'};\n }\n`;\n\nconst container = (theme: Record<string, string>, event: string): string => `\n ${getStyle(theme, 'background-color', `--DATEPICKER-EVENTS-${event}-BACKGROUND-COLOR`)};\n ~ .--DATEPICKER-helperText {\n ${getStyle(theme, 'color', `--DATEPICKER-EVENTS-${event}-COLOR-TERTIARY`)};\n }\n`;\n\nconst Style = (theme: Record<string, string>) => css`\n &.--DATEPICKER {\n position: relative;\n padding: 0;\n border: 0;\n width: 100%;\n\n &.--DATEPICKER-paddingBottom {\n padding-bottom: 24px;\n }\n\n .--DATEPICKER-container {\n box-sizing: border-box;\n position: relative;\n display: inline-flex;\n align-items: center;\n min-height: 48px;\n\n width: -webkit-fill-available;\n width: -moz-available;\n width: stretch;\n\n ${getStyle(theme, 'border-radius', '--DATEPICKER-ROOT-BORDER-RADIUS')};\n\n // ENABLED\n ${container(theme, 'ENABLED')};\n\n // VALUE (field has content or calendar is open)\n &:has(.--DATEPICKER-fieldRow.--DATEPICKER-open) {\n ${container(theme, 'VALUE')};\n }\n\n // HOVER\n &:has(.--DATEPICKER-fieldRow:hover) {\n ${container(theme, 'HOVER')};\n }\n\n // ACTIVE\n &:has(.--DATEPICKER-fieldRow:active) {\n ${container(theme, 'ACTIVE')};\n }\n\n // FOCUS (user is typing inside the 3 sub-inputs)\n &:has(.--DATEPICKER-fieldRow:focus-within) {\n outline: none;\n ${container(theme, 'FOCUS')};\n }\n\n // ERROR\n &:has(.--DATEPICKER-fieldRow.--DATEPICKER-error) {\n ${container(theme, 'ERROR')};\n }\n\n // ERROR + VALUE\n &:has(.--DATEPICKER-fieldRow.--DATEPICKER-error.--DATEPICKER-open) {\n ${container(theme, 'ERROR_VALUE')};\n }\n\n // ERROR + HOVER\n &:has(.--DATEPICKER-fieldRow.--DATEPICKER-error:hover) {\n ${container(theme, 'ERROR_HOVER')};\n }\n\n // ERROR + ACTIVE\n &:has(.--DATEPICKER-fieldRow.--DATEPICKER-error:active) {\n ${container(theme, 'ERROR_ACTIVE')};\n }\n\n // ERROR + FOCUS\n &:has(.--DATEPICKER-fieldRow.--DATEPICKER-error:focus-within) {\n ${container(theme, 'ERROR_FOCUS')};\n }\n\n // DISABLED\n &:has(.--DATEPICKER-fieldRow.--DATEPICKER-disabled) {\n pointer-events: none;\n ${container(theme, 'DISABLED')};\n }\n\n // DISABLED + VALUE\n &:has(.--DATEPICKER-fieldRow.--DATEPICKER-disabled.--DATEPICKER-open) {\n pointer-events: none;\n ${container(theme, 'DISABLED_VALUE')};\n }\n\n .--DATEPICKER-fieldRow {\n display: flex;\n align-items: center;\n gap: 0px;\n\n height: -webkit-fill-available;\n height: -moz-available;\n height: stretch;\n width: -webkit-fill-available;\n width: -moz-available;\n width: stretch;\n\n min-width: 0;\n border: 0;\n margin: 0;\n padding: 15px 14px;\n background-color: transparent;\n cursor: text;\n box-sizing: border-box;\n\n // ── Label / fieldset states triggered as sibling ────────────────\n\n // ENABLED\n ~ .--DATEPICKER-label {\n ${labelStyles(theme, 'ENABLED', true)};\n }\n ~ .--DATEPICKER-fieldset {\n ${border(theme, 'ENABLED')};\n ${legendStyles(true)};\n }\n\n // VALUE\n &.--DATEPICKER-open {\n ~ .--DATEPICKER-label {\n ${labelStyles(theme, 'VALUE', true)};\n }\n ~ .--DATEPICKER-fieldset {\n ${border(theme, 'VALUE')};\n ${legendStyles(true)};\n }\n }\n\n // HOVER\n &:hover {\n ~ .--DATEPICKER-label {\n ${labelStyles(theme, 'HOVER')};\n }\n ~ .--DATEPICKER-fieldset {\n ${border(theme, 'HOVER')};\n }\n }\n\n // FOCUS (typing in sub-inputs)\n &:focus-within {\n ~ .--DATEPICKER-label {\n ${labelStyles(theme, 'FOCUS', true)};\n }\n ~ .--DATEPICKER-fieldset {\n ${border(theme, 'FOCUS')};\n ${legendStyles(true)};\n }\n }\n\n // ERROR\n &.--DATEPICKER-error {\n ~ .--DATEPICKER-label {\n ${labelStyles(theme, 'ERROR')};\n }\n ~ .--DATEPICKER-fieldset {\n ${border(theme, 'ERROR')};\n }\n }\n\n // ERROR + VALUE\n &.--DATEPICKER-error.--DATEPICKER-open {\n ~ .--DATEPICKER-label {\n ${labelStyles(theme, 'ERROR_VALUE')};\n }\n ~ .--DATEPICKER-fieldset {\n ${border(theme, 'ERROR_VALUE')};\n }\n }\n\n // ERROR + HOVER\n &.--DATEPICKER-error:hover {\n ~ .--DATEPICKER-label {\n ${labelStyles(theme, 'ERROR_HOVER')};\n }\n ~ .--DATEPICKER-fieldset {\n ${border(theme, 'ERROR_HOVER')};\n }\n }\n\n // ERROR + FOCUS\n &.--DATEPICKER-error:focus-within {\n ~ .--DATEPICKER-label {\n ${labelStyles(theme, 'ERROR_FOCUS')};\n }\n ~ .--DATEPICKER-fieldset {\n ${border(theme, 'ERROR_FOCUS')};\n ${legendStyles(true)};\n }\n }\n\n // DISABLED\n &.--DATEPICKER-disabled {\n user-select: none;\n pointer-events: none;\n cursor: default;\n\n .--DATEPICKER-partInput {\n ${getStyle(theme, 'color', '--DATEPICKER-EVENTS-DISABLED-COLOR-PRIMARY')};\n }\n .--DATEPICKER-separator {\n ${getStyle(theme, 'color', '--DATEPICKER-EVENTS-DISABLED-COLOR-PRIMARY')};\n }\n\n ~ .--DATEPICKER-label {\n ${labelStyles(theme, 'DISABLED')};\n }\n ~ .--DATEPICKER-fieldset {\n ${border(theme, 'DISABLED')};\n }\n }\n\n // ── Sub-input elements ───────────────────────────────────────────\n\n .--DATEPICKER-separator {\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.875rem;\n font-weight: 400;\n letter-spacing: 0.01em;\n line-height: 1;\n ${getStyle(theme, 'color', '--DATEPICKER-EVENTS-ENABLED-COLOR-PRIMARY')};\n user-select: none;\n padding: 0 2px;\n }\n\n .--DATEPICKER-partInput {\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.875rem;\n font-weight: 500;\n letter-spacing: 0.01em;\n line-height: 1;\n padding: 0;\n margin: 0;\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n white-space: nowrap;\n user-select: none;\n cursor: text;\n outline: none;\n\n &.--DATEPICKER-placeholder {\n ${getStyle(theme, 'color', '--DATEPICKER-EVENTS-ENABLED-COLOR-SECONDARY')};\n }\n\n &:focus {\n ${getStyle(theme, 'background-color', '--DATEPICKER-EVENTS-VALUE-BORDER-COLOR')};\n border-radius: 2px;\n }\n\n &:focus-visible {\n outline: none;\n }\n\n ${getStyle(theme, 'color', '--DATEPICKER-EVENTS-ENABLED-COLOR-PRIMARY')};\n }\n }\n\n // ── Calendar icon button ─────────────────────────────────────────\n\n .--DATEPICKER-calendarIcon {\n flex-shrink: 0;\n ${getStyle(theme, 'color', '--DATEPICKER-EVENTS-ENABLED-ICON-COLOR')};\n }\n\n // ── Floating label ───────────────────────────────────────────────\n\n .--DATEPICKER-label {\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.875rem;\n font-weight: 500;\n letter-spacing: 0.01em;\n line-height: normal;\n\n padding: 0;\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n position: absolute;\n pointer-events: none;\n z-index: 4;\n\n transform: translate(14px, 0px);\n transition: 150ms ease-in-out;\n }\n\n // ── Fieldset border ──────────────────────────────────────────────\n\n .--DATEPICKER-fieldset {\n height: 100%;\n width: -webkit-fill-available;\n width: -moz-available;\n width: stretch;\n\n text-align: left;\n position: absolute;\n margin: 0;\n padding: 0 6px;\n pointer-events: none;\n overflow: hidden;\n z-index: 5;\n box-sizing: border-box;\n ${getStyle(theme, 'border-radius', '--DATEPICKER-ROOT-BORDER-RADIUS')};\n -webkit-tap-highlight-color: transparent;\n\n .--DATEPICKER-legend {\n width: auto;\n overflow: hidden;\n display: block;\n padding: 0;\n height: 0px;\n visibility: hidden;\n\n max-width: 0px;\n transition: max-width 150ms ease-in-out;\n\n .--DATEPICKER-text {\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.75rem;\n letter-spacing: 0.01em;\n font-weight: 500;\n padding: 0px 7px;\n }\n }\n }\n\n .--DATEPICKER-adornment {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 0px 12px;\n }\n }\n\n .--DATEPICKER-helperText {\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.75rem;\n line-height: 1;\n\n display: block;\n margin-top: 8px;\n margin-left: 14px;\n height: 16px;\n }\n }\n`;\n\nexport default Style;\n","import { css } from '@emotion/react';\nimport { getStyle } from '@utilities/emotion/styles';\n\nconst background = (theme: Record<string, string>, event: string): string => {\n return `\n // BACKGROUNDS\n .--ICONBUTTON-span {\n ${getStyle(theme, 'background-color', `--ICONBUTTON-EVENTS-${event}-BACKGROUND-COLOR`)}\n }\n `;\n};\n\nconst shadow = (theme: Record<string, string>, event: string): string => {\n return `\n // SHADOWS \n ${getStyle(theme, 'background-color', `--ICONBUTTON-EVENTS-${event}-SHADOW-COLOR`)}\n `;\n};\n\nconst icon = (theme: Record<string, string>, event: string): string => {\n return `\n // UTILS\n .--ICONBUTTON-span > span {\n ${getStyle(theme, 'color', `--ICONBUTTON-EVENTS-${event}-ICON-COLOR`)}\n }\n `;\n};\n\nconst border = (theme: Record<string, string>, event: string): string => {\n return `\n // BORDER\n .--ICONBUTTON-span {\n ${getStyle(theme, 'border-color', `--ICONBUTTON-EVENTS-${event}-BORDER-COLOR`)}\n ${getStyle(theme, 'border-width', `--ICONBUTTON-EVENTS-${event}-BORDER-WIDTH`)}\n ${getStyle(theme, 'border-style', `--ICONBUTTON-EVENTS-${event}-BORDER-STYLE`)}\n }\n `;\n};\n\nconst outline = (theme: Record<string, string>, event: string): string => {\n return `\n // OUTLINE\n .--ICONBUTTON-span {\n ${getStyle(theme, 'outline-color', `--ICONBUTTON-EVENTS-${event}-OUTLINE-COLOR`)}\n ${getStyle(theme, 'outline-width', `--ICONBUTTON-EVENTS-${event}-OUTLINE-WIDTH`)}\n ${getStyle(theme, 'outline-style', `--ICONBUTTON-EVENTS-${event}-OUTLINE-STYLE`)}\n ${getStyle(theme, 'outline-offset', `--ICONBUTTON-EVENTS-${event}-OUTLINE-OFFSET`)}\n }\n `;\n};\n\nconst Style = (theme: Record<string, string>) => css`\n &.--ICONBUTTON {\n width: 24px;\n height: 24px;\n ${getStyle(theme, 'border-radius', '--ICONBUTTON-ROOT-BORDER-RADIUS')};\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n vertical-align: middle;\n box-sizing: content-box;\n position: relative;\n user-select: none;\n padding: 0px;\n box-sizing: border-box;\n -webkit-tap-highlight-color: transparent;\n isolation: isolate;\n border: none;\n background-color: transparent;\n\n // ENABLED\n ${background(theme, 'ENABLED')};\n ${border(theme, 'ENABLED')};\n ${icon(theme, 'ENABLED')};\n\n // HOVER\n &:hover {\n &:before {\n opacity: 1;\n ${shadow(theme, 'HOVER')};\n }\n }\n\n // ACTIVE\n &.--ICONBUTTON-active,\n &:active {\n &:before {\n opacity: 1;\n ${shadow(theme, 'ACTIVE')};\n }\n }\n\n // FOCUS\n &:focus-visible {\n outline: none;\n ${outline(theme, 'FOCUS')};\n }\n\n // DISABLED\n &:disabled {\n pointer-events: none;\n ${background(theme, 'DISABLED')};\n ${border(theme, 'DISABLED')};\n ${icon(theme, 'DISABLED')};\n }\n\n &.--ICONBUTTON-flipped {\n .--ICONBUTTON-span {\n > span {\n rotate: 180deg !important;\n }\n }\n }\n\n .--ICONBUTTON-span {\n width: 24px;\n height: 24px;\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n ${getStyle(theme, 'border-radius', '--ICONBUTTON-ROOT-BORDER-RADIUS')};\n\n > span {\n rotate: 0deg;\n transition: rotate 150ms ease-in-out;\n position: absolute;\n width: 100%;\n height: auto;\n z-index: 1;\n }\n }\n\n &:before {\n content: '';\n position: absolute;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n opacity: 0;\n transition: opacity 150ms ease-in-out;\n z-index: -1;\n }\n }\n`;\n\nexport default Style;\n","import React, { useState } from 'react';\n// Component Base\nimport emotion from './IconButton.emotion';\nimport type { IconButtonProps } from './IconButton.interface';\n\nconst CLASS = '--ICONBUTTON';\n\n/**\n * A compact, circular button that renders a single icon.\n * Use it for secondary or contextual actions where label text is unnecessary (e.g. close, edit, delete).\n *\n * Pass `isFlipped` to mirror the icon horizontally — useful for directional icons.\n */\nconst IconButton = ({ className, style, icon, onClick, isFlipped, ...rest }: IconButtonProps) => {\n const [isActive, setIsActive] = useState<boolean>(false);\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n if (event.key === 'Enter' || event.key === 'Space') {\n setIsActive(true);\n }\n rest.onKeyDown?.(event);\n };\n\n const onKeyUp = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === 'Enter' || event.key === 'Space') {\n setIsActive(false);\n }\n rest.onKeyUp?.(event);\n };\n\n const onBlur = (event: React.FocusEvent<HTMLButtonElement>) => {\n setIsActive(false);\n rest.onBlur?.(event);\n };\n\n return (\n <button\n className={[CLASS, isActive ? `${CLASS}-active` : '', isFlipped ? `${CLASS}-flipped` : '', className].join(' ')}\n css={emotion(style)}\n type='button'\n onClick={onClick}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onBlur={onBlur}\n data-testid={CLASS}\n {...rest}\n >\n <span className={`${CLASS}-span`}>{icon}</span>\n </button>\n );\n};\n\nexport default IconButton;\n","import { useCreateComponentStyles } from '@hocs/ThemeProvider/useThemeProvider.hook';\nimport { Component } from '@hocs/ThemeProvider/interfaces';\nimport type { IconButtonStyleProps } from './IconButton.interface';\nimport IconButtonBase from './IconButton';\n\nconst IconButton = ({ theme, variant = 'default', ...rest }: IconButtonStyleProps) => {\n const { componentStyles } = useCreateComponentStyles([Component.ICONBUTTON], theme, variant.toUpperCase());\n\n return <IconButtonBase {...rest} style={componentStyles} />;\n};\n\nexport default IconButton;\n","import { css } from '@emotion/react';\nimport { getStyle } from '@utilities/emotion/styles';\n\nconst outline = (theme: Record<string, string>, event: string): string => ` \n // OUTLINE\n ${getStyle(theme, 'outline-color', `--DATEPICKERMENU-EVENTS-${event}-OUTLINE-COLOR`)}\n ${getStyle(theme, 'outline-width', `--DATEPICKERMENU-EVENTS-${event}-OUTLINE-WIDTH`)}\n ${getStyle(theme, 'outline-style', `--DATEPICKERMENU-EVENTS-${event}-OUTLINE-STYLE`)}\n ${getStyle(theme, 'outline-offset', `--DATEPICKERMENU-EVENTS-${event}-OUTLINE-OFFSET`)}\n`;\n\nconst Style = (theme: Record<string, string>) => css`\n &.--DATEPICKERMENU {\n z-index: 100;\n position: absolute;\n top: 52px;\n left: 0px;\n box-shadow:\n rgba(0, 0, 0, 0.2) 0px 5px 5px -3px,\n rgba(0, 0, 0, 0.14) 0px 8px 10px 1px,\n rgba(0, 0, 0, 0.12) 0px 3px 14px 2px;\n ${getStyle(theme, 'border-radius', '--DATEPICKERMENU-ROOT-BORDER-RADIUS')};\n ${getStyle(theme, 'background-color', '--DATEPICKERMENU-ROOT-BACKGROUND-COLOR')};\n box-sizing: border-box;\n padding: 16px;\n width: 272px;\n height: autopx;\n\n // Animation\n display: none;\n opacity: 0;\n translate: 0px -10px;\n transition-property: display opacity translate;\n transition-duration: 150ms;\n transition-behavior: allow-discrete;\n\n &.--DATEPICKERMENU-open {\n display: block;\n opacity: 1;\n translate: 0px 0px;\n\n @starting-style {\n opacity: 0;\n translate: 0px -10px;\n }\n }\n\n &.--DATEPICKERMENU-static {\n position: static;\n margin-top: 8px;\n }\n\n // ── Header (month/year + navigation) ──────────────────────────────────────\n\n .--DATEPICKERMENU-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin: 0 0px 12px 4px;\n\n .--DATEPICKERMENU-yearToggle {\n display: flex;\n gap: 12px;\n align-items: center;\n\n .--DATEPICKERMENU-labelWrap {\n overflow-x: hidden;\n\n .--DATEPICKERMENU-headerLabel {\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 1rem;\n ${getStyle(theme, 'color', '--DATEPICKERMENU-EVENTS-ENABLED-COLOR-PRIMARY')};\n\n .--DATEPICKERMENU-yearLabel {\n font-family: ${theme['--FONTFAMILY-SECONDARY'] || theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.938rem;\n ${getStyle(theme, 'color', '--DATEPICKERMENU-EVENTS-ENABLED-COLOR-PRIMARY')};\n }\n }\n\n // Slide animations when month changes\n &.--DATEPICKERMENU-slideLeft .--DATEPICKERMENU-headerLabel {\n animation: dpSlideFromLeft 150ms ease-in-out;\n }\n &.--DATEPICKERMENU-slideRight .--DATEPICKERMENU-headerLabel {\n animation: dpSlideFromRight 150ms ease-in-out;\n }\n }\n\n .--DATEPICKERMENU-yearArrow {\n ${getStyle(theme, 'color', '--DATEPICKERMENU-EVENTS-ENABLED-ICON-COLOR')};\n }\n }\n\n .--DATEPICKERMENU-monthNav {\n display: flex;\n gap: 12px;\n\n .--DATEPICKERMENU-navArrow {\n ${getStyle(theme, 'color', '--DATEPICKERMENU-EVENTS-ENABLED-ICON-COLOR')};\n }\n }\n }\n\n // ── Calendar grid ─────────────────────────────────────────────────────────\n\n .--DATEPICKERMENU-body {\n display: flex;\n flex-direction: column;\n gap: 12px;\n overflow-y: clip;\n height: 245px;\n\n &.--DATEPICKERMENU-yearBody {\n overflow: clip;\n overflow-clip-margin: 18px;\n }\n }\n\n .--DATEPICKERMENU-yearScrollWrapper {\n display: flex;\n flex-direction: column;\n gap: 12px;\n overflow-y: scroll;\n height: 100%;\n width: calc(100% + 24px);\n margin-left: -8px;\n padding: 8px;\n box-sizing: border-box;\n scroll-padding: 8px;\n\n &::-webkit-scrollbar {\n width: 12px;\n height: 4px;\n cursor: pointer;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.5);\n border-radius: 9999px;\n border: 3px solid transparent;\n background-clip: padding-box;\n }\n }\n\n .--DATEPICKERMENU-weekRow {\n display: flex;\n width: 100%;\n justify-content: space-between;\n gap: 12px;\n }\n\n // Viewport that clips the slide animation while letting outlines overflow\n .--DATEPICKERMENU-gridViewport {\n overflow: clip;\n overflow-clip-margin: 6px;\n }\n\n // Month grid (with slide animation)\n .--DATEPICKERMENU-calendarGrid {\n display: flex;\n flex-direction: column;\n gap: 12px;\n\n &.--DATEPICKERMENU-slideLeft {\n animation: dpSlideFromLeft 150ms ease-in-out;\n }\n &.--DATEPICKERMENU-slideRight {\n animation: dpSlideFromRight 150ms ease-in-out;\n }\n }\n\n // ── Day cells ─────────────────────────────────────────────────────────────\n\n .--DATEPICKERMENU-dayCell {\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 14px;\n ${getStyle(theme, 'color', '--DATEPICKERMENU-EVENTS-ENABLED-COLOR-SECONDARY')};\n width: 24px;\n height: 24px;\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: transparent;\n }\n\n .--DATEPICKERMENU-dayBtn {\n width: 24px;\n height: 24px;\n cursor: pointer;\n border: none;\n border-radius: 4px;\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 14px;\n ${getStyle(theme, 'color', '--DATEPICKERMENU-EVENTS-ENABLED-COLOR-PRIMARY')};\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: transparent;\n isolation: isolate;\n padding: 0px;\n\n &::before {\n content: '';\n position: absolute;\n width: 36px;\n height: 36px;\n border-radius: 50%;\n opacity: 0;\n transition: opacity 150ms ease-in-out;\n z-index: -1;\n }\n\n // Hover\n &:hover {\n ::before {\n opacity: 1;\n ${getStyle(theme, 'background-color', '--DATEPICKERMENU-EVENTS-HOVER-BACKGROUND-COLOR')};\n }\n }\n\n // Active\n &:active {\n &::before {\n opacity: 1;\n ${getStyle(theme, 'background-color', '--DATEPICKERMENU-EVENTS-ACTIVE-BACKGROUND-COLOR')};\n }\n }\n\n // Focus\n &.--DATEPICKERMENU-focused,\n &:focus-visible {\n outline: none;\n ${outline(theme, 'FOCUS')};\n }\n\n &.--DATEPICKERMENU-today {\n ${getStyle(theme, 'background-color', '--DATEPICKERMENU-EVENTS-ENABLED-BACKGROUND-COLOR')};\n }\n\n &.--DATEPICKERMENU-selected {\n ${getStyle(theme, 'background-color', '--DATEPICKERMENU-EVENTS-VALUE-BACKGROUND-COLOR')};\n ${getStyle(theme, 'color', '--DATEPICKERMENU-EVENTS-VALUE-COLOR-PRIMARY')};\n }\n\n &:disabled {\n pointer-events: none;\n cursor: default;\n ${getStyle(theme, 'color', '--DATEPICKERMENU-EVENTS-DISABLED-COLOR-PRIMARY')};\n background-color: transparent;\n\n &.--DATEPICKERMENU-selected {\n ${getStyle(theme, 'background-color', '--DATEPICKERMENU-EVENTS-DISABLED-COLOR-PRIMARY')};\n }\n\n &.--DATEPICKERMENU-today::after {\n ${getStyle(theme, 'background-color', '--DATEPICKERMENU-EVENTS-DISABLED-COLOR-PRIMARY')};\n }\n }\n }\n\n // ── Year cells ────────────────────────────────────────────────────────────\n\n .--DATEPICKERMENU-yearBtn {\n cursor: pointer;\n border: none;\n border-radius: 4px;\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 14px;\n ${getStyle(theme, 'color', '--DATEPICKERMENU-EVENTS-ENABLED-COLOR-PRIMARY')};\n width: 40.5px;\n height: 24px;\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: transparent;\n position: relative;\n isolation: isolate;\n padding: 0px;\n\n &::before {\n content: '';\n position: absolute;\n width: 54px;\n height: 36px;\n border-radius: 18px;\n opacity: 0;\n transition: opacity 150ms ease-in-out;\n z-index: -1;\n }\n\n // Hover\n &:hover {\n ::before {\n opacity: 1;\n ${getStyle(theme, 'background-color', '--DATEPICKERMENU-EVENTS-HOVER-BACKGROUND-COLOR')};\n }\n }\n\n // Active\n &:active {\n &::before {\n opacity: 1;\n ${getStyle(theme, 'background-color', '--DATEPICKERMENU-EVENTS-ACTIVE-BACKGROUND-COLOR')};\n }\n }\n\n // Focus\n &.--DATEPICKERMENU-focused,\n &:focus-visible {\n outline: none;\n ${outline(theme, 'FOCUS')};\n }\n\n &.--DATEPICKERMENU-selected {\n ${getStyle(theme, 'background-color', '--DATEPICKERMENU-EVENTS-VALUE-BACKGROUND-COLOR')};\n ${getStyle(theme, 'color', '--DATEPICKERMENU-EVENTS-VALUE-COLOR-PRIMARY')};\n }\n }\n }\n\n @keyframes dpSlideFromLeft {\n from {\n translate: -100% 0;\n }\n to {\n translate: 0 0;\n }\n }\n\n @keyframes dpSlideFromRight {\n from {\n translate: 100% 0;\n }\n to {\n translate: 0 0;\n }\n }\n`;\n\nexport default Style;\n","import React, { forwardRef, useEffect, useLayoutEffect, useRef, useState } from 'react';\n// Component Base\nimport emotion from './DatePickerMenu.emotion';\nimport type { DatePickerMenuProps } from './DatePickerMenu.interface';\n// External Libraries\nimport { format as formatDate, isValid } from 'date-fns';\n// Custom Components\nimport IconButton from '@components/atoms/IconButton';\nimport Icon from '@components/atoms/Icon';\n\nconst CLASS = '--DATEPICKERMENU';\n\n/**\n * Calendar popup for `DatePicker`.\n *\n * Displays a monthly grid with weekday headers, month/year navigation, and a\n * scrollable year-picker. Keyboard navigation (arrow keys, Enter, Escape) is\n * handled by the parent `DatePicker`; this component focuses the active day\n * button when `focusedElement` changes.\n */\nconst DatePickerMenu = forwardRef<HTMLDivElement, DatePickerMenuProps>(\n (\n {\n isOpen,\n hasStaticOptions = false,\n testId = `${CLASS}-root`,\n monthLabel = '',\n yearLabel = '',\n onPrevMonth,\n onNextMonth,\n disablePrev = false,\n disableNext = false,\n weeks = [],\n years = [],\n daysOfWeek = [],\n selectedValue,\n format = 'MM/dd/yyyy',\n today,\n focusedElement = -1,\n onSelectDay = () => {},\n onSelectYear = () => {},\n onMoveFocus = () => {},\n onClose = () => {},\n style,\n },\n ref,\n ) => {\n const [openYearPicker, setOpenYearPicker] = useState(false);\n const [slideDir, setSlideDir] = useState<'left' | 'right' | null>(null);\n const [slideKey, setSlideKey] = useState(0);\n const [iconHasFocus, setIconHasFocus] = useState(false);\n const [focusedYear, setFocusedYear] = useState(-1);\n\n const dayRefs = useRef<Record<number, HTMLButtonElement | null>>({});\n const yearRefs = useRef<Record<number, HTMLButtonElement | null>>({});\n const menuInnerRef = useRef<HTMLDivElement>(null);\n\n // ── Trigger slide animation when month changes ────────────────────────────\n const prevMonth = useRef(monthLabel + yearLabel);\n useEffect(() => {\n if (!isOpen) return;\n const current = monthLabel + yearLabel;\n if (current === prevMonth.current) return;\n prevMonth.current = current;\n }, [monthLabel, yearLabel, isOpen]);\n\n const onPrev = () => {\n setSlideDir('left');\n setSlideKey(k => k + 1);\n onPrevMonth();\n };\n\n const onNext = () => {\n setSlideDir('right');\n setSlideKey(k => k + 1);\n onNextMonth();\n };\n\n // ── Focus the active day button (keyboard navigation) ─────────────────────\n useEffect(() => {\n if (!isOpen || focusedElement < 0) return;\n const el = dayRefs.current[focusedElement];\n if (!el) return;\n\n const active = document.activeElement as HTMLElement | null;\n const inputFocused = Boolean(active && (active.tagName === 'INPUT' || active.role === 'combobox'));\n\n if (inputFocused) {\n el.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n } else {\n el.focus();\n el.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n }\n }, [focusedElement, isOpen]);\n\n // ── Close year picker when calendar closes (delayed to match close animation) ──\n useEffect(() => {\n if (!isOpen) {\n const timer = setTimeout(() => setOpenYearPicker(false), 150);\n return () => clearTimeout(timer);\n }\n }, [isOpen]);\n\n // ── Auto-focus the target year when year picker opens ─────────────────────\n useLayoutEffect(() => {\n if (!openYearPicker) {\n setFocusedYear(-1);\n return;\n }\n const targetYear =\n selectedValue && isValid(selectedValue)\n ? selectedValue.getFullYear()\n : (today?.getFullYear() ?? new Date().getFullYear());\n const flat = years.flat();\n const idx = flat.findIndex(y => y.label === String(targetYear));\n setFocusedYear(idx >= 0 ? idx : 0);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [openYearPicker]);\n\n // ── Focus the year button when focusedYear changes ────────────────────────\n useLayoutEffect(() => {\n if (!openYearPicker || focusedYear < 0) return;\n const el = yearRefs.current[focusedYear];\n if (!el) return;\n el.focus({ preventScroll: true });\n el.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n }, [focusedYear, openYearPicker]);\n\n // ── Key handler on day buttons ────────────────────────────────────────────\n const onDayKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>, value: string) => {\n if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(e.key)) {\n e.preventDefault();\n e.stopPropagation();\n onMoveFocus(e.key);\n return;\n }\n if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n onSelectDay(value, true);\n }\n };\n\n // ── Tab cycle among header icons + focused day ────────────────────────────\n const queryBtn = (root: HTMLElement, selector: string): HTMLElement | null => {\n const el = root.querySelector<HTMLElement>(selector);\n if (!el) return null;\n return el.tagName === 'BUTTON' ? el : el.querySelector<HTMLElement>('button');\n };\n\n // ── Year arrow-key navigation ─────────────────────────────────────────────\n const moveYearFocus = (key: string) => {\n const cols = years[0]?.length ?? 4;\n const delta = ({ ArrowRight: 1, ArrowLeft: -1, ArrowDown: cols, ArrowUp: -cols } as Record<string, number>)[key];\n if (!delta) return;\n const next = focusedYear + delta;\n if (next < 0 || next >= years.flat().length) return;\n setFocusedYear(next);\n };\n\n const cycleFocus = (reverse: boolean) => {\n const root = menuInnerRef.current;\n if (!root) return;\n\n const yearBtn = queryBtn(root, `.${CLASS}-yearArrow`);\n const navArrows = Array.from(root.querySelectorAll<HTMLElement>(`.${CLASS}-navArrow`));\n const prevBtn = !openYearPicker\n ? navArrows[0]?.tagName === 'BUTTON'\n ? navArrows[0]\n : (navArrows[0]?.querySelector<HTMLElement>('button') ?? null)\n : null;\n const nextBtn = !openYearPicker\n ? navArrows[1]?.tagName === 'BUTTON'\n ? navArrows[1]\n : (navArrows[1]?.querySelector<HTMLElement>('button') ?? null)\n : null;\n const dayBtn = !openYearPicker && focusedElement >= 0 ? (dayRefs.current[focusedElement] ?? null) : null;\n const focusedYearBtn = openYearPicker && focusedYear >= 0 ? (yearRefs.current[focusedYear] ?? null) : null;\n\n const elements = openYearPicker\n ? [yearBtn, focusedYearBtn].filter((el): el is HTMLElement => el !== null)\n : [yearBtn, prevBtn, nextBtn, dayBtn].filter((el): el is HTMLElement => el !== null);\n if (elements.length === 0) return;\n\n const currentIdx = elements.indexOf(document.activeElement as HTMLElement);\n const direction = reverse ? -1 : 1;\n const nextIdx = (currentIdx + direction + elements.length) % elements.length;\n elements[nextIdx]?.focus();\n };\n\n // ── Key handler on the menu container (capture phase) ────────────────────\n // Capture fires top-down before any child (including IconButton internals)\n const onMenuKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n onClose();\n return;\n }\n if (e.key === 'Tab') {\n e.preventDefault();\n e.stopPropagation();\n cycleFocus(e.shiftKey);\n return;\n }\n if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(e.key)) {\n if (openYearPicker) {\n e.preventDefault();\n e.stopPropagation();\n moveYearFocus(e.key);\n } else {\n const isOnDay = Object.values(dayRefs.current).some(el => el === document.activeElement);\n if (!isOnDay) {\n e.preventDefault();\n e.stopPropagation();\n onMoveFocus(e.key);\n }\n // If on a day, let it propagate so onDayKeyDown handles it\n }\n }\n };\n\n // ── Formatted selected / today values ─────────────────────────────────────\n const selectedStr = selectedValue && isValid(selectedValue) ? formatDate(selectedValue, format) : null;\n const todayStr = today && isValid(today) ? formatDate(today, format) : null;\n\n // ── Render ─────────────────────────────────────────────────────────────────\n return (\n <div ref={ref}>\n <div\n ref={menuInnerRef}\n className={[CLASS, isOpen ? `${CLASS}-open` : '', hasStaticOptions ? `${CLASS}-static` : '']\n .filter(Boolean)\n .join(' ')}\n css={emotion(style)}\n role='dialog'\n aria-label='Date picker calendar'\n data-testid={testId}\n onKeyDownCapture={onMenuKeyDown}\n >\n {/* ── Header ───────────────────────────────────────────────────────── */}\n <div className={`${CLASS}-header`}>\n <div className={`${CLASS}-yearToggle`}>\n <div className={`${CLASS}-labelWrap`}>\n <span className={`${CLASS}-headerLabel`}>\n {monthLabel} <span className={`${CLASS}-yearLabel`}>{yearLabel}</span>\n </span>\n </div>\n <IconButton\n icon={<Icon name='arrow_drop_up' />}\n onClick={() => setOpenYearPicker(v => !v)}\n className={`${CLASS}-yearArrow`}\n isFlipped={!openYearPicker}\n aria-label={openYearPicker ? 'Close year selector' : 'Open year selector'}\n tabIndex={-1}\n onFocus={() => setIconHasFocus(true)}\n />\n </div>\n\n {!openYearPicker && (\n <div className={`${CLASS}-monthNav`}>\n <IconButton\n icon={<Icon name='keyboard_arrow_left' />}\n onClick={onPrev}\n className={`${CLASS}-navArrow`}\n disabled={disablePrev}\n aria-label='Previous month'\n tabIndex={-1}\n onFocus={() => setIconHasFocus(true)}\n />\n <IconButton\n icon={<Icon name='keyboard_arrow_right' />}\n onClick={onNext}\n className={`${CLASS}-navArrow`}\n disabled={disableNext}\n aria-label='Next month'\n tabIndex={-1}\n onFocus={() => setIconHasFocus(true)}\n />\n </div>\n )}\n </div>\n\n {/* ── Body ─────────────────────────────────────────────────────────── */}\n <div className={[`${CLASS}-body`, openYearPicker ? `${CLASS}-yearBody` : ''].filter(Boolean).join(' ')}>\n {/* ── Month calendar ─────────────────────────────────────────────── */}\n {!openYearPicker && (\n <>\n {/* Weekday headers */}\n <div className={`${CLASS}-weekRow`}>\n {daysOfWeek.map((d, i) => (\n <span className={`${CLASS}-dayCell`} key={`header-${i}`}>\n {d}\n </span>\n ))}\n </div>\n\n {/* Day grid with slide animation */}\n <div className={`${CLASS}-gridViewport`}>\n <div\n className={[\n `${CLASS}-calendarGrid`,\n slideDir === 'left' ? `${CLASS}-slideLeft` : '',\n slideDir === 'right' ? `${CLASS}-slideRight` : '',\n ]\n .filter(Boolean)\n .join(' ')}\n key={slideKey}\n onAnimationEnd={() => setSlideDir(null)}\n >\n {(() => {\n let dayIndex = 0;\n return weeks.map((week, wi) => (\n <div className={`${CLASS}-weekRow`} key={`week-${wi}`}>\n {week.map((cell, ci) => {\n if (!cell.isDate) {\n return <span className={`${CLASS}-dayCell`} key={`blank-${wi}-${ci}`} />;\n }\n const idx = dayIndex++;\n const isSelected = Boolean(selectedStr && cell.value === selectedStr && isOpen);\n const isToday = cell.value === todayStr;\n const isFocused = focusedElement === idx && isOpen && !iconHasFocus;\n\n return (\n <button\n key={cell.value}\n id={`${CLASS}-day-${idx}`}\n ref={el => {\n dayRefs.current[idx] = el;\n }}\n className={[\n `${CLASS}-dayBtn`,\n isSelected ? `${CLASS}-selected` : '',\n isToday ? `${CLASS}-today` : '',\n isFocused ? `${CLASS}-focused` : '',\n ]\n .filter(Boolean)\n .join(' ')}\n type='button'\n onClick={() => onSelectDay(cell.value)}\n onFocus={() => setIconHasFocus(false)}\n onKeyDown={e => onDayKeyDown(e, cell.value)}\n disabled={cell.isDisabled}\n role='option'\n aria-selected={isSelected}\n tabIndex={-1}\n >\n {cell.label}\n </button>\n );\n })}\n </div>\n ));\n })()}\n </div>\n </div>\n </>\n )}\n\n {/* ── Year picker ───────────────────────────────────────────────── */}\n {openYearPicker && (\n <div className={`${CLASS}-yearScrollWrapper`}>\n {(() => {\n let yearIndex = 0;\n return years.map((row, ri) => (\n <div className={`${CLASS}-weekRow`} key={`year-row-${ri}`}>\n {row.map(cell => {\n const idx = yearIndex++;\n const isSelected =\n selectedValue && isValid(selectedValue)\n ? cell.label === formatDate(selectedValue, 'yyyy')\n : false;\n const isFocused = focusedYear === idx && !iconHasFocus;\n\n return (\n <button\n key={cell.value}\n ref={el => {\n yearRefs.current[idx] = el;\n }}\n className={[\n `${CLASS}-yearBtn`,\n isSelected ? `${CLASS}-selected` : '',\n isFocused ? `${CLASS}-focused` : '',\n ]\n .filter(Boolean)\n .join(' ')}\n type='button'\n tabIndex={-1}\n onClick={() => {\n onSelectYear(cell.value);\n setOpenYearPicker(false);\n }}\n onFocus={() => setIconHasFocus(false)}\n aria-selected={isSelected}\n >\n {cell.label}\n </button>\n );\n })}\n </div>\n ));\n })()}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n },\n);\n\nDatePickerMenu.displayName = 'DatePickerMenu';\n\nexport default DatePickerMenu;\n","import React from 'react';\nimport { useCreateComponentStyles } from '@hocs/ThemeProvider/useThemeProvider.hook';\nimport { Component } from '@hocs/ThemeProvider/interfaces';\nimport type { DatePickerMenuStyleProps } from './DatePickerMenu.interface';\nimport DatePickerMenuBase from './DatePickerMenu';\n\nconst DatePickerMenu = React.forwardRef<HTMLDivElement, DatePickerMenuStyleProps>(({ theme, ...rest }, ref) => {\n const { componentStyles } = useCreateComponentStyles([Component.DATEPICKERMENU, Component.DATEPICKER], theme);\n\n return <DatePickerMenuBase {...rest} style={componentStyles} ref={ref} />;\n});\n\nDatePickerMenu.displayName = 'DatePickerMenu';\n\nexport default DatePickerMenu;\n","import React, { useState, useRef, useEffect, useMemo } from 'react';\n// Component Base\nimport emotion from './DatePicker.emotion';\nimport type { DatePickerProps } from './DatePicker.interface';\nimport {\n datePickerConfig,\n isDateValid,\n isDateOutOfRange,\n getWeeksForMonth,\n getYearsGrid,\n isPrevMonthDisabled,\n isNextMonthDisabled,\n splitDateParts,\n formatMonthLabel,\n getBrowserLang,\n daysDictionary,\n} from './DatePicker.utils';\n// External Libraries\nimport { useController, type FieldValues, type FieldPath } from 'react-hook-form';\nimport { format as formatDate, parse, startOfDay, addDays, addMonths, startOfMonth, isValid } from 'date-fns';\n// Custom Hooks\nimport { useOnClickOutside } from '@hooks/useOnClickOutside';\n// Custom Components\nimport Icon from '@components/atoms/Icon';\nimport IconButton from '@components/atoms/IconButton';\nimport DatePickerMenu from './DatePickerMenu';\n\nconst CLASS = '--DATEPICKER';\n\n/**\n * A date input field with a pop-up calendar for selecting dates.\n *\n * Renders three spinbutton spans (month/day or day/month, and year) that\n * support Tab navigation and direct numeric entry. The calendar popup supports\n * full keyboard navigation (arrows to move focus, Enter to select, Tab to close).\n *\n * Language controls both the date format and the calendar labels:\n * - `en` → `MM / DD / YYYY`, Sunday-first calendar\n * - `es` → `DD / MM / YYYY`, Monday-first calendar\n *\n * The form value is a `Date` object.\n */\nconst DatePicker = <TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n control,\n language = getBrowserLang(),\n minDate,\n maxDate,\n disabled,\n disableFuture,\n disablePast,\n hasStaticOptions = false,\n showErrorText = true,\n hasPadding = false,\n helperText,\n style,\n className,\n}: DatePickerProps<TFieldValues>) => {\n const format = datePickerConfig[language].format;\n const today = useMemo(() => startOfDay(new Date()), []);\n const isEnglish = language === 'en';\n\n const { field, fieldState } = useController({ control, name: name as FieldPath<TFieldValues> });\n const errorText = fieldState.error;\n\n // ── Sub-input state (empty string = no value entered yet) ────────────────────\n\n const initParts = isValid(field.value as Date)\n ? splitDateParts(field.value as Date)\n : { day: '', month: '', year: '' };\n\n const [day, setDay] = useState(initParts.day);\n const [month, setMonth] = useState(initParts.month);\n const [year, setYear] = useState(initParts.year);\n\n // ── Calendar state ───────────────────────────────────────────────────────────\n const [isOpen, setIsOpen] = useState(false);\n const [focusedElement, setFocusedElement] = useState(-1);\n const [temporalDate, setTemporalDate] = useState<Date>(() =>\n isValid(field.value as Date) ? (field.value as Date) : today,\n );\n\n // ── Refs ─────────────────────────────────────────────────────────────────────\n const containerRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const iconWrapRef = useRef<HTMLDivElement>(null);\n const dayRef = useRef<HTMLSpanElement>(null);\n const monthRef = useRef<HTMLSpanElement>(null);\n const yearRef = useRef<HTMLSpanElement>(null);\n\n // Digit buffers: accumulate keystrokes within a focused segment; reset on focus\n const dayBuffer = useRef('');\n const monthBuffer = useRef('');\n const yearBuffer = useRef('');\n\n // ── Derived values ────────────────────────────────────────────────────────────\n const hasValue = !!(day || month || year);\n const isFieldOpen = isOpen || hasValue;\n\n const weeks = useMemo(\n () => getWeeksForMonth(temporalDate, format, language, { minDate, maxDate, disableFuture, disablePast, today }),\n [temporalDate, language, minDate, maxDate, disableFuture, disablePast, today, format],\n );\n const flatDays = useMemo(() => weeks.flat().filter(d => d.isDate), [weeks]);\n const years = useMemo(() => getYearsGrid(format, 1900, 200, 4), [format]);\n\n const daysOfWeek = datePickerConfig[language].daysOfWeek.map(d => daysDictionary[language][d]);\n const monthLabel = formatMonthLabel(temporalDate, language);\n const yearLabel = formatDate(temporalDate, 'yyyy');\n\n // ── Sync sub-inputs → RHF ────────────────────────────────────────────────────\n useEffect(() => {\n if (!day && !month && !year) return;\n const d = day || '01';\n const m = month || '01';\n const y = year || '2000';\n const dateStr = isEnglish ? `${m}/${d}/${y}` : `${d}/${m}/${y}`;\n const parsed = parse(dateStr, format, new Date());\n field.onChange(parsed);\n\n // eslint-disable-next-line react-hooks/set-state-in-effect\n if (isDateValid(parsed)) setTemporalDate(parsed);\n if (errorText) field.onBlur();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [day, month, year]);\n\n // ── Click outside → close calendar ───────────────────────────────────────────\n useOnClickOutside({\n ref: menuRef,\n onAction: () => {\n setIsOpen(false);\n field.onBlur();\n },\n isActive: isOpen,\n exceptRef: containerRef,\n });\n\n // ── Container blur → close and trigger validation ─────────────────────────────\n const onContainerBlur = (e: React.FocusEvent<HTMLDivElement>) => {\n const related = e.relatedTarget as Node | null;\n const inContainer = containerRef.current?.contains(related);\n const inMenu = menuRef.current?.contains(related);\n if (inContainer || inMenu) return;\n setIsOpen(false);\n field.onBlur();\n };\n\n // ── Focus helper ──────────────────────────────────────────────────────────────\n const focusPart = (ref: { current: HTMLSpanElement | null }) => requestAnimationFrame(() => ref.current?.focus());\n\n // ── Segment key handlers ──────────────────────────────────────────────────────\n const onKeyDownDay = (e: React.KeyboardEvent<HTMLSpanElement>) => {\n if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(e.key) && isOpen) {\n e.preventDefault();\n e.stopPropagation();\n moveFocus(e.key);\n return;\n }\n if (e.key === 'Backspace' || e.key === 'Delete') {\n e.preventDefault();\n setDay('');\n dayBuffer.current = '';\n return;\n }\n if (!/^\\d$/.test(e.key)) return;\n e.preventDefault();\n dayBuffer.current = (dayBuffer.current + e.key).slice(-2);\n const num = parseInt(dayBuffer.current, 10);\n if (num === 0) {\n setDay('01');\n dayBuffer.current = '';\n return;\n }\n const clamped = Math.min(num, 31);\n setDay(String(clamped).padStart(2, '0'));\n if (num > 3 || dayBuffer.current.length >= 2) {\n dayBuffer.current = '';\n focusPart(isEnglish ? yearRef : monthRef);\n }\n };\n\n const onKeyDownMonth = (e: React.KeyboardEvent<HTMLSpanElement>) => {\n if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(e.key) && isOpen) {\n e.preventDefault();\n e.stopPropagation();\n moveFocus(e.key);\n return;\n }\n if (e.key === 'Backspace' || e.key === 'Delete') {\n e.preventDefault();\n setMonth('');\n monthBuffer.current = '';\n return;\n }\n if (!/^\\d$/.test(e.key)) return;\n e.preventDefault();\n monthBuffer.current = (monthBuffer.current + e.key).slice(-2);\n const num = parseInt(monthBuffer.current, 10);\n if (num === 0) {\n setMonth('01');\n monthBuffer.current = '';\n return;\n }\n const clamped = Math.min(num, 12);\n setMonth(String(clamped).padStart(2, '0'));\n if (num > 1 || monthBuffer.current.length >= 2) {\n monthBuffer.current = '';\n focusPart(isEnglish ? dayRef : yearRef);\n }\n };\n\n const onKeyDownYear = (e: React.KeyboardEvent<HTMLSpanElement>) => {\n if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(e.key) && isOpen) {\n e.preventDefault();\n e.stopPropagation();\n moveFocus(e.key);\n return;\n }\n if (e.key === 'Backspace' || e.key === 'Delete') {\n e.preventDefault();\n setYear('');\n yearBuffer.current = '';\n return;\n }\n if (!/^\\d$/.test(e.key)) return;\n e.preventDefault();\n yearBuffer.current = (yearBuffer.current + e.key).slice(-4);\n setYear(String(parseInt(yearBuffer.current, 10)).padStart(4, '0'));\n };\n\n // ── Calendar open / close ─────────────────────────────────────────────────────\n const openCalendar = () => {\n if (disabled) return;\n const base = isDateValid(field.value as Date) ? (field.value as Date) : today;\n setTemporalDate(base);\n setFocusedElement(base.getDate() - 1);\n setIsOpen(true);\n };\n\n const closeCalendar = () => setIsOpen(false);\n\n const toggleCalendar = () => (isOpen ? closeCalendar() : openCalendar());\n\n // ── Month navigation ──────────────────────────────────────────────────────────\n const onPrevMonth = () => {\n setTemporalDate(d => addMonths(d, -1));\n setFocusedElement(-1);\n };\n const onNextMonth = () => {\n setTemporalDate(d => addMonths(d, 1));\n setFocusedElement(-1);\n };\n\n const isPrevDisabled = isPrevMonthDisabled(temporalDate, { minDate, disablePast, today, format });\n const isNextDisabled = isNextMonthDisabled(temporalDate, { maxDate, disableFuture, today, format });\n\n // ── Keyboard navigation inside calendar ───────────────────────────────────────\n const moveFocus = (key: string) => {\n if (!isOpen) return;\n const delta = ({ ArrowRight: 1, ArrowLeft: -1, ArrowDown: 7, ArrowUp: -7 } as Record<string, number>)[key];\n if (!delta) return;\n\n if (focusedElement < 0) {\n if (flatDays.length > 0) setFocusedElement(0);\n return;\n }\n\n const base = flatDays[focusedElement];\n if (!base) return;\n\n const baseDate = parse(base.value, format, new Date());\n const candidate = addDays(baseDate, delta);\n\n if (isDateOutOfRange(candidate, { minDate, maxDate, disableFuture, disablePast, today })) return;\n\n if (candidate.getMonth() !== baseDate.getMonth() || candidate.getFullYear() !== baseDate.getFullYear()) {\n if (delta > 0 && isNextDisabled) return;\n if (delta < 0 && isPrevDisabled) return;\n setTemporalDate(startOfMonth(candidate));\n // flatDays[n] = day n+1 of month, so day n is at index n-1\n setFocusedElement(candidate.getDate() - 1);\n return;\n }\n\n const idx = flatDays.findIndex(d => d.value === formatDate(candidate, format));\n if (idx >= 0) setFocusedElement(idx);\n };\n\n // ── Day / year selection ──────────────────────────────────────────────────────\n const onSelectDay = (value: string, viaKeyboard?: boolean) => {\n const parsed = parse(value, format, new Date());\n field.onChange(parsed);\n const parts = splitDateParts(parsed);\n setDay(parts.day);\n setMonth(parts.month);\n setYear(parts.year);\n setIsOpen(false);\n if (viaKeyboard) requestAnimationFrame(() => iconWrapRef.current?.querySelector('button')?.focus());\n };\n\n const onSelectYear = (value: string) => {\n const parsed = parse(value, format, new Date());\n const base = isDateValid(field.value as Date) ? (field.value as Date) : today;\n const newDate = new Date(base);\n newDate.setFullYear(parsed.getFullYear());\n const final = parse(formatDate(newDate, format), format, new Date());\n field.onChange(final);\n const parts = splitDateParts(final);\n setDay(parts.day);\n setMonth(parts.month);\n setYear(parts.year);\n setTemporalDate(final);\n };\n\n // ── Keyboard on the container (handles Enter, Escape, Tab, and arrows) ────────\n const onKeyDownContainer = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Tab') {\n closeCalendar();\n return;\n }\n if (e.key === 'Escape') {\n closeCalendar();\n return;\n }\n if (e.key === 'Enter' && isOpen) {\n e.preventDefault();\n if (focusedElement >= 0 && flatDays[focusedElement] && !flatDays[focusedElement].isDisabled) {\n onSelectDay(flatDays[focusedElement].value);\n }\n }\n if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(e.key) && isOpen) {\n e.preventDefault();\n moveFocus(e.key);\n }\n };\n\n // ── Render helpers (language-dependent slot ordering) ─────────────────────────\n const firstRef = isEnglish ? monthRef : dayRef;\n const firstPlaceholder = isEnglish ? 'MM' : 'DD';\n const firstValue = isEnglish ? month : day;\n const onKeyDownFirst = isEnglish ? onKeyDownMonth : onKeyDownDay;\n const onFocusFirst = isEnglish\n ? () => {\n monthBuffer.current = '';\n }\n : () => {\n dayBuffer.current = '';\n };\n\n const secondRef = isEnglish ? dayRef : monthRef;\n const secondPlaceholder = isEnglish ? 'DD' : 'MM';\n const secondValue = isEnglish ? day : month;\n const onKeyDownSecond = isEnglish ? onKeyDownDay : onKeyDownMonth;\n const onFocusSecond = isEnglish\n ? () => {\n dayBuffer.current = '';\n }\n : () => {\n monthBuffer.current = '';\n };\n\n return (\n <div\n className={[CLASS, hasPadding ? `${CLASS}-paddingBottom` : '', className || ''].join(' ')}\n css={emotion(style)}\n data-testid={CLASS}\n >\n <div ref={containerRef} className={`${CLASS}-container`} onBlur={onContainerBlur} onKeyDown={onKeyDownContainer}>\n {/* ── Three spinbutton spans ───────────────────────────────────────── */}\n <div\n className={[\n `${CLASS}-fieldRow`,\n isFieldOpen ? `${CLASS}-open` : '',\n errorText ? `${CLASS}-error` : '',\n disabled ? `${CLASS}-disabled` : '',\n ].join(' ')}\n onClick={e => {\n if (e.target === e.currentTarget) firstRef.current?.focus();\n }}\n data-testid={`${CLASS}-fieldRow`}\n >\n <span\n ref={firstRef}\n role='spinbutton'\n aria-label={isEnglish ? 'Month' : 'Day'}\n aria-valuenow={parseInt(firstValue) || undefined}\n aria-valuemin={1}\n aria-valuemax={isEnglish ? 12 : 31}\n aria-valuetext={firstValue || firstPlaceholder}\n className={[`${CLASS}-partInput`, !firstValue ? `${CLASS}-placeholder` : ''].filter(Boolean).join(' ')}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={onKeyDownFirst}\n onFocus={onFocusFirst}\n data-testid={`${CLASS}-first`}\n >\n {firstValue || firstPlaceholder}\n </span>\n <span className={`${CLASS}-separator`}>/</span>\n <span\n ref={secondRef}\n role='spinbutton'\n aria-label={isEnglish ? 'Day' : 'Month'}\n aria-valuenow={parseInt(secondValue) || undefined}\n aria-valuemin={1}\n aria-valuemax={isEnglish ? 31 : 12}\n aria-valuetext={secondValue || secondPlaceholder}\n className={[`${CLASS}-partInput`, !secondValue ? `${CLASS}-placeholder` : ''].filter(Boolean).join(' ')}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={onKeyDownSecond}\n onFocus={onFocusSecond}\n data-testid={`${CLASS}-second`}\n >\n {secondValue || secondPlaceholder}\n </span>\n <span className={`${CLASS}-separator`}>/</span>\n <span\n ref={yearRef}\n role='spinbutton'\n aria-label='Year'\n aria-valuenow={parseInt(year) || undefined}\n aria-valuemin={1900}\n aria-valuemax={2100}\n aria-valuetext={year || 'YYYY'}\n className={[`${CLASS}-partInput`, !year ? `${CLASS}-placeholder` : ''].filter(Boolean).join(' ')}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={onKeyDownYear}\n onFocus={() => {\n yearBuffer.current = '';\n }}\n data-testid={`${CLASS}-year`}\n >\n {year || 'YYYY'}\n </span>\n </div>\n\n {/* ── Calendar icon button ─────────────────────────────────────────── */}\n <div ref={iconWrapRef} className={`${CLASS}-adornment`}>\n <IconButton\n className={`${CLASS}-calendarIcon`}\n onClick={toggleCalendar}\n icon={<Icon name='event' />}\n disabled={disabled}\n tabIndex={0}\n data-testid={`${CLASS}-calendarIcon`}\n />\n </div>\n\n {/* ── Fieldset border ──────────────────────────────────────────────── */}\n <fieldset aria-hidden='true' className={`${CLASS}-fieldset`}>\n <legend className={`${CLASS}-legend`}>\n <span className={`${CLASS}-text`}>{label}</span>\n </legend>\n </fieldset>\n <span className={`${CLASS}-label`}>{label}</span>\n </div>\n\n {/* ── Helper / error text ──────────────────────────────────────────────── */}\n {(showErrorText || helperText) && (\n <span className={`${CLASS}-helperText`} data-testid={`${CLASS}-helperText`}>\n {helperText && !errorText && helperText}\n {showErrorText && errorText && errorText.message}\n </span>\n )}\n\n {/* ── Calendar popup ───────────────────────────────────────────────────── */}\n <DatePickerMenu\n ref={menuRef}\n isOpen={isOpen}\n hasStaticOptions={hasStaticOptions}\n language={language}\n monthLabel={monthLabel}\n yearLabel={yearLabel}\n onPrevMonth={onPrevMonth}\n onNextMonth={onNextMonth}\n disablePrev={isPrevDisabled}\n disableNext={isNextDisabled}\n weeks={weeks}\n years={years}\n daysOfWeek={daysOfWeek}\n selectedValue={isDateValid(field.value as Date) ? (field.value as Date) : undefined}\n format={format}\n today={today}\n focusedElement={focusedElement}\n onSelectDay={onSelectDay}\n onSelectYear={onSelectYear}\n onMoveFocus={moveFocus}\n onClose={closeCalendar}\n />\n </div>\n );\n};\n\nexport default DatePicker;\n","import { useCreateComponentStyles } from '@hocs/ThemeProvider/useThemeProvider.hook';\nimport { Component } from '@hocs/ThemeProvider/interfaces';\nimport type { DatePickerStyleProps } from './DatePicker.interface';\nimport type { FieldValues } from 'react-hook-form';\nimport DatePickerBase from './DatePicker';\n\nconst DatePicker = <TFieldValues extends FieldValues = FieldValues>({\n theme,\n variant = 'default',\n ...rest\n}: DatePickerStyleProps<TFieldValues>) => {\n const { componentStyles } = useCreateComponentStyles([Component.DATEPICKER], theme, variant.toUpperCase());\n\n return <DatePickerBase {...rest} style={componentStyles} />;\n};\n\nexport default DatePicker;\n","import { css } from '@emotion/react';\nimport { getStyle } from '@utilities/emotion/styles';\n\nconst border = (theme: Record<string, string>, event: string): string => `\n // BORDERS\n ${getStyle(theme, 'border-color', `--TEXTFIELD-EVENTS-${event}-BORDER-COLOR`)};\n ${getStyle(theme, 'border-width', `--TEXTFIELD-EVENTS-${event}-BORDER-WIDTH`)};\n ${getStyle(theme, 'border-style', `--TEXTFIELD-EVENTS-${event}-BORDER-STYLE`)};\n`;\n\nconst typography = (theme: Record<string, string>, event: string): string => `\n // TYPOGRAPHY\n ${getStyle(theme, 'color', `--TEXTFIELD-EVENTS-${event}-COLOR-PRIMARY`)};\n ${getStyle(theme, 'caret-color', `--TEXTFIELD-EVENTS-${event}-COLOR-PRIMARY`)};\n`;\n\nconst labelStyles = (theme: Record<string, string>, event: string, activateLabel = false): string => {\n return `\n ${getStyle(theme, 'color', `--TEXTFIELD-EVENTS-${event}-COLOR-SECONDARY`)};\n ${activateLabel ? 'transform: translate(14px, -24px); font-size: 0.75rem;' : ''};\n`;\n};\n\nconst legendStyles = (activate: boolean): string => `\n .--TEXTFIELD-legend {\n max-width: ${activate ? '100%' : '0px'};\n }\n`;\n\nconst container = (theme: Record<string, string>, event: string): string => `\n ${getStyle(theme, 'background-color', `--TEXTFIELD-EVENTS-${event}-BACKGROUND-COLOR`)};\n ~ .--TEXTFIELD-helperText {\n ${getStyle(theme, 'color', `--TEXTFIELD-EVENTS-${event}-COLOR-TERTIARY`)};\n }\n`;\n\nconst Style = (theme: Record<string, string>) => css`\n &.--TEXTFIELD {\n position: relative;\n padding: 0;\n border: 0;\n width: 100%;\n\n &.--TEXTFIELD-paddingBottom {\n padding-bottom: 24px;\n }\n\n .--TEXTFIELD-container {\n box-sizing: border-box;\n position: relative;\n display: inline-flex;\n align-items: center;\n\n // Safari Firefox Chrome/Edge\n width: -webkit-fill-available;\n width: -moz-available;\n width: stretch;\n\n ${getStyle(theme, 'border-radius', '--TEXTFIELD-ROOT-BORDER-RADIUS')};\n\n // ENABLED\n ${container(theme, 'ENABLED')};\n\n // VALUE\n &:has(.--TEXTFIELD-inputField:not(:placeholder-shown)),\n &:has(.--TEXTFIELD-inputField[placeholder]:not([placeholder=' '])),\n &:has(.--TEXTFIELD-inputField:-webkit-autofill),\n &:has(.--TEXTFIELD-inputField.--TEXTFIELD-open) {\n ${container(theme, 'VALUE')};\n }\n\n // HOVER\n &:has(.--TEXTFIELD-inputField:hover) {\n ${container(theme, 'HOVER')};\n }\n\n // ACTIVE\n &:has(.--TEXTFIELD-inputField:active, .--TEXTFIELD-inputField.--TEXTFIELD-active) {\n ${container(theme, 'ACTIVE')};\n }\n\n // FOCUS\n &:has(.--TEXTFIELD-inputField:focus-visible) {\n outline: none;\n ${container(theme, 'FOCUS')};\n }\n\n // ERROR\n &:has(.--TEXTFIELD-inputField.--TEXTFIELD-error) {\n ${container(theme, 'ERROR')};\n }\n\n // ERROR + VALUE\n &:has(.--TEXTFIELD-inputField.--TEXTFIELD-error:not(:placeholder-shown)),\n &:has(.--TEXTFIELD-inputField.--TEXTFIELD-error[placeholder]:not([placeholder=' '])) {\n ${container(theme, 'ERROR_VALUE')};\n }\n\n // ERROR + HOVER\n &:has(.--TEXTFIELD-inputField.--TEXTFIELD-error:hover) {\n ${container(theme, 'ERROR_HOVER')};\n }\n\n // ERROR + ACTIVE\n &:has(\n .--TEXTFIELD-inputField.--TEXTFIELD-error:active,\n .--TEXTFIELD-inputField.--TEXTFIELD-error.--TEXTFIELD-active\n ) {\n ${container(theme, 'ERROR_ACTIVE')};\n }\n\n // ERROR + FOCUS\n &:has(.--TEXTFIELD-inputField.--TEXTFIELD-error:focus-visible) {\n ${container(theme, 'ERROR_FOCUS')};\n }\n\n // DISABLED\n &:has(.--TEXTFIELD-inputField:disabled) {\n pointer-events: none;\n ${container(theme, 'DISABLED')};\n }\n\n // DISABLED + VALUE\n &:has(.--TEXTFIELD-inputField:disabled:not(:placeholder-shown)),\n &:has(.--TEXTFIELD-inputField:disabled[placeholder]:not([placeholder=' '])) {\n pointer-events: none;\n ${container(theme, 'DISABLED_VALUE')};\n }\n\n .--TEXTFIELD-inputField {\n // FONT\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.875rem; // 14px\n font-weight: 500;\n letter-spacing: 0.01em;\n line-height: 1;\n\n // Safari Firefox Chrome/Edge\n height: -webkit-fill-available;\n height: -moz-available;\n height: stretch;\n width: -webkit-fill-available;\n width: -moz-available;\n width: stretch;\n\n min-width: 0;\n border: 0;\n margin: 0;\n padding: 15px 14px;\n background-color: transparent;\n cursor: text;\n display: block;\n box-sizing: border-box;\n\n &.--TEXTFIELD-right {\n padding-right: 0px;\n }\n\n &.--TEXTFIELD-left {\n padding-left: 0px;\n }\n\n // ENABLED\n ${typography(theme, 'ENABLED')};\n ~ .--TEXTFIELD-label {\n ${labelStyles(theme, 'ENABLED')};\n }\n ~ .--TEXTFIELD-fieldset {\n ${border(theme, 'ENABLED')};\n }\n\n // VALUE\n &:not(:placeholder-shown),\n &[placeholder]:not([placeholder=' ']),\n &:-webkit-autofill,\n &.--TEXTFIELD-open {\n ${typography(theme, 'VALUE')};\n ~ .--TEXTFIELD-label {\n ${labelStyles(theme, 'VALUE', true)};\n }\n ~ .--TEXTFIELD-fieldset {\n ${border(theme, 'VALUE')};\n ${legendStyles(true)};\n }\n }\n\n // Autocomplete\n &:-webkit-autofill {\n -webkit-background-clip: text;\n ${getStyle(theme, '-webkit-text-fill-color', '--TEXTFIELD-EVENTS-ENABLED-COLOR-PRIMARY')};\n }\n\n // HOVER\n &:hover {\n ${typography(theme, 'HOVER')};\n ~ .--TEXTFIELD-label {\n ${labelStyles(theme, 'HOVER')};\n }\n ~ .--TEXTFIELD-fieldset {\n ${border(theme, 'HOVER')};\n }\n }\n\n // ACTIVE\n &:active,\n &.--TEXTFIELD-active {\n ${typography(theme, 'ACTIVE')};\n ~ .--TEXTFIELD-label {\n ${labelStyles(theme, 'ACTIVE')};\n }\n ~ .--TEXTFIELD-fieldset {\n ${border(theme, 'ACTIVE')};\n }\n }\n\n // FOCUS\n &:focus-visible {\n outline: none;\n ${typography(theme, 'FOCUS')};\n ~ .--TEXTFIELD-label {\n ${labelStyles(theme, 'FOCUS', true)};\n }\n ~ .--TEXTFIELD-fieldset {\n ${border(theme, 'FOCUS')};\n ${legendStyles(true)};\n }\n }\n\n // ERROR\n &.--TEXTFIELD-error {\n ${typography(theme, 'ERROR')};\n ~ .--TEXTFIELD-label {\n ${labelStyles(theme, 'ERROR')};\n }\n ~ .--TEXTFIELD-fieldset {\n ${border(theme, 'ERROR')};\n }\n }\n\n // ERROR + VALUE\n &.--TEXTFIELD-error:not(:placeholder-shown),\n &.--TEXTFIELD-error[placeholder]:not([placeholder=' ']) {\n ${typography(theme, 'ERROR_VALUE')};\n ~ .--TEXTFIELD-label {\n ${labelStyles(theme, 'ERROR_VALUE')};\n }\n ~ .--TEXTFIELD-fieldset {\n ${border(theme, 'ERROR_VALUE')};\n }\n }\n\n // ERROR + HOVER\n &.--TEXTFIELD-error:hover {\n ${typography(theme, 'ERROR_HOVER')};\n ~ .--TEXTFIELD-label {\n ${labelStyles(theme, 'ERROR_HOVER')};\n }\n ~ .--TEXTFIELD-fieldset {\n ${border(theme, 'ERROR_HOVER')};\n }\n }\n\n // ERROR + ACTIVE\n &.--TEXTFIELD-error:active,\n &.--TEXTFIELD-error.--TEXTFIELD-active {\n ${typography(theme, 'ERROR_ACTIVE')};\n ~ .--TEXTFIELD-label {\n ${labelStyles(theme, 'ERROR_ACTIVE')};\n }\n ~ .--TEXTFIELD-fieldset {\n ${border(theme, 'ERROR_ACTIVE')};\n }\n }\n\n // ERROR + FOCUS\n &.--TEXTFIELD-error:focus-visible {\n ${typography(theme, 'ERROR_FOCUS')};\n ~ .--TEXTFIELD-label {\n ${labelStyles(theme, 'ERROR_FOCUS')};\n }\n ~ .--TEXTFIELD-fieldset {\n ${border(theme, 'ERROR_FOCUS')};\n }\n }\n\n // DISABLED\n &:disabled {\n user-select: none;\n pointer-events: none;\n ${typography(theme, 'DISABLED')};\n ~ .--TEXTFIELD-label {\n ${labelStyles(theme, 'DISABLED')};\n }\n ~ .--TEXTFIELD-fieldset {\n ${border(theme, 'DISABLED')};\n }\n }\n\n // DISABLED + VALUE\n &:disabled:not(:placeholder-shown),\n &:disabled[placeholder]:not([placeholder=' ']) {\n user-select: none;\n pointer-events: none;\n ${typography(theme, 'DISABLED_VALUE')};\n ~ .--TEXTFIELD-label {\n ${labelStyles(theme, 'DISABLED_VALUE')};\n }\n ~ .--TEXTFIELD-fieldset {\n ${border(theme, 'DISABLED_VALUE')};\n }\n }\n }\n\n .--TEXTFIELD-label {\n // FONT\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.875rem; // 14px\n font-weight: 500;\n letter-spacing: 0.01em;\n line-height: normal;\n\n padding: 0;\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n position: absolute;\n pointer-events: none;\n z-index: 4;\n\n // ANIMATION\n transform: translate(14px, 0px);\n transition: 150ms ease-in-out;\n }\n\n .--TEXTFIELD-fieldset {\n // Safari Firefox Chrome/Edge\n height: 100%;\n width: -webkit-fill-available;\n width: -moz-available;\n width: stretch;\n\n text-align: left;\n position: absolute;\n margin: 0;\n padding: 0 6px;\n pointer-events: none;\n overflow: hidden;\n z-index: 5;\n box-sizing: border-box;\n ${getStyle(theme, 'border-radius', '--TEXTFIELD-ROOT-BORDER-RADIUS')};\n -webkit-tap-highlight-color: transparent;\n\n .--TEXTFIELD-legend {\n width: auto;\n overflow: hidden;\n display: block;\n padding: 0;\n height: 0px;\n visibility: hidden;\n\n // Animation\n max-width: 0px;\n transition: max-width 150ms ease-in-out;\n\n .--TEXTFIELD-text {\n // FONT\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.75rem; // 12px\n letter-spacing: 0.01em;\n font-weight: 500;\n padding: 0px 7px;\n }\n }\n }\n\n .--TEXTFIELD-adornment {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 0px 12px;\n }\n }\n\n .--TEXTFIELD-helperText {\n // FONT\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.75rem; // 12px\n line-height: 1;\n\n display: block;\n margin-top: 8px;\n margin-left: 14px;\n height: 16px;\n }\n }\n`;\n\nexport default Style;\n","import React, { useState, type JSX } from 'react';\nimport emotion from './TextField.emotion';\nimport type { TextFieldBaseProps, TextFieldProps } from './TextField.interface';\nimport { useController, type FieldValues, type FieldPath } from 'react-hook-form';\n\nconst CLASS = '--TEXTFIELD';\n\nconst Adornment = ({ children }: { children: JSX.Element }) => <div className={`${CLASS}-adornment`}>{children}</div>;\n\nexport const TextFieldBase = ({\n label,\n value,\n onChange,\n error,\n style = {},\n width,\n disabled,\n type = 'text',\n regex,\n hasPadding = false,\n format,\n startAdornment,\n endAdornment,\n helperText,\n showErrorText = true,\n className,\n onBlur,\n ...rest\n}: TextFieldBaseProps) => {\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n event.preventDefault();\n const inputValue = event.target.value;\n if ((regex && regex.test(inputValue)) || !regex) {\n const valueToSet = format && inputValue ? format(inputValue) : inputValue;\n onChange(valueToSet);\n }\n };\n\n return (\n <div\n className={[CLASS, hasPadding ? `${CLASS}-paddingBottom` : '', className || ''].join(' ')}\n css={emotion(style)}\n data-testid={CLASS}\n >\n <div className={`${CLASS}-container`}>\n {startAdornment && <Adornment>{startAdornment}</Adornment>}\n\n <input\n className={[\n `${CLASS}-inputField`,\n error && `${CLASS}-error`,\n startAdornment && `${CLASS}-open`,\n startAdornment && `${CLASS}-left`,\n endAdornment && `${CLASS}-right`,\n ].join(' ')}\n placeholder=' '\n value={value}\n disabled={disabled}\n data-testid={`${CLASS}-inputField`}\n onChange={handleChange}\n onBlur={onBlur}\n type={type}\n {...rest}\n />\n\n {endAdornment && <Adornment>{endAdornment}</Adornment>}\n\n <fieldset aria-hidden='true' className={`${CLASS}-fieldset`}>\n <legend className={`${CLASS}-legend`}>\n <span className={`${CLASS}-text`}>{label}</span>\n </legend>\n </fieldset>\n <span className={`${CLASS}-label`}>{label}</span>\n </div>\n {(showErrorText || helperText) && (\n <span className={`${CLASS}-helperText`} data-testid={`${CLASS}-helperText`}>\n {helperText && (!error || !showErrorText) && helperText}\n {showErrorText && error && error.message}\n </span>\n )}\n </div>\n );\n};\n\nconst TextFieldRHF = <TFieldValues extends FieldValues = FieldValues>({\n name,\n control,\n ...rest\n}: TextFieldProps<TFieldValues>) => {\n const { field, fieldState } = useController({\n control: control!,\n name: name as FieldPath<TFieldValues>,\n });\n const [value, setValue] = useState<string>(field.value || '');\n const errorText = fieldState.error;\n\n const onChange = (val: string) => {\n field.onChange(val);\n setValue(val);\n if (errorText) field.onBlur();\n };\n\n return (\n <TextFieldBase\n {...rest}\n name={name}\n value={value}\n onChange={onChange}\n onBlur={() => field.onBlur()}\n error={errorText}\n />\n );\n};\n\nconst TextField = <TFieldValues extends FieldValues = FieldValues>(props: TextFieldProps<TFieldValues>) => {\n if (!props.control) {\n const { name, control, onValueChange, value, ...rest } = props;\n return <TextFieldBase {...rest} name={name} value={value || ''} onChange={onValueChange || (() => {})} />;\n }\n return <TextFieldRHF {...props} />;\n};\n\nexport default TextField;\n","import { useCreateComponentStyles } from '@hocs/ThemeProvider/useThemeProvider.hook';\nimport { Component } from '@hocs/ThemeProvider/interfaces';\nimport type { TextFieldStyleProps } from './TextField.interface';\nimport type { FieldValues } from 'react-hook-form';\nimport TextFieldBase from './TextField';\n\nconst TextField = <TFieldValues extends FieldValues = FieldValues>({\n theme,\n variant = 'default',\n ...rest\n}: TextFieldStyleProps<TFieldValues>) => {\n const { componentStyles } = useCreateComponentStyles([Component.TEXTFIELD], theme, variant.toUpperCase());\n\n return <TextFieldBase {...rest} style={componentStyles} />;\n};\n\nexport default TextField;\n","import { css } from '@emotion/react';\nimport { getStyle } from '@utilities/emotion/styles';\n\nconst border = (theme: Record<string, string>, event: string): string => `\n // BORDERS\n ${getStyle(theme, 'border-color', `--NUMBERFIELD-EVENTS-${event}-BORDER-COLOR`)};\n ${getStyle(theme, 'border-width', `--NUMBERFIELD-EVENTS-${event}-BORDER-WIDTH`)};\n ${getStyle(theme, 'border-style', `--NUMBERFIELD-EVENTS-${event}-BORDER-STYLE`)};\n`;\n\nconst typography = (theme: Record<string, string>, event: string): string => `\n // TYPOGRAPHY\n ${getStyle(theme, 'color', `--NUMBERFIELD-EVENTS-${event}-COLOR-PRIMARY`)};\n ${getStyle(theme, 'caret-color', `--NUMBERFIELD-EVENTS-${event}-COLOR-PRIMARY`)};\n`;\n\nconst labelStyles = (theme: Record<string, string>, event: string, activateLabel = false): string => {\n return `\n ${getStyle(theme, 'color', `--NUMBERFIELD-EVENTS-${event}-COLOR-SECONDARY`)};\n ${activateLabel ? 'transform: translate(14px, -24px); font-size: 0.75rem;' : ''};\n`;\n};\n\nconst legendStyles = (activate: boolean): string => `\n .--NUMBERFIELD-legend {\n max-width: ${activate ? '100%' : '0px'};\n }\n`;\n\nconst container = (theme: Record<string, string>, event: string): string => `\n ${getStyle(theme, 'background-color', `--NUMBERFIELD-EVENTS-${event}-BACKGROUND-COLOR`)};\n ~ .--NUMBERFIELD-helperText {\n ${getStyle(theme, 'color', `--NUMBERFIELD-EVENTS-${event}-COLOR-TERTIARY`)};\n }\n`;\n\nconst Style = (theme: Record<string, string>) => css`\n &.--NUMBERFIELD {\n position: relative;\n padding: 0;\n border: 0;\n width: 100%;\n\n &.--NUMBERFIELD-paddingBottom {\n padding-bottom: 24px;\n }\n\n .--NUMBERFIELD-container {\n box-sizing: border-box;\n position: relative;\n display: inline-flex;\n align-items: center;\n\n // Safari Firefox Chrome/Edge\n width: -webkit-fill-available;\n width: -moz-available;\n width: stretch;\n\n ${getStyle(theme, 'border-radius', '--NUMBERFIELD-ROOT-BORDER-RADIUS')};\n\n // ENABLED\n ${container(theme, 'ENABLED')};\n\n // VALUE\n &:has(.--NUMBERFIELD-inputField:not(:placeholder-shown)),\n &:has(.--NUMBERFIELD-inputField[placeholder]:not([placeholder=' '])),\n &:has(.--NUMBERFIELD-inputField:-webkit-autofill),\n &:has(.--NUMBERFIELD-inputField.--NUMBERFIELD-open) {\n ${container(theme, 'VALUE')};\n }\n\n // HOVER\n &:has(.--NUMBERFIELD-inputField:hover) {\n ${container(theme, 'HOVER')};\n }\n\n // ACTIVE\n &:has(.--NUMBERFIELD-inputField:active, .--NUMBERFIELD-inputField.--NUMBERFIELD-active) {\n ${container(theme, 'ACTIVE')};\n }\n\n // FOCUS\n &:has(.--NUMBERFIELD-inputField:focus-visible) {\n outline: none;\n ${container(theme, 'FOCUS')};\n }\n\n // ERROR\n &:has(.--NUMBERFIELD-inputField.--NUMBERFIELD-error) {\n ${container(theme, 'ERROR')};\n }\n\n // ERROR + VALUE\n &:has(.--NUMBERFIELD-inputField.--NUMBERFIELD-error:not(:placeholder-shown)),\n &:has(.--NUMBERFIELD-inputField.--NUMBERFIELD-error[placeholder]:not([placeholder=' '])) {\n ${container(theme, 'ERROR_VALUE')};\n }\n\n // ERROR + HOVER\n &:has(.--NUMBERFIELD-inputField.--NUMBERFIELD-error:hover) {\n ${container(theme, 'ERROR_HOVER')};\n }\n\n // ERROR + ACTIVE\n &:has(\n .--NUMBERFIELD-inputField.--NUMBERFIELD-error:active,\n .--NUMBERFIELD-inputField.--NUMBERFIELD-error.--NUMBERFIELD-active\n ) {\n ${container(theme, 'ERROR_ACTIVE')};\n }\n\n // ERROR + FOCUS\n &:has(.--NUMBERFIELD-inputField.--NUMBERFIELD-error:focus-visible) {\n ${container(theme, 'ERROR_FOCUS')};\n }\n\n // DISABLED\n &:has(.--NUMBERFIELD-inputField:disabled) {\n pointer-events: none;\n ${container(theme, 'DISABLED')};\n }\n\n // DISABLED + VALUE\n &:has(.--NUMBERFIELD-inputField:disabled:not(:placeholder-shown)),\n &:has(.--NUMBERFIELD-inputField:disabled[placeholder]:not([placeholder=' '])) {\n pointer-events: none;\n ${container(theme, 'DISABLED_VALUE')};\n }\n\n .--NUMBERFIELD-inputField {\n // FONT\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.875rem; // 14px\n font-weight: 500;\n letter-spacing: 0.01em;\n line-height: 1;\n\n // Safari Firefox Chrome/Edge\n height: -webkit-fill-available;\n height: -moz-available;\n height: stretch;\n width: -webkit-fill-available;\n width: -moz-available;\n width: stretch;\n\n min-width: 0;\n border: 0;\n margin: 0;\n padding: 15px 14px;\n background-color: transparent;\n cursor: text;\n display: block;\n box-sizing: border-box;\n\n // Always has end adornment (remove/add buttons)\n padding-right: 0px;\n\n &.--NUMBERFIELD-left {\n padding-left: 0px;\n }\n\n &.--NUMBERFIELD-spinner {\n text-align: center;\n }\n\n // Hide native number spinners\n -moz-appearance: textfield;\n &::-webkit-inner-spin-button,\n &::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n // ENABLED\n ${typography(theme, 'ENABLED')};\n ~ .--NUMBERFIELD-label {\n ${labelStyles(theme, 'ENABLED')};\n }\n ~ .--NUMBERFIELD-fieldset {\n ${border(theme, 'ENABLED')};\n }\n\n // VALUE\n &:not(:placeholder-shown),\n &[placeholder]:not([placeholder=' ']),\n &:-webkit-autofill,\n &.--NUMBERFIELD-open {\n ${typography(theme, 'VALUE')};\n ~ .--NUMBERFIELD-label {\n ${labelStyles(theme, 'VALUE', true)};\n }\n ~ .--NUMBERFIELD-fieldset {\n ${border(theme, 'VALUE')};\n ${legendStyles(true)};\n }\n }\n\n // Autocomplete\n &:-webkit-autofill {\n -webkit-background-clip: text;\n ${getStyle(theme, '-webkit-text-fill-color', '--NUMBERFIELD-EVENTS-ENABLED-COLOR-PRIMARY')};\n }\n\n // HOVER\n &:hover {\n ${typography(theme, 'HOVER')};\n ~ .--NUMBERFIELD-label {\n ${labelStyles(theme, 'HOVER')};\n }\n ~ .--NUMBERFIELD-fieldset {\n ${border(theme, 'HOVER')};\n }\n }\n\n // ACTIVE\n &:active,\n &.--NUMBERFIELD-active {\n ${typography(theme, 'ACTIVE')};\n ~ .--NUMBERFIELD-label {\n ${labelStyles(theme, 'ACTIVE')};\n }\n ~ .--NUMBERFIELD-fieldset {\n ${border(theme, 'ACTIVE')};\n }\n }\n\n // FOCUS\n &:focus-visible {\n outline: none;\n ${typography(theme, 'FOCUS')};\n ~ .--NUMBERFIELD-label {\n ${labelStyles(theme, 'FOCUS', true)};\n }\n ~ .--NUMBERFIELD-fieldset {\n ${border(theme, 'FOCUS')};\n ${legendStyles(true)};\n }\n }\n\n // ERROR\n &.--NUMBERFIELD-error {\n ${typography(theme, 'ERROR')};\n ~ .--NUMBERFIELD-label {\n ${labelStyles(theme, 'ERROR')};\n }\n ~ .--NUMBERFIELD-fieldset {\n ${border(theme, 'ERROR')};\n }\n }\n\n // ERROR + VALUE\n &.--NUMBERFIELD-error:not(:placeholder-shown),\n &.--NUMBERFIELD-error[placeholder]:not([placeholder=' ']) {\n ${typography(theme, 'ERROR_VALUE')};\n ~ .--NUMBERFIELD-label {\n ${labelStyles(theme, 'ERROR_VALUE')};\n }\n ~ .--NUMBERFIELD-fieldset {\n ${border(theme, 'ERROR_VALUE')};\n }\n }\n\n // ERROR + HOVER\n &.--NUMBERFIELD-error:hover {\n ${typography(theme, 'ERROR_HOVER')};\n ~ .--NUMBERFIELD-label {\n ${labelStyles(theme, 'ERROR_HOVER')};\n }\n ~ .--NUMBERFIELD-fieldset {\n ${border(theme, 'ERROR_HOVER')};\n }\n }\n\n // ERROR + ACTIVE\n &.--NUMBERFIELD-error:active,\n &.--NUMBERFIELD-error.--NUMBERFIELD-active {\n ${typography(theme, 'ERROR_ACTIVE')};\n ~ .--NUMBERFIELD-label {\n ${labelStyles(theme, 'ERROR_ACTIVE')};\n }\n ~ .--NUMBERFIELD-fieldset {\n ${border(theme, 'ERROR_ACTIVE')};\n }\n }\n\n // ERROR + FOCUS\n &.--NUMBERFIELD-error:focus-visible {\n ${typography(theme, 'ERROR_FOCUS')};\n ~ .--NUMBERFIELD-label {\n ${labelStyles(theme, 'ERROR_FOCUS')};\n }\n ~ .--NUMBERFIELD-fieldset {\n ${border(theme, 'ERROR_FOCUS')};\n }\n }\n\n // DISABLED\n &:disabled {\n user-select: none;\n pointer-events: none;\n ${typography(theme, 'DISABLED')};\n ~ .--NUMBERFIELD-label {\n ${labelStyles(theme, 'DISABLED')};\n }\n ~ .--NUMBERFIELD-fieldset {\n ${border(theme, 'DISABLED')};\n }\n }\n\n // DISABLED + VALUE\n &:disabled:not(:placeholder-shown),\n &:disabled[placeholder]:not([placeholder=' ']) {\n user-select: none;\n pointer-events: none;\n ${typography(theme, 'DISABLED_VALUE')};\n ~ .--NUMBERFIELD-label {\n ${labelStyles(theme, 'DISABLED_VALUE')};\n }\n ~ .--NUMBERFIELD-fieldset {\n ${border(theme, 'DISABLED_VALUE')};\n }\n }\n }\n\n .--NUMBERFIELD-label {\n // FONT\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.875rem; // 14px\n font-weight: 500;\n letter-spacing: 0.01em;\n line-height: normal;\n\n padding: 0;\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n position: absolute;\n pointer-events: none;\n z-index: 4;\n\n // ANIMATION\n transform: translate(14px, 0px);\n transition: 150ms ease-in-out;\n }\n\n .--NUMBERFIELD-fieldset {\n // Safari Firefox Chrome/Edge\n height: 100%;\n width: -webkit-fill-available;\n width: -moz-available;\n width: stretch;\n\n text-align: left;\n position: absolute;\n margin: 0;\n padding: 0 6px;\n pointer-events: none;\n overflow: hidden;\n z-index: 5;\n box-sizing: border-box;\n ${getStyle(theme, 'border-radius', '--NUMBERFIELD-ROOT-BORDER-RADIUS')};\n -webkit-tap-highlight-color: transparent;\n\n .--NUMBERFIELD-legend {\n width: auto;\n overflow: hidden;\n display: block;\n padding: 0;\n height: 0px;\n visibility: hidden;\n\n // Animation\n max-width: 0px;\n transition: max-width 150ms ease-in-out;\n\n .--NUMBERFIELD-text {\n // FONT\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.75rem; // 12px\n letter-spacing: 0.01em;\n font-weight: 500;\n padding: 0px 7px;\n }\n }\n }\n\n .--NUMBERFIELD-adornment {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 0px 12px;\n }\n }\n\n .--NUMBERFIELD-helperText {\n // FONT\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.75rem; // 12px\n line-height: 1;\n\n display: block;\n margin-top: 8px;\n margin-left: 14px;\n height: 16px;\n }\n }\n`;\n\nexport default Style;\n","import React, { useState, type JSX } from 'react';\nimport { useController, type FieldValues, type FieldPath } from 'react-hook-form';\nimport emotion from './NumberField.emotion';\nimport type { NumberFieldBaseProps, NumberFieldProps } from './NumberField.interface';\nimport IconButton from '@components/atoms/IconButton';\nimport Icon from '@components/atoms/Icon';\n\nconst CLASS = '--NUMBERFIELD';\n\nconst Adornment = ({ children }: { children: JSX.Element }) => <div className={`${CLASS}-adornment`}>{children}</div>;\n\nexport const NumberFieldBase = ({\n label,\n value,\n onChange,\n error,\n style = {},\n width,\n disabled,\n regex,\n hasPadding = false,\n format,\n startAdornment,\n helperText,\n showErrorText = true,\n className,\n onBlur,\n min,\n max,\n step = 1,\n display = 'standard',\n ...rest\n}: NumberFieldBaseProps) => {\n const numValue = value === '' ? NaN : parseFloat(value);\n\n const handleDecrement = () => {\n const base = isNaN(numValue) ? (min ?? 0) : numValue;\n const next = parseFloat((base - step).toFixed(10));\n const bounded = min !== undefined ? Math.max(min, next) : next;\n onChange(String(bounded));\n };\n\n const handleIncrement = () => {\n const base = isNaN(numValue) ? (min ?? 0) : numValue;\n const next = parseFloat((base + step).toFixed(10));\n const bounded = max !== undefined ? Math.min(max, next) : next;\n onChange(String(bounded));\n };\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n event.preventDefault();\n const inputValue = event.target.value;\n if ((regex && regex.test(inputValue)) || !regex) {\n const valueToSet = format && inputValue ? format(inputValue) : inputValue;\n onChange(valueToSet);\n }\n };\n\n const atMin = !isNaN(numValue) && min !== undefined && numValue <= min;\n const atMax = !isNaN(numValue) && max !== undefined && numValue >= max;\n\n const decrementButton = (\n <IconButton\n icon={<Icon name='remove' />}\n onClick={handleDecrement}\n disabled={disabled || atMin}\n aria-label='Decrease value'\n />\n );\n\n const incrementButton = (\n <IconButton\n icon={<Icon name='add' />}\n onClick={handleIncrement}\n disabled={disabled || atMax}\n aria-label='Increase value'\n />\n );\n\n const isSpinner = display === 'spinner';\n const hasLeftAdornment = isSpinner || !!startAdornment;\n\n return (\n <div\n className={[CLASS, hasPadding ? `${CLASS}-paddingBottom` : '', className || ''].join(' ')}\n css={emotion(style)}\n data-testid={CLASS}\n >\n <div className={`${CLASS}-container`}>\n {isSpinner ? (\n <Adornment>{decrementButton}</Adornment>\n ) : (\n startAdornment && <Adornment>{startAdornment}</Adornment>\n )}\n\n <input\n className={[\n `${CLASS}-inputField`,\n error && `${CLASS}-error`,\n hasLeftAdornment && `${CLASS}-open`,\n hasLeftAdornment && `${CLASS}-left`,\n isSpinner && `${CLASS}-spinner`,\n ].join(' ')}\n placeholder=' '\n value={value}\n disabled={disabled}\n data-testid={`${CLASS}-inputField`}\n onChange={handleChange}\n onBlur={onBlur}\n type='number'\n {...rest}\n />\n\n <Adornment>\n {isSpinner ? (\n incrementButton\n ) : (\n <div style={{ display: 'flex', gap: '8px' }}>\n {decrementButton}\n {incrementButton}\n </div>\n )}\n </Adornment>\n\n <fieldset aria-hidden='true' className={`${CLASS}-fieldset`}>\n <legend className={`${CLASS}-legend`}>\n <span className={`${CLASS}-text`}>{label}</span>\n </legend>\n </fieldset>\n <span className={`${CLASS}-label`}>{label}</span>\n </div>\n {(showErrorText || helperText) && (\n <span className={`${CLASS}-helperText`} data-testid={`${CLASS}-helperText`}>\n {helperText && (!error || !showErrorText) && helperText}\n {showErrorText && error && error.message}\n </span>\n )}\n </div>\n );\n};\n\nconst NumberFieldRHF = <TFieldValues extends FieldValues = FieldValues>({\n name,\n control,\n ...rest\n}: NumberFieldProps<TFieldValues>) => {\n const { field, fieldState } = useController({\n control: control!,\n name: name as FieldPath<TFieldValues>,\n });\n\n const [value, setValue] = useState<string>(\n field.value !== undefined && field.value !== null ? String(field.value) : '',\n );\n const errorText = fieldState.error;\n\n const onChange = (val: string) => {\n field.onChange(val === '' ? undefined : Number(val));\n setValue(val);\n if (errorText) field.onBlur();\n };\n\n return (\n <NumberFieldBase\n {...rest}\n name={name}\n value={value}\n onChange={onChange}\n onBlur={() => field.onBlur()}\n error={errorText}\n />\n );\n};\n\nconst NumberField = <TFieldValues extends FieldValues = FieldValues>(props: NumberFieldProps<TFieldValues>) => {\n if (!props.control) {\n const { name, control, onValueChange, value, ...rest } = props;\n return (\n <NumberFieldBase\n {...rest}\n name={name}\n value={value !== undefined ? String(value) : ''}\n onChange={onValueChange || (() => {})}\n />\n );\n }\n return <NumberFieldRHF {...props} />;\n};\n\nexport default NumberField;\n","import { useCreateComponentStyles } from '@hocs/ThemeProvider/useThemeProvider.hook';\nimport { Component } from '@hocs/ThemeProvider/interfaces';\nimport type { NumberFieldStyleProps } from './NumberField.interface';\nimport type { FieldValues } from 'react-hook-form';\nimport NumberFieldBase from './NumberField';\n\nconst NumberField = <TFieldValues extends FieldValues = FieldValues>({\n theme,\n variant = 'default',\n ...rest\n}: NumberFieldStyleProps<TFieldValues>) => {\n const { componentStyles } = useCreateComponentStyles([Component.NUMBERFIELD], theme, variant.toUpperCase());\n\n return <NumberFieldBase {...rest} style={componentStyles} />;\n};\n\nexport default NumberField;\n","import { css } from '@emotion/react';\nimport { getStyle } from '@utilities/emotion/styles';\n\nconst background = (theme: Record<string, string>, event: string): string => `\n // BACKGROUNDS \n ${getStyle(theme, 'background-color', `--RADIO-EVENTS-${event}-BACKGROUND-COLOR`)}\n`;\n\nconst border = (theme: Record<string, string>, event: string): string => `\n // BORDERS\n ${getStyle(theme, 'border-color', `--RADIO-EVENTS-${event}-BORDER-COLOR`)}\n ${getStyle(theme, 'border-width', `--RADIO-EVENTS-${event}-BORDER-WIDTH`)}\n ${getStyle(theme, 'border-style', `--RADIO-EVENTS-${event}-BORDER-STYLE`)}\n`;\n\nconst outline = (theme: Record<string, string>, event: string): string => ` \n // OUTLINE\n ${getStyle(theme, 'outline-color', `--RADIO-EVENTS-${event}-OUTLINE-COLOR`)}\n ${getStyle(theme, 'outline-width', `--RADIO-EVENTS-${event}-OUTLINE-WIDTH`)}\n ${getStyle(theme, 'outline-style', `--RADIO-EVENTS-${event}-OUTLINE-STYLE`)}\n ${getStyle(theme, 'outline-offset', `--RADIO-EVENTS-${event}-OUTLINE-OFFSET`)}\n`;\n\nconst shadow = (theme: Record<string, string>, event: string): string => ` \n // SHADOW\n ${getStyle(theme, 'background-color', `--RADIO-EVENTS-${event}-SHADOW-COLOR`)}\n`;\n\nconst icon = (theme: Record<string, string>, event: string): string => `\n // UTILS\n > span {\n ${getStyle(theme, 'color', `--RADIO-EVENTS-${event}-ICON-COLOR`)};\n }\n`;\n\nconst label = (theme: Record<string, string>, event: string): string => `\n // TYPOGRAPHY\n .--RADIO-label {\n ${getStyle(theme, 'color', `--RADIO-EVENTS-${event}-COLOR-PRIMARY`)}\n }\n`;\n\nconst Style = (theme: Record<string, string>) => css`\n &.--RADIO {\n display: flex;\n flex-direction: column;\n width: fit-content;\n\n .--RADIO-container {\n display: flex;\n flex-direction: row;\n gap: 12px;\n align-items: center;\n cursor: pointer;\n\n // ENABLED\n ${label(theme, 'ENABLED')};\n\n // VALUE\n &:has(.--RADIO-inputField:checked) {\n ${label(theme, 'VALUE')};\n }\n\n // HOVER\n &:hover {\n ${label(theme, 'HOVER')};\n\n .--RADIO-radio .--RADIO-span {\n &:before {\n opacity: 1;\n ${shadow(theme, 'HOVER')};\n }\n }\n }\n\n // ACTIVE\n &:has(.--RADIO-inputField.--RADIO-active, .--RADIO-inputField:active) {\n ${label(theme, 'ACTIVE')};\n }\n\n // FOCUS-VISIBLE\n &:has(.--RADIO-inputField:focus-visible) {\n ${label(theme, 'FOCUS')};\n }\n\n // ERROR\n &:has(.--RADIO-inputField.--RADIO-error) {\n ${label(theme, 'ERROR')};\n }\n\n // ERROR + VALUE\n &:has(.--RADIO-inputField.--RADIO-error:checked) {\n ${label(theme, 'ERROR_VALUE')};\n }\n\n // ERROR + HOVER\n &:hover:has(.--RADIO-inputField.--RADIO-error) {\n ${label(theme, 'ERROR_HOVER')};\n\n .--RADIO-radio .--RADIO-span {\n &:before {\n opacity: 1;\n ${shadow(theme, 'ERROR_HOVER')};\n }\n }\n }\n\n // ERROR + ACTIVE\n &:has(.--RADIO-inputField.--RADIO-error:active),\n &:has(.--RADIO-inputField.--RADIO-error.--RADIO-active) {\n ${label(theme, 'ERROR_ACTIVE')};\n }\n\n // ERROR + FOCUS\n &:has(.--RADIO-inputField.--RADIO-error:focus-visible) {\n ${label(theme, 'ERROR_FOCUS')};\n }\n\n // DISABLED\n &:has(.--RADIO-inputField:disabled) {\n pointer-events: none;\n ${label(theme, 'DISABLED')};\n }\n\n // DISABLED + VALUE\n &:has(.--RADIO-inputField:disabled:checked) {\n ${label(theme, 'DISABLED_VALUE')};\n }\n\n .--RADIO-radio {\n position: relative;\n display: inline-flex;\n width: 24px;\n height: 24px;\n isolation: isolate;\n\n .--RADIO-inputField {\n cursor: pointer;\n position: absolute;\n opacity: 0;\n width: 100%;\n height: 100%;\n z-index: 2;\n margin: 0;\n -webkit-tap-highlight-color: transparent;\n\n ~ .--RADIO-span > span {\n visibility: hidden;\n }\n &:checked ~ .--RADIO-span > span {\n visibility: visible;\n }\n\n // ENABLED\n ~ .--RADIO-span {\n ${background(theme, 'ENABLED')};\n ${border(theme, 'ENABLED')};\n ${icon(theme, 'ENABLED')};\n }\n\n // VALUE\n &:checked ~ .--RADIO-span {\n ${background(theme, 'VALUE')};\n ${border(theme, 'VALUE')};\n ${icon(theme, 'VALUE')};\n }\n\n // HOVER\n // Is at the container level\n\n // ACTIVE\n &.--RADIO-active ~ .--RADIO-span,\n &:active ~ .--RADIO-span {\n &:before {\n opacity: 1;\n ${shadow(theme, 'ACTIVE')};\n }\n }\n\n // FOCUS\n &:focus-visible ~ .--RADIO-span {\n outline: none;\n ${outline(theme, 'FOCUS')};\n ${icon(theme, 'FOCUS')};\n }\n\n // ERROR\n &.--RADIO-error ~ .--RADIO-span {\n ${background(theme, 'ERROR')};\n ${border(theme, 'ERROR')};\n ${icon(theme, 'ERROR')};\n }\n\n // ERROR + VALUE\n &.--RADIO-error:checked ~ .--RADIO-span {\n ${background(theme, 'ERROR_VALUE')};\n ${border(theme, 'ERROR_VALUE')};\n ${icon(theme, 'ERROR_VALUE')};\n }\n\n // ERROR + VALUE\n // Is at the container level\n\n // ERROR + ACTIVE\n &.--RADIO-error:active ~ .--RADIO-span,\n &.--RADIO-error.--RADIO-active ~ .--RADIO-span {\n &:before {\n opacity: 1;\n ${shadow(theme, 'ERROR_ACTIVE')};\n }\n }\n\n // ERROR + FOCUS\n &.--RADIO-error:focus-visible ~ .--RADIO-span {\n ${outline(theme, 'ERROR_FOCUS')};\n ${icon(theme, 'ERROR_FOCUS')};\n }\n\n // DISABLED\n &:disabled ~ .--RADIO-span {\n ${background(theme, 'DISABLED')};\n ${border(theme, 'DISABLED')};\n ${icon(theme, 'DISABLED')};\n }\n\n // DISABLED + VALUE\n &:disabled:checked ~ .--RADIO-span {\n ${background(theme, 'DISABLED_VALUE')};\n ${border(theme, 'DISABLED_VALUE')};\n ${icon(theme, 'DISABLED_VALUE')};\n }\n }\n\n .--RADIO-span {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n position: absolute;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background-color 150ms ease-in-out;\n\n > span {\n width: 16px;\n height: 16px;\n z-index: 1;\n }\n\n &:before {\n content: '';\n position: absolute;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n opacity: 0;\n transition: opacity 150ms ease-in-out;\n z-index: -1;\n }\n }\n }\n\n .--RADIO-label {\n // FONT\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.875rem;\n font-weight: 500;\n line-height: 1;\n }\n }\n }\n`;\n\nexport default Style;\n","import React, { useState, useContext } from 'react';\n// Component Base\nimport emotion from './Radio.emotion';\nimport type { RadioProps, RadioBaseProps } from './Radio.interface';\nimport { RadioGroupContext } from './RadioGroup.context';\n// Custom Components\nimport Icon from '@components/atoms/Icon';\n\nconst CLASS = '--RADIO';\n\n/**\n * Headless presentational layer for the radio button.\n * Accepts `checked` and `onChange` directly — use this when you need a controlled radio outside of React Hook Form.\n */\nexport const RadioBase = React.forwardRef<HTMLInputElement, RadioBaseProps>(\n (\n {\n label,\n icon = <Icon name='circle' fill style={{ fontSize: '16px' }} />,\n className,\n style = {},\n disabled,\n checked,\n onSelect,\n error,\n onKeyDown,\n onKeyUp,\n onBlur,\n value,\n name,\n ...rest\n }: RadioBaseProps,\n ref,\n ) => {\n const [isActive, setIsActive] = useState(false);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter' || event.key === 'Space') setIsActive(true);\n onKeyDown?.(event);\n };\n\n const handleKeyUp = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter' || event.key === 'Space') {\n setIsActive(false);\n onSelect();\n }\n onKeyUp?.(event);\n };\n\n const handleBlur = () => {\n setIsActive(false);\n onBlur?.({} as React.FocusEvent<HTMLInputElement>);\n };\n\n return (\n <div\n className={[CLASS, isActive ? `${CLASS}-active` : '', className || ''].join(' ')}\n css={emotion(style)}\n data-testid={CLASS}\n >\n <label className={`${CLASS}-container`}>\n <div className={`${CLASS}-radio`}>\n <input\n className={[`${CLASS}-inputField`, isActive ? `${CLASS}-active` : '', error ? `${CLASS}-error` : ''].join(\n ' ',\n )}\n type='radio'\n value={value}\n name={name}\n checked={checked}\n disabled={disabled}\n onChange={() => onSelect()}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n onBlur={handleBlur}\n ref={ref}\n data-testid={`${CLASS}-inputField`}\n {...rest}\n />\n <span className={`${CLASS}-span`} data-testid={`${CLASS}-icon`}>\n {icon}\n </span>\n </div>\n <span className={`${CLASS}-label`} data-testid={`${CLASS}-label`}>\n {label}\n </span>\n </label>\n </div>\n );\n },\n);\n\nRadioBase.displayName = 'RadioBase';\n\n/**\n * A radio button lets the user select exactly one option from a set.\n *\n * **Radio must always be rendered inside a `<RadioGroup>`** — it reads its selected state,\n * name and change handler from the nearest RadioGroup context.\n * Rendering a Radio outside a RadioGroup throws an error.\n */\nconst Radio = (props: RadioProps) => {\n const groupCtx = useContext(RadioGroupContext);\n\n if (!groupCtx) throw new Error('Radio must be used inside a RadioGroup.');\n\n const { value, ...rest } = props;\n const checked = groupCtx.selectedValue === value;\n\n // Roving tabindex: selected → 0; unselected but first when nothing selected → 0; everything else → -1\n const noSelection = groupCtx.selectedValue === '';\n const tabIndex = checked || (noSelection && groupCtx.firstValue === value) ? 0 : -1;\n\n return (\n <RadioBase\n {...rest}\n name={groupCtx.name}\n value={value}\n checked={checked}\n onSelect={() => groupCtx.onChange(value)}\n disabled={rest.disabled ?? groupCtx.disabled}\n tabIndex={tabIndex}\n />\n );\n};\n\nexport default Radio;\n","import { useCreateComponentStyles } from '@hocs/ThemeProvider/useThemeProvider.hook';\nimport { Component } from '@hocs/ThemeProvider/interfaces';\nimport type { RadioStyleProps } from './Radio.interface';\nimport RadioBase from './Radio';\n\nconst Radio = ({ theme, variant = 'default', ...rest }: RadioStyleProps) => {\n const { componentStyles } = useCreateComponentStyles([Component.RADIO], theme, variant.toUpperCase());\n\n return <RadioBase {...rest} style={componentStyles} />;\n};\n\nexport default Radio;\n","import { css } from '@emotion/react';\nimport { getStyle } from '@utilities/emotion/styles';\n\nconst border = (theme: Record<string, string>, event: string): string => `\n // BORDERS\n ${getStyle(theme, 'border-color', `--SELECT-EVENTS-${event}-BORDER-COLOR`)}\n ${getStyle(theme, 'border-width', `--SELECT-EVENTS-${event}-BORDER-WIDTH`)}\n ${getStyle(theme, 'border-style', `--SELECT-EVENTS-${event}-BORDER-STYLE`)}\n`;\n\nconst typography = (theme: Record<string, string>, event: string): string => `\n // TYPOGRAPHY\n ${getStyle(theme, 'color', `--SELECT-EVENTS-${event}-COLOR-PRIMARY`)}\n ${getStyle(theme, 'caret-color', `--SELECT-EVENTS-${event}-FONT-PRIMARY`)}\n`;\n\nconst labelStyles = (theme: Record<string, string>, event: string, activateLabel = false): string => {\n return `\n ${getStyle(theme, 'color', `--SELECT-EVENTS-${event}-COLOR-SECONDARY`)}\n ${activateLabel ? 'transform: translate(14px, -24px); font-size: 0.75rem;' : ''}\n`;\n};\n\nconst legendStyles = (activate: boolean): string => `\n .--SELECT-legend {\n max-width: ${activate ? '100%' : '0px'};\n }\n`;\n\nconst container = (theme: Record<string, string>, event: string): string => `\n ${getStyle(theme, 'background-color', `--SELECT-EVENTS-${event}-BACKGROUND-COLOR`)}\n ~ .--SELECT-helperText {\n ${getStyle(theme, 'color', `--SELECT-EVENTS-${event}-COLOR-TERTIARY`)}\n }\n`;\n\nconst Style = (theme: Record<string, string>) => css`\n &.--SELECT {\n position: relative;\n padding: 0;\n border: 0;\n width: 100%;\n\n &.--SELECT-paddingBottom {\n padding-bottom: 24px;\n }\n\n .--SELECT-container {\n box-sizing: border-box;\n position: relative;\n display: inline-flex;\n align-items: center;\n\n // Safari Firefox Chrome/Edge\n width: -webkit-fill-available;\n width: -moz-available;\n width: stretch;\n\n ${getStyle(theme, 'border-radius', '--SELECT-ROOT-BORDER-RADIUS')};\n\n // ENABLED\n ${container(theme, 'ENABLED')};\n\n // VALUE\n &:has(.--SELECT-selectField:not(:placeholder-shown)) {\n ${container(theme, 'VALUE')};\n }\n\n // HOVER\n &:has(.--SELECT-selectField:hover) {\n ${container(theme, 'HOVER')};\n }\n\n // ACTIVE\n &:has(.--SELECT-selectField:active, .--SELECT-selectField.--SELECT-active) {\n ${container(theme, 'ACTIVE')};\n }\n\n // FOCUS\n &:has(.--SELECT-selectField:focus-visible) {\n outline: none;\n ${container(theme, 'FOCUS')};\n }\n\n // ERROR\n &:has(.--SELECT-selectField.--SELECT-error) {\n ${container(theme, 'ERROR')};\n }\n\n // ERROR + VALUE\n &:has(.--SELECT-selectField.--SELECT-error:not(:placeholder-shown)) {\n ${container(theme, 'ERROR_VALUE')};\n }\n\n // ERROR + HOVER\n &:has(.--SELECT-selectField.--SELECT-error:hover) {\n ${container(theme, 'ERROR_HOVER')};\n }\n\n // ERROR + ACTIVE\n &:has(.--SELECT-selectField.--SELECT-error:active, .--SELECT-selectField.--SELECT-error.--SELECT-active) {\n ${container(theme, 'ERROR_ACTIVE')};\n }\n\n // ERROR + FOCUS\n &:has(.--SELECT-selectField.--SELECT-error:focus-visible) {\n ${container(theme, 'ERROR_FOCUS')};\n }\n\n // DISABLED\n &:has(.--SELECT-selectField:disabled) {\n pointer-events: none;\n ${container(theme, 'DISABLED')};\n }\n\n // DISABLED + VALUE\n &:has(.--SELECT-selectField:disabled:not(:placeholder-shown)) {\n pointer-events: none;\n ${container(theme, 'DISABLED-VALUE')};\n }\n\n .--SELECT-selectField {\n // FONT\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.875rem; // 14px\n font-weight: 500;\n letter-spacing: 0.01em;\n line-height: 1;\n\n // Safari Firefox Chrome/Edge\n height: -webkit-fill-available;\n height: -moz-available;\n height: stretch;\n width: -webkit-fill-available;\n width: -moz-available;\n width: stretch;\n\n min-width: 0;\n border: 0;\n margin: 0;\n padding: 15px 14px;\n background-color: transparent;\n cursor: text;\n display: block;\n box-sizing: border-box;\n\n &:read-only {\n cursor: pointer;\n }\n\n // ENABLED\n ${typography(theme, 'ENABLED')};\n ~ .--SELECT-label {\n ${labelStyles(theme, 'ENABLED')}\n }\n ~ .--SELECT-fieldset {\n ${border(theme, 'ENABLED')}\n }\n\n // VALUE\n &:not(:placeholder-shown),\n &[placeholder]:not([placeholder=' ']),\n &.--SELECT-open {\n ${typography(theme, 'VALUE')};\n ~ .--SELECT-label {\n ${labelStyles(theme, 'VALUE', true)}\n }\n ~ .--SELECT-fieldset {\n ${border(theme, 'VALUE')};\n ${legendStyles(true)};\n }\n }\n\n // HOVER\n &:hover {\n ${typography(theme, 'HOVER')};\n ~ .--SELECT-label {\n ${labelStyles(theme, 'HOVER')}\n }\n ~ .--SELECT-fieldset {\n ${border(theme, 'HOVER')}\n }\n }\n\n // ACTIVE\n &:active,\n &.--SELECT-active {\n ${typography(theme, 'ACTIVE')};\n ~ .--SELECT-label {\n ${labelStyles(theme, 'ACTIVE')};\n }\n ~ .--SELECT-fieldset {\n ${border(theme, 'ACTIVE')};\n }\n }\n\n // FOCUS\n &:focus-visible {\n outline: none;\n ${typography(theme, 'FOCUS')};\n ~ .--SELECT-label {\n ${labelStyles(theme, 'FOCUS', true)}\n }\n ~ .--SELECT-fieldset {\n ${border(theme, 'FOCUS')};\n ${legendStyles(true)};\n }\n }\n\n // ERROR\n &.--SELECT-error {\n ${typography(theme, 'ERROR')};\n ~ .--SELECT-label {\n ${labelStyles(theme, 'ERROR')}\n }\n ~ .--SELECT-fieldset {\n ${border(theme, 'ERROR')}\n }\n }\n\n // ERROR + VALUE\n &.--SELECT-error:not(:placeholder-shown),\n &.--SELECT-error.--SELECT-open {\n ${typography(theme, 'ERROR_VALUE')};\n ~ .--SELECT-label {\n ${labelStyles(theme, 'ERROR_VALUE')};\n }\n ~ .--SELECT-fieldset {\n ${border(theme, 'ERROR_VALUE')};\n }\n }\n\n // ERROR + HOVER\n &.--SELECT-error:hover {\n ${typography(theme, 'ERROR_HOVER')};\n ~ .--SELECT-label {\n ${labelStyles(theme, 'ERROR_HOVER')}\n }\n ~ .--SELECT-fieldset {\n ${border(theme, 'ERROR_HOVER')}\n }\n }\n\n // ERROR + ACTIVE\n &.--SELECT-error:active,\n &.--SELECT-error.--SELECT-active {\n ${typography(theme, 'ERROR_ACTIVE')};\n ~ .--SELECT-label {\n ${labelStyles(theme, 'ERROR_ACTIVE')}\n }\n ~ .--SELECT-fieldset {\n ${border(theme, 'ERROR_ACTIVE')}\n }\n }\n\n // ERROR + FOCUS\n &.--SELECT-error:focus-visible {\n ${typography(theme, 'ERROR_FOCUS')};\n ~ .--SELECT-label {\n ${labelStyles(theme, 'ERROR_FOCUS')}\n }\n ~ .--SELECT-fieldset {\n ${border(theme, 'ERROR_FOCUS')}\n }\n }\n\n // DISABLED\n &:disabled {\n user-select: none;\n pointer-events: none;\n ${typography(theme, 'DISABLED')};\n ~ .--SELECT-label {\n ${labelStyles(theme, 'DISABLED')}\n }\n ~ .--SELECT-fieldset {\n ${border(theme, 'DISABLED')}\n }\n }\n\n // DISABLED + VALUE\n &:disabled:not(:placeholder-shown),\n &:disabled.--SELECT-open {\n user-select: none;\n pointer-events: none;\n ${typography(theme, 'DISABLED_VALUE')};\n ~ .--SELECT-label {\n ${labelStyles(theme, 'DISABLED_VALUE')}\n }\n ~ .--SELECT-fieldset {\n ${border(theme, 'DISABLED_VALUE')}\n }\n }\n }\n\n .--SELECT-label {\n // FONT\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.875rem; // 14px\n font-weight: 500;\n letter-spacing: 0.01em;\n line-height: normal;\n\n padding: 0;\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n position: absolute;\n pointer-events: none;\n z-index: 4;\n\n // ANIMATION\n transform: translate(14px, 0px);\n transition: 150ms ease-in-out;\n }\n\n .--SELECT-fieldset {\n // Safari Firefox Chrome/Edge\n height: 100%;\n width: -webkit-fill-available;\n width: -moz-available;\n width: stretch;\n\n text-align: left;\n position: absolute;\n margin: 0;\n padding: 0 6px;\n pointer-events: none;\n overflow: hidden;\n z-index: 5;\n box-sizing: border-box;\n ${getStyle(theme, 'border-radius', '--SELECT-ROOT-BORDER-RADIUS')};\n -webkit-tap-highlight-color: transparent;\n\n .--SELECT-legend {\n width: auto;\n overflow: hidden;\n display: block;\n padding: 0;\n height: 0px;\n visibility: hidden;\n\n // Animation\n max-width: 0px;\n transition: max-width 150ms ease-in-out;\n\n .--SELECT-text {\n // FONT\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.75rem; // 12px\n letter-spacing: 0.01em;\n font-weight: 500;\n padding: 0px 7px;\n }\n }\n }\n\n .--SELECT-adornment {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 0px 12px;\n }\n }\n\n .--SELECT-helperText {\n // FONT\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.75rem; // 12px\n line-height: 1;\n\n display: block;\n margin-top: 8px;\n margin-left: 14px;\n height: 16px;\n }\n }\n`;\n\nexport default Style;\n","import { css } from '@emotion/react';\nimport { getStyle } from '@utilities/emotion/styles';\n\nconst row = (theme: Record<string, string>, event: string): string => `\n // BACKGROUNDS\n ${getStyle(theme, 'background-color', `--SELECTMENU-EVENTS-${event}-BACKGROUND-COLOR`)}\n \n // BORDERS\n ${getStyle(theme, 'border-color', `--SELECTMENU-EVENTS-${event}-BORDER-COLOR`)}\n ${getStyle(theme, 'border-width', `--SELECTMENU-EVENTS-${event}-BORDER-WIDTH`)}\n ${getStyle(theme, 'border-style', `--SELECTMENU-EVENTS-${event}-BORDER-STYLE`)}\n ${getStyle(theme, 'border-radius', `--SELECTMENU-EVENTS-${event}-BORDER-RADIUS`)}\n`;\n\nconst typography = (theme: Record<string, string>, event: string): string => `\n // TYPOGRAPHY\n ${getStyle(theme, 'color', `--SELECTMENU-EVENTS-${event}-COLOR-PRIMARY`)};\n ${getStyle(theme, 'caret-color', `--SELECTMENU-EVENTS-${event}-COLOR-PRIMARY`)};\n`;\n\nconst container = (theme: Record<string, string>, event: string): string => `\n // BACKGROUNDS\n ${getStyle(theme, 'background-color', `--SELECTMENU-${event}-BACKGROUND-COLOR`)}\n \n // BORDERS\n ${getStyle(theme, 'border-color', `--SELECTMENU-${event}-BORDER-COLOR`)}\n ${getStyle(theme, 'border-width', `--SELECTMENU-${event}-BORDER-WIDTH`)}\n ${getStyle(theme, 'border-style', `--SELECTMENU-${event}-BORDER-STYLE`)}\n ${getStyle(theme, 'border-radius', `--SELECTMENU-${event}-BORDER-RADIUS`)}\n`;\n\nconst Style = (theme: Record<string, string>) => css`\n &.--SELECTMENU {\n z-index: 100;\n position: absolute;\n top: calc(48px + ${theme['--SELECTMENU-ROOT-TOP'] || ''});\n left: 0px;\n width: 100%;\n box-shadow:\n rgba(0, 0, 0, 0.2) 0px 5px 5px -3px,\n rgba(0, 0, 0, 0.14) 0px 8px 10px 1px,\n rgba(0, 0, 0, 0.12) 0px 3px 14px 2px;\n box-sizing: border-box;\n max-height: 126px; // 3 rows * 42px\n overflow-y: auto;\n cursor: pointer;\n ${container(theme, 'ROOT')}\n\n // Animation\n display: none;\n opacity: 0;\n translate: 0px -10px;\n transition-property: display opacity;\n transition-duration: 150ms;\n transition-behavior: allow-discrete;\n\n &.--SELECTMENU-open {\n display: block;\n opacity: 1;\n translate: 0px 0px;\n\n @starting-style {\n opacity: 0;\n translate: 0px -10px;\n }\n }\n\n // ROW STYLES\n .--SELECTMENU-row:last-child,\n .--SELECTMENU-row:has(+ .--SELECTMENU-row:hover),\n .--SELECTMENU-row:has(+ .--SELECTMENU-selected) {\n // border-bottom: none;\n }\n\n .--SELECTMENU-row {\n padding: 0px 24px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n justify-content: center;\n border-top: none;\n border-left: none;\n border-right: none;\n height: 42px;\n box-sizing: border-box;\n\n .--SELECTMENU-rowTitle {\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n ${getStyle(theme, 'color', '--SELECTMENU-ENABLED-FONT-PRIMARY')}\n font-size: 0.875rem; // 14px\n line-height: 1.5;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n .--SELECTMENU-rowDescription {\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n ${getStyle(theme, 'color', '--SELECTMENU-ENABLED-FONT-SECONDARY')}\n font-size: 0.75rem; // 12px\n line-height: 1;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n // ENABLED\n ${row(theme, 'ENABLED')}\n ${typography(theme, 'ENABLED')}\n\n // VALUE\n &.--SELECTMENU-selected {\n ${row(theme, 'VALUE')}\n ${typography(theme, 'VALUE')}\n }\n\n // HOVER\n &:hover {\n ${row(theme, 'HOVER')}\n ${typography(theme, 'HOVER')}\n }\n\n // - ACTIVE\n &:active,\n &.--SELECTMENU-active {\n ${row(theme, 'ACTIVE')}\n ${typography(theme, 'ACTIVE')}\n }\n\n // FOCUS\n &:focus-visible {\n outline-offset: 0px;\n outline: 0;\n ${row(theme, 'FOCUS')}\n ${typography(theme, 'FOCUS')}\n }\n\n &.--SELECTMENU-descriptionMenu {\n height: 52px;\n }\n }\n\n &::-webkit-scrollbar {\n width: 12px;\n height: 4px;\n }\n\n ::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.5);\n border-radius: 9999px;\n border: 3px solid transparent;\n background-clip: padding-box;\n }\n\n &.--SELECTMENU-staticMenu {\n position: static;\n margin-top: 8px;\n }\n\n &.--SELECTMENU-descriptionMenu {\n max-height: 156px; // 3 rows * 52px\n }\n }\n`;\n\nexport default Style;\n","import React, { useEffect } from 'react';\nimport emotion from './SelectMenu.emotion';\nimport type { SelectMenuProps } from './SelectMenu.interface';\n\nconst CLASS = '--SELECTMENU';\n\n/**\n * Dropdown list rendered by `<Select>`.\n * Scrolls the focused option into view on keyboard navigation and calls `onChange` on click.\n */\nconst SelectMenu = React.forwardRef<HTMLDivElement, SelectMenuProps>(\n (\n {\n displayOptions,\n value,\n isOpen,\n hasStaticOptions,\n hasDescription,\n onChange,\n focusedElement,\n onScroll,\n style,\n className,\n },\n ref,\n ) => {\n useEffect(() => {\n const el = document.getElementById(`${CLASS}-option-${focusedElement}`);\n el?.scrollIntoView({ block: 'nearest' });\n }, [focusedElement]);\n\n return (\n <div\n id={`${CLASS}-root`}\n className={[\n CLASS,\n hasStaticOptions ? `${CLASS}-staticMenu` : '',\n hasDescription ? `${CLASS}-descriptionMenu` : '',\n isOpen && `${CLASS}-open`,\n className || '',\n ].join(' ')}\n css={emotion(style)}\n onScroll={onScroll}\n role='listbox'\n ref={ref}\n data-testid={CLASS}\n >\n {displayOptions.map((option, index) => {\n const selectedClass = option.value === value && isOpen ? `${CLASS}-selected` : '';\n const isActive = focusedElement === index;\n\n return (\n <div\n id={`${CLASS}-option-${index}`}\n key={option.value}\n className={[\n `${CLASS}-row`,\n selectedClass,\n `${CLASS}-row`,\n hasDescription ? `${CLASS}-descriptionMenu` : '',\n isActive ? `${CLASS}-active` : '',\n ].join(' ')}\n onClick={() => onChange(option)}\n role='option'\n tabIndex={-1}\n data-testid={`${CLASS}-row-${option.label}`}\n >\n <span className={`${CLASS}-rowTitle`}>{option.label}</span>\n {hasDescription && <span className={`${CLASS}-rowDescription`}>{option.description}</span>}\n </div>\n );\n })}\n </div>\n );\n },\n);\n\nexport default SelectMenu;\n","import React from 'react';\nimport { useCreateComponentStyles } from '@hocs/ThemeProvider/useThemeProvider.hook';\nimport { Component } from '@hocs/ThemeProvider/interfaces';\nimport type { SelectMenuStyleProps } from './SelectMenu.interface';\nimport SelectMenuBase from './SelectMenu';\n\nconst SelectMenu = React.forwardRef<HTMLDivElement, SelectMenuStyleProps>(({ theme, ...rest }, ref) => {\n const { componentStyles } = useCreateComponentStyles([Component.SELECTMENU, Component.SELECT], theme);\n\n return <SelectMenuBase {...rest} style={componentStyles} ref={ref} />;\n});\n\nSelectMenu.displayName = 'SelectMenu';\n\nexport default SelectMenu;\n","import React, { useState, useRef } from 'react';\n// Component Base\nimport emotion from './Select.emotion';\nimport type { SelectProps } from './Select.interface';\n// External Libraries\nimport { useController, type FieldValues, type FieldPath } from 'react-hook-form';\n// Custom Hooks\nimport { useOnClickOutside } from '@hooks/useOnClickOutside';\nimport { useStateCallback } from '@hooks/useStateCallback';\n// Custom Components\nimport Icon from '@components/atoms/Icon';\nimport IconButton from '@components/atoms/IconButton';\nimport SelectMenu from './SelectMenu';\nimport type { OptionProp } from '@interfaces';\n\nconst CLASS = '--SELECT';\n\n// We save the latest menu list after we closed. So we can show it in the close animation\nlet saveFilteredOptions: Array<OptionProp> = [];\n\n/**\n * A select field lets users pick a single option from a dropdown list.\n *\n * Features: floating label, helper/error text, optional search (≥3 chars), lazy loading via\n * `range`, per-option descriptions, and full keyboard navigation (arrows, Enter, Tab).\n * The form value is a `string` (the selected option's `value`).\n */\nconst Select = <TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n control,\n options,\n\n disabled,\n range = 100,\n hasStaticOptions = false,\n hasSearch = false,\n hasDescription = false,\n hasPadding = false,\n showErrorText = true,\n helperText,\n style,\n className,\n ...rest\n}: SelectProps<TFieldValues>) => {\n // Get value from controller\n const { field, fieldState } = useController({\n control,\n name: name as FieldPath<TFieldValues>,\n });\n const [value, setValue] = useStateCallback<string>(field.value || '');\n const [open, setOpen] = useStateCallback(false);\n const wasOpenedRef = useRef(false);\n const ref = useRef<HTMLDivElement>(null);\n const exceptRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const selectedOption = options.find(option => option.value === value);\n const errorText = fieldState.error;\n const heightBox = hasDescription ? 156 : 126;\n const [searchValue, setSearchValue] = useStateCallback<string>(selectedOption?.label || '');\n const [sliceBy, setSliceBy] = useState<number>(1);\n const [activeSearch, setActiveSearch] = useState<boolean>(false);\n const [focusedElement, setFocusedElement] = useState<number>(-1);\n\n const isOpen = open || !!(hasSearch && searchValue && !value);\n\n // Close the menu and reset all transient state in one place\n const closeMenu = (searchLabel?: string) => {\n setOpen(false);\n setSearchValue(searchLabel ?? selectedOption?.label ?? '');\n setActiveSearch(false);\n setFocusedElement(-1);\n if (wasOpenedRef.current) field.onBlur();\n };\n\n // Open the menu and mark the field as interacted\n const openMenu = () => {\n wasOpenedRef.current = true;\n setOpen(true);\n };\n\n useOnClickOutside({\n ref,\n onAction: () => closeMenu(),\n isActive: isOpen,\n exceptRef,\n });\n\n const onChange = (option: OptionProp) => {\n field.onChange(option.value);\n setValue(option.value);\n closeMenu(option.label);\n };\n\n // Focus the input text when user clicks it\n const onFocus = (event: React.MouseEvent<HTMLInputElement>) => {\n const select = event.target as HTMLInputElement;\n select.select();\n };\n\n // Move between options with the keyboard\n const onMoveFocus = (key: string) => {\n if (key === 'ArrowDown' && isOpen)\n setFocusedElement(focusedElement + 1 >= saveFilteredOptions.length ? 0 : focusedElement + 1);\n else if (key === 'ArrowUp' && isOpen)\n setFocusedElement(focusedElement - 1 < 0 ? saveFilteredOptions.length - 1 : focusedElement - 1);\n };\n\n // Handle key events on the container\n const onKeyDownContainer = (event: React.KeyboardEvent<HTMLDivElement>) => {\n event.stopPropagation();\n\n // On Enter we check if an option is focused to select it\n if (event.key === 'Enter') {\n event.preventDefault();\n if (isOpen && focusedElement >= 0) {\n const option = filteredOptions()[focusedElement];\n if (option) onChange(option);\n } else {\n if (isOpen) closeMenu();\n else openMenu();\n }\n }\n // On Tab or Escape we close the Menu\n else if (event.key === 'Tab' || event.key === 'Escape') closeMenu();\n // On ArrowDown or ArrowUp we move the focus in the Menu\n else if (['ArrowDown', 'ArrowUp'].includes(event.key)) {\n if (isOpen) {\n event.preventDefault();\n onMoveFocus(event.key);\n }\n }\n };\n\n // Handle key events on the IconButton\n const onKeyDownIconButton = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n\n // On Enter we toggle the open state\n if (event.key === 'Enter') {\n event.preventDefault();\n if (isOpen && focusedElement >= 0) {\n const option = filteredOptions()[focusedElement];\n if (option) onChange(option);\n } else {\n if (isOpen) closeMenu();\n else openMenu();\n }\n }\n // On Tab or Escape we close the menu\n else if (event.key === 'Tab' || event.key === 'Escape') closeMenu();\n // On ArrowDown or ArrowUp we move the focus in the Menu\n else if (['ArrowDown', 'ArrowUp'].includes(event.key)) {\n event.preventDefault();\n inputRef.current?.focus();\n onMoveFocus(event.key);\n }\n };\n\n // Handle click on the Select\n const onClick = (\n event: React.MouseEvent<HTMLButtonElement, MouseEvent> | React.MouseEvent<HTMLDivElement, MouseEvent>,\n ) => {\n event.stopPropagation();\n\n if (!disabled) {\n if (isOpen) closeMenu();\n else openMenu();\n }\n };\n\n // Handle scroll on the Menu\n const onScroll = (event: React.UIEvent<HTMLDivElement, UIEvent>) => {\n event.preventDefault();\n const handleEvent = event;\n\n const { scrollHeight, scrollTop } = handleEvent.target as HTMLDivElement;\n\n if (scrollTop + heightBox >= scrollHeight && filteredOptions().length >= sliceBy * range) setSliceBy(sliceBy + 1);\n };\n\n // Handle search on the Input\n const onSearch = (event: React.ChangeEvent<HTMLInputElement>) => {\n event.preventDefault();\n const handleEvent = event;\n const { value: inputValue } = handleEvent.target;\n if (inputValue.length > 2) setSliceBy(1);\n setSearchValue(inputValue, () => setActiveSearch(true));\n openMenu();\n };\n\n // Filter options based on search value\n const filteredOptions = (): Array<OptionProp> => {\n if (hasSearch && searchValue && searchValue.length > 2) {\n const filtered = options.slice(0, range * sliceBy);\n if (searchValue === selectedOption?.label && !activeSearch) {\n saveFilteredOptions = filtered;\n return filtered;\n }\n\n const filter = options\n .filter(option => option.label.toLocaleUpperCase().includes(searchValue.toLocaleUpperCase()))\n .slice(0, range * sliceBy);\n\n // Check again if we have the search actived\n if (activeSearch) saveFilteredOptions = filter || [];\n else saveFilteredOptions = filtered;\n return filter || [];\n }\n\n saveFilteredOptions = options.slice(0, range * sliceBy);\n return options.slice(0, range * sliceBy);\n };\n\n return (\n <div\n className={[CLASS, hasPadding ? `${CLASS}-paddingBottom` : '', className || ''].join(' ')}\n css={emotion(style)}\n data-testid={CLASS}\n >\n <div\n className={`${CLASS}-container`}\n onClick={onClick}\n onKeyDown={event => !disabled && onKeyDownContainer(event)}\n role='button'\n ref={exceptRef}\n data-testid={`${CLASS}-container`}\n >\n <input\n name={name}\n className={[`${CLASS}-selectField`, isOpen && `${CLASS}-open`, errorText && `${CLASS}-error`].join(' ')}\n onClick={event => hasSearch && onFocus(event)}\n onChange={onSearch}\n value={searchValue}\n placeholder=' '\n disabled={disabled}\n readOnly={!hasSearch}\n ref={inputRef}\n role='combobox'\n autoComplete='off'\n data-testid={`${CLASS}-selectField`}\n {...(hasSearch && { placeholder: 'Search...' })}\n {...rest}\n />\n\n <div className={`${CLASS}-adornment`}>\n <IconButton\n icon={<Icon name='arrow_drop_up' />}\n onClick={onClick}\n onKeyDown={event => !disabled && onKeyDownIconButton(event)}\n disabled={disabled}\n isFlipped={!isOpen}\n tabIndex={-1}\n />\n </div>\n\n <fieldset aria-hidden='true' className={`${CLASS}-fieldset`}>\n <legend className={`${CLASS}-legend`}>\n <span className={`${CLASS}-text`}>{label}</span>\n </legend>\n </fieldset>\n <span className={`${CLASS}-label`}>{label}</span>\n </div>\n\n {(showErrorText || helperText) && (\n <span className={`${CLASS}-helperText`} data-testid={`${CLASS}-helperText`}>\n {helperText && (!errorText || !showErrorText) && helperText}\n {showErrorText && errorText && errorText.message}\n </span>\n )}\n\n <SelectMenu\n displayOptions={isOpen ? filteredOptions() : saveFilteredOptions}\n value={value}\n isOpen={isOpen}\n hasStaticOptions={hasStaticOptions}\n hasDescription={hasDescription}\n onChange={onChange}\n focusedElement={focusedElement}\n onScroll={onScroll}\n ref={ref}\n />\n </div>\n );\n};\n\nexport default Select;\n","import { useCreateComponentStyles } from '@hocs/ThemeProvider/useThemeProvider.hook';\nimport { Component } from '@hocs/ThemeProvider/interfaces';\nimport type { SelectStyleProps } from './Select.interface';\nimport type { FieldValues } from 'react-hook-form';\nimport SelectBase from './Select';\n\nconst Select = <TFieldValues extends FieldValues = FieldValues>({\n theme,\n variant = 'default',\n ...rest\n}: SelectStyleProps<TFieldValues>) => {\n const { componentStyles } = useCreateComponentStyles([Component.SELECT], theme, variant.toUpperCase());\n\n return <SelectBase {...rest} style={componentStyles} />;\n};\n\nexport default Select;\n","import { css } from '@emotion/react';\nimport { getStyle } from '@utilities/emotion/styles';\n\nconst rail = (theme: Record<string, string>, event: string): string => `\n ~ .--SLIDER-rail {\n ${getStyle(theme, 'background-color', `--SLIDER-EVENTS-${event}-BACKGROUND-COLOR`)}\n }\n`;\n\nconst tracker = (theme: Record<string, string>, event: string): string => `\n ~ .--SLIDER-tracker { \n // BACKGROUNDS\n ${getStyle(theme, 'background-color', `--SLIDER-EVENTS-${event}-BACKGROUND-COLOR`)}\n }\n`;\n\nconst thumbIcon = (theme: Record<string, string>, event: string): string => `\n ~ .--SLIDER-thumbIcon { \n // UTILS\n ${getStyle(theme, 'background-color', `--SLIDER-EVENTS-${event}-ICON-BACKGROUND-COLOR`)}\n \n // BORDERS\n ${getStyle(theme, 'border-color', `--SLIDER-EVENTS-${event}-BORDER-COLOR`)}\n ${getStyle(theme, 'border-width', `--SLIDER-EVENTS-${event}-BORDER-WIDTH`)}\n ${getStyle(theme, 'border-style', `--SLIDER-EVENTS-${event}-BORDER-STYLE`)}\n ${getStyle(theme, 'border-radius', `--SLIDER-EVENTS-${event}-BORDER-RADIUS`)}\n\n \n > span {\n ${getStyle(theme, 'color', `--SLIDER-EVENTS-${event}-ICON-COLOR`)};\n }\n }\n`;\n\nconst Style = (theme: Record<string, string>) => css`\n &.--SLIDER {\n justify-content: center;\n display: flex;\n border-radius: 12px;\n box-sizing: content-box;\n position: relative;\n touch-action: none;\n -webkit-tap-highlight-color: transparent;\n height: 4px;\n width: 100%;\n padding: 8px 0px;\n\n .--SLIDER-inputField {\n appearance: none;\n width: 100%;\n height: 0px;\n outline: none;\n position: absolute;\n pointer-events: none;\n cursor: default;\n z-index: 3;\n margin: 0px;\n\n // ENABLED\n ${rail(theme, 'ENABLED')};\n ${thumbIcon(theme, 'ENABLED')};\n\n // VALUE\n ${tracker(theme, 'VALUE')};\n\n // HOVER\n @media (hover: hover) {\n :hover + .--SLIDER-ripple {\n opacity: 1;\n ${getStyle(theme, 'background-color', '--SLIDER-EVENTS-HOVER-BACKGROUND-COLOR')};\n }\n }\n\n // ACTIVE\n :active + .--SLIDER-ripple {\n opacity: 1;\n ${getStyle(theme, 'background-color', '--SLIDER-EVENTS-ACTIVE-BACKGROUND-COLOR')};\n }\n\n // FOCUS\n &:focus-visible + .--SLIDER-ripple + .--SLIDER-thumbIcon {\n ${getStyle(theme, 'outline-color', '--SLIDER-EVENTS-FOCUS-OUTLINE-COLOR')}\n ${getStyle(theme, 'outline-width', '--SLIDER-EVENTS-FOCUS-OUTLINE-WIDTH')}\n ${getStyle(theme, 'outline-style', '--SLIDER-EVENTS-FOCUS-OUTLINE-STYLE')}\n ${getStyle(theme, 'outline-offset', '--SLIDER-EVENTS-FOCUS-OUTLINE-OFFSET')}\n }\n\n // DISABLED\n &:disabled {\n &::-webkit-slider-thumb {\n pointer-events: none;\n }\n\n ${rail(theme, 'DISABLED')};\n ${tracker(theme, 'DISABLED_VALUE')};\n ${thumbIcon(theme, 'DISABLED')};\n\n ~ .--SLIDER-mark {\n ${getStyle(theme, 'background-color', '--SLIDER-EVENTS-DISABLED_VALUE-BACKGROUND-COLOR')}\n }\n\n ~ .--SLIDER-mark.--SLIDER-mark--active {\n ${getStyle(theme, 'background-color', '--SLIDER-EVENTS-DISABLED-BACKGROUND-COLOR')}\n }\n }\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n cursor: pointer;\n border-radius: 50%;\n width: 24px;\n height: 24px;\n pointer-events: auto;\n }\n }\n\n .--SLIDER-rail {\n display: block;\n position: absolute;\n border-radius: inherit;\n width: 100%;\n height: inherit;\n top: 50%;\n -webkit-transform: translateY(-50%);\n -moz-transform: translateY(-50%);\n -ms-transform: translateY(-50%);\n transform: translateY(-50%);\n cursor: pointer;\n }\n\n .--SLIDER-tracker {\n border: none;\n display: block;\n position: absolute;\n border-radius: inherit;\n height: inherit;\n top: 50%;\n transform: translateY(-50%);\n z-index: 1;\n cursor: pointer;\n }\n\n &.--SLIDER--clicking {\n .--SLIDER-thumbIcon,\n .--SLIDER-ripple {\n transition:\n left 150ms ease-in-out,\n top 150ms ease-in-out,\n background-color 150ms ease-in-out,\n opacity 150ms ease-in-out;\n }\n\n .--SLIDER-tracker {\n transition:\n left 150ms ease-in-out,\n right 150ms ease-in-out,\n width 150ms ease-in-out,\n top 150ms ease-in-out,\n bottom 150ms ease-in-out,\n height 150ms ease-in-out;\n }\n }\n\n &.--SLIDER--vertical {\n width: 4px;\n height: 100%;\n padding: 0px 8px;\n flex-direction: column;\n\n .--SLIDER-inputField {\n width: 0px;\n height: 100%;\n writing-mode: vertical-lr;\n direction: rtl;\n }\n\n .--SLIDER-rail {\n width: inherit;\n height: 100%;\n left: 50%;\n top: 0;\n transform: translateX(-50%);\n }\n\n .--SLIDER-tracker {\n width: inherit;\n left: 50%;\n height: auto;\n top: auto;\n transform: translateX(-50%);\n }\n\n .--SLIDER-ripple {\n top: auto;\n left: 50%;\n transform: translateX(-50%);\n margin-left: 0;\n margin-top: -6px;\n }\n\n .--SLIDER-thumbIcon {\n top: auto;\n left: 50%;\n transform: translateX(-50%);\n }\n\n .--SLIDER-mark {\n top: auto;\n left: 50%;\n transform: translateX(-50%);\n }\n }\n\n .--SLIDER-mark {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n width: 2px;\n height: 2px;\n border-radius: 50%;\n pointer-events: none;\n z-index: 1;\n ${getStyle(theme, 'background-color', '--SLIDER-EVENTS-VALUE-BACKGROUND-COLOR')}\n\n &.--SLIDER-mark--active {\n ${getStyle(theme, 'background-color', '--SLIDER-EVENTS-ENABLED-BACKGROUND-COLOR')}\n }\n }\n\n .--SLIDER-ripple {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n margin-left: -4px;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n pointer-events: none;\n z-index: 2;\n opacity: 0;\n transition:\n background-color 150ms ease-in-out,\n opacity 150ms ease-in-out;\n }\n\n .--SLIDER-thumbIcon {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n z-index: 4;\n border-radius: 50%;\n box-sizing: border-box;\n\n > span {\n font-size: 20px;\n }\n }\n }\n`;\n\nexport default Style;\n","// Component Base\nimport React, { useState, useRef } from 'react';\nimport emotion from './Slider.emotion';\nimport type { SliderProps } from './Slider.interface';\n// External Libraries\nimport { useController, type FieldValues, type FieldPath } from 'react-hook-form';\n\nconst CLASS = '--SLIDER';\n\n/**\n * A slider lets users select a numeric value (or range) by dragging a thumb along a track.\n *\n * The form value is `number[]`:\n * - **Single-thumb mode** — pass a 1-element array, e.g. `[50]`.\n * - **Range mode** — pass a 2-element array, e.g. `[20, 80]`.\n *\n * Use the `track` prop to control which side of the thumb the filled track appears on.\n */\nconst Slider = <TFieldValues extends FieldValues = FieldValues>({\n min = 0,\n max = Infinity,\n name,\n step = 25,\n distance = 0,\n disabled = false,\n iconMin,\n iconMax,\n showMarks = false,\n direction = 'horizontal',\n track = 'normal',\n control,\n style,\n}: SliderProps<TFieldValues>) => {\n const { field } = useController({ control, name: name as FieldPath<TFieldValues> });\n\n const rawValue = (field.value as number[]) ?? [min];\n const isRange = rawValue.length >= 2;\n\n const containerRef = useRef<HTMLSpanElement>(null);\n const clickTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const isVertical = direction === 'vertical';\n\n const marks =\n max !== Infinity && min !== max && step > 0\n ? Array.from({ length: Math.round((max - min) / step) + 1 }, (_, i) => Math.min(min + i * step, max))\n : [];\n\n const useMarkSnapping = marks.length > 0;\n\n const nearestValue = (raw: number): number => {\n if (useMarkSnapping) {\n return marks.reduce((closest, mark) => (Math.abs(mark - raw) <= Math.abs(closest - raw) ? mark : closest));\n }\n return Math.max(min, Math.min(max, Math.round((raw - min) / step) * step + min));\n };\n\n const [localValues, setLocalValues] = useState<number[]>(() =>\n useMarkSnapping ? rawValue.map(nearestValue) : rawValue,\n );\n\n const updateValues = (next: number[]) => {\n field.onChange(next);\n setLocalValues(next);\n };\n\n const onChangeMin = (event: React.ChangeEvent<HTMLInputElement>) => {\n const raw = parseFloat(event.target.value);\n const snapped = nearestValue(raw);\n const value = isRange ? Math.min(snapped, localValues[1] - distance) : snapped;\n updateValues(isRange ? [value, localValues[1]] : [value]);\n };\n\n const onChangeMax = (event: React.ChangeEvent<HTMLInputElement>) => {\n const raw = parseFloat(event.target.value);\n const snapped = nearestValue(raw);\n const value = Math.max(snapped, localValues[0] + distance);\n updateValues([localValues[0], value]);\n };\n\n const onKeyDownMin = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!useMarkSnapping) return;\n const current = localValues[0];\n let next: number | undefined;\n if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {\n next = marks.find(m => m > current) ?? current;\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {\n next = [...marks].reverse().find(m => m < current) ?? current;\n } else if (e.key === 'Home') {\n next = min;\n } else if (e.key === 'End') {\n next = isRange ? Math.min(max, localValues[1] - distance) : max;\n }\n if (next !== undefined && next !== current) {\n e.preventDefault();\n const value = isRange ? Math.min(next, localValues[1] - distance) : next;\n updateValues(isRange ? [value, localValues[1]] : [value]);\n }\n };\n\n const onKeyDownMax = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!useMarkSnapping) return;\n const current = localValues[1];\n let next: number | undefined;\n if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {\n next = marks.find(m => m > current) ?? current;\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {\n next = [...marks].reverse().find(m => m < current) ?? current;\n } else if (e.key === 'Home') {\n next = Math.max(min, localValues[0] + distance);\n } else if (e.key === 'End') {\n next = max;\n }\n if (next !== undefined && next !== current) {\n e.preventDefault();\n const value = Math.max(next, localValues[0] + distance);\n updateValues([localValues[0], value]);\n }\n };\n\n const onTrack = (event: React.MouseEvent<HTMLSpanElement>) => {\n if (disabled || max === Infinity || max === min) return;\n\n const el = containerRef.current;\n const rect = el?.getBoundingClientRect();\n if (!rect || !el) return;\n\n const p = isVertical\n ? Math.max(0, Math.min(1, (rect.bottom - event.clientY) / rect.height))\n : Math.max(0, Math.min(1, (event.clientX - rect.left) / rect.width));\n\n const raw = min + p * (max - min);\n const clicked = nearestValue(raw);\n\n if (!isRange) {\n updateValues([Math.max(min, Math.min(max, clicked))]);\n } else {\n const distToMin = Math.abs(clicked - localValues[0]);\n const distToMax = Math.abs(clicked - localValues[1]);\n\n if (distToMin <= distToMax) {\n updateValues([Math.max(min, Math.min(clicked, localValues[1] - distance)), localValues[1]]);\n } else {\n updateValues([localValues[0], Math.min(max, Math.max(clicked, localValues[0] + distance))]);\n }\n }\n\n el.classList.add(`${CLASS}--clicking`);\n clearTimeout(clickTimer.current);\n clickTimer.current = setTimeout(() => el.classList.remove(`${CLASS}--clicking`), 150);\n };\n\n const pct = (value: number) => (max === min ? 0 : ((value - min) / (max - min)) * 100);\n\n const thumbPosition = (value: number): React.CSSProperties => {\n const p = pct(value);\n if (isVertical) return { top: `calc(${100 - p}% - ${((100 - p) / 100) * 24}px)` };\n return { left: `calc(${p}% - ${(p / 100) * 24}px)` };\n };\n\n const markPosition = (value: number): React.CSSProperties => {\n const p = pct(value);\n if (isVertical) return { top: `calc(${100 - p}% - ${((100 - p) / 100) * 24}px + 11px)` };\n return { left: `calc(${p}% - ${(p / 100) * 24}px + 11px)` };\n };\n\n const trackerStyles = (): React.CSSProperties[] => {\n const v0 = localValues[0];\n const v1 = localValues[1] ?? v0;\n const p0 = pct(v0);\n const p1 = pct(v1);\n const off = (p: number) => 12 - (p / 100) * 24;\n\n if (isVertical) {\n if (!isRange) {\n if (track === 'inverted') return [{ top: '0%', bottom: `calc(${p0}% + ${off(p0)}px)` }];\n return [{ top: `calc(${100 - p0}% - ${off(p0)}px)`, bottom: '0%' }];\n }\n if (track === 'inverted')\n return [\n { top: '0%', bottom: `calc(${p1}% + ${off(p1)}px)` },\n { top: `calc(${100 - p0}% - ${off(p0)}px)`, bottom: '0%' },\n ];\n return [{ top: `calc(${100 - p1}% - ${off(p1)}px)`, bottom: `calc(${p0}% + ${off(p0)}px)` }];\n }\n\n if (!isRange) {\n if (track === 'inverted') return [{ left: `calc(${p0}% + ${off(p0)}px)`, right: '0%' }];\n return [{ left: '0%', right: `calc(${100 - p0}% - ${off(p0)}px)` }];\n }\n if (track === 'inverted')\n return [\n { left: '0%', right: `calc(${100 - p0}% - ${off(p0)}px)` },\n { left: `calc(${p1}% + ${off(p1)}px)`, right: '0%' },\n ];\n return [{ left: `calc(${p0}% + ${off(p0)}px)`, right: `calc(${100 - p1}% - ${off(p1)}px)` }];\n };\n\n const isMarkActive = (mark: number): boolean => {\n if (!isRange) return track === 'inverted' ? mark >= localValues[0] : mark <= localValues[0];\n if (track === 'inverted') return mark <= localValues[0] || mark >= localValues[1];\n return mark >= localValues[0] && mark <= localValues[1];\n };\n\n const inputStep = useMarkSnapping ? 'any' : step;\n\n return (\n <span\n ref={containerRef}\n className={[CLASS, isVertical ? `${CLASS}--vertical` : ''].join(' ')}\n css={emotion(style)}\n data-testid={CLASS}\n >\n <input\n className={`${CLASS}-inputField`}\n type='range'\n min={min}\n max={max}\n step={inputStep}\n value={localValues[0]}\n onChange={onChangeMin}\n onKeyDown={onKeyDownMin}\n disabled={disabled}\n data-testid={isRange ? `${CLASS}-minField` : `${CLASS}-field`}\n />\n <span className={`${CLASS}-ripple`} style={thumbPosition(localValues[0])} aria-hidden='true' />\n <span className={`${CLASS}-thumbIcon`} style={thumbPosition(localValues[0])} aria-hidden='true'>\n {iconMin}\n </span>\n {isRange && (\n <>\n <input\n className={`${CLASS}-inputField`}\n type='range'\n min={min}\n max={max}\n step={inputStep}\n value={localValues[1]}\n onChange={onChangeMax}\n onKeyDown={onKeyDownMax}\n disabled={disabled}\n data-testid={`${CLASS}-maxField`}\n />\n <span className={`${CLASS}-ripple`} style={thumbPosition(localValues[1])} aria-hidden='true' />\n <span className={`${CLASS}-thumbIcon`} style={thumbPosition(localValues[1])} aria-hidden='true'>\n {iconMax}\n </span>\n </>\n )}\n <span className={`${CLASS}-rail`} onClick={onTrack} />\n {trackerStyles().map((s, i) => (\n <span key={i} className={`${CLASS}-tracker`} onClick={onTrack} style={s} />\n ))}\n {showMarks &&\n marks.map(mark => (\n <span\n key={mark}\n className={[`${CLASS}-mark`, isMarkActive(mark) && `${CLASS}-mark--active`].filter(Boolean).join(' ')}\n style={markPosition(mark)}\n aria-hidden='true'\n onClick={onTrack}\n />\n ))}\n </span>\n );\n};\n\nexport default Slider;\n","import { useCreateComponentStyles } from '@hocs/ThemeProvider/useThemeProvider.hook';\nimport { Component } from '@hocs/ThemeProvider/interfaces';\nimport type { SliderStyleProps } from './Slider.interface';\nimport type { FieldValues } from 'react-hook-form';\nimport SliderBase from './Slider';\n\nconst Slider = <TFieldValues extends FieldValues = FieldValues>({\n theme,\n variant = 'default',\n ...rest\n}: SliderStyleProps<TFieldValues>) => {\n const { componentStyles } = useCreateComponentStyles([Component.SLIDER], theme, variant.toUpperCase());\n\n return <SliderBase {...rest} style={componentStyles} />;\n};\n\nexport default Slider;\n","import { css } from '@emotion/react';\nimport { getStyle } from '@utilities/emotion/styles';\n\nconst background = (theme: Record<string, string>, event: string): string => `\n ~ .--SWITCH-span {\n // BACKGROUNDS\n ${getStyle(theme, 'background-color', `--SWITCH-EVENTS-${event}-BACKGROUND-COLOR`)}\n }\n`;\n\nconst border = (theme: Record<string, string>, event: string): string => `\n ~ .--SWITCH-span {\n // BORDERS\n ${getStyle(theme, 'border-color', `--SWITCH-EVENTS-${event}-BORDER-COLOR`)}\n ${getStyle(theme, 'border-width', `--SWITCH-EVENTS-${event}-BORDER-WIDTH`)}\n ${getStyle(theme, 'border-style', `--SWITCH-EVENTS-${event}-BORDER-STYLE`)}\n ${getStyle(theme, 'border-radius', `--SWITCH-EVENTS-${event}-BORDER-RADIUS`)}\n }\n`;\n\nconst outline = (theme: Record<string, string>, event: string): string => `\n ~ .--SWITCH-span {\n // OUTLINE\n ${getStyle(theme, 'outline-color', `--SWITCH-EVENTS-${event}-OUTLINE-COLOR`)}\n ${getStyle(theme, 'outline-width', `--SWITCH-EVENTS-${event}-OUTLINE-WIDTH`)}\n ${getStyle(theme, 'outline-style', `--SWITCH-EVENTS-${event}-OUTLINE-STYLE`)}\n ${getStyle(theme, 'outline-offset', `--SWITCH-EVENTS-${event}-OUTLINE-OFFSET`)}\n }\n`;\n\nconst icon = (theme: Record<string, string>, event: string): string => `\n// UTILS\n ~ .--SWITCH-span > span {\n ${getStyle(theme, 'color', `--SWITCH-EVENTS-${event}-ICON-COLOR`)};\n\n > .--SWITCH-shadow {\n ${getStyle(theme, 'background-color', `--SWITCH-EVENTS-${event}-ICON-BACKGROUND-COLOR`)};\n }\n }\n`;\n\nconst label = (theme: Record<string, string>, event: string): string => `\n // TYPOGRAPHY\n .--SWITCH-label {\n ${getStyle(theme, 'color', `--SWITCH-EVENTS-${event}-COLOR-PRIMARY`)}\n }\n\n ~ .--SWITCH-helperText {\n ${getStyle(theme, 'color', `--SWITCH-EVENTS-${event}-COLOR-SECONDARY`)}\n }\n`;\n\nconst Style = (theme: Record<string, string>) => css`\n &.--SWITCH {\n display: flex;\n flex-direction: column;\n gap: 8px;\n width: fit-content;\n\n .--SWITCH-container {\n display: flex;\n flex-direction: row;\n gap: 12px;\n align-items: center;\n cursor: pointer;\n\n // ENABLED\n ${label(theme, 'ENABLED')};\n\n // VALUE\n &:has(.--SWITCH-inputField:checked) {\n ${label(theme, 'VALUE')};\n }\n\n // HOVER\n &:has(.--SWITCH-inputField:hover) {\n ${label(theme, 'HOVER')};\n }\n\n // ACTIVE\n &:has(.--SWITCH-inputField.--SWITCH-active, .--SWITCH-inputField:active) {\n ${label(theme, 'ACTIVE')};\n }\n\n // FOCUS-VISIBLE\n &:has(.--SWITCH-inputField:focus-visible) {\n ${label(theme, 'FOCUS')};\n }\n\n // DISABLED\n &:has(.--SWITCH-inputField:disabled) {\n pointer-events: none;\n ${label(theme, 'DISABLED')};\n }\n\n // DISABLED + VALUE\n &:has(.--SWITCH-inputField:disabled:checked) {\n ${label(theme, 'DISABLED_VALUE')};\n }\n\n .--SWITCH-checkbox {\n position: relative;\n display: inline-flex;\n width: 48px;\n height: 24px;\n\n .--SWITCH-inputField {\n cursor: pointer;\n position: absolute;\n opacity: 0;\n width: 100%;\n height: 100%;\n z-index: 2;\n margin: 0;\n -webkit-tap-highlight-color: transparent;\n\n // ENABLED\n ${background(theme, 'ENABLED')};\n ${border(theme, 'ENABLED')};\n ${icon(theme, 'ENABLED')};\n\n // VALUE\n &:checked {\n ${background(theme, 'VALUE')};\n ${border(theme, 'VALUE')};\n ${icon(theme, 'VALUE')};\n\n ~ .--SWITCH-span {\n .--SWITCH-iconOff {\n transform: translateX(27px);\n opacity: 0;\n }\n .--SWITCH-iconOn {\n transform: translateX(-3px);\n opacity: 1;\n }\n }\n }\n\n // HOVER\n &:hover {\n ~ .--SWITCH-span {\n .--SWITCH-iconOn,\n .--SWITCH-iconOff {\n &::before {\n opacity: 1;\n ${getStyle(theme, 'background-color', '--SWITCH-EVENTS-HOVER-SHADOW-COLOR')}\n }\n }\n }\n }\n\n // ACTIVE\n &.--SWITCH-active,\n &:active {\n ~ .--SWITCH-span {\n .--SWITCH-iconOn,\n .--SWITCH-iconOff {\n &::before {\n opacity: 1;\n ${getStyle(theme, 'background-color', '--SWITCH-EVENTS-ACTIVE-SHADOW-COLOR')}\n }\n }\n }\n }\n\n // FOCUS\n &:focus-visible {\n outline: none;\n ${outline(theme, 'FOCUS')};\n ${icon(theme, 'FOCUS')};\n }\n\n // DISABLED\n &:disabled {\n ${background(theme, 'DISABLED')};\n ${border(theme, 'DISABLED')};\n ${icon(theme, 'DISABLED')};\n }\n\n // DISABLED + VALUE\n &:disabled:checked {\n ${background(theme, 'DISABLED_VALUE')};\n ${border(theme, 'DISABLED_VALUE')};\n ${icon(theme, 'DISABLED_VALUE')};\n\n ~ .--SWITCH-span {\n .--SWITCH-iconOff {\n transform: translateX(27px);\n opacity: 0;\n }\n .--SWITCH-iconOn {\n transform: translateX(-3px);\n opacity: 1;\n }\n }\n }\n }\n\n .--SWITCH-span {\n width: 48px;\n height: 24px;\n ${getStyle(theme, 'border-radius', '--SWITCH-ROOT-BORDER-RADIUS')};\n position: relative;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n transition: background-color 150ms ease-in-out;\n\n .--SWITCH-iconOff,\n .--SWITCH-iconOn {\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n\n height: min(16px, calc(100% - 6px));\n aspect-ratio: 1;\n\n transition:\n transform 150ms ease-in-out,\n opacity 150ms ease-in-out;\n\n &::before {\n content: '';\n position: absolute;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n top: calc(50% - 16px);\n left: calc(50% - 16px);\n opacity: 0;\n z-index: -1;\n transition: opacity 150ms ease-in-out;\n }\n\n > span {\n max-width: 100%;\n max-height: 100%;\n position: absolute;\n z-index: 1;\n font-size: 12px;\n }\n\n .--SWITCH-shadow {\n position: absolute;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n pointer-events: none;\n z-index: -1;\n transition: background-color 150ms ease-in-out;\n }\n }\n\n .--SWITCH-iconOff {\n left: 0;\n transform: translateX(3px);\n opacity: 1;\n }\n .--SWITCH-iconOn {\n right: 0;\n transform: translateX(calc(-1 * 27px));\n opacity: 0;\n }\n }\n }\n }\n\n .--SWITCH-label {\n // FONT\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 0.875rem;\n font-weight: 500;\n line-height: 1;\n }\n\n .--SWITCH-helperText {\n // FONT\n font-family: ${theme['--FONTFAMILY-PRIMARY']};\n font-size: 13px;\n line-height: 16px;\n margin-left: 14px;\n }\n }\n`;\n\nexport default Style;\n","// Component Base\nimport React, { useState } from 'react';\nimport emotion from './Switch.emotion';\nimport type { SwitchProps } from './Switch.interface';\n// External Libraries\nimport { useController, type FieldValues, type FieldPath } from 'react-hook-form';\n\nconst CLASS = '--SWITCH';\n\n/**\n * A switch (toggle) lets users turn a single setting on or off, like a physical light switch.\n * Unlike a checkbox, a switch is expected to apply its effect immediately without a submit action.\n *\n * Optionally accepts `iconOn` and `iconOff` to visually communicate both states.\n * The form value is a `boolean`.\n */\nconst Switch = <TFieldValues extends FieldValues = FieldValues>({\n name,\n control,\n iconOn,\n iconOff,\n disabled,\n label,\n helperText,\n className,\n style,\n ...rest\n}: SwitchProps<TFieldValues>) => {\n const [isActive, setIsActive] = useState<boolean>(false);\n\n // Get value from controller\n const { field, fieldState } = useController({\n control,\n name: name as FieldPath<TFieldValues>,\n });\n const [value, setValue] = useState<boolean>(field.value || false);\n const errorText = fieldState.error;\n\n const onClick = (checked: boolean) => {\n // Send data to react hook form\n field.onChange(checked);\n\n // Update local state\n setValue(checked);\n\n if (errorText) onBlur();\n };\n\n const onChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const { checked } = event.target;\n onClick(checked);\n };\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter' || event.key === 'Space') {\n setIsActive(true);\n }\n rest.onKeyDown?.(event);\n };\n\n const onKeyUp = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter' || event.key === 'Space') {\n setIsActive(false);\n onClick(!value);\n }\n rest.onKeyUp?.(event);\n };\n\n // Send data to react hook form\n const onBlur = () => field.onBlur();\n\n return (\n <div\n className={[CLASS, isActive ? `${CLASS}-active` : '', className || ''].join(' ')}\n css={emotion(style)}\n data-testid={CLASS}\n >\n <label className={`${CLASS}-container`}>\n <div className={`${CLASS}-checkbox`}>\n <input\n className={[`${CLASS}-inputField`, isActive ? `${CLASS}-active` : '', errorText && `${CLASS}-error`].join(\n ' ',\n )}\n type='checkbox'\n value={name}\n checked={value}\n disabled={disabled}\n onChange={onChange}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onBlur={onBlur}\n data-testid={`${CLASS}-inputField`}\n {...rest}\n />\n <span className={`${CLASS}-span`} data-testid={`${CLASS}-icon`}>\n <span className={`${CLASS}-iconOff`}>\n <span className={`${CLASS}-shadow`} />\n {iconOff}\n </span>\n <span className={`${CLASS}-iconOn`}>\n <span className={`${CLASS}-shadow`} />\n {iconOn}\n </span>\n </span>\n </div>\n <span className={`${CLASS}-label`} data-testid={`${CLASS}-label`}>\n {label}\n </span>\n </label>\n {(helperText || errorText) && (\n <span className={`${CLASS}-helperText`} data-testid={`${CLASS}-helperText`}>\n {errorText ? errorText.message : helperText}\n </span>\n )}\n </div>\n );\n};\n\nexport default Switch;\n","import { useCreateComponentStyles } from '@hocs/ThemeProvider/useThemeProvider.hook';\nimport { Component } from '@hocs/ThemeProvider/interfaces';\nimport type { SwitchStyleProps } from './Switch.interface';\nimport type { FieldValues } from 'react-hook-form';\nimport SwitchBase from './Switch';\n\nconst Switch = <TFieldValues extends FieldValues = FieldValues>({\n theme,\n variant = 'default',\n ...rest\n}: SwitchStyleProps<TFieldValues>) => {\n const { componentStyles } = useCreateComponentStyles([Component.SWITCH], theme, variant.toUpperCase());\n\n return <SwitchBase {...rest} style={componentStyles} />;\n};\n\nexport default Switch;\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { a as e, n as t, t as n } from "./emotion-react-jsx-runtime.browser.esm-C4rLUMui.js";
1
+ import { a as e, n as t, t as n } from "./emotion-react-jsx-runtime.browser.esm-Ch-DwUYg.js";
2
2
  import { useLayoutEffect as r } from "react";
3
3
  //#region src/hocs/ThemeProvider/fonts/loadFonts.ts
4
4
  var i = `
@@ -36,4 +36,4 @@ var i = `
36
36
  //#endregion
37
37
  export { s as t };
38
38
 
39
- //# sourceMappingURL=ThemeProvider-Q2Hjezbt.js.map
39
+ //# sourceMappingURL=ThemeProvider-C47pyWG6.js.map