@jenesei-software/jenesei-kit-react 1.3.30 → 1.3.32

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 (144) hide show
  1. package/build/area-preview.cjs.js +1 -1
  2. package/build/area-preview.es.js +1 -1
  3. package/build/area-skeleton.cjs.js +1 -1
  4. package/build/area-skeleton.es.js +1 -1
  5. package/build/build-info.txt +3 -3
  6. package/build/{component-qRPasLxk.cjs → component-B8kWtTfs.cjs} +2 -2
  7. package/build/{component-qRPasLxk.cjs.map → component-B8kWtTfs.cjs.map} +1 -1
  8. package/build/{component-DXZrlFCa.js → component-BD3FCIT8.js} +3 -3
  9. package/build/{component-DXZrlFCa.js.map → component-BD3FCIT8.js.map} +1 -1
  10. package/build/{component-DjIZRLtN.js → component-BybwN9H4.js} +2 -2
  11. package/build/{component-DjIZRLtN.js.map → component-BybwN9H4.js.map} +1 -1
  12. package/build/{component-BHINcJGw.cjs → component-BzWpboBU.cjs} +2 -2
  13. package/build/{component-BHINcJGw.cjs.map → component-BzWpboBU.cjs.map} +1 -1
  14. package/build/{component-Ud_GRMAS.js → component-C0354Xwu.js} +3 -3
  15. package/build/{component-Ud_GRMAS.js.map → component-C0354Xwu.js.map} +1 -1
  16. package/build/{component-CQmuGUIt.cjs → component-C8ueaiSO.cjs} +2 -2
  17. package/build/{component-CQmuGUIt.cjs.map → component-C8ueaiSO.cjs.map} +1 -1
  18. package/build/{component-COVO0g4K.cjs → component-CANbSEA3.cjs} +2 -2
  19. package/build/{component-COVO0g4K.cjs.map → component-CANbSEA3.cjs.map} +1 -1
  20. package/build/{component-BJxTgP87.js → component-CATlnN8o.js} +2 -2
  21. package/build/{component-BJxTgP87.js.map → component-CATlnN8o.js.map} +1 -1
  22. package/build/{component-CJ_IYmXp.js → component-CGPZf0Mx.js} +2 -2
  23. package/build/{component-CJ_IYmXp.js.map → component-CGPZf0Mx.js.map} +1 -1
  24. package/build/{component-BkAJZ9bN.cjs → component-CM4bf3RV.cjs} +2 -2
  25. package/build/{component-BkAJZ9bN.cjs.map → component-CM4bf3RV.cjs.map} +1 -1
  26. package/build/{component-CVODnsK7.js → component-DAocGHCP.js} +2 -2
  27. package/build/{component-CVODnsK7.js.map → component-DAocGHCP.js.map} +1 -1
  28. package/build/{component-CQ4haQho.cjs → component-DHXjnBNp.cjs} +2 -2
  29. package/build/{component-CQ4haQho.cjs.map → component-DHXjnBNp.cjs.map} +1 -1
  30. package/build/{component-BnqGhIYn.js → component-DIA35EVR.js} +2 -2
  31. package/build/{component-BnqGhIYn.js.map → component-DIA35EVR.js.map} +1 -1
  32. package/build/{component-DxjC5ZDY.cjs → component-DIk87lHF.cjs} +2 -2
  33. package/build/{component-DxjC5ZDY.cjs.map → component-DIk87lHF.cjs.map} +1 -1
  34. package/build/{component-Cy1LF62n.js → component-DJDXAzlq.js} +3 -3
  35. package/build/{component-Cy1LF62n.js.map → component-DJDXAzlq.js.map} +1 -1
  36. package/build/{component-B0KY9CML.cjs → component-DNVmU44U.cjs} +2 -2
  37. package/build/{component-B0KY9CML.cjs.map → component-DNVmU44U.cjs.map} +1 -1
  38. package/build/{component-AtGU3rIh.cjs → component-DbRG0dzX.cjs} +2 -2
  39. package/build/{component-AtGU3rIh.cjs.map → component-DbRG0dzX.cjs.map} +1 -1
  40. package/build/{component-JqUoQ-8S.js → component-DpX5Qw3i.js} +2 -2
  41. package/build/{component-JqUoQ-8S.js.map → component-DpX5Qw3i.js.map} +1 -1
  42. package/build/{component-Ch9eF_4H.js → component-DrTBbu8u.js} +4 -4
  43. package/build/{component-Ch9eF_4H.js.map → component-DrTBbu8u.js.map} +1 -1
  44. package/build/{component-BI6fe9pl.js → component-Duwta9MT.js} +2 -2
  45. package/build/{component-BI6fe9pl.js.map → component-Duwta9MT.js.map} +1 -1
  46. package/build/{component-DAtaP1gP.cjs → component-DwVvs3yX.cjs} +2 -2
  47. package/build/{component-DAtaP1gP.cjs.map → component-DwVvs3yX.cjs.map} +1 -1
  48. package/build/component-accordion.cjs.js +1 -1
  49. package/build/component-accordion.es.js +2 -2
  50. package/build/component-button-group.cjs.js +1 -1
  51. package/build/component-button-group.es.js +2 -2
  52. package/build/component-button.cjs.js +1 -1
  53. package/build/component-button.es.js +1 -1
  54. package/build/component-checkbox-group.cjs.js +1 -1
  55. package/build/component-checkbox-group.es.js +2 -2
  56. package/build/component-checkbox.cjs.js +1 -1
  57. package/build/component-checkbox.es.js +2 -2
  58. package/build/component-date-picker.cjs.js +1 -1
  59. package/build/component-date-picker.d.ts +1 -0
  60. package/build/component-date-picker.es.js +2 -2
  61. package/build/component-icon.cjs.js +1 -1
  62. package/build/component-icon.es.js +1 -1
  63. package/build/component-image-button.cjs.js +1 -1
  64. package/build/component-image-button.es.js +1 -1
  65. package/build/component-image-select.cjs.js +1 -1
  66. package/build/component-image-select.es.js +2 -2
  67. package/build/component-image-slider.cjs.js +1 -1
  68. package/build/component-image-slider.es.js +2 -2
  69. package/build/component-image.cjs.js +1 -1
  70. package/build/component-image.es.js +2 -2
  71. package/build/component-input-otp.cjs.js +1 -1
  72. package/build/component-input-otp.es.js +2 -2
  73. package/build/component-input.cjs.js +1 -1
  74. package/build/component-input.es.js +2 -2
  75. package/build/component-map.cjs.js +1 -1
  76. package/build/component-map.es.js +2 -2
  77. package/build/component-pagination.cjs.js +1 -1
  78. package/build/component-pagination.es.js +1 -1
  79. package/build/component-range.cjs.js +1 -1
  80. package/build/component-range.es.js +2 -2
  81. package/build/component-select.cjs.js +1 -1
  82. package/build/component-select.d.ts +1 -0
  83. package/build/component-select.es.js +1 -1
  84. package/build/{component-D5Bg68Aq.cjs → component-skAuX4C8.cjs} +2 -2
  85. package/build/{component-D5Bg68Aq.cjs.map → component-skAuX4C8.cjs.map} +1 -1
  86. package/build/component-textarea.cjs.js +1 -1
  87. package/build/component-textarea.d.ts +3 -0
  88. package/build/component-textarea.es.js +1 -1
  89. package/build/component-toggle.cjs.js +1 -1
  90. package/build/component-toggle.es.js +2 -2
  91. package/build/component-tooltip.cjs.js +1 -1
  92. package/build/component-tooltip.d.ts +107 -0
  93. package/build/component-tooltip.es.js +1 -1
  94. package/build/component-typography.cjs.js +1 -1
  95. package/build/component-typography.d.ts +107 -0
  96. package/build/component-typography.es.js +1 -1
  97. package/build/{component.components-BJ1nh728.js → component.components-83DbC_hw.js} +2 -2
  98. package/build/{component.components-BJ1nh728.js.map → component.components-83DbC_hw.js.map} +1 -1
  99. package/build/{component.components-0OAiJjsR.cjs → component.components-BjdoMO5R.cjs} +2 -2
  100. package/build/{component.components-0OAiJjsR.cjs.map → component.components-BjdoMO5R.cjs.map} +1 -1
  101. package/build/{component.constants-ASMqRXmH.js → component.constants-Be7PPP03.js} +2 -2
  102. package/build/{component.constants-ASMqRXmH.js.map → component.constants-Be7PPP03.js.map} +1 -1
  103. package/build/{component.constants-DLrolRBs.cjs → component.constants-BgV35uxo.cjs} +2 -2
  104. package/build/{component.constants-DLrolRBs.cjs.map → component.constants-BgV35uxo.cjs.map} +1 -1
  105. package/build/{component.constants-B1XT0pqP.cjs → component.constants-C4Du7oRP.cjs} +2 -2
  106. package/build/{component.constants-B1XT0pqP.cjs.map → component.constants-C4Du7oRP.cjs.map} +1 -1
  107. package/build/{component.constants-4Zuzymaj.js → component.constants-DbWj5l8e.js} +3 -3
  108. package/build/{component.constants-4Zuzymaj.js.map → component.constants-DbWj5l8e.js.map} +1 -1
  109. package/build/{component.types-BXYLxQWv.js → component.types-B3IQzYHq.js} +2 -2
  110. package/build/{component.types-BXYLxQWv.js.map → component.types-B3IQzYHq.js.map} +1 -1
  111. package/build/{component.types-haccSZSq.cjs → component.types-C6Zrax1A.cjs} +2 -2
  112. package/build/{component.types-haccSZSq.cjs.map → component.types-C6Zrax1A.cjs.map} +1 -1
  113. package/build/consts.cjs.js +1 -1
  114. package/build/consts.es.js +1 -1
  115. package/build/context-app.cjs.js +1 -1
  116. package/build/context-app.es.js +2 -2
  117. package/build/context-sonner.cjs.js +1 -1
  118. package/build/context-sonner.es.js +2 -2
  119. package/build/{context.constants-p2bRkgM3.cjs → context.constants-BMJ3rLa_.cjs} +259 -258
  120. package/build/context.constants-BMJ3rLa_.cjs.map +1 -0
  121. package/build/{context.constants-Dop398a2.js → context.constants-YlWOZAd7.js} +120 -12
  122. package/build/context.constants-YlWOZAd7.js.map +1 -0
  123. package/build/{context.hooks-Spdhsa4j.cjs → context.hooks-B1QdI16d.cjs} +2 -2
  124. package/build/{context.hooks-Spdhsa4j.cjs.map → context.hooks-B1QdI16d.cjs.map} +1 -1
  125. package/build/{context.hooks-b1w6_aK9.js → context.hooks-Bl4gTFVP.js} +2 -2
  126. package/build/{context.hooks-b1w6_aK9.js.map → context.hooks-Bl4gTFVP.js.map} +1 -1
  127. package/build/{context.hooks-CUlqrzfP.js → context.hooks-CnqRriMa.js} +2 -2
  128. package/build/{context.hooks-CUlqrzfP.js.map → context.hooks-CnqRriMa.js.map} +1 -1
  129. package/build/{context.hooks-BFjFm8iR.cjs → context.hooks-D23gzlbO.cjs} +2 -2
  130. package/build/{context.hooks-BFjFm8iR.cjs.map → context.hooks-D23gzlbO.cjs.map} +1 -1
  131. package/build/index.cjs.js +1 -1
  132. package/build/index.d.ts +111 -0
  133. package/build/index.es.js +18 -18
  134. package/build/style-error.cjs.js +1 -1
  135. package/build/style-error.es.js +1 -1
  136. package/build/style-theme.cjs.js +1 -1
  137. package/build/style-theme.es.js +1 -1
  138. package/build/{use-CHyIgo-M.cjs → use-DZU4NdpU.cjs} +2 -2
  139. package/build/{use-CHyIgo-M.cjs.map → use-DZU4NdpU.cjs.map} +1 -1
  140. package/build/{use-DLn-Y7_0.js → use-JWHe9gP5.js} +3 -3
  141. package/build/{use-DLn-Y7_0.js.map → use-JWHe9gP5.js.map} +1 -1
  142. package/package.json +2 -2
  143. package/build/context.constants-Dop398a2.js.map +0 -1
  144. package/build/context.constants-p2bRkgM3.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.constants-Dop398a2.js","sources":["../src/components/icon/component.tsx","../src/components/icon/component.functions.tsx","../src/theme/theme.interface.ts","../src/theme/theme.ts","../src/theme/theme.global.ts","../src/areas/skeleton/area.styles.tsx","../src/areas/skeleton/area.tsx","../src/components/icon/component.styles.ts","../src/areas/preview/area.tsx","../src/components/accordion/component.styles.ts","../src/components/typography/component.styles.ts","../src/hooks/use-overflowing/use.ts","../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/@floating-ui/react/dist/floating-ui.react.utils.mjs","../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../node_modules/@floating-ui/react/dist/floating-ui.react.mjs","../src/components/popover/component.tsx","../src/components/popover/component.styles.ts","../src/components/popover/component.constants.tsx","../src/components/tooltip/component.styles.ts","../src/components/tooltip/component.tsx","../src/components/tooltip/component.constants.ts","../src/components/typography/component.tsx","../src/components/button/component.styles.ts","../src/components/button/component.tsx","../src/components/button-group/component.styles.ts","../src/styles/error/style.tsx","../src/components/checkbox/component.styles.ts","../src/components/checkbox-group/component.styles.ts","../src/components/select/component.tsx","../src/components/textarea/component.tsx","../src/components/textarea/component.styles.ts","../src/components/select/component.styles.ts","../node_modules/react-number-format/dist/react-number-format.es.js","../src/components/input/component.styles.ts","../src/components/date-picker/component.styles.ts","../src/components/image/component.styles.tsx","../src/components/image-select/component.styles.ts","../src/components/image-slider/component.styles.tsx","../src/components/input-otp/component.styles.ts","../src/components/map/component.constants.tsx","../src/components/map/component.styles.ts","../src/components/range/component.styles.ts","../src/components/toggle/component.styles.ts","../src/contexts/context-app/context.tsx","../src/contexts/context-app/context.styles.ts","../src/contexts/context-sonner/context.tsx","../src/contexts/context-sonner/context.styles.tsx","../src/contexts/context-sonner/context.constants.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { useTheme } from 'styled-components';\n\nimport { IconItemProps, StyledIcon, StyledIconSkeleton, useLazyInjectSprite } from '.';\n\nexport const Icon = (props: IconItemProps) => {\n const theme = useTheme();\n const iconId = useMemo(\n () => theme.icon.getIconId({ type: props.type, name: props.name }),\n [props.name, props.type, theme.icon.getIconId],\n );\n const spriteUrl = useMemo(() => theme.icon.getSpriteUrl({ type: props.type }), [props.type, theme.icon.getSpriteUrl]);\n const { loaded, error } = useLazyInjectSprite(spriteUrl);\n\n if (!loaded || error)\n return (\n <StyledIconSkeleton\n $size={props.size}\n $order={props.order}\n color={props.color ?? undefined}\n className={props.className}\n visible\n />\n );\n\n return (\n <StyledIcon\n width='24'\n height='24'\n viewBox='0 0 24 24'\n xmlns='http://www.w3.org/2000/svg'\n $size={props.size}\n $turn={props.turn}\n $order={props.order}\n $color={props.color ?? undefined}\n $sx={props.sx}\n className={props.className}\n onClick={props.onClick}\n tabIndex={props.tabIndex}\n >\n <use href={iconId} />\n </StyledIcon>\n );\n};\n","import { useEffect, useState } from 'react';\n\nimport { getIconComponentsProps, Icon } from '.';\n\nexport function getIconComponents(props: getIconComponentsProps) {\n return (props.icons ?? [])\n ?.filter((icon) => !icon.isHidden)\n ?.map((icon, index) => (\n <Icon key={`${icon.type}-${icon.name}-${index}`} size={icon?.size ?? props.size} {...icon} />\n ));\n}\nexport function useInjectSprites(urls: string[]) {\n useEffect(() => {\n const containers: HTMLDivElement[] = [];\n\n urls.forEach(async (url) => {\n try {\n const res = await fetch(url);\n if (!res.ok) {\n console.error(`Failed to load sprite: ${url}`);\n return;\n }\n const text = await res.text();\n\n const div = document.createElement('div');\n div.style.display = 'none';\n div.innerHTML = text;\n\n document.body.prepend(div);\n containers.push(div);\n } catch (err) {\n console.error(`Error loading sprite ${url}`, err);\n }\n });\n\n return () => {\n containers.forEach((div) => div.remove());\n };\n }, [urls]);\n}\n\ntype SpriteStatus = {\n promise: Promise<void>;\n loaded: boolean;\n error?: Error;\n};\n\nconst loadedSprites = new Map<string, SpriteStatus>();\n\nexport function useLazyInjectSprite(url: string) {\n const [loaded, setLoaded] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n let isMounted = true;\n\n // Проверяем актуальный статус прямо здесь\n let status = loadedSprites.get(url);\n if (status?.loaded) {\n setLoaded(true);\n setError(status.error ?? null);\n return;\n }\n\n let promise: Promise<void>;\n\n if (!status) {\n // Создаём новый промис\n promise = (async () => {\n try {\n const res = await fetch(url);\n if (!res.ok) throw new Error(`Failed to load sprite: ${url}`);\n const text = await res.text();\n const div = document.createElement('div');\n div.style.display = 'none';\n div.innerHTML = text;\n document.body.prepend(div);\n\n //@ts-ignore\n loadedSprites.set(url, { promise, loaded: true });\n } catch (err) {\n const errorObj = err instanceof Error ? err : new Error(String(err));\n //@ts-ignore\n loadedSprites.set(url, { promise, loaded: true, error: errorObj });\n if (isMounted) setError(errorObj);\n throw err;\n }\n })();\n\n loadedSprites.set(url, { promise, loaded: false });\n } else {\n // Уже есть промис — берём его\n promise = status.promise;\n }\n\n promise\n .then(() => {\n if (!isMounted) return;\n const s = loadedSprites.get(url);\n setLoaded(s?.loaded ?? true);\n setError(s?.error ?? null);\n })\n .catch(() => {}); // Ошибка уже сохранена в статусе\n\n return () => {\n isMounted = false;\n };\n }, [url]);\n\n return { loaded, error };\n}\n","export interface IThemeGenreTypeDefault {\n background: {\n rest: string;\n hover: string;\n };\n\n border: {\n rest: string;\n hover: string;\n };\n\n color: {\n rest: string;\n hover: string;\n placeholder: string;\n };\n}\nexport interface IThemeGenreTypeRange {\n thumb: {\n background: {\n rest: string;\n hover: string;\n };\n border: {\n rest: string;\n hover: string;\n };\n };\n\n track: {\n background: {\n rest: string;\n };\n gradient: {\n rest: string;\n };\n };\n}\nexport interface IThemeGenreTypeSelect {\n background: {\n rest: string;\n hover: string;\n select: string;\n };\n\n border: {\n rest: string;\n hover: string;\n select: string;\n };\n\n color: {\n rest: string;\n hover: string;\n select: string;\n placeholder: string;\n };\n}\nexport interface IThemeGenreTypeImageSelect {\n background: {\n rest: string;\n hover: string;\n };\n\n border: {\n rest: string;\n hover: string;\n };\n\n color: {\n rest: string;\n hover: string;\n placeholder: string;\n };\n}\nexport interface IThemeGenreTypeToggle {\n active: {\n rest: {\n track: string;\n thumb: string;\n border: string;\n thumbBoxShadow: string;\n };\n hover: {\n track: string;\n thumb: string;\n border: string;\n thumbBoxShadow: string;\n };\n };\n\n unActive: {\n rest: {\n track: string;\n thumb: string;\n border: string;\n thumbBoxShadow: string;\n };\n hover: {\n track: string;\n thumb: string;\n border: string;\n thumbBoxShadow: string;\n };\n };\n}\nexport interface IThemeGenreTypeDate {\n background: {\n rest: string;\n hover: string;\n today: string;\n weekend: string;\n choice: string;\n line: string;\n };\n\n border: {\n rest: string;\n hover: string;\n today: string;\n weekend: string;\n choice: string;\n line: string;\n };\n\n color: {\n rest: string;\n hover: string;\n placeholder: string;\n today: string;\n weekend: string;\n choice: string;\n line: string;\n };\n}\nexport interface IThemeGenreTypeSonner {\n button: {\n genre: keyof IThemeGenre;\n };\n\n description: {\n color: string;\n };\n\n icon: {\n color: string;\n };\n\n title: {\n color: string;\n };\n\n wrapper: {\n background: string;\n borderColor: string;\n boxShadow: string;\n boxShadowHover: string;\n };\n}\n\nexport type IThemeGenreName =\n | 'gray'\n | 'grayBorder'\n | 'black'\n | 'blackBorder'\n | 'product'\n | 'productBorder'\n | 'white'\n | 'greenTransparent'\n | 'redTransparent'\n | 'yellowTransparent'\n | 'realebail-product'\n | 'realebail-gray'\n | 'realebail-white'\n | 'bustmarket-gray-violet'\n | 'bustmarket-gray'\n | 'bustmarket-violet'\n | 'bustmarket-white-violet';\n\nexport type IThemeGenre = Record<\n Extract<\n IThemeGenreName,\n | 'gray'\n | 'grayBorder'\n | 'black'\n | 'blackBorder'\n | 'product'\n | 'productBorder'\n | 'white'\n | 'greenTransparent'\n | 'redTransparent'\n | 'yellowTransparent'\n | 'realebail-product'\n | 'realebail-gray'\n | 'realebail-white'\n | 'bustmarket-gray'\n | 'bustmarket-gray-violet'\n | 'bustmarket-violet'\n | 'bustmarket-white-violet'\n >,\n IThemeGenreTypeDefault\n>;\n\nexport type IThemeGenreToggle = Record<Extract<IThemeGenreName, 'product'>, IThemeGenreTypeToggle>;\nexport type IThemeGenreSonner = Record<\n Extract<IThemeGenreName, 'black' | 'greenTransparent' | 'redTransparent' | 'yellowTransparent'>,\n IThemeGenreTypeSonner\n>;\nexport type IThemeGenreInput = Record<\n Extract<IThemeGenreName, 'gray' | 'grayBorder' | 'blackBorder' | 'realebail-white' | 'bustmarket-gray'>,\n IThemeGenreTypeDefault\n>;\nexport type IThemeGenreRange = Record<\n Extract<IThemeGenreName, 'gray' | 'grayBorder' | 'blackBorder' | 'realebail-white' | 'bustmarket-gray'>,\n IThemeGenreTypeRange\n>;\nexport type IThemeGenreImageSelect = Record<\n Extract<IThemeGenreName, 'gray' | 'grayBorder' | 'blackBorder' | 'realebail-white'>,\n IThemeGenreTypeImageSelect\n>;\nexport type IThemeGenreSelect = Record<\n Extract<IThemeGenreName, 'gray' | 'grayBorder' | 'blackBorder' | 'realebail-white'>,\n IThemeGenreTypeSelect\n>;\nexport type IThemeGenreTextArea = Record<\n Extract<IThemeGenreName, 'gray' | 'grayBorder' | 'blackBorder' | 'realebail-white'>,\n IThemeGenreTypeDefault\n>;\nexport type IThemeGenreDate = Record<\n Extract<IThemeGenreName, 'gray' | 'grayBorder' | 'blackBorder' | 'realebail-white'>,\n IThemeGenreTypeDate\n>;\n\nexport interface IThemeSizePropertyDefault {\n font: number;\n\n height: number;\n\n heightIcon: number;\n\n padding: number;\n\n radius: number;\n}\n\nexport interface IThemeSizePropertyToggle {\n height: number;\n\n padding: number;\n\n thumb: number;\n\n width: number;\n}\n\nexport type IThemeScreen = Record<IThemeDevice, { width: number }>;\nexport type IThemeSize = 'large' | 'largeMedium' | 'medium' | 'mediumSmall' | 'small';\nexport type IThemeFontFamily = 'Inter' | 'Roboto' | 'Work Sans' | 'Roboto Mono' | 'Manrope';\nexport type IThemeTypographyHeading = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'h7' | 'h8' | 'h9';\nexport type IThemeTypographyWeight = 100 | 300 | 400 | 500 | 700 | 900;\nexport type IThemeDevice = 'default' | 'tablet' | 'mobile';\nexport type IThemePaletteKeys =\n | 'transparent'\n | 'black100'\n | 'black80'\n | 'black60'\n | 'black50'\n | 'black40'\n | 'black10'\n | 'black05'\n | 'black04'\n | 'blackHelena'\n | 'blackJanice'\n | 'grayJanice'\n | 'grayKaren'\n | 'grayMonica'\n | 'graySandra'\n | 'grayPatricia'\n | 'graySarah'\n | 'grayStassie'\n | 'grayAdriana'\n | 'greenGoogle'\n | 'grayBarbara'\n | 'grayStephanie'\n | 'grayFrances'\n | 'grayTina'\n | 'green100'\n | 'green50'\n | 'green25'\n | 'green10'\n | 'green10Background'\n | 'whiteStandard'\n | 'whiteJanice'\n | 'yellowGoogle'\n | 'yellow100'\n | 'yellow50'\n | 'yellow25'\n | 'yellow10'\n | 'yellow10Background'\n | 'redGoogle'\n | 'red100'\n | 'red50'\n | 'red25'\n | 'red10'\n | 'red10Background'\n | 'blueGoogle'\n | 'blueRest'\n | 'blueActive'\n | 'blueHover'\n | 'blueFocus'\n | 'blueBr'\n | 'blueKaren'\n | 'blueMonica'\n | 'violetStephanie'\n | 'violetJanice'\n | 'amnezia'\n | 'inherit'\n | 'currentColor';\n\nexport const ThemeMapId = [\n 'Close',\n 'Biometry',\n 'Qr',\n 'Search',\n 'Folder',\n 'Wallet',\n 'Graph',\n 'Bookmark',\n 'Browser',\n 'Category',\n 'Home',\n 'Notification',\n 'Chat',\n 'Heart',\n 'Paper',\n 'Plus',\n 'Minus',\n 'PaperPlus',\n 'PaperNegative',\n 'PaperFail',\n 'PaperDownload',\n 'PaperUpload',\n 'Send',\n 'Password',\n 'Swap',\n 'Work',\n 'Arrow1',\n 'Arrow2',\n 'Arrow3',\n 'Arrow4',\n 'ArrowMini1',\n 'ArrowMini2',\n 'Scan',\n 'Activity',\n 'Calendar',\n 'Message',\n 'PlusMini',\n 'ChartMini',\n 'Game',\n 'Bag1',\n 'Bag2',\n 'TicketStar',\n 'MoreCircle',\n 'MoreSquare',\n 'Discount',\n 'Buy',\n 'Web',\n 'InfoMini',\n 'DangerMini',\n 'CloseMini',\n 'TickMini',\n 'Video',\n 'Discovery',\n 'Location',\n 'Document',\n 'Setting',\n 'Time',\n 'VolumeUp',\n 'VolumeDown',\n 'VolumeOff',\n 'Star',\n 'Select',\n 'Ticket',\n 'Camera',\n 'Profile',\n 'AddUser',\n 'TwoUser',\n 'ThreeUser',\n 'Login',\n 'Logout',\n 'Download',\n 'Upload',\n 'Voice1',\n 'Voice2',\n 'Delete',\n 'Edit',\n 'PlayMini',\n 'ShieldDone',\n 'ShieldFail',\n 'Show',\n 'Hide',\n 'Filter1',\n 'Filter2',\n 'Image',\n 'Call',\n 'Calling',\n 'CallMissed',\n 'CallSilent',\n 'Lock',\n 'Unlock',\n 'Resources',\n 'Language',\n] as const;\nexport const ThemeMapCheckbox = [\n 'Radio-true',\n 'Radio-false',\n 'Square-true',\n 'Square-false',\n 'Heart-true',\n 'Heart-false',\n 'Arrow',\n] as const;\nexport const ThemeMapLoading = ['Line', 'Circle', 'Blocks', 'Balls'] as const;\nexport const ThemeMapRealebail = ['MapCluster', 'HomeLikes', 'HomeManagement', 'UserSettings', 'User'] as const;\nexport const ThemeMapLogo = ['Jenesei', 'BustMarket'] as const;\nexport const ThemeMapBustmarket = ['Card', 'Delivery', 'Heart', 'Reviews', 'Search', 'Menu'] as const;\nexport interface ITheme {\n icon: {\n map: {\n id: typeof ThemeMapId;\n checkbox: typeof ThemeMapCheckbox;\n loading: typeof ThemeMapLoading;\n realebail: typeof ThemeMapRealebail;\n logo: typeof ThemeMapLogo;\n bustmarket: typeof ThemeMapBustmarket;\n };\n getIconId: <T extends keyof ITheme['icon']['map']>(props: {\n type: T;\n name: ITheme['icon']['map'][T][number];\n }) => string;\n getSpriteUrl: (props: { type: keyof ITheme['icon']['map'] }) => string;\n };\n states: {\n focus: string;\n danger: string;\n };\n colors: {\n range: IThemeGenreRange;\n date: IThemeGenreDate;\n button: IThemeGenre;\n toggle: IThemeGenreToggle;\n checkbox: IThemeGenre;\n input: IThemeGenreInput;\n imageSelect: IThemeGenreImageSelect;\n select: IThemeGenreSelect;\n sonner: IThemeGenreSonner;\n };\n effects: {\n input: string;\n button: string;\n };\n font: {\n family: IThemeFontFamily;\n weight: IThemeTypographyWeight;\n sizeDefault: Record<IThemeDevice, number>;\n sizeHeading: Record<IThemeTypographyHeading, number>;\n lineHeight: number;\n };\n palette: Record<IThemePaletteKeys, string>;\n background: Record<IThemePaletteKeys, string>;\n screens: IThemeScreen;\n scrollbar: {\n width: number;\n background: string;\n thumb: string;\n thumbBorder: string;\n };\n transition: {\n duration: string;\n timingFunction: string;\n default: string;\n icon: string;\n };\n getContrastYIQ: (hexcolor: string) => string;\n}\n","import { getContrastYIQ } from '@local/functions';\n\nimport {\n ThemeMapBustmarket,\n ThemeMapCheckbox,\n ThemeMapId,\n ThemeMapLoading,\n ThemeMapLogo,\n ThemeMapRealebail,\n} from './theme.interface';\nimport { LIBRARY_VERSION } from '..';\nimport {\n ITheme,\n IThemeGenre,\n IThemeGenreDate,\n IThemeGenreImageSelect,\n IThemeGenreInput,\n IThemeGenreRange,\n IThemeGenreSelect,\n IThemeGenreSonner,\n IThemeGenreToggle,\n IThemePaletteKeys,\n IThemeSize,\n IThemeSizePropertyDefault,\n IThemeSizePropertyToggle,\n} from '.';\nexport const JeneseiPalette: Record<IThemePaletteKeys, string> = {\n currentColor: 'currentColor',\n inherit: 'inherit',\n transparent: 'transparent',\n black100: '#000000',\n black80: '#000000CC', // rgba(0 0 0 / 0.8)\n black60: '#00000099', // rgba(0 0 0 / 0.6)\n black50: '#00000080', // rgba(0 0 0 / 0.5)\n black40: '#00000066', // rgba(0 0 0 / 0.4)\n black10: '#0000001A', // rgba(0 0 0 / 0.1)\n black05: '#0000000D', // rgba(0 0 0 / 0.05)\n black04: '#0000000A', // rgba(0 0 0 / 0.04)\n blackHelena: '#181818',\n blackJanice: '#373740',\n grayJanice: '#f2f2f7',\n grayKaren: '#e5e5ea',\n grayMonica: '#c7c7cc',\n graySandra: '#d1d1d6',\n grayPatricia: '#484848',\n graySarah: '#737373',\n grayStassie: '#8D8D8F',\n grayAdriana: '#90909033',\n grayBarbara: '#EBEEEA',\n grayStephanie: '#6c7a91',\n grayTina: '#182433',\n grayFrances: '#dce1e7',\n whiteStandard: '#ffffff',\n whiteJanice: '#F7FAFF',\n greenGoogle: '#34a853',\n green100: '#34a853',\n green25: '#34A85340', // rgba(52 168 83 / 0.25)\n green50: '#34A85380', // rgba(52 168 83 / 0.50)\n green10: '#34A8531A', // rgba(52 168 83 / 0.1)\n green10Background: '#EFFFF3',\n yellowGoogle: '#fbbc04',\n yellow100: '#e4bc1b',\n yellow50: '#E4BC1B80', // rgba(228, 188, 27, 0.50)\n yellow25: '#E4BC1B40', // rgba(228, 188, 27, 0.25)\n yellow10: '#E4BC1B1A', // rgba(228, 188, 27, 0.1)\n yellow10Background: '#FFFBEA',\n redGoogle: '#ea4335',\n red100: '#ff4141',\n red50: '#FF414180', // rgba(255 65 65 / 0.50)\n red25: '#FF414140', // rgba(255 65 65 / 0.25)\n red10: '#FF41411A', // rgba(255 65 65 / 0.1)\n red10Background: '#FFEDED',\n blueGoogle: '#4285f4',\n blueRest: '#4195d2',\n blueActive: '#4195D21A', // rgba(65 149 210 / 0.1)\n blueHover: '#1769A5CC', // rgba(23 105 165 / 0.8)\n blueFocus: '#1769a5',\n blueBr: '#0975a6',\n blueKaren: '#2A77EE',\n blueMonica: '#174899',\n violetStephanie: '#a75afa',\n violetJanice: '#be83fd',\n amnezia: '#222224',\n};\n\nconst ThemeGenre: IThemeGenre = {\n 'bustmarket-gray-violet': {\n background: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.black04,\n },\n color: {\n rest: JeneseiPalette.violetStephanie,\n hover: JeneseiPalette.violetJanice,\n placeholder: JeneseiPalette.violetJanice,\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n },\n },\n 'bustmarket-gray': {\n background: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.black04,\n },\n color: {\n rest: JeneseiPalette.grayStephanie,\n hover: JeneseiPalette.grayTina,\n placeholder: JeneseiPalette.grayTina,\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n },\n },\n 'bustmarket-violet': {\n background: {\n rest: JeneseiPalette.violetStephanie,\n hover: JeneseiPalette.violetJanice,\n },\n color: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n placeholder: JeneseiPalette.whiteStandard,\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n },\n },\n 'bustmarket-white-violet': {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.violetJanice,\n },\n color: {\n rest: JeneseiPalette.blackJanice,\n hover: JeneseiPalette.whiteStandard,\n placeholder: JeneseiPalette.whiteStandard,\n },\n border: {\n rest: JeneseiPalette.grayFrances,\n hover: JeneseiPalette.grayFrances,\n },\n },\n 'realebail-white': {\n background: {\n rest: JeneseiPalette.whiteJanice,\n hover: JeneseiPalette.whiteJanice,\n },\n color: {\n rest: JeneseiPalette.blueKaren,\n hover: JeneseiPalette.blueMonica,\n placeholder: JeneseiPalette.blueKaren,\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n },\n },\n 'realebail-product': {\n background: {\n rest: JeneseiPalette.blueKaren,\n hover: JeneseiPalette.blueMonica,\n },\n color: {\n rest: JeneseiPalette.whiteJanice,\n hover: JeneseiPalette.whiteJanice,\n placeholder: JeneseiPalette.whiteJanice,\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n },\n },\n 'realebail-gray': {\n background: {\n rest: JeneseiPalette.grayAdriana,\n hover: JeneseiPalette.graySarah,\n },\n color: {\n rest: JeneseiPalette.blackHelena,\n hover: JeneseiPalette.blackHelena,\n placeholder: JeneseiPalette.blackHelena,\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n },\n },\n white: {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n },\n color: {\n rest: JeneseiPalette.black80,\n hover: JeneseiPalette.black60,\n placeholder: JeneseiPalette.black80,\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n },\n },\n product: {\n background: {\n rest: JeneseiPalette.blueRest,\n hover: JeneseiPalette.blueHover,\n },\n color: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n placeholder: JeneseiPalette.whiteStandard,\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n },\n },\n productBorder: {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n },\n color: {\n rest: JeneseiPalette.blueRest,\n hover: JeneseiPalette.blueHover,\n placeholder: JeneseiPalette.blueRest,\n },\n border: {\n rest: JeneseiPalette.blueRest,\n hover: JeneseiPalette.blueHover,\n },\n },\n gray: {\n background: {\n rest: JeneseiPalette.black10,\n hover: JeneseiPalette.graySandra,\n },\n color: {\n rest: JeneseiPalette.black60,\n hover: JeneseiPalette.black60,\n placeholder: JeneseiPalette.black80,\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n },\n },\n grayBorder: {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n },\n color: {\n rest: JeneseiPalette.black60,\n hover: JeneseiPalette.black60,\n placeholder: JeneseiPalette.black80,\n },\n border: {\n rest: JeneseiPalette.black10,\n hover: JeneseiPalette.graySandra,\n },\n },\n black: {\n background: {\n rest: JeneseiPalette.black100,\n hover: JeneseiPalette.black60,\n },\n color: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n placeholder: JeneseiPalette.whiteStandard,\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n },\n },\n blackBorder: {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n },\n color: {\n rest: JeneseiPalette.black100,\n hover: JeneseiPalette.black60,\n placeholder: JeneseiPalette.black100,\n },\n border: {\n rest: JeneseiPalette.black100,\n hover: JeneseiPalette.black60,\n },\n },\n greenTransparent: {\n background: {\n rest: JeneseiPalette.green10,\n hover: JeneseiPalette.green25,\n },\n color: {\n rest: JeneseiPalette.green100,\n hover: JeneseiPalette.green100,\n placeholder: JeneseiPalette.green100,\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n },\n },\n yellowTransparent: {\n background: {\n rest: JeneseiPalette.yellow10,\n hover: JeneseiPalette.yellow25,\n },\n color: {\n rest: JeneseiPalette.yellow100,\n hover: JeneseiPalette.yellow100,\n placeholder: JeneseiPalette.yellow100,\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n },\n },\n redTransparent: {\n background: {\n rest: JeneseiPalette.red10,\n hover: JeneseiPalette.red25,\n },\n color: {\n rest: JeneseiPalette.red100,\n hover: JeneseiPalette.red100,\n placeholder: JeneseiPalette.red100,\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n },\n },\n};\nconst ThemeImageSelect: IThemeGenreImageSelect = {\n 'realebail-white': {\n background: {\n rest: JeneseiPalette.whiteJanice,\n hover: JeneseiPalette.whiteJanice,\n },\n color: {\n rest: JeneseiPalette.blueKaren,\n hover: JeneseiPalette.blueMonica,\n placeholder: JeneseiPalette.blueKaren,\n },\n border: {\n rest: JeneseiPalette.blueKaren,\n hover: JeneseiPalette.blackHelena,\n },\n },\n gray: {\n background: {\n rest: JeneseiPalette.black10,\n hover: JeneseiPalette.graySandra,\n },\n color: {\n rest: JeneseiPalette.black60,\n hover: JeneseiPalette.black60,\n placeholder: JeneseiPalette.black80,\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n },\n },\n grayBorder: {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n },\n color: {\n rest: JeneseiPalette.black60,\n hover: JeneseiPalette.black60,\n placeholder: JeneseiPalette.black80,\n },\n border: {\n rest: JeneseiPalette.black10,\n hover: JeneseiPalette.graySandra,\n },\n },\n blackBorder: {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n },\n color: {\n rest: JeneseiPalette.black100,\n hover: JeneseiPalette.black60,\n placeholder: JeneseiPalette.black100,\n },\n border: {\n rest: JeneseiPalette.black100,\n hover: JeneseiPalette.black60,\n },\n },\n};\nconst ThemeGenreInput: IThemeGenreInput = {\n 'bustmarket-gray': {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n },\n color: {\n rest: JeneseiPalette.grayTina,\n hover: JeneseiPalette.black80,\n placeholder: JeneseiPalette.black40,\n },\n border: {\n rest: JeneseiPalette.grayFrances,\n hover: JeneseiPalette.grayBarbara,\n },\n },\n 'realebail-white': {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n },\n color: {\n rest: JeneseiPalette.black80,\n hover: JeneseiPalette.black80,\n placeholder: JeneseiPalette.black40,\n },\n border: {\n rest: JeneseiPalette.grayBarbara,\n hover: JeneseiPalette.grayBarbara,\n },\n },\n gray: {\n background: {\n rest: JeneseiPalette.grayJanice,\n hover: JeneseiPalette.graySandra,\n },\n color: {\n rest: JeneseiPalette.black60,\n hover: JeneseiPalette.black60,\n placeholder: JeneseiPalette.black80,\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n },\n },\n blackBorder: {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n },\n color: {\n rest: JeneseiPalette.black80,\n hover: JeneseiPalette.black80,\n placeholder: JeneseiPalette.black40,\n },\n border: {\n rest: JeneseiPalette.black100,\n hover: JeneseiPalette.black80,\n },\n },\n grayBorder: {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n },\n color: {\n rest: JeneseiPalette.black60,\n hover: JeneseiPalette.black60,\n placeholder: JeneseiPalette.black40,\n },\n border: {\n rest: JeneseiPalette.black10,\n hover: JeneseiPalette.graySandra,\n },\n },\n};\nconst ThemeGenreRange: IThemeGenreRange = {\n 'bustmarket-gray': {\n track: {\n background: {\n rest: JeneseiPalette.grayBarbara,\n },\n gradient: {\n rest: JeneseiPalette.blueKaren,\n },\n },\n thumb: {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n },\n border: {\n rest: JeneseiPalette.blueRest,\n hover: JeneseiPalette.blueRest,\n },\n },\n },\n 'realebail-white': {\n track: {\n background: {\n rest: JeneseiPalette.grayBarbara,\n },\n gradient: {\n rest: JeneseiPalette.blueKaren,\n },\n },\n thumb: {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n },\n border: {\n rest: JeneseiPalette.blueRest,\n hover: JeneseiPalette.blueRest,\n },\n },\n },\n gray: {\n track: {\n background: {\n rest: JeneseiPalette.grayJanice,\n },\n gradient: {\n rest: JeneseiPalette.black60,\n },\n },\n thumb: {\n background: {\n rest: JeneseiPalette.grayBarbara,\n hover: JeneseiPalette.grayBarbara,\n },\n border: {\n rest: JeneseiPalette.black60,\n hover: JeneseiPalette.black60,\n },\n },\n },\n blackBorder: {\n track: {\n background: {\n rest: JeneseiPalette.graySandra,\n },\n gradient: {\n rest: JeneseiPalette.black80,\n },\n },\n thumb: {\n background: {\n rest: JeneseiPalette.graySandra,\n hover: JeneseiPalette.graySandra,\n },\n border: {\n rest: JeneseiPalette.black80,\n hover: JeneseiPalette.black80,\n },\n },\n },\n grayBorder: {\n track: {\n background: {\n rest: JeneseiPalette.graySandra,\n },\n gradient: {\n rest: JeneseiPalette.black60,\n },\n },\n thumb: {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n },\n border: {\n rest: JeneseiPalette.black40,\n hover: JeneseiPalette.black40,\n },\n },\n },\n};\nconst ThemeSelect: IThemeGenreSelect = {\n 'realebail-white': {\n background: {\n rest: JeneseiPalette.whiteJanice,\n hover: JeneseiPalette.whiteJanice,\n select: '',\n },\n color: {\n rest: JeneseiPalette.blueKaren,\n hover: JeneseiPalette.blueMonica,\n placeholder: JeneseiPalette.blueKaren,\n select: '',\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n select: '',\n },\n },\n gray: {\n background: {\n rest: JeneseiPalette.grayJanice,\n hover: JeneseiPalette.graySandra,\n select: '',\n },\n color: {\n rest: JeneseiPalette.black60,\n hover: JeneseiPalette.black60,\n placeholder: JeneseiPalette.black80,\n select: '',\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n select: '',\n },\n },\n blackBorder: {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n select: JeneseiPalette.blueActive,\n },\n color: {\n rest: JeneseiPalette.black80,\n hover: JeneseiPalette.black80,\n placeholder: JeneseiPalette.black40,\n select: JeneseiPalette.black100,\n },\n border: {\n rest: JeneseiPalette.black100,\n hover: JeneseiPalette.black80,\n select: JeneseiPalette.blueRest,\n },\n },\n grayBorder: {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n select: '',\n },\n color: {\n rest: JeneseiPalette.black60,\n hover: JeneseiPalette.black60,\n placeholder: JeneseiPalette.black40,\n select: '',\n },\n border: {\n rest: JeneseiPalette.black10,\n hover: JeneseiPalette.graySandra,\n select: '',\n },\n },\n};\nconst ThemeGenreDate: IThemeGenreDate = {\n 'realebail-white': {\n background: {\n rest: JeneseiPalette.whiteJanice,\n hover: JeneseiPalette.whiteJanice,\n today: JeneseiPalette.blueKaren,\n weekend: JeneseiPalette.whiteJanice,\n choice: JeneseiPalette.blueKaren,\n line: JeneseiPalette.whiteJanice,\n },\n color: {\n rest: JeneseiPalette.blueKaren,\n hover: JeneseiPalette.blueMonica,\n placeholder: JeneseiPalette.blueKaren,\n today: JeneseiPalette.whiteStandard,\n weekend: JeneseiPalette.blueMonica,\n choice: JeneseiPalette.whiteStandard,\n line: JeneseiPalette.transparent,\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n today: JeneseiPalette.transparent,\n weekend: JeneseiPalette.transparent,\n choice: JeneseiPalette.transparent,\n line: JeneseiPalette.transparent,\n },\n },\n blackBorder: {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n today: JeneseiPalette.black80,\n weekend: JeneseiPalette.black10,\n choice: JeneseiPalette.graySarah,\n line: JeneseiPalette.whiteStandard,\n },\n color: {\n rest: JeneseiPalette.black80,\n hover: JeneseiPalette.black80,\n placeholder: JeneseiPalette.black40,\n today: JeneseiPalette.whiteStandard,\n weekend: JeneseiPalette.black100,\n choice: JeneseiPalette.whiteStandard,\n line: JeneseiPalette.transparent,\n },\n border: {\n rest: JeneseiPalette.black10,\n hover: JeneseiPalette.graySandra,\n today: JeneseiPalette.transparent,\n weekend: JeneseiPalette.transparent,\n choice: JeneseiPalette.transparent,\n line: JeneseiPalette.transparent,\n },\n },\n gray: {\n background: {\n rest: JeneseiPalette.grayJanice,\n hover: JeneseiPalette.graySandra,\n today: JeneseiPalette.graySarah,\n weekend: JeneseiPalette.black10,\n choice: JeneseiPalette.graySarah,\n line: JeneseiPalette.transparent,\n },\n color: {\n rest: JeneseiPalette.black60,\n hover: JeneseiPalette.black60,\n placeholder: JeneseiPalette.black80,\n today: JeneseiPalette.whiteStandard,\n weekend: JeneseiPalette.grayJanice,\n choice: JeneseiPalette.whiteStandard,\n line: JeneseiPalette.transparent,\n },\n border: {\n rest: JeneseiPalette.transparent,\n hover: JeneseiPalette.transparent,\n today: JeneseiPalette.transparent,\n weekend: JeneseiPalette.transparent,\n choice: JeneseiPalette.transparent,\n line: JeneseiPalette.transparent,\n },\n },\n grayBorder: {\n background: {\n rest: JeneseiPalette.whiteStandard,\n hover: JeneseiPalette.whiteStandard,\n today: JeneseiPalette.black60,\n weekend: JeneseiPalette.black10,\n line: JeneseiPalette.transparent,\n choice: JeneseiPalette.black60,\n },\n color: {\n rest: JeneseiPalette.black60,\n hover: JeneseiPalette.black60,\n placeholder: JeneseiPalette.black80,\n today: JeneseiPalette.whiteStandard,\n choice: JeneseiPalette.whiteStandard,\n weekend: JeneseiPalette.black80,\n line: JeneseiPalette.transparent,\n },\n border: {\n rest: JeneseiPalette.black10,\n hover: JeneseiPalette.graySandra,\n today: JeneseiPalette.transparent,\n weekend: JeneseiPalette.black10,\n line: JeneseiPalette.transparent,\n choice: JeneseiPalette.transparent,\n },\n },\n};\nconst ThemeGenreToggle: IThemeGenreToggle = {\n product: {\n active: {\n rest: {\n border: JeneseiPalette.transparent,\n track: JeneseiPalette.blueRest,\n thumb: JeneseiPalette.whiteStandard,\n thumbBoxShadow: '0px 0px 10px 1px rgba(0, 0, 0, 0.1)',\n },\n hover: {\n border: JeneseiPalette.transparent,\n track: JeneseiPalette.blueHover,\n thumb: JeneseiPalette.whiteStandard,\n thumbBoxShadow: '0px 0px 10px 0px rgba(0, 0, 0, 0.6)',\n },\n },\n unActive: {\n rest: {\n border: JeneseiPalette.transparent,\n track: JeneseiPalette.black10,\n thumb: JeneseiPalette.whiteStandard,\n thumbBoxShadow: '0px 0px 10px 1px rgba(0, 0, 0, 0.1)',\n },\n hover: {\n border: JeneseiPalette.transparent,\n track: JeneseiPalette.graySandra,\n thumb: JeneseiPalette.whiteStandard,\n thumbBoxShadow: '0px 0px 10px 0px rgba(0, 0, 0, 0.6)',\n },\n },\n },\n};\nconst ThemeGenreSonner: IThemeGenreSonner = {\n black: {\n button: {\n genre: 'black',\n },\n wrapper: {\n background: JeneseiPalette.whiteStandard,\n borderColor: JeneseiPalette.grayKaren,\n boxShadow: '0px 10px 30px 0px rgba(0, 0, 0, 0.2)',\n boxShadowHover: '0px 10px 30px 0px rgba(0, 0, 0, 0.5)',\n },\n icon: {\n color: JeneseiPalette.black100,\n },\n title: {\n color: JeneseiPalette.black100,\n },\n description: {\n color: JeneseiPalette.grayPatricia,\n },\n },\n greenTransparent: {\n button: {\n genre: 'greenTransparent',\n },\n wrapper: {\n background: JeneseiPalette.green10Background,\n borderColor: JeneseiPalette.green25,\n boxShadow: `0px 10px 30px 0px ${JeneseiPalette.green25}`,\n boxShadowHover: `0px 10px 30px 0px ${JeneseiPalette.green50}`,\n },\n icon: {\n color: JeneseiPalette.green100,\n },\n title: {\n color: JeneseiPalette.green100,\n },\n description: {\n color: JeneseiPalette.greenGoogle,\n },\n },\n redTransparent: {\n button: {\n genre: 'redTransparent',\n },\n wrapper: {\n background: JeneseiPalette.red10Background,\n borderColor: JeneseiPalette.red25,\n boxShadow: `0px 10px 30px 0px ${JeneseiPalette.red25}`,\n boxShadowHover: `0px 10px 30px 0px ${JeneseiPalette.red50}`,\n },\n icon: {\n color: JeneseiPalette.red100,\n },\n title: {\n color: JeneseiPalette.red100,\n },\n description: {\n color: JeneseiPalette.redGoogle,\n },\n },\n yellowTransparent: {\n button: {\n genre: 'yellowTransparent',\n },\n wrapper: {\n background: JeneseiPalette.yellow10Background,\n borderColor: JeneseiPalette.yellow25,\n boxShadow: `0px 10px 30px 0px ${JeneseiPalette.yellow25}`,\n boxShadowHover: `0px 10px 30px 0px ${JeneseiPalette.yellow50}`,\n },\n icon: {\n color: 'yellow100',\n },\n title: {\n color: JeneseiPalette.yellow100,\n },\n description: {\n color: JeneseiPalette.yellowGoogle,\n },\n },\n};\n\nexport const ThemeLight: ITheme = {\n icon: {\n map: {\n id: ThemeMapId,\n checkbox: ThemeMapCheckbox,\n loading: ThemeMapLoading,\n realebail: ThemeMapRealebail,\n logo: ThemeMapLogo,\n bustmarket: ThemeMapBustmarket,\n },\n getIconId(props) {\n return `#${props.type}-${props.name}`;\n },\n getSpriteUrl(props) {\n return `https://id.assets.jenesei.ru/icons/${props.type}.svg?v=${LIBRARY_VERSION}`;\n },\n },\n transition: {\n duration: '0.3s',\n timingFunction: 'ease',\n default: '0.3s ease',\n icon: '0.05s ease',\n },\n scrollbar: {\n width: 4,\n background: JeneseiPalette.black05,\n thumb: JeneseiPalette.black10,\n thumbBorder: JeneseiPalette.black05,\n },\n font: {\n family: 'Inter',\n weight: 400,\n lineHeight: 1.2,\n sizeDefault: {\n default: 16,\n mobile: 12,\n tablet: 14,\n },\n sizeHeading: {\n h1: 2.5,\n h2: 2.25,\n h3: 2,\n h4: 1.75,\n h5: 1.5,\n h6: 1.25,\n h7: 1,\n h8: 0.75,\n h9: 0.5,\n },\n },\n screens: {\n default: { width: 1920 },\n tablet: { width: 1290 },\n mobile: { width: 850 },\n },\n effects: {\n input: 'inset 0px 0px 4px rgba(0, 0, 0, 0.20)',\n button: '0px 0px 4px 0px rgba(0, 0, 0, 0.25) inset, 0px 4px 4px 0px rgba(0, 0, 0, 0.25)',\n },\n palette: JeneseiPalette,\n background: JeneseiPalette,\n states: {\n focus: JeneseiPalette.black60,\n danger: JeneseiPalette.redGoogle,\n },\n colors: {\n range: ThemeGenreRange,\n sonner: ThemeGenreSonner,\n button: ThemeGenre,\n date: ThemeGenreDate,\n toggle: ThemeGenreToggle,\n checkbox: ThemeGenre,\n input: ThemeGenreInput,\n imageSelect: ThemeImageSelect,\n select: ThemeSelect,\n },\n getContrastYIQ: getContrastYIQ,\n};\nexport const ThemeBlack: ITheme = ThemeLight;\n\nexport const KEY_SIZE_DATA: Record<IThemeSize, IThemeSizePropertyDefault> = {\n large: {\n height: 46,\n heightIcon: 24,\n radius: 6,\n padding: 16,\n font: 20,\n },\n largeMedium: {\n height: 42,\n heightIcon: 22,\n radius: 6,\n padding: 14,\n font: 18,\n },\n medium: {\n height: 38,\n heightIcon: 20,\n radius: 6,\n padding: 12,\n font: 16,\n },\n mediumSmall: {\n height: 34,\n heightIcon: 18,\n radius: 6,\n padding: 10,\n font: 14,\n },\n small: {\n height: 30,\n heightIcon: 16,\n radius: 8,\n padding: 8,\n font: 12,\n },\n};\nexport const KEY_SIZE_DATA_TOGGLE: Record<IThemeSize, IThemeSizePropertyToggle> = {\n large: {\n height: 46,\n width: 92,\n padding: 3,\n thumb: 40,\n },\n largeMedium: {\n height: 42,\n width: 84,\n padding: 2,\n thumb: 38,\n },\n medium: {\n height: 38,\n width: 76,\n padding: 2,\n thumb: 34,\n },\n mediumSmall: {\n height: 34,\n width: 68,\n padding: 2,\n thumb: 30,\n },\n small: {\n height: 30,\n width: 60,\n padding: 2,\n thumb: 26,\n },\n};\n","import { createGlobalStyle } from 'styled-components';\nimport reset from 'styled-reset';\n\nexport const JeneseiGlobalStyles = createGlobalStyle`\n ${reset};\n /* &:focus-visible {\n background: gray;\n } */\n \n #storybook-root {\n overflow: hidden;\n display: flex;\n max-height: 100dvh;\n max-width: 100dvw;\n overflow:auto;\n }\n .sb-show-main.sb-main-padded {\n padding:0;\n }\n\n * {\n box-sizing: border-box;\n }\n\n html {\n display: flex;\n overflow-x: hidden;\n max-width: 100dvw;\n min-height: 100dvh;\n height: 100%;\n font-size: ${(props) => props.theme.font.sizeDefault.default}px;\n font-family: ${(props) => props.theme.font.family}, Inter, system-ui, sans-serif;\n font-weight: ${(props) => props.theme.font.weight};\n font-feature-settings: 'kern' normal;\n font-kerning: auto;\n font-optical-sizing: auto;\n line-height: ${(props) => props.theme.font.lineHeight};\n transition: font-size ${(props) => props.theme.transition.default};\n }\n\n html, body, #root {\n font-synthesis: none;\n touch-action: manipulation; \n -ms-touch-action: manipulation; \n overscroll-behavior: none; \n text-rendering: optimizeLegibility;\n margin: 0;\n padding: 0;\n color: inherit;\n } \n\n body {\n flex:1;\n }\n\n @media screen and (max-width: 1024px) {\n body:has(.LayoutModal) {\n overflow: hidden !important;\n }\n }\n\n input[type='checkbox'],\n input[type='radio'] {\n appearance: none;\n transform: translate(0px);\n }\n\n input[type='time']::-webkit-calendar-picker-indicator {\n background: none;\n }\n\n ::-webkit-scrollbar {\n width: ${(props) => props.theme.scrollbar.width}px;\n height: ${(props) => props.theme.scrollbar.width}px;\n }\n\n ::-webkit-scrollbar-track {\n background: ${(props) => props.theme.scrollbar.background};\n }\n\n ::-webkit-scrollbar-thumb {\n background: ${(props) => props.theme.scrollbar.thumb};\n border: ${(props) => props.theme.scrollbar.thumbBorder};\n background-clip: padding-box;\n }\n\n h1 {\n font-size: ${(props) => props.theme.font.sizeHeading.h1 * props.theme.font.sizeDefault.default}px;\n line-height: ${(props) => props.theme.font.lineHeight};\n margin: 0;\n }\n\n h2 {\n font-size: ${(props) => props.theme.font.sizeHeading.h2 * props.theme.font.sizeDefault.default}px;\n line-height: ${(props) => props.theme.font.lineHeight};\n margin: 0;\n }\n\n h3 {\n font-size: ${(props) => props.theme.font.sizeHeading.h3 * props.theme.font.sizeDefault.default}px;\n line-height: ${(props) => props.theme.font.lineHeight};\n margin: 0;\n }\n\n h4 {\n font-size: ${(props) => props.theme.font.sizeHeading.h4 * props.theme.font.sizeDefault.default}px;\n line-height: ${(props) => props.theme.font.lineHeight};\n margin: 0;\n }\n\n h5 {\n font-size: ${(props) => props.theme.font.sizeHeading.h5 * props.theme.font.sizeDefault.default}px;\n line-height: ${(props) => props.theme.font.lineHeight};\n margin: 0;\n }\n\n h6 {\n font-size: v${(props) => props.theme.font.sizeHeading.h6 * props.theme.font.sizeDefault.default}px;\n line-height: ${(props) => props.theme.font.lineHeight};\n margin: 0;\n }\n\n\n @media (max-width: ${(props) => props.theme.screens.tablet.width}px) {\n h1 {\n font-size: ${(props) => props.theme.font.sizeHeading.h1 * props.theme.font.sizeDefault.tablet}px;\n }\n\n h2 {\n font-size: ${(props) => props.theme.font.sizeHeading.h2 * props.theme.font.sizeDefault.tablet}px;\n }\n\n h3 {\n font-size: ${(props) => props.theme.font.sizeHeading.h3 * props.theme.font.sizeDefault.tablet}px;\n }\n\n h4 {\n font-size: ${(props) => props.theme.font.sizeHeading.h4 * props.theme.font.sizeDefault.tablet}px;\n }\n\n h5 {\n font-size: ${(props) => props.theme.font.sizeHeading.h5 * props.theme.font.sizeDefault.tablet}px;\n }\n\n h6 {\n font-size: v${(props) => props.theme.font.sizeHeading.h6 * props.theme.font.sizeDefault.tablet}px;\n }\n }\n\n @media (max-width: ${(props) => props.theme.screens.mobile.width}px) {\n h1 {\n font-size: ${(props) => props.theme.font.sizeHeading.h1 * props.theme.font.sizeDefault.mobile}px;\n }\n\n h2 {\n font-size: ${(props) => props.theme.font.sizeHeading.h2 * props.theme.font.sizeDefault.mobile}px;\n }\n\n h3 {\n font-size: ${(props) => props.theme.font.sizeHeading.h3 * props.theme.font.sizeDefault.mobile}px;\n }\n\n h4 {\n font-size: ${(props) => props.theme.font.sizeHeading.h4 * props.theme.font.sizeDefault.mobile}px;\n }\n\n h5 {\n font-size: ${(props) => props.theme.font.sizeHeading.h5 * props.theme.font.sizeDefault.mobile}px;\n }\n\n h6 {\n font-size: v${(props) => props.theme.font.sizeHeading.h6 * props.theme.font.sizeDefault.mobile}px;\n }\n }\n`;\n","import { Stack } from '@local/components/stack';\nimport { JeneseiPalette } from '@local/theme';\n\nimport styled, { css, keyframes } from 'styled-components';\n\nimport { StyledSkeletonProps } from '.';\n\n// const shimmer = keyframes`\n// 0% {\n// background-position: -468px 0;\n// }\n// 100% {\n// background-position: 468px 0;\n// }\n// `;\n\nconst shimmer = keyframes`\n 0% {\n background-position: 100%;\n }\n 100% {\n background-position: -100%;\n }\n`;\n\nexport const StyledSkeleton = styled(Stack)<StyledSkeletonProps>`\n background: transparent;\n\n ${(props) => css`\n ${\n !props.$visible &&\n css`\n ${\n props.$type === 'secondary'\n ? css`\n background: linear-gradient(\n 90deg,\n ${props.$color ? JeneseiPalette[props.$color] : props.$isInheritColor ? 'inherit' : '#f6f7f8'} 25%,\n ${props.$color ? JeneseiPalette[props.$color] : props.$isInheritColor ? 'inherit' :'#edeef1'} 50%,\n ${props.$color ? JeneseiPalette[props.$color] : props.$isInheritColor ? 'inherit' :'#f6f7f8'} 75%\n );\n `\n : css`\n background: linear-gradient(\n 90deg,\n ${props.$color ? JeneseiPalette[props.$color] : props.$isInheritColor ? 'inherit' :'#edeef1'} 25%,\n ${props.$color ? JeneseiPalette[props.$color] : props.$isInheritColor ? 'inherit' :'#f6f7f8'} 50%,\n ${props.$color ? JeneseiPalette[props.$color] : props.$isInheritColor ? 'inherit' :'#edeef1'} 75%\n ); \n `\n };\n background-size: 200% 100%;\n animation: ${shimmer} 1.5s infinite linear;\n\n `\n };\n `}\n & > * {\n opacity: ${(props) => (!props.$visible ? 0 : 1)};\n transition:\n outline 0s,\n opacity ${(props) => props.theme.transition.default};\n }\n`;\n","import { FC, useEffect, useState } from 'react';\n\nimport { SkeletonProps, StyledSkeleton } from '.';\n\nexport const Skeleton: FC<SkeletonProps> = (props) => {\n const [visible, setVisible] = useState(props.defaultVisible ?? false);\n\n useEffect(() => {\n if ('time' in props) {\n const timer = setTimeout(() => {\n setVisible(true);\n }, props.time);\n\n return () => {\n clearTimeout(timer);\n };\n }\n }, [props]);\n\n useEffect(() => {\n if ('visible' in props) {\n setVisible(!props.visible);\n }\n }, [props]);\n\n return (\n <StyledSkeleton\n {...props}\n $visible={visible}\n $type={props.type}\n $color={props.color}\n $isInheritColor={props.isInheritColor}\n >\n {props.children}\n </StyledSkeleton>\n );\n};\n","import { Skeleton } from '@local/areas/skeleton';\nimport { addColorTransition } from '@local/styles/add';\nimport { addSX } from '@local/styles/sx';\nimport { KEY_SIZE_DATA } from '@local/theme';\n\nimport styled, { css } from 'styled-components';\n\nimport { StyledIconItemProps, StyledIconSkeletonProps } from '.';\n\nexport const StyledIcon = styled.svg<StyledIconItemProps>`\n color: ${(props) => (props.$color ? props.theme.palette[props.$color] : 'inherit')};\n\n ${(props) => css`\n height: ${props.$size !== '100%' ? `${KEY_SIZE_DATA[props.$size].heightIcon}px` : '100%'};\n min-height: ${props.$size !== '100%' ? `${KEY_SIZE_DATA[props.$size].heightIcon}px` : '100%'};\n\n width: ${props.$size !== '100%' ? `${KEY_SIZE_DATA[props.$size].heightIcon}px` : '100%'};\n min-width: ${props.$size !== '100%' ? `${KEY_SIZE_DATA[props.$size].heightIcon}px` : '100%'};\n\n transform: rotate(${props.$turn || 0}deg);\n `}\n ${(props) =>\n props.$order !== undefined &&\n css`\n order: ${props.$order};\n `};\n ${addColorTransition};\n & path {\n ${addColorTransition};\n }\n ${addSX};\n`;\n\nexport const StyledIconSkeleton = styled(Skeleton)<StyledIconSkeletonProps>`\n ${(props) => css`\n height: ${props.$size !== '100%' ? `${KEY_SIZE_DATA[props.$size].heightIcon}px` : '100%'};\n min-height: ${props.$size !== '100%' ? `${KEY_SIZE_DATA[props.$size].heightIcon}px` : '100%'};\n\n width: ${props.$size !== '100%' ? `${KEY_SIZE_DATA[props.$size].heightIcon}px` : '100%'};\n min-width: ${props.$size !== '100%' ? `${KEY_SIZE_DATA[props.$size].heightIcon}px` : '100%'};\n `}\n ${(props) =>\n props.$order !== undefined &&\n css`\n order: ${props.$order};\n `};\n border-radius: 100%;\n`;\n","import { Icon } from '@local/components/icon';\nimport { Stack, StackMotion } from '@local/components/stack';\n\nimport { AnimatePresence } from 'framer-motion';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nimport { PreviewProps } from '.';\n\nexport const Preview: FC<PreviewProps> = (props) => {\n const [visible, setVisible] = useState(props.defaultVisible ?? true);\n\n const propsVisible = useMemo(() => ('visible' in props ? props.visible : null), [props]);\n const propsTime = useMemo(() => ('time' in props ? props.time : null), [props]);\n const propsMinTime = useMemo(() => ('minTime' in props ? props.minTime : null), [props]);\n\n useEffect(() => {\n if (propsTime !== null) {\n const timer = setTimeout(() => {\n setVisible(true);\n }, propsTime);\n\n return () => {\n clearTimeout(timer);\n };\n }\n }, [propsTime]);\n\n useEffect(() => {\n if (propsVisible !== null) {\n if (propsVisible) {\n if (propsMinTime) {\n const timer = setTimeout(() => {\n setVisible(propsVisible);\n }, propsMinTime);\n return () => clearTimeout(timer);\n } else {\n setVisible(propsVisible);\n }\n } else {\n setVisible(propsVisible);\n }\n }\n }, [propsVisible, propsMinTime]);\n\n return (\n <AnimatePresence>\n {!visible ? (\n <StackMotion\n key='loader'\n sx={(theme) => ({\n ...props?.sxLoader,\n default: {\n backgroundColor: theme.palette.whiteStandard,\n width: '100%',\n height: '100%',\n position: 'absolute',\n top: 0,\n left: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 1,\n ...(props?.sxLoader\n ? typeof props?.sxLoader === 'function'\n ? props?.sxLoader(theme).default\n : props?.sxLoader.default\n : {}),\n },\n })}\n transition={{ duration: 0.3 }}\n exit={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n >\n <Stack\n sx={{\n default: {\n position: 'absolute',\n width: '8vmin',\n height: '8vmin',\n },\n }}\n >\n <Icon size='100%' type='loading' color='blueFocus' name='Line' />\n </Stack>\n {props.content && (\n <Stack\n sx={{\n default: {\n position: 'relative',\n marginTop: '18vmin',\n },\n }}\n >\n {props.content}\n </Stack>\n )}\n </StackMotion>\n ) : null}\n {visible ? (\n <StackMotion\n key='children'\n sx={(theme) => ({\n ...props?.sxChildren,\n default: {\n display: 'contents',\n zIndex: 0,\n ...(props?.sxChildren\n ? typeof props?.sxChildren === 'function'\n ? props?.sxChildren(theme).default\n : props?.sxChildren.default\n : {}),\n },\n })}\n transition={{ duration: 0.3 }}\n initial={{ opacity: 0 }}\n exit={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n >\n {props.children}\n </StackMotion>\n ) : null}\n </AnimatePresence>\n );\n};\n","import { Icon } from '@local/components/icon';\nimport { addTransition } from '@local/styles/add';\n\nimport styled, { css } from 'styled-components';\n\nimport { AccordionDetailsProps, AccordionStyledIconProps, AccordionSummaryContentProps } from '.';\n\nexport const AccordionWrapper = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\nexport const AccordionSummary = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n user-select: none;\n`;\nexport const AccordionSummaryContent = styled.div<AccordionSummaryContentProps>`\n width: 100%;\n\n ${(props) =>\n props.$isAccordionIcon &&\n css`\n width: calc(100% - 26px);\n `}\n`;\nexport const AccordionDetails = styled.div<AccordionDetailsProps>`\n max-height: ${(props) => (props.$expanded ? '9999px' : '0')};\n height: ${(props) => (props.$expanded ? '100%' : '0')};\n opacity: ${(props) => (props.$expanded ? 1 : 0)};\n overflow: hidden;\n ${addTransition};\n`;\nexport const AccordionStyledIcon = styled(Icon)<AccordionStyledIconProps>`\n padding: 4px;\n box-sizing: content-box;\n cursor: pointer;\n ${(props) =>\n props.$expanded\n ? css`\n transform: rotate(180deg);\n `\n : css`\n transform: rotate(0deg);\n `}\n`;\n","import { addFontSizeTransition, addOutline } from '@local/styles/add';\nimport { addSX as addSXStandard } from '@local/styles/sx';\nimport { JeneseiPalette } from '@local/theme/theme';\n\nimport styled, { css, keyframes } from 'styled-components';\n\nimport { addSXTypographyStyleProps, TypographyAllProps, TypographyCSSProps } from '.';\n\nconst shadowPulse = keyframes`\n 0% {\n text-shadow: 0 0 0 rgba(0, 0, 0, 0);\n }\n 50% {\n text-shadow: 4px 4px 10px rgba(0, 0, 0, 0.5);\n }\n 100% {\n text-shadow: 0 0 0 rgba(0, 0, 0, 0);\n }\n`;\n\nfunction toStyledCSS(value: TypographyAllProps) {\n return css`\n ${\n value.shadow &&\n value.shadow === 'shadowPulse' &&\n css`\n animation: ${shadowPulse} 2s infinite;\n `\n };\n ${\n value.letterSpacing &&\n css`\n letter-spacing: ${value.letterSpacing};\n `\n };\n ${\n value.flex &&\n css`\n flex: ${value.flex};\n `\n };\n ${\n value.cursor &&\n css`\n cursor: ${value.cursor};\n `\n };\n ${\n value.overflow &&\n css`\n overflow: ${value.overflow};\n `\n };\n ${\n value.line !== undefined\n ? value.line === 1\n ? css`\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n width: -webkit-fill-available;\n max-width: fit-content;\n `\n : css`\n word-break: break-word;\n white-space: normal;\n text-overflow: ellipsis;\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: ${value.line};\n width: fit-content;\n overflow-wrap: anywhere;\n `\n : css``\n };\n ${\n value.family &&\n css`\n font-family: ${value.family};\n `\n };\n ${\n value.weight &&\n css`\n font-weight: ${value.weight};\n `\n };\n line-height: ${(props) => value.height ?? props.theme.font.lineHeight};\n ${\n value.color &&\n css`\n color: ${JeneseiPalette[value.color]};\n `\n };\n ${\n value.align &&\n css`\n text-align: ${value.align};\n `\n };\n ${\n value.wrap &&\n css`\n text-wrap: ${value.wrap};\n `\n };\n ${\n value.decoration &&\n css`\n text-decoration: ${value.decoration};\n `\n };\n ${\n value.transform &&\n css`\n text-transform: ${value.transform};\n `\n };\n ${\n value.isHoverUnderlining &&\n css`\n &:hover {\n text-decoration: underline;\n }\n `\n };\n ${\n value.isNoUserSelect &&\n css`\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n `\n };\n ${\n 'size' in value &&\n value.size &&\n css`\n font-size: ${value.size}px;\n `\n };\n ${\n 'variant' in value && value.variant\n ? value.variant === 'h1'\n ? css`\n font-size: ${(props) => props.theme.font.sizeHeading.h1 * props.theme.font.sizeDefault.default}px;\n margin: 0;\n @media (max-width: ${(props) => props.theme.screens.tablet.width}px) {\n font-size: ${(props) => props.theme.font.sizeHeading.h1 * props.theme.font.sizeDefault.tablet}px;\n }\n\n @media (max-width: ${(props) => props.theme.screens.mobile.width}px) {\n font-size: ${(props) => props.theme.font.sizeHeading.h1 * props.theme.font.sizeDefault.mobile}px;\n }\n `\n : value.variant === 'h2'\n ? css`\n font-size: ${(props) => props.theme.font.sizeHeading.h2 * props.theme.font.sizeDefault.default}px;\n margin: 0;\n @media (max-width: ${(props) => props.theme.screens.tablet.width}px) {\n font-size: ${(props) => props.theme.font.sizeHeading.h2 * props.theme.font.sizeDefault.tablet}px;\n }\n\n @media (max-width: ${(props) => props.theme.screens.mobile.width}px) {\n font-size: ${(props) => props.theme.font.sizeHeading.h2 * props.theme.font.sizeDefault.mobile}px;\n }\n `\n : value.variant === 'h3'\n ? css`\n font-size: ${(props) => props.theme.font.sizeHeading.h3 * props.theme.font.sizeDefault.default}px;\n margin: 0;\n @media (max-width: ${(props) => props.theme.screens.tablet.width}px) {\n font-size: ${(props) => props.theme.font.sizeHeading.h3 * props.theme.font.sizeDefault.tablet}px;\n }\n\n @media (max-width: ${(props) => props.theme.screens.mobile.width}px) {\n font-size: ${(props) => props.theme.font.sizeHeading.h3 * props.theme.font.sizeDefault.mobile}px;\n }\n `\n : value.variant === 'h4'\n ? css`\n font-size: ${(props) => props.theme.font.sizeHeading.h4 * props.theme.font.sizeDefault.default}px;\n margin: 0;\n @media (max-width: ${(props) => props.theme.screens.tablet.width}px) {\n font-size: ${(props) => props.theme.font.sizeHeading.h4 * props.theme.font.sizeDefault.tablet}px;\n }\n\n @media (max-width: ${(props) => props.theme.screens.mobile.width}px) {\n font-size: ${(props) => props.theme.font.sizeHeading.h4 * props.theme.font.sizeDefault.mobile}px;\n }\n `\n : value.variant === 'h5'\n ? css`\n font-size: ${(props) => props.theme.font.sizeHeading.h5 * props.theme.font.sizeDefault.default}px;\n margin: 0;\n @media (max-width: ${(props) => props.theme.screens.tablet.width}px) {\n font-size: ${(props) => props.theme.font.sizeHeading.h5 * props.theme.font.sizeDefault.tablet}px;\n }\n\n @media (max-width: ${(props) => props.theme.screens.mobile.width}px) {\n font-size: ${(props) => props.theme.font.sizeHeading.h5 * props.theme.font.sizeDefault.mobile}px;\n }\n `\n : value.variant === 'h6'\n ? css`\n font-size: ${(props) => props.theme.font.sizeHeading.h6 * props.theme.font.sizeDefault.default}px;\n margin: 0;\n @media (max-width: ${(props) => props.theme.screens.tablet.width}px) {\n font-size: ${(props) => props.theme.font.sizeHeading.h6 * props.theme.font.sizeDefault.tablet}px;\n }\n\n @media (max-width: ${(props) => props.theme.screens.mobile.width}px) {\n font-size: ${(props) => props.theme.font.sizeHeading.h6 * props.theme.font.sizeDefault.mobile}px;\n }\n `\n : value.variant === 'h7'\n ? css`\n font-size: ${(props) => props.theme.font.sizeHeading.h7 * props.theme.font.sizeDefault.default}px;\n margin: 0;\n @media (max-width: ${(props) => props.theme.screens.tablet.width}px) {\n font-size: ${(props) =>\n props.theme.font.sizeHeading.h7 * props.theme.font.sizeDefault.tablet}px;\n }\n\n @media (max-width: ${(props) => props.theme.screens.mobile.width}px) {\n font-size: ${(props) =>\n props.theme.font.sizeHeading.h7 * props.theme.font.sizeDefault.mobile}px;\n }\n `\n : value.variant === 'h8'\n ? css`\n font-size: ${(props) =>\n props.theme.font.sizeHeading.h8 * props.theme.font.sizeDefault.default}px;\n margin: 0;\n @media (max-width: ${(props) => props.theme.screens.tablet.width}px) {\n font-size: ${(props) =>\n props.theme.font.sizeHeading.h8 * props.theme.font.sizeDefault.tablet}px;\n }\n\n @media (max-width: ${(props) => props.theme.screens.mobile.width}px) {\n font-size: ${(props) =>\n props.theme.font.sizeHeading.h8 * props.theme.font.sizeDefault.mobile}px;\n }\n `\n : value.variant === 'h9'\n ? css`\n font-size: ${(props) =>\n props.theme.font.sizeHeading.h9 * props.theme.font.sizeDefault.default}px;\n margin: 0;\n @media (max-width: ${(props) => props.theme.screens.tablet.width}px) {\n font-size: ${(props) =>\n props.theme.font.sizeHeading.h9 * props.theme.font.sizeDefault.tablet}px;\n }\n\n @media (max-width: ${(props) => props.theme.screens.mobile.width}px) {\n font-size: ${(props) =>\n props.theme.font.sizeHeading.h9 * props.theme.font.sizeDefault.mobile}px;\n }\n `\n : null\n : null\n };\n `;\n}\n\nexport const addSXTypography = css<addSXTypographyStyleProps>`\n ${(props) => {\n const rawSX = props.$sxTypography;\n if (!rawSX) return null;\n return toStyledCSS(rawSX.default);\n }}\n\n ${(props) => {\n const rawSX = props.$sxTypography;\n if (!rawSX) return null;\n\n return Object.entries(rawSX)\n .filter(([key]) => key !== 'default')\n .map(([deviceKey, value]) => {\n const screenWidth = props.theme.screens[deviceKey as keyof typeof props.theme.screens]?.width;\n if (!screenWidth) return null;\n return css`\n @media (max-width: ${screenWidth}px) {\n ${toStyledCSS(value)}\n }\n `;\n });\n }}\n`;\n\nconst TypographyCSS = css<TypographyCSSProps>`\n font-style: normal;\n position: relative;\n overflow: visible;\n text-overflow: ellipsis;\n overflow-wrap: anywhere;\n ${addFontSizeTransition};\n ${addSXTypography};\n ${addSXStandard}\n`;\n\nexport const Title = styled.span<TypographyCSSProps>`\n ${TypographyCSS}\n ${addOutline}\n`;\n","\n\nimport { RefObject, useEffect, useMemo, useRef, useState } from 'react';\n\n\nimport { useDeepCompareMemoize } from '../use-deep-compare-memoize';\nimport { useTooltipProps } from '.';\n\n/**\n * Хук для отслеживания переполнения содержимого в элементе (или его родителе).\n * Возвращает ref для привязки к DOM-элементу, флаг переполнения и флаг isDisabled.\n * @param props - опциональные параметры для управления поведением проверки переполнения\n */\nexport function useOverflowing<T extends HTMLElement>(\n props?: useTooltipProps,\n): {\n isDisabled: boolean; // true, если нет переполнения\n isOverflowing: boolean; // true, если содержимое выходит за пределы контейнера\n ref: RefObject<HTMLElement | null>; // ref для отслеживания DOM-элемента\n} {\n // Нужно ли проверять размеры (по умолчанию true)\n const isCheckSize = useMemo(() => props?.isCheckSize ?? true, [props?.isCheckSize]);\n // Проверять ли переполнение относительно родителя (mode === 'parent')\n const isParentMode = useMemo(() => props?.mode === 'parent', [props?.mode]);\n\n // Состояние переполнения (может быть принудительно задано через props)\n const [isOverflowing, setIsOverflowing] = useState(\n props?.isOverflowing !== undefined ? props?.isOverflowing : false\n );\n // ref для отслеживания элемента\n const ref = useRef<T | null>(null);\n // Мемоизированные зависимости для эффекта (глубокое сравнение)\n const dependencies = useDeepCompareMemoize(props?.dependencies);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n // Если не нужно проверять размеры — выходим\n if (!isCheckSize) return;\n\n // Функция проверки переполнения\n const checkOverflow = () => {\n const el = ref.current;\n if (!el) return;\n\n // Получаем размеры содержимого и контейнера\n const scrollWidth = el.scrollWidth;\n const scrollHeight = el.scrollHeight;\n\n // Если parentMode — сравниваем с родителем, иначе с самим элементом\n const clientWidth = isParentMode && el.parentElement ? el.parentElement.clientWidth : el.clientWidth;\n const clientHeight = isParentMode && el.parentElement ? el.parentElement.clientHeight : el.clientHeight;\n\n // Считаем переполнение по ширине или высоте\n setIsOverflowing(scrollWidth > clientWidth || scrollHeight > clientHeight);\n };\n\n // Проверяем при монтировании и при изменении зависимостей\n checkOverflow();\n // Проверяем при изменении размера окна\n window.addEventListener('resize', checkOverflow);\n // Очищаем обработчик при размонтировании\n return () => window.removeEventListener('resize', checkOverflow);\n }, [dependencies, isCheckSize, isParentMode]);\n\n // isDisabled: true, если нет переполнения (можно использовать для отключения тултипа)\n return { isDisabled: !isOverflowing, ref: ref, isOverflowing };\n}\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isTopLayer(element) {\n return [':popover-open', ':modal'].some(selector => {\n try {\n return element.matches(selector);\n } catch (e) {\n return false;\n }\n });\n}\nfunction isContainingBlock(elementOrCss) {\n const webkit = isWebKit();\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return ['transform', 'translate', 'scale', 'rotate', 'perspective'].some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n const lr = ['left', 'right'];\n const rl = ['right', 'left'];\n const tb = ['top', 'bottom'];\n const bt = ['bottom', 'top'];\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rl : lr;\n return isStart ? lr : rl;\n case 'left':\n case 'right':\n return isStart ? tb : bt;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { isShadowRoot, isHTMLElement } from '@floating-ui/utils/dom';\nimport * as React from 'react';\nimport { useLayoutEffect } from 'react';\nimport { floor } from '@floating-ui/utils';\nimport { tabbable } from 'tabbable';\n\n// Avoid Chrome DevTools blue warning.\nfunction getPlatform() {\n const uaData = navigator.userAgentData;\n if (uaData != null && uaData.platform) {\n return uaData.platform;\n }\n return navigator.platform;\n}\nfunction getUserAgent() {\n const uaData = navigator.userAgentData;\n if (uaData && Array.isArray(uaData.brands)) {\n return uaData.brands.map(_ref => {\n let {\n brand,\n version\n } = _ref;\n return brand + \"/\" + version;\n }).join(' ');\n }\n return navigator.userAgent;\n}\nfunction isSafari() {\n // Chrome DevTools does not complain about navigator.vendor\n return /apple/i.test(navigator.vendor);\n}\nfunction isAndroid() {\n const re = /android/i;\n return re.test(getPlatform()) || re.test(getUserAgent());\n}\nfunction isMac() {\n return getPlatform().toLowerCase().startsWith('mac') && !navigator.maxTouchPoints;\n}\nfunction isJSDOM() {\n return getUserAgent().includes('jsdom/');\n}\n\nconst FOCUSABLE_ATTRIBUTE = 'data-floating-ui-focusable';\nconst TYPEABLE_SELECTOR = \"input:not([type='hidden']):not([disabled]),\" + \"[contenteditable]:not([contenteditable='false']),textarea:not([disabled])\";\nconst ARROW_LEFT = 'ArrowLeft';\nconst ARROW_RIGHT = 'ArrowRight';\nconst ARROW_UP = 'ArrowUp';\nconst ARROW_DOWN = 'ArrowDown';\n\nfunction activeElement(doc) {\n let activeElement = doc.activeElement;\n while (((_activeElement = activeElement) == null || (_activeElement = _activeElement.shadowRoot) == null ? void 0 : _activeElement.activeElement) != null) {\n var _activeElement;\n activeElement = activeElement.shadowRoot.activeElement;\n }\n return activeElement;\n}\nfunction contains(parent, child) {\n if (!parent || !child) {\n return false;\n }\n const rootNode = child.getRootNode == null ? void 0 : child.getRootNode();\n\n // First, attempt with faster native method\n if (parent.contains(child)) {\n return true;\n }\n\n // then fallback to custom implementation with Shadow DOM support\n if (rootNode && isShadowRoot(rootNode)) {\n let next = child;\n while (next) {\n if (parent === next) {\n return true;\n }\n // @ts-ignore\n next = next.parentNode || next.host;\n }\n }\n\n // Give up, the result is false\n return false;\n}\nfunction getTarget(event) {\n if ('composedPath' in event) {\n return event.composedPath()[0];\n }\n\n // TS thinks `event` is of type never as it assumes all browsers support\n // `composedPath()`, but browsers without shadow DOM don't.\n return event.target;\n}\nfunction isEventTargetWithin(event, node) {\n if (node == null) {\n return false;\n }\n if ('composedPath' in event) {\n return event.composedPath().includes(node);\n }\n\n // TS thinks `event` is of type never as it assumes all browsers support composedPath, but browsers without shadow dom don't\n const e = event;\n return e.target != null && node.contains(e.target);\n}\nfunction isRootElement(element) {\n return element.matches('html,body');\n}\nfunction getDocument(node) {\n return (node == null ? void 0 : node.ownerDocument) || document;\n}\nfunction isTypeableElement(element) {\n return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR);\n}\nfunction isTypeableCombobox(element) {\n if (!element) return false;\n return element.getAttribute('role') === 'combobox' && isTypeableElement(element);\n}\nfunction matchesFocusVisible(element) {\n // We don't want to block focus from working with `visibleOnly`\n // (JSDOM doesn't match `:focus-visible` when the element has `:focus`)\n if (!element || isJSDOM()) return true;\n try {\n return element.matches(':focus-visible');\n } catch (_e) {\n return true;\n }\n}\nfunction getFloatingFocusElement(floatingElement) {\n if (!floatingElement) {\n return null;\n }\n // Try to find the element that has `{...getFloatingProps()}` spread on it.\n // This indicates the floating element is acting as a positioning wrapper, and\n // so focus should be managed on the child element with the event handlers and\n // aria props.\n return floatingElement.hasAttribute(FOCUSABLE_ATTRIBUTE) ? floatingElement : floatingElement.querySelector(\"[\" + FOCUSABLE_ATTRIBUTE + \"]\") || floatingElement;\n}\n\nfunction getNodeChildren(nodes, id) {\n let allChildren = nodes.filter(node => {\n var _node$context;\n return node.parentId === id && ((_node$context = node.context) == null ? void 0 : _node$context.open);\n });\n let currentChildren = allChildren;\n while (currentChildren.length) {\n currentChildren = nodes.filter(node => {\n var _currentChildren;\n return (_currentChildren = currentChildren) == null ? void 0 : _currentChildren.some(n => {\n var _node$context2;\n return node.parentId === n.id && ((_node$context2 = node.context) == null ? void 0 : _node$context2.open);\n });\n });\n allChildren = allChildren.concat(currentChildren);\n }\n return allChildren;\n}\nfunction getDeepestNode(nodes, id) {\n let deepestNodeId;\n let maxDepth = -1;\n function findDeepest(nodeId, depth) {\n if (depth > maxDepth) {\n deepestNodeId = nodeId;\n maxDepth = depth;\n }\n const children = getNodeChildren(nodes, nodeId);\n children.forEach(child => {\n findDeepest(child.id, depth + 1);\n });\n }\n findDeepest(id, 0);\n return nodes.find(node => node.id === deepestNodeId);\n}\nfunction getNodeAncestors(nodes, id) {\n var _nodes$find;\n let allAncestors = [];\n let currentParentId = (_nodes$find = nodes.find(node => node.id === id)) == null ? void 0 : _nodes$find.parentId;\n while (currentParentId) {\n const currentNode = nodes.find(node => node.id === currentParentId);\n currentParentId = currentNode == null ? void 0 : currentNode.parentId;\n if (currentNode) {\n allAncestors = allAncestors.concat(currentNode);\n }\n }\n return allAncestors;\n}\n\nfunction stopEvent(event) {\n event.preventDefault();\n event.stopPropagation();\n}\nfunction isReactEvent(event) {\n return 'nativeEvent' in event;\n}\n\n// License: https://github.com/adobe/react-spectrum/blob/b35d5c02fe900badccd0cf1a8f23bb593419f238/packages/@react-aria/utils/src/isVirtualEvent.ts\nfunction isVirtualClick(event) {\n // FIXME: Firefox is now emitting a deprecation warning for `mozInputSource`.\n // Try to find a workaround for this. `react-aria` source still has the check.\n if (event.mozInputSource === 0 && event.isTrusted) {\n return true;\n }\n if (isAndroid() && event.pointerType) {\n return event.type === 'click' && event.buttons === 1;\n }\n return event.detail === 0 && !event.pointerType;\n}\nfunction isVirtualPointerEvent(event) {\n if (isJSDOM()) return false;\n return !isAndroid() && event.width === 0 && event.height === 0 || isAndroid() && event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'mouse' ||\n // iOS VoiceOver returns 0.333• for width/height.\n event.width < 1 && event.height < 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'touch';\n}\nfunction isMouseLikePointerType(pointerType, strict) {\n // On some Linux machines with Chromium, mouse inputs return a `pointerType`\n // of \"pen\": https://github.com/floating-ui/floating-ui/issues/2015\n const values = ['mouse', 'pen'];\n if (!strict) {\n values.push('', undefined);\n }\n return values.includes(pointerType);\n}\n\nvar isClient = typeof document !== 'undefined';\n\nvar noop = function noop() {};\nvar index = isClient ? useLayoutEffect : noop;\n\n// https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379\nconst SafeReact = {\n ...React\n};\n\nfunction useLatestRef(value) {\n const ref = React.useRef(value);\n index(() => {\n ref.current = value;\n });\n return ref;\n}\nconst useInsertionEffect = SafeReact.useInsertionEffect;\nconst useSafeInsertionEffect = useInsertionEffect || (fn => fn());\nfunction useEffectEvent(callback) {\n const ref = React.useRef(() => {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error('Cannot call an event handler while rendering.');\n }\n });\n useSafeInsertionEffect(() => {\n ref.current = callback;\n });\n return React.useCallback(function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return ref.current == null ? void 0 : ref.current(...args);\n }, []);\n}\n\nfunction isDifferentGridRow(index, cols, prevRow) {\n return Math.floor(index / cols) !== prevRow;\n}\nfunction isIndexOutOfListBounds(listRef, index) {\n return index < 0 || index >= listRef.current.length;\n}\nfunction getMinListIndex(listRef, disabledIndices) {\n return findNonDisabledListIndex(listRef, {\n disabledIndices\n });\n}\nfunction getMaxListIndex(listRef, disabledIndices) {\n return findNonDisabledListIndex(listRef, {\n decrement: true,\n startingIndex: listRef.current.length,\n disabledIndices\n });\n}\nfunction findNonDisabledListIndex(listRef, _temp) {\n let {\n startingIndex = -1,\n decrement = false,\n disabledIndices,\n amount = 1\n } = _temp === void 0 ? {} : _temp;\n let index = startingIndex;\n do {\n index += decrement ? -amount : amount;\n } while (index >= 0 && index <= listRef.current.length - 1 && isListIndexDisabled(listRef, index, disabledIndices));\n return index;\n}\nfunction getGridNavigatedIndex(listRef, _ref) {\n let {\n event,\n orientation,\n loop,\n rtl,\n cols,\n disabledIndices,\n minIndex,\n maxIndex,\n prevIndex,\n stopEvent: stop = false\n } = _ref;\n let nextIndex = prevIndex;\n if (event.key === ARROW_UP) {\n stop && stopEvent(event);\n if (prevIndex === -1) {\n nextIndex = maxIndex;\n } else {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: nextIndex,\n amount: cols,\n decrement: true,\n disabledIndices\n });\n if (loop && (prevIndex - cols < minIndex || nextIndex < 0)) {\n const col = prevIndex % cols;\n const maxCol = maxIndex % cols;\n const offset = maxIndex - (maxCol - col);\n if (maxCol === col) {\n nextIndex = maxIndex;\n } else {\n nextIndex = maxCol > col ? offset : offset - cols;\n }\n }\n }\n if (isIndexOutOfListBounds(listRef, nextIndex)) {\n nextIndex = prevIndex;\n }\n }\n if (event.key === ARROW_DOWN) {\n stop && stopEvent(event);\n if (prevIndex === -1) {\n nextIndex = minIndex;\n } else {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex,\n amount: cols,\n disabledIndices\n });\n if (loop && prevIndex + cols > maxIndex) {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex % cols - cols,\n amount: cols,\n disabledIndices\n });\n }\n }\n if (isIndexOutOfListBounds(listRef, nextIndex)) {\n nextIndex = prevIndex;\n }\n }\n\n // Remains on the same row/column.\n if (orientation === 'both') {\n const prevRow = floor(prevIndex / cols);\n if (event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT)) {\n stop && stopEvent(event);\n if (prevIndex % cols !== cols - 1) {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex,\n disabledIndices\n });\n if (loop && isDifferentGridRow(nextIndex, cols, prevRow)) {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex - prevIndex % cols - 1,\n disabledIndices\n });\n }\n } else if (loop) {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex - prevIndex % cols - 1,\n disabledIndices\n });\n }\n if (isDifferentGridRow(nextIndex, cols, prevRow)) {\n nextIndex = prevIndex;\n }\n }\n if (event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT)) {\n stop && stopEvent(event);\n if (prevIndex % cols !== 0) {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex,\n decrement: true,\n disabledIndices\n });\n if (loop && isDifferentGridRow(nextIndex, cols, prevRow)) {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex + (cols - prevIndex % cols),\n decrement: true,\n disabledIndices\n });\n }\n } else if (loop) {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex + (cols - prevIndex % cols),\n decrement: true,\n disabledIndices\n });\n }\n if (isDifferentGridRow(nextIndex, cols, prevRow)) {\n nextIndex = prevIndex;\n }\n }\n const lastRow = floor(maxIndex / cols) === prevRow;\n if (isIndexOutOfListBounds(listRef, nextIndex)) {\n if (loop && lastRow) {\n nextIndex = event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT) ? maxIndex : findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex - prevIndex % cols - 1,\n disabledIndices\n });\n } else {\n nextIndex = prevIndex;\n }\n }\n }\n return nextIndex;\n}\n\n/** For each cell index, gets the item index that occupies that cell */\nfunction createGridCellMap(sizes, cols, dense) {\n const cellMap = [];\n let startIndex = 0;\n sizes.forEach((_ref2, index) => {\n let {\n width,\n height\n } = _ref2;\n if (width > cols) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(\"[Floating UI]: Invalid grid - item width at index \" + index + \" is greater than grid columns\");\n }\n }\n let itemPlaced = false;\n if (dense) {\n startIndex = 0;\n }\n while (!itemPlaced) {\n const targetCells = [];\n for (let i = 0; i < width; i++) {\n for (let j = 0; j < height; j++) {\n targetCells.push(startIndex + i + j * cols);\n }\n }\n if (startIndex % cols + width <= cols && targetCells.every(cell => cellMap[cell] == null)) {\n targetCells.forEach(cell => {\n cellMap[cell] = index;\n });\n itemPlaced = true;\n } else {\n startIndex++;\n }\n }\n });\n\n // convert into a non-sparse array\n return [...cellMap];\n}\n\n/** Gets cell index of an item's corner or -1 when index is -1. */\nfunction getGridCellIndexOfCorner(index, sizes, cellMap, cols, corner) {\n if (index === -1) return -1;\n const firstCellIndex = cellMap.indexOf(index);\n const sizeItem = sizes[index];\n switch (corner) {\n case 'tl':\n return firstCellIndex;\n case 'tr':\n if (!sizeItem) {\n return firstCellIndex;\n }\n return firstCellIndex + sizeItem.width - 1;\n case 'bl':\n if (!sizeItem) {\n return firstCellIndex;\n }\n return firstCellIndex + (sizeItem.height - 1) * cols;\n case 'br':\n return cellMap.lastIndexOf(index);\n }\n}\n\n/** Gets all cell indices that correspond to the specified indices */\nfunction getGridCellIndices(indices, cellMap) {\n return cellMap.flatMap((index, cellIndex) => indices.includes(index) ? [cellIndex] : []);\n}\nfunction isListIndexDisabled(listRef, index, disabledIndices) {\n if (typeof disabledIndices === 'function') {\n return disabledIndices(index);\n } else if (disabledIndices) {\n return disabledIndices.includes(index);\n }\n const element = listRef.current[index];\n return element == null || element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true';\n}\n\nconst getTabbableOptions = () => ({\n getShadowRoot: true,\n displayCheck:\n // JSDOM does not support the `tabbable` library. To solve this we can\n // check if `ResizeObserver` is a real function (not polyfilled), which\n // determines if the current environment is JSDOM-like.\n typeof ResizeObserver === 'function' && ResizeObserver.toString().includes('[native code]') ? 'full' : 'none'\n});\nfunction getTabbableIn(container, dir) {\n const list = tabbable(container, getTabbableOptions());\n const len = list.length;\n if (len === 0) return;\n const active = activeElement(getDocument(container));\n const index = list.indexOf(active);\n const nextIndex = index === -1 ? dir === 1 ? 0 : len - 1 : index + dir;\n return list[nextIndex];\n}\nfunction getNextTabbable(referenceElement) {\n return getTabbableIn(getDocument(referenceElement).body, 1) || referenceElement;\n}\nfunction getPreviousTabbable(referenceElement) {\n return getTabbableIn(getDocument(referenceElement).body, -1) || referenceElement;\n}\nfunction isOutsideEvent(event, container) {\n const containerElement = container || event.currentTarget;\n const relatedTarget = event.relatedTarget;\n return !relatedTarget || !contains(containerElement, relatedTarget);\n}\nfunction disableFocusInside(container) {\n const tabbableElements = tabbable(container, getTabbableOptions());\n tabbableElements.forEach(element => {\n element.dataset.tabindex = element.getAttribute('tabindex') || '';\n element.setAttribute('tabindex', '-1');\n });\n}\nfunction enableFocusInside(container) {\n const elements = container.querySelectorAll('[data-tabindex]');\n elements.forEach(element => {\n const tabindex = element.dataset.tabindex;\n delete element.dataset.tabindex;\n if (tabindex) {\n element.setAttribute('tabindex', tabindex);\n } else {\n element.removeAttribute('tabindex');\n }\n });\n}\n\nexport { activeElement, contains, createGridCellMap, disableFocusInside, enableFocusInside, findNonDisabledListIndex, getDeepestNode, getDocument, getFloatingFocusElement, getGridCellIndexOfCorner, getGridCellIndices, getGridNavigatedIndex, getMaxListIndex, getMinListIndex, getNextTabbable, getNodeAncestors, getNodeChildren, getPlatform, getPreviousTabbable, getTabbableOptions, getTarget, getUserAgent, isAndroid, isDifferentGridRow, isEventTargetWithin, isIndexOutOfListBounds, isJSDOM, isListIndexDisabled, isMac, isMouseLikePointerType, isOutsideEvent, isReactEvent, isRootElement, isSafari, isTypeableCombobox, isTypeableElement, isVirtualClick, isVirtualPointerEvent, matchesFocusVisible, stopEvent, useEffectEvent, useLatestRef, index as useModernLayoutEffect };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => d.overflows[0] > 0 && getSideAxis(d.placement) === initialSideAxis)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = ['top', 'left'].includes(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll, ignoreScrollbarX) {\n if (ignoreScrollbarX === void 0) {\n ignoreScrollbarX = false;\n }\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - (ignoreScrollbarX ? 0 :\n // RTL <body> scrollbar.\n getWindowScrollBarX(documentElement, htmlRect));\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll, true) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n resizeObserver.observe(floating);\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { computePosition, arrow as arrow$2, autoPlacement as autoPlacement$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar isClient = typeof document !== 'undefined';\n\nvar noop = function noop() {};\nvar index = isClient ? useLayoutEffect : noop;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (typeof a === 'function' && a.toString() === b.toString()) {\n return true;\n }\n let length;\n let i;\n let keys;\n if (a && b && typeof a === 'object') {\n if (Array.isArray(a)) {\n length = a.length;\n if (length !== b.length) return false;\n for (i = length; i-- !== 0;) {\n if (!deepEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) {\n return false;\n }\n for (i = length; i-- !== 0;) {\n if (!{}.hasOwnProperty.call(b, keys[i])) {\n return false;\n }\n }\n for (i = length; i-- !== 0;) {\n const key = keys[i];\n if (key === '_owner' && a.$$typeof) {\n continue;\n }\n if (!deepEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n const ref = React.useRef(value);\n index(() => {\n ref.current = value;\n });\n return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform,\n elements: {\n reference: externalReference,\n floating: externalFloating\n } = {},\n transform = true,\n whileElementsMounted,\n open\n } = options;\n const [data, setData] = React.useState({\n x: 0,\n y: 0,\n strategy,\n placement,\n middlewareData: {},\n isPositioned: false\n });\n const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n if (!deepEqual(latestMiddleware, middleware)) {\n setLatestMiddleware(middleware);\n }\n const [_reference, _setReference] = React.useState(null);\n const [_floating, _setFloating] = React.useState(null);\n const setReference = React.useCallback(node => {\n if (node !== referenceRef.current) {\n referenceRef.current = node;\n _setReference(node);\n }\n }, []);\n const setFloating = React.useCallback(node => {\n if (node !== floatingRef.current) {\n floatingRef.current = node;\n _setFloating(node);\n }\n }, []);\n const referenceEl = externalReference || _reference;\n const floatingEl = externalFloating || _floating;\n const referenceRef = React.useRef(null);\n const floatingRef = React.useRef(null);\n const dataRef = React.useRef(data);\n const hasWhileElementsMounted = whileElementsMounted != null;\n const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n const platformRef = useLatestRef(platform);\n const openRef = useLatestRef(open);\n const update = React.useCallback(() => {\n if (!referenceRef.current || !floatingRef.current) {\n return;\n }\n const config = {\n placement,\n strategy,\n middleware: latestMiddleware\n };\n if (platformRef.current) {\n config.platform = platformRef.current;\n }\n computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n const fullData = {\n ...data,\n // The floating element's position may be recomputed while it's closed\n // but still mounted (such as when transitioning out). To ensure\n // `isPositioned` will be `false` initially on the next open, avoid\n // setting it to `true` when `open === false` (must be specified).\n isPositioned: openRef.current !== false\n };\n if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n dataRef.current = fullData;\n ReactDOM.flushSync(() => {\n setData(fullData);\n });\n }\n });\n }, [latestMiddleware, placement, strategy, platformRef, openRef]);\n index(() => {\n if (open === false && dataRef.current.isPositioned) {\n dataRef.current.isPositioned = false;\n setData(data => ({\n ...data,\n isPositioned: false\n }));\n }\n }, [open]);\n const isMountedRef = React.useRef(false);\n index(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n index(() => {\n if (referenceEl) referenceRef.current = referenceEl;\n if (floatingEl) floatingRef.current = floatingEl;\n if (referenceEl && floatingEl) {\n if (whileElementsMountedRef.current) {\n return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n }\n update();\n }\n }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\n const refs = React.useMemo(() => ({\n reference: referenceRef,\n floating: floatingRef,\n setReference,\n setFloating\n }), [setReference, setFloating]);\n const elements = React.useMemo(() => ({\n reference: referenceEl,\n floating: floatingEl\n }), [referenceEl, floatingEl]);\n const floatingStyles = React.useMemo(() => {\n const initialStyles = {\n position: strategy,\n left: 0,\n top: 0\n };\n if (!elements.floating) {\n return initialStyles;\n }\n const x = roundByDPR(elements.floating, data.x);\n const y = roundByDPR(elements.floating, data.y);\n if (transform) {\n return {\n ...initialStyles,\n transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n ...(getDPR(elements.floating) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy,\n left: x,\n top: y\n };\n }, [strategy, transform, elements.floating, data.x, data.y]);\n return React.useMemo(() => ({\n ...data,\n update,\n refs,\n elements,\n floatingStyles\n }), [data, update, refs, elements, floatingStyles]);\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow$1 = options => {\n function isRef(value) {\n return {}.hasOwnProperty.call(value, 'current');\n }\n return {\n name: 'arrow',\n options,\n fn(state) {\n const {\n element,\n padding\n } = typeof options === 'function' ? options(state) : options;\n if (element && isRef(element)) {\n if (element.current != null) {\n return arrow$2({\n element: element.current,\n padding\n }).fn(state);\n }\n return {};\n }\n if (element) {\n return arrow$2({\n element,\n padding\n }).fn(state);\n }\n return {};\n }\n };\n};\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = (options, deps) => ({\n ...offset$1(options),\n options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = (options, deps) => ({\n ...shift$1(options),\n options: [options, deps]\n});\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => ({\n ...limitShift$1(options),\n options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = (options, deps) => ({\n ...flip$1(options),\n options: [options, deps]\n});\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = (options, deps) => ({\n ...size$1(options),\n options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = (options, deps) => ({\n ...autoPlacement$1(options),\n options: [options, deps]\n});\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = (options, deps) => ({\n ...hide$1(options),\n options: [options, deps]\n});\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = (options, deps) => ({\n ...inline$1(options),\n options: [options, deps]\n});\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = (options, deps) => ({\n ...arrow$1(options),\n options: [options, deps]\n});\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","import * as React from 'react';\nimport { useModernLayoutEffect, useEffectEvent, getMinListIndex, getMaxListIndex, createGridCellMap, isListIndexDisabled, getGridNavigatedIndex, getGridCellIndexOfCorner, getGridCellIndices, findNonDisabledListIndex, isIndexOutOfListBounds, useLatestRef, getDocument as getDocument$1, isMouseLikePointerType, contains as contains$1, isSafari, enableFocusInside, isOutsideEvent, getPreviousTabbable, getNextTabbable, disableFocusInside, isTypeableCombobox, getFloatingFocusElement, getTabbableOptions, getNodeAncestors, activeElement, getNodeChildren as getNodeChildren$1, stopEvent, getTarget as getTarget$1, isVirtualClick, isVirtualPointerEvent, getPlatform, isTypeableElement, isReactEvent, isRootElement, isEventTargetWithin, matchesFocusVisible, isMac, getDeepestNode, getUserAgent } from '@floating-ui/react/utils';\nimport { jsx, jsxs, Fragment } from 'react/jsx-runtime';\nimport { getComputedStyle, isElement, isShadowRoot, getNodeName, isHTMLElement, getWindow, isLastTraversableNode, getParentNode, isWebKit } from '@floating-ui/utils/dom';\nimport { tabbable, isTabbable, focusable } from 'tabbable';\nimport * as ReactDOM from 'react-dom';\nimport { getOverflowAncestors, useFloating as useFloating$1, offset, detectOverflow } from '@floating-ui/react-dom';\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/react-dom';\nimport { evaluate, max, round, min } from '@floating-ui/utils';\n\n/**\n * Merges an array of refs into a single memoized callback ref or `null`.\n * @see https://floating-ui.com/docs/react-utils#usemergerefs\n */\nfunction useMergeRefs(refs) {\n const cleanupRef = React.useRef(undefined);\n const refEffect = React.useCallback(instance => {\n const cleanups = refs.map(ref => {\n if (ref == null) {\n return;\n }\n if (typeof ref === 'function') {\n const refCallback = ref;\n const refCleanup = refCallback(instance);\n return typeof refCleanup === 'function' ? refCleanup : () => {\n refCallback(null);\n };\n }\n ref.current = instance;\n return () => {\n ref.current = null;\n };\n });\n return () => {\n cleanups.forEach(refCleanup => refCleanup == null ? void 0 : refCleanup());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, refs);\n return React.useMemo(() => {\n if (refs.every(ref => ref == null)) {\n return null;\n }\n return value => {\n if (cleanupRef.current) {\n cleanupRef.current();\n cleanupRef.current = undefined;\n }\n if (value != null) {\n cleanupRef.current = refEffect(value);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, refs);\n}\n\nfunction sortByDocumentPosition(a, b) {\n const position = a.compareDocumentPosition(b);\n if (position & Node.DOCUMENT_POSITION_FOLLOWING || position & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n return -1;\n }\n if (position & Node.DOCUMENT_POSITION_PRECEDING || position & Node.DOCUMENT_POSITION_CONTAINS) {\n return 1;\n }\n return 0;\n}\nconst FloatingListContext = /*#__PURE__*/React.createContext({\n register: () => {},\n unregister: () => {},\n map: /*#__PURE__*/new Map(),\n elementsRef: {\n current: []\n }\n});\n/**\n * Provides context for a list of items within the floating element.\n * @see https://floating-ui.com/docs/FloatingList\n */\nfunction FloatingList(props) {\n const {\n children,\n elementsRef,\n labelsRef\n } = props;\n const [nodes, setNodes] = React.useState(() => new Set());\n const register = React.useCallback(node => {\n setNodes(prevSet => new Set(prevSet).add(node));\n }, []);\n const unregister = React.useCallback(node => {\n setNodes(prevSet => {\n const set = new Set(prevSet);\n set.delete(node);\n return set;\n });\n }, []);\n const map = React.useMemo(() => {\n const newMap = new Map();\n const sortedNodes = Array.from(nodes.keys()).sort(sortByDocumentPosition);\n sortedNodes.forEach((node, index) => {\n newMap.set(node, index);\n });\n return newMap;\n }, [nodes]);\n return /*#__PURE__*/jsx(FloatingListContext.Provider, {\n value: React.useMemo(() => ({\n register,\n unregister,\n map,\n elementsRef,\n labelsRef\n }), [register, unregister, map, elementsRef, labelsRef]),\n children: children\n });\n}\n/**\n * Used to register a list item and its index (DOM position) in the\n * `FloatingList`.\n * @see https://floating-ui.com/docs/FloatingList#uselistitem\n */\nfunction useListItem(props) {\n if (props === void 0) {\n props = {};\n }\n const {\n label\n } = props;\n const {\n register,\n unregister,\n map,\n elementsRef,\n labelsRef\n } = React.useContext(FloatingListContext);\n const [index, setIndex] = React.useState(null);\n const componentRef = React.useRef(null);\n const ref = React.useCallback(node => {\n componentRef.current = node;\n if (index !== null) {\n elementsRef.current[index] = node;\n if (labelsRef) {\n var _node$textContent;\n const isLabelDefined = label !== undefined;\n labelsRef.current[index] = isLabelDefined ? label : (_node$textContent = node == null ? void 0 : node.textContent) != null ? _node$textContent : null;\n }\n }\n }, [index, elementsRef, labelsRef, label]);\n useModernLayoutEffect(() => {\n const node = componentRef.current;\n if (node) {\n register(node);\n return () => {\n unregister(node);\n };\n }\n }, [register, unregister]);\n useModernLayoutEffect(() => {\n const index = componentRef.current ? map.get(componentRef.current) : null;\n if (index != null) {\n setIndex(index);\n }\n }, [map]);\n return React.useMemo(() => ({\n ref,\n index: index == null ? -1 : index\n }), [index, ref]);\n}\n\nconst FOCUSABLE_ATTRIBUTE = 'data-floating-ui-focusable';\nconst ACTIVE_KEY = 'active';\nconst SELECTED_KEY = 'selected';\nconst ARROW_LEFT = 'ArrowLeft';\nconst ARROW_RIGHT = 'ArrowRight';\nconst ARROW_UP = 'ArrowUp';\nconst ARROW_DOWN = 'ArrowDown';\n\nfunction renderJsx(render, computedProps) {\n if (typeof render === 'function') {\n return render(computedProps);\n }\n if (render) {\n return /*#__PURE__*/React.cloneElement(render, computedProps);\n }\n return /*#__PURE__*/jsx(\"div\", {\n ...computedProps\n });\n}\nconst CompositeContext = /*#__PURE__*/React.createContext({\n activeIndex: 0,\n onNavigate: () => {}\n});\nconst horizontalKeys = [ARROW_LEFT, ARROW_RIGHT];\nconst verticalKeys = [ARROW_UP, ARROW_DOWN];\nconst allKeys = [...horizontalKeys, ...verticalKeys];\n\n/**\n * Creates a single tab stop whose items are navigated by arrow keys, which\n * provides list navigation outside of floating element contexts.\n *\n * This is useful to enable navigation of a list of items that aren’t part of a\n * floating element. A menubar is an example of a composite, with each reference\n * element being an item.\n * @see https://floating-ui.com/docs/Composite\n */\nconst Composite = /*#__PURE__*/React.forwardRef(function Composite(props, forwardedRef) {\n const {\n render,\n orientation = 'both',\n loop = true,\n rtl = false,\n cols = 1,\n disabledIndices,\n activeIndex: externalActiveIndex,\n onNavigate: externalSetActiveIndex,\n itemSizes,\n dense = false,\n ...domProps\n } = props;\n const [internalActiveIndex, internalSetActiveIndex] = React.useState(0);\n const activeIndex = externalActiveIndex != null ? externalActiveIndex : internalActiveIndex;\n const onNavigate = useEffectEvent(externalSetActiveIndex != null ? externalSetActiveIndex : internalSetActiveIndex);\n const elementsRef = React.useRef([]);\n const renderElementProps = render && typeof render !== 'function' ? render.props : {};\n const contextValue = React.useMemo(() => ({\n activeIndex,\n onNavigate\n }), [activeIndex, onNavigate]);\n const isGrid = cols > 1;\n function handleKeyDown(event) {\n if (!allKeys.includes(event.key)) return;\n let nextIndex = activeIndex;\n const minIndex = getMinListIndex(elementsRef, disabledIndices);\n const maxIndex = getMaxListIndex(elementsRef, disabledIndices);\n const horizontalEndKey = rtl ? ARROW_LEFT : ARROW_RIGHT;\n const horizontalStartKey = rtl ? ARROW_RIGHT : ARROW_LEFT;\n if (isGrid) {\n const sizes = itemSizes || Array.from({\n length: elementsRef.current.length\n }, () => ({\n width: 1,\n height: 1\n }));\n // To calculate movements on the grid, we use hypothetical cell indices\n // as if every item was 1x1, then convert back to real indices.\n const cellMap = createGridCellMap(sizes, cols, dense);\n const minGridIndex = cellMap.findIndex(index => index != null && !isListIndexDisabled(elementsRef, index, disabledIndices));\n // last enabled index\n const maxGridIndex = cellMap.reduce((foundIndex, index, cellIndex) => index != null && !isListIndexDisabled(elementsRef, index, disabledIndices) ? cellIndex : foundIndex, -1);\n const maybeNextIndex = cellMap[getGridNavigatedIndex({\n current: cellMap.map(itemIndex => itemIndex ? elementsRef.current[itemIndex] : null)\n }, {\n event,\n orientation,\n loop,\n rtl,\n cols,\n // treat undefined (empty grid spaces) as disabled indices so we\n // don't end up in them\n disabledIndices: getGridCellIndices([...((typeof disabledIndices !== 'function' ? disabledIndices : null) || elementsRef.current.map((_, index) => isListIndexDisabled(elementsRef, index, disabledIndices) ? index : undefined)), undefined], cellMap),\n minIndex: minGridIndex,\n maxIndex: maxGridIndex,\n prevIndex: getGridCellIndexOfCorner(activeIndex > maxIndex ? minIndex : activeIndex, sizes, cellMap, cols,\n // use a corner matching the edge closest to the direction we're\n // moving in so we don't end up in the same item. Prefer\n // top/left over bottom/right.\n event.key === ARROW_DOWN ? 'bl' : event.key === horizontalEndKey ? 'tr' : 'tl')\n })];\n if (maybeNextIndex != null) {\n nextIndex = maybeNextIndex;\n }\n }\n const toEndKeys = {\n horizontal: [horizontalEndKey],\n vertical: [ARROW_DOWN],\n both: [horizontalEndKey, ARROW_DOWN]\n }[orientation];\n const toStartKeys = {\n horizontal: [horizontalStartKey],\n vertical: [ARROW_UP],\n both: [horizontalStartKey, ARROW_UP]\n }[orientation];\n const preventedKeys = isGrid ? allKeys : {\n horizontal: horizontalKeys,\n vertical: verticalKeys,\n both: allKeys\n }[orientation];\n if (nextIndex === activeIndex && [...toEndKeys, ...toStartKeys].includes(event.key)) {\n if (loop && nextIndex === maxIndex && toEndKeys.includes(event.key)) {\n nextIndex = minIndex;\n } else if (loop && nextIndex === minIndex && toStartKeys.includes(event.key)) {\n nextIndex = maxIndex;\n } else {\n nextIndex = findNonDisabledListIndex(elementsRef, {\n startingIndex: nextIndex,\n decrement: toStartKeys.includes(event.key),\n disabledIndices\n });\n }\n }\n if (nextIndex !== activeIndex && !isIndexOutOfListBounds(elementsRef, nextIndex)) {\n var _elementsRef$current$;\n event.stopPropagation();\n if (preventedKeys.includes(event.key)) {\n event.preventDefault();\n }\n onNavigate(nextIndex);\n (_elementsRef$current$ = elementsRef.current[nextIndex]) == null || _elementsRef$current$.focus();\n }\n }\n const computedProps = {\n ...domProps,\n ...renderElementProps,\n ref: forwardedRef,\n 'aria-orientation': orientation === 'both' ? undefined : orientation,\n onKeyDown(e) {\n domProps.onKeyDown == null || domProps.onKeyDown(e);\n renderElementProps.onKeyDown == null || renderElementProps.onKeyDown(e);\n handleKeyDown(e);\n }\n };\n return /*#__PURE__*/jsx(CompositeContext.Provider, {\n value: contextValue,\n children: /*#__PURE__*/jsx(FloatingList, {\n elementsRef: elementsRef,\n children: renderJsx(render, computedProps)\n })\n });\n});\n/**\n * @see https://floating-ui.com/docs/Composite\n */\nconst CompositeItem = /*#__PURE__*/React.forwardRef(function CompositeItem(props, forwardedRef) {\n const {\n render,\n ...domProps\n } = props;\n const renderElementProps = render && typeof render !== 'function' ? render.props : {};\n const {\n activeIndex,\n onNavigate\n } = React.useContext(CompositeContext);\n const {\n ref,\n index\n } = useListItem();\n const mergedRef = useMergeRefs([ref, forwardedRef, renderElementProps.ref]);\n const isActive = activeIndex === index;\n const computedProps = {\n ...domProps,\n ...renderElementProps,\n ref: mergedRef,\n tabIndex: isActive ? 0 : -1,\n 'data-active': isActive ? '' : undefined,\n onFocus(e) {\n domProps.onFocus == null || domProps.onFocus(e);\n renderElementProps.onFocus == null || renderElementProps.onFocus(e);\n onNavigate(index);\n }\n };\n return renderJsx(render, computedProps);\n});\n\n// https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379\nconst SafeReact = {\n ...React\n};\n\nlet serverHandoffComplete = false;\nlet count = 0;\nconst genId = () => // Ensure the id is unique with multiple independent versions of Floating UI\n// on <React 18\n\"floating-ui-\" + Math.random().toString(36).slice(2, 6) + count++;\nfunction useFloatingId() {\n const [id, setId] = React.useState(() => serverHandoffComplete ? genId() : undefined);\n useModernLayoutEffect(() => {\n if (id == null) {\n setId(genId());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n React.useEffect(() => {\n serverHandoffComplete = true;\n }, []);\n return id;\n}\nconst useReactId = SafeReact.useId;\n\n/**\n * Uses React 18's built-in `useId()` when available, or falls back to a\n * slightly less performant (requiring a double render) implementation for\n * earlier React versions.\n * @see https://floating-ui.com/docs/react-utils#useid\n */\nconst useId = useReactId || useFloatingId;\n\nlet devMessageSet;\nif (process.env.NODE_ENV !== \"production\") {\n devMessageSet = /*#__PURE__*/new Set();\n}\nfunction warn() {\n var _devMessageSet;\n for (var _len = arguments.length, messages = new Array(_len), _key = 0; _key < _len; _key++) {\n messages[_key] = arguments[_key];\n }\n const message = \"Floating UI: \" + messages.join(' ');\n if (!((_devMessageSet = devMessageSet) != null && _devMessageSet.has(message))) {\n var _devMessageSet2;\n (_devMessageSet2 = devMessageSet) == null || _devMessageSet2.add(message);\n console.warn(message);\n }\n}\nfunction error() {\n var _devMessageSet3;\n for (var _len2 = arguments.length, messages = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n messages[_key2] = arguments[_key2];\n }\n const message = \"Floating UI: \" + messages.join(' ');\n if (!((_devMessageSet3 = devMessageSet) != null && _devMessageSet3.has(message))) {\n var _devMessageSet4;\n (_devMessageSet4 = devMessageSet) == null || _devMessageSet4.add(message);\n console.error(message);\n }\n}\n\n/**\n * Renders a pointing arrow triangle.\n * @see https://floating-ui.com/docs/FloatingArrow\n */\nconst FloatingArrow = /*#__PURE__*/React.forwardRef(function FloatingArrow(props, ref) {\n const {\n context: {\n placement,\n elements: {\n floating\n },\n middlewareData: {\n arrow,\n shift\n }\n },\n width = 14,\n height = 7,\n tipRadius = 0,\n strokeWidth = 0,\n staticOffset,\n stroke,\n d,\n style: {\n transform,\n ...restStyle\n } = {},\n ...rest\n } = props;\n if (process.env.NODE_ENV !== \"production\") {\n if (!ref) {\n warn('The `ref` prop is required for `FloatingArrow`.');\n }\n }\n const clipPathId = useId();\n const [isRTL, setIsRTL] = React.useState(false);\n\n // https://github.com/floating-ui/floating-ui/issues/2932\n useModernLayoutEffect(() => {\n if (!floating) return;\n const isRTL = getComputedStyle(floating).direction === 'rtl';\n if (isRTL) {\n setIsRTL(true);\n }\n }, [floating]);\n if (!floating) {\n return null;\n }\n const [side, alignment] = placement.split('-');\n const isVerticalSide = side === 'top' || side === 'bottom';\n let computedStaticOffset = staticOffset;\n if (isVerticalSide && shift != null && shift.x || !isVerticalSide && shift != null && shift.y) {\n computedStaticOffset = null;\n }\n\n // Strokes must be double the border width, this ensures the stroke's width\n // works as you'd expect.\n const computedStrokeWidth = strokeWidth * 2;\n const halfStrokeWidth = computedStrokeWidth / 2;\n const svgX = width / 2 * (tipRadius / -8 + 1);\n const svgY = height / 2 * tipRadius / 4;\n const isCustomShape = !!d;\n const yOffsetProp = computedStaticOffset && alignment === 'end' ? 'bottom' : 'top';\n let xOffsetProp = computedStaticOffset && alignment === 'end' ? 'right' : 'left';\n if (computedStaticOffset && isRTL) {\n xOffsetProp = alignment === 'end' ? 'left' : 'right';\n }\n const arrowX = (arrow == null ? void 0 : arrow.x) != null ? computedStaticOffset || arrow.x : '';\n const arrowY = (arrow == null ? void 0 : arrow.y) != null ? computedStaticOffset || arrow.y : '';\n const dValue = d || 'M0,0' + (\" H\" + width) + (\" L\" + (width - svgX) + \",\" + (height - svgY)) + (\" Q\" + width / 2 + \",\" + height + \" \" + svgX + \",\" + (height - svgY)) + ' Z';\n const rotation = {\n top: isCustomShape ? 'rotate(180deg)' : '',\n left: isCustomShape ? 'rotate(90deg)' : 'rotate(-90deg)',\n bottom: isCustomShape ? '' : 'rotate(180deg)',\n right: isCustomShape ? 'rotate(-90deg)' : 'rotate(90deg)'\n }[side];\n return /*#__PURE__*/jsxs(\"svg\", {\n ...rest,\n \"aria-hidden\": true,\n ref: ref,\n width: isCustomShape ? width : width + computedStrokeWidth,\n height: width,\n viewBox: \"0 0 \" + width + \" \" + (height > width ? height : width),\n style: {\n position: 'absolute',\n pointerEvents: 'none',\n [xOffsetProp]: arrowX,\n [yOffsetProp]: arrowY,\n [side]: isVerticalSide || isCustomShape ? '100%' : \"calc(100% - \" + computedStrokeWidth / 2 + \"px)\",\n transform: [rotation, transform].filter(t => !!t).join(' '),\n ...restStyle\n },\n children: [computedStrokeWidth > 0 && /*#__PURE__*/jsx(\"path\", {\n clipPath: \"url(#\" + clipPathId + \")\",\n fill: \"none\",\n stroke: stroke\n // Account for the stroke on the fill path rendered below.\n ,\n strokeWidth: computedStrokeWidth + (d ? 0 : 1),\n d: dValue\n }), /*#__PURE__*/jsx(\"path\", {\n stroke: computedStrokeWidth && !d ? rest.fill : 'none',\n d: dValue\n }), /*#__PURE__*/jsx(\"clipPath\", {\n id: clipPathId,\n children: /*#__PURE__*/jsx(\"rect\", {\n x: -halfStrokeWidth,\n y: halfStrokeWidth * (isCustomShape ? -1 : 1),\n width: width + computedStrokeWidth,\n height: width\n })\n })]\n });\n});\n\nfunction createEventEmitter() {\n const map = new Map();\n return {\n emit(event, data) {\n var _map$get;\n (_map$get = map.get(event)) == null || _map$get.forEach(listener => listener(data));\n },\n on(event, listener) {\n if (!map.has(event)) {\n map.set(event, new Set());\n }\n map.get(event).add(listener);\n },\n off(event, listener) {\n var _map$get2;\n (_map$get2 = map.get(event)) == null || _map$get2.delete(listener);\n }\n };\n}\n\nconst FloatingNodeContext = /*#__PURE__*/React.createContext(null);\nconst FloatingTreeContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * Returns the parent node id for nested floating elements, if available.\n * Returns `null` for top-level floating elements.\n */\nconst useFloatingParentNodeId = () => {\n var _React$useContext;\n return ((_React$useContext = React.useContext(FloatingNodeContext)) == null ? void 0 : _React$useContext.id) || null;\n};\n\n/**\n * Returns the nearest floating tree context, if available.\n */\nconst useFloatingTree = () => React.useContext(FloatingTreeContext);\n\n/**\n * Registers a node into the `FloatingTree`, returning its id.\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction useFloatingNodeId(customParentId) {\n const id = useId();\n const tree = useFloatingTree();\n const reactParentId = useFloatingParentNodeId();\n const parentId = customParentId || reactParentId;\n useModernLayoutEffect(() => {\n if (!id) return;\n const node = {\n id,\n parentId\n };\n tree == null || tree.addNode(node);\n return () => {\n tree == null || tree.removeNode(node);\n };\n }, [tree, id, parentId]);\n return id;\n}\n/**\n * Provides parent node context for nested floating elements.\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction FloatingNode(props) {\n const {\n children,\n id\n } = props;\n const parentId = useFloatingParentNodeId();\n return /*#__PURE__*/jsx(FloatingNodeContext.Provider, {\n value: React.useMemo(() => ({\n id,\n parentId\n }), [id, parentId]),\n children: children\n });\n}\n/**\n * Provides context for nested floating elements when they are not children of\n * each other on the DOM.\n * This is not necessary in all cases, except when there must be explicit communication between parent and child floating elements. It is necessary for:\n * - The `bubbles` option in the `useDismiss()` Hook\n * - Nested virtual list navigation\n * - Nested floating elements that each open on hover\n * - Custom communication between parent and child floating elements\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction FloatingTree(props) {\n const {\n children\n } = props;\n const nodesRef = React.useRef([]);\n const addNode = React.useCallback(node => {\n nodesRef.current = [...nodesRef.current, node];\n }, []);\n const removeNode = React.useCallback(node => {\n nodesRef.current = nodesRef.current.filter(n => n !== node);\n }, []);\n const [events] = React.useState(() => createEventEmitter());\n return /*#__PURE__*/jsx(FloatingTreeContext.Provider, {\n value: React.useMemo(() => ({\n nodesRef,\n addNode,\n removeNode,\n events\n }), [addNode, removeNode, events]),\n children: children\n });\n}\n\nfunction createAttribute(name) {\n return \"data-floating-ui-\" + name;\n}\n\nfunction clearTimeoutIfSet(timeoutRef) {\n if (timeoutRef.current !== -1) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = -1;\n }\n}\n\nconst safePolygonIdentifier = /*#__PURE__*/createAttribute('safe-polygon');\nfunction getDelay(value, prop, pointerType) {\n if (pointerType && !isMouseLikePointerType(pointerType)) {\n return 0;\n }\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'function') {\n const result = value();\n if (typeof result === 'number') {\n return result;\n }\n return result == null ? void 0 : result[prop];\n }\n return value == null ? void 0 : value[prop];\n}\nfunction getRestMs(value) {\n if (typeof value === 'function') {\n return value();\n }\n return value;\n}\n/**\n * Opens the floating element while hovering over the reference element, like\n * CSS `:hover`.\n * @see https://floating-ui.com/docs/useHover\n */\nfunction useHover(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n onOpenChange,\n dataRef,\n events,\n elements\n } = context;\n const {\n enabled = true,\n delay = 0,\n handleClose = null,\n mouseOnly = false,\n restMs = 0,\n move = true\n } = props;\n const tree = useFloatingTree();\n const parentId = useFloatingParentNodeId();\n const handleCloseRef = useLatestRef(handleClose);\n const delayRef = useLatestRef(delay);\n const openRef = useLatestRef(open);\n const restMsRef = useLatestRef(restMs);\n const pointerTypeRef = React.useRef();\n const timeoutRef = React.useRef(-1);\n const handlerRef = React.useRef();\n const restTimeoutRef = React.useRef(-1);\n const blockMouseMoveRef = React.useRef(true);\n const performedPointerEventsMutationRef = React.useRef(false);\n const unbindMouseMoveRef = React.useRef(() => {});\n const restTimeoutPendingRef = React.useRef(false);\n const isHoverOpen = useEffectEvent(() => {\n var _dataRef$current$open;\n const type = (_dataRef$current$open = dataRef.current.openEvent) == null ? void 0 : _dataRef$current$open.type;\n return (type == null ? void 0 : type.includes('mouse')) && type !== 'mousedown';\n });\n\n // When closing before opening, clear the delay timeouts to cancel it\n // from showing.\n React.useEffect(() => {\n if (!enabled) return;\n function onOpenChange(_ref) {\n let {\n open\n } = _ref;\n if (!open) {\n clearTimeoutIfSet(timeoutRef);\n clearTimeoutIfSet(restTimeoutRef);\n blockMouseMoveRef.current = true;\n restTimeoutPendingRef.current = false;\n }\n }\n events.on('openchange', onOpenChange);\n return () => {\n events.off('openchange', onOpenChange);\n };\n }, [enabled, events]);\n React.useEffect(() => {\n if (!enabled) return;\n if (!handleCloseRef.current) return;\n if (!open) return;\n function onLeave(event) {\n if (isHoverOpen()) {\n onOpenChange(false, event, 'hover');\n }\n }\n const html = getDocument$1(elements.floating).documentElement;\n html.addEventListener('mouseleave', onLeave);\n return () => {\n html.removeEventListener('mouseleave', onLeave);\n };\n }, [elements.floating, open, onOpenChange, enabled, handleCloseRef, isHoverOpen]);\n const closeWithDelay = React.useCallback(function (event, runElseBranch, reason) {\n if (runElseBranch === void 0) {\n runElseBranch = true;\n }\n if (reason === void 0) {\n reason = 'hover';\n }\n const closeDelay = getDelay(delayRef.current, 'close', pointerTypeRef.current);\n if (closeDelay && !handlerRef.current) {\n clearTimeoutIfSet(timeoutRef);\n timeoutRef.current = window.setTimeout(() => onOpenChange(false, event, reason), closeDelay);\n } else if (runElseBranch) {\n clearTimeoutIfSet(timeoutRef);\n onOpenChange(false, event, reason);\n }\n }, [delayRef, onOpenChange]);\n const cleanupMouseMoveHandler = useEffectEvent(() => {\n unbindMouseMoveRef.current();\n handlerRef.current = undefined;\n });\n const clearPointerEvents = useEffectEvent(() => {\n if (performedPointerEventsMutationRef.current) {\n const body = getDocument$1(elements.floating).body;\n body.style.pointerEvents = '';\n body.removeAttribute(safePolygonIdentifier);\n performedPointerEventsMutationRef.current = false;\n }\n });\n const isClickLikeOpenEvent = useEffectEvent(() => {\n return dataRef.current.openEvent ? ['click', 'mousedown'].includes(dataRef.current.openEvent.type) : false;\n });\n\n // Registering the mouse events on the reference directly to bypass React's\n // delegation system. If the cursor was on a disabled element and then entered\n // the reference (no gap), `mouseenter` doesn't fire in the delegation system.\n React.useEffect(() => {\n if (!enabled) return;\n function onReferenceMouseEnter(event) {\n clearTimeoutIfSet(timeoutRef);\n blockMouseMoveRef.current = false;\n if (mouseOnly && !isMouseLikePointerType(pointerTypeRef.current) || getRestMs(restMsRef.current) > 0 && !getDelay(delayRef.current, 'open')) {\n return;\n }\n const openDelay = getDelay(delayRef.current, 'open', pointerTypeRef.current);\n if (openDelay) {\n timeoutRef.current = window.setTimeout(() => {\n if (!openRef.current) {\n onOpenChange(true, event, 'hover');\n }\n }, openDelay);\n } else if (!open) {\n onOpenChange(true, event, 'hover');\n }\n }\n function onReferenceMouseLeave(event) {\n if (isClickLikeOpenEvent()) {\n clearPointerEvents();\n return;\n }\n unbindMouseMoveRef.current();\n const doc = getDocument$1(elements.floating);\n clearTimeoutIfSet(restTimeoutRef);\n restTimeoutPendingRef.current = false;\n if (handleCloseRef.current && dataRef.current.floatingContext) {\n // Prevent clearing `onScrollMouseLeave` timeout.\n if (!open) {\n clearTimeoutIfSet(timeoutRef);\n }\n handlerRef.current = handleCloseRef.current({\n ...dataRef.current.floatingContext,\n tree,\n x: event.clientX,\n y: event.clientY,\n onClose() {\n clearPointerEvents();\n cleanupMouseMoveHandler();\n if (!isClickLikeOpenEvent()) {\n closeWithDelay(event, true, 'safe-polygon');\n }\n }\n });\n const handler = handlerRef.current;\n doc.addEventListener('mousemove', handler);\n unbindMouseMoveRef.current = () => {\n doc.removeEventListener('mousemove', handler);\n };\n return;\n }\n\n // Allow interactivity without `safePolygon` on touch devices. With a\n // pointer, a short close delay is an alternative, so it should work\n // consistently.\n const shouldClose = pointerTypeRef.current === 'touch' ? !contains$1(elements.floating, event.relatedTarget) : true;\n if (shouldClose) {\n closeWithDelay(event);\n }\n }\n\n // Ensure the floating element closes after scrolling even if the pointer\n // did not move.\n // https://github.com/floating-ui/floating-ui/discussions/1692\n function onScrollMouseLeave(event) {\n if (isClickLikeOpenEvent()) return;\n if (!dataRef.current.floatingContext) return;\n handleCloseRef.current == null || handleCloseRef.current({\n ...dataRef.current.floatingContext,\n tree,\n x: event.clientX,\n y: event.clientY,\n onClose() {\n clearPointerEvents();\n cleanupMouseMoveHandler();\n if (!isClickLikeOpenEvent()) {\n closeWithDelay(event);\n }\n }\n })(event);\n }\n function onFloatingMouseEnter() {\n clearTimeoutIfSet(timeoutRef);\n }\n function onFloatingMouseLeave(event) {\n if (!isClickLikeOpenEvent()) {\n closeWithDelay(event, false);\n }\n }\n if (isElement(elements.domReference)) {\n const reference = elements.domReference;\n const floating = elements.floating;\n if (open) {\n reference.addEventListener('mouseleave', onScrollMouseLeave);\n }\n if (move) {\n reference.addEventListener('mousemove', onReferenceMouseEnter, {\n once: true\n });\n }\n reference.addEventListener('mouseenter', onReferenceMouseEnter);\n reference.addEventListener('mouseleave', onReferenceMouseLeave);\n if (floating) {\n floating.addEventListener('mouseleave', onScrollMouseLeave);\n floating.addEventListener('mouseenter', onFloatingMouseEnter);\n floating.addEventListener('mouseleave', onFloatingMouseLeave);\n }\n return () => {\n if (open) {\n reference.removeEventListener('mouseleave', onScrollMouseLeave);\n }\n if (move) {\n reference.removeEventListener('mousemove', onReferenceMouseEnter);\n }\n reference.removeEventListener('mouseenter', onReferenceMouseEnter);\n reference.removeEventListener('mouseleave', onReferenceMouseLeave);\n if (floating) {\n floating.removeEventListener('mouseleave', onScrollMouseLeave);\n floating.removeEventListener('mouseenter', onFloatingMouseEnter);\n floating.removeEventListener('mouseleave', onFloatingMouseLeave);\n }\n };\n }\n }, [elements, enabled, context, mouseOnly, move, closeWithDelay, cleanupMouseMoveHandler, clearPointerEvents, onOpenChange, open, openRef, tree, delayRef, handleCloseRef, dataRef, isClickLikeOpenEvent, restMsRef]);\n\n // Block pointer-events of every element other than the reference and floating\n // while the floating element is open and has a `handleClose` handler. Also\n // handles nested floating elements.\n // https://github.com/floating-ui/floating-ui/issues/1722\n useModernLayoutEffect(() => {\n var _handleCloseRef$curre;\n if (!enabled) return;\n if (open && (_handleCloseRef$curre = handleCloseRef.current) != null && (_handleCloseRef$curre = _handleCloseRef$curre.__options) != null && _handleCloseRef$curre.blockPointerEvents && isHoverOpen()) {\n performedPointerEventsMutationRef.current = true;\n const floatingEl = elements.floating;\n if (isElement(elements.domReference) && floatingEl) {\n var _tree$nodesRef$curren;\n const body = getDocument$1(elements.floating).body;\n body.setAttribute(safePolygonIdentifier, '');\n const ref = elements.domReference;\n const parentFloating = tree == null || (_tree$nodesRef$curren = tree.nodesRef.current.find(node => node.id === parentId)) == null || (_tree$nodesRef$curren = _tree$nodesRef$curren.context) == null ? void 0 : _tree$nodesRef$curren.elements.floating;\n if (parentFloating) {\n parentFloating.style.pointerEvents = '';\n }\n body.style.pointerEvents = 'none';\n ref.style.pointerEvents = 'auto';\n floatingEl.style.pointerEvents = 'auto';\n return () => {\n body.style.pointerEvents = '';\n ref.style.pointerEvents = '';\n floatingEl.style.pointerEvents = '';\n };\n }\n }\n }, [enabled, open, parentId, elements, tree, handleCloseRef, isHoverOpen]);\n useModernLayoutEffect(() => {\n if (!open) {\n pointerTypeRef.current = undefined;\n restTimeoutPendingRef.current = false;\n cleanupMouseMoveHandler();\n clearPointerEvents();\n }\n }, [open, cleanupMouseMoveHandler, clearPointerEvents]);\n React.useEffect(() => {\n return () => {\n cleanupMouseMoveHandler();\n clearTimeoutIfSet(timeoutRef);\n clearTimeoutIfSet(restTimeoutRef);\n clearPointerEvents();\n };\n }, [enabled, elements.domReference, cleanupMouseMoveHandler, clearPointerEvents]);\n const reference = React.useMemo(() => {\n function setPointerRef(event) {\n pointerTypeRef.current = event.pointerType;\n }\n return {\n onPointerDown: setPointerRef,\n onPointerEnter: setPointerRef,\n onMouseMove(event) {\n const {\n nativeEvent\n } = event;\n function handleMouseMove() {\n if (!blockMouseMoveRef.current && !openRef.current) {\n onOpenChange(true, nativeEvent, 'hover');\n }\n }\n if (mouseOnly && !isMouseLikePointerType(pointerTypeRef.current)) {\n return;\n }\n if (open || getRestMs(restMsRef.current) === 0) {\n return;\n }\n\n // Ignore insignificant movements to account for tremors.\n if (restTimeoutPendingRef.current && event.movementX ** 2 + event.movementY ** 2 < 2) {\n return;\n }\n clearTimeoutIfSet(restTimeoutRef);\n if (pointerTypeRef.current === 'touch') {\n handleMouseMove();\n } else {\n restTimeoutPendingRef.current = true;\n restTimeoutRef.current = window.setTimeout(handleMouseMove, getRestMs(restMsRef.current));\n }\n }\n };\n }, [mouseOnly, onOpenChange, open, openRef, restMsRef]);\n return React.useMemo(() => enabled ? {\n reference\n } : {}, [enabled, reference]);\n}\n\nconst NOOP = () => {};\nconst FloatingDelayGroupContext = /*#__PURE__*/React.createContext({\n delay: 0,\n initialDelay: 0,\n timeoutMs: 0,\n currentId: null,\n setCurrentId: NOOP,\n setState: NOOP,\n isInstantPhase: false\n});\n\n/**\n * @deprecated\n * Use the return value of `useDelayGroup()` instead.\n */\nconst useDelayGroupContext = () => React.useContext(FloatingDelayGroupContext);\n/**\n * Provides context for a group of floating elements that should share a\n * `delay`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction FloatingDelayGroup(props) {\n const {\n children,\n delay,\n timeoutMs = 0\n } = props;\n const [state, setState] = React.useReducer((prev, next) => ({\n ...prev,\n ...next\n }), {\n delay,\n timeoutMs,\n initialDelay: delay,\n currentId: null,\n isInstantPhase: false\n });\n const initialCurrentIdRef = React.useRef(null);\n const setCurrentId = React.useCallback(currentId => {\n setState({\n currentId\n });\n }, []);\n useModernLayoutEffect(() => {\n if (state.currentId) {\n if (initialCurrentIdRef.current === null) {\n initialCurrentIdRef.current = state.currentId;\n } else if (!state.isInstantPhase) {\n setState({\n isInstantPhase: true\n });\n }\n } else {\n if (state.isInstantPhase) {\n setState({\n isInstantPhase: false\n });\n }\n initialCurrentIdRef.current = null;\n }\n }, [state.currentId, state.isInstantPhase]);\n return /*#__PURE__*/jsx(FloatingDelayGroupContext.Provider, {\n value: React.useMemo(() => ({\n ...state,\n setState,\n setCurrentId\n }), [state, setCurrentId]),\n children: children\n });\n}\n/**\n * Enables grouping when called inside a component that's a child of a\n * `FloatingDelayGroup`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction useDelayGroup(context, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n open,\n onOpenChange,\n floatingId\n } = context;\n const {\n id: optionId,\n enabled = true\n } = options;\n const id = optionId != null ? optionId : floatingId;\n const groupContext = useDelayGroupContext();\n const {\n currentId,\n setCurrentId,\n initialDelay,\n setState,\n timeoutMs\n } = groupContext;\n useModernLayoutEffect(() => {\n if (!enabled) return;\n if (!currentId) return;\n setState({\n delay: {\n open: 1,\n close: getDelay(initialDelay, 'close')\n }\n });\n if (currentId !== id) {\n onOpenChange(false);\n }\n }, [enabled, id, onOpenChange, setState, currentId, initialDelay]);\n useModernLayoutEffect(() => {\n function unset() {\n onOpenChange(false);\n setState({\n delay: initialDelay,\n currentId: null\n });\n }\n if (!enabled) return;\n if (!currentId) return;\n if (!open && currentId === id) {\n if (timeoutMs) {\n const timeout = window.setTimeout(unset, timeoutMs);\n return () => {\n clearTimeout(timeout);\n };\n }\n unset();\n }\n }, [enabled, open, setState, currentId, id, onOpenChange, initialDelay, timeoutMs]);\n useModernLayoutEffect(() => {\n if (!enabled) return;\n if (setCurrentId === NOOP || !open) return;\n setCurrentId(id);\n }, [enabled, open, setCurrentId, id]);\n return groupContext;\n}\n\nconst NextFloatingDelayGroupContext = /*#__PURE__*/React.createContext({\n hasProvider: false,\n timeoutMs: 0,\n delayRef: {\n current: 0\n },\n initialDelayRef: {\n current: 0\n },\n timeoutIdRef: {\n current: -1\n },\n currentIdRef: {\n current: null\n },\n currentContextRef: {\n current: null\n }\n});\n/**\n * Experimental next version of `FloatingDelayGroup` to become the default\n * in the future. This component is not yet stable.\n * Provides context for a group of floating elements that should share a\n * `delay`. Unlike `FloatingDelayGroup`, `useNextDelayGroup` with this\n * component does not cause a re-render of unrelated consumers of the\n * context when the delay changes.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction NextFloatingDelayGroup(props) {\n const {\n children,\n delay,\n timeoutMs = 0\n } = props;\n const delayRef = React.useRef(delay);\n const initialDelayRef = React.useRef(delay);\n const currentIdRef = React.useRef(null);\n const currentContextRef = React.useRef(null);\n const timeoutIdRef = React.useRef(-1);\n return /*#__PURE__*/jsx(NextFloatingDelayGroupContext.Provider, {\n value: React.useMemo(() => ({\n hasProvider: true,\n delayRef,\n initialDelayRef,\n currentIdRef,\n timeoutMs,\n currentContextRef,\n timeoutIdRef\n }), [timeoutMs]),\n children: children\n });\n}\n/**\n * Enables grouping when called inside a component that's a child of a\n * `NextFloatingDelayGroup`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction useNextDelayGroup(context, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n open,\n onOpenChange,\n floatingId\n } = context;\n const {\n enabled = true\n } = options;\n const groupContext = React.useContext(NextFloatingDelayGroupContext);\n const {\n currentIdRef,\n delayRef,\n timeoutMs,\n initialDelayRef,\n currentContextRef,\n hasProvider,\n timeoutIdRef\n } = groupContext;\n const [isInstantPhase, setIsInstantPhase] = React.useState(false);\n useModernLayoutEffect(() => {\n function unset() {\n var _currentContextRef$cu;\n setIsInstantPhase(false);\n (_currentContextRef$cu = currentContextRef.current) == null || _currentContextRef$cu.setIsInstantPhase(false);\n currentIdRef.current = null;\n currentContextRef.current = null;\n delayRef.current = initialDelayRef.current;\n }\n if (!enabled) return;\n if (!currentIdRef.current) return;\n if (!open && currentIdRef.current === floatingId) {\n setIsInstantPhase(false);\n if (timeoutMs) {\n timeoutIdRef.current = window.setTimeout(unset, timeoutMs);\n return () => {\n clearTimeout(timeoutIdRef.current);\n };\n }\n unset();\n }\n }, [enabled, open, floatingId, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeoutIdRef]);\n useModernLayoutEffect(() => {\n if (!enabled) return;\n if (!open) return;\n const prevContext = currentContextRef.current;\n const prevId = currentIdRef.current;\n currentContextRef.current = {\n onOpenChange,\n setIsInstantPhase\n };\n currentIdRef.current = floatingId;\n delayRef.current = {\n open: 0,\n close: getDelay(initialDelayRef.current, 'close')\n };\n if (prevId !== null && prevId !== floatingId) {\n clearTimeoutIfSet(timeoutIdRef);\n setIsInstantPhase(true);\n prevContext == null || prevContext.setIsInstantPhase(true);\n prevContext == null || prevContext.onOpenChange(false);\n } else {\n setIsInstantPhase(false);\n prevContext == null || prevContext.setIsInstantPhase(false);\n }\n }, [enabled, open, floatingId, onOpenChange, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeoutIdRef]);\n useModernLayoutEffect(() => {\n return () => {\n currentContextRef.current = null;\n };\n }, [currentContextRef]);\n return React.useMemo(() => ({\n hasProvider,\n delayRef,\n isInstantPhase\n }), [hasProvider, delayRef, isInstantPhase]);\n}\n\nlet rafId = 0;\nfunction enqueueFocus(el, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n preventScroll = false,\n cancelPrevious = true,\n sync = false\n } = options;\n cancelPrevious && cancelAnimationFrame(rafId);\n const exec = () => el == null ? void 0 : el.focus({\n preventScroll\n });\n if (sync) {\n exec();\n } else {\n rafId = requestAnimationFrame(exec);\n }\n}\n\nfunction contains(parent, child) {\n if (!parent || !child) {\n return false;\n }\n const rootNode = child.getRootNode == null ? void 0 : child.getRootNode();\n\n // First, attempt with faster native method\n if (parent.contains(child)) {\n return true;\n }\n\n // then fallback to custom implementation with Shadow DOM support\n if (rootNode && isShadowRoot(rootNode)) {\n let next = child;\n while (next) {\n if (parent === next) {\n return true;\n }\n // @ts-ignore\n next = next.parentNode || next.host;\n }\n }\n\n // Give up, the result is false\n return false;\n}\nfunction getTarget(event) {\n if ('composedPath' in event) {\n return event.composedPath()[0];\n }\n\n // TS thinks `event` is of type never as it assumes all browsers support\n // `composedPath()`, but browsers without shadow DOM don't.\n return event.target;\n}\nfunction getDocument(node) {\n return (node == null ? void 0 : node.ownerDocument) || document;\n}\n\n// Modified to add conditional `aria-hidden` support:\n// https://github.com/theKashey/aria-hidden/blob/9220c8f4a4fd35f63bee5510a9f41a37264382d4/src/index.ts\nconst counters = {\n inert: /*#__PURE__*/new WeakMap(),\n 'aria-hidden': /*#__PURE__*/new WeakMap(),\n none: /*#__PURE__*/new WeakMap()\n};\nfunction getCounterMap(control) {\n if (control === 'inert') return counters.inert;\n if (control === 'aria-hidden') return counters['aria-hidden'];\n return counters.none;\n}\nlet uncontrolledElementsSet = /*#__PURE__*/new WeakSet();\nlet markerMap = {};\nlet lockCount$1 = 0;\nconst supportsInert = () => typeof HTMLElement !== 'undefined' && 'inert' in HTMLElement.prototype;\nconst unwrapHost = node => node && (node.host || unwrapHost(node.parentNode));\nconst correctElements = (parent, targets) => targets.map(target => {\n if (parent.contains(target)) {\n return target;\n }\n const correctedTarget = unwrapHost(target);\n if (parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n return null;\n}).filter(x => x != null);\nfunction applyAttributeToOthers(uncorrectedAvoidElements, body, ariaHidden, inert) {\n const markerName = 'data-floating-ui-inert';\n const controlAttribute = inert ? 'inert' : ariaHidden ? 'aria-hidden' : null;\n const avoidElements = correctElements(body, uncorrectedAvoidElements);\n const elementsToKeep = new Set();\n const elementsToStop = new Set(avoidElements);\n const hiddenElements = [];\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n const markerCounter = markerMap[markerName];\n avoidElements.forEach(keep);\n deep(body);\n elementsToKeep.clear();\n function keep(el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n el.parentNode && keep(el.parentNode);\n }\n function deep(parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n [].forEach.call(parent.children, node => {\n if (getNodeName(node) === 'script') return;\n if (elementsToKeep.has(node)) {\n deep(node);\n } else {\n const attr = controlAttribute ? node.getAttribute(controlAttribute) : null;\n const alreadyHidden = attr !== null && attr !== 'false';\n const counterMap = getCounterMap(controlAttribute);\n const counterValue = (counterMap.get(node) || 0) + 1;\n const markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenElements.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledElementsSet.add(node);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, '');\n }\n if (!alreadyHidden && controlAttribute) {\n node.setAttribute(controlAttribute, controlAttribute === 'inert' ? '' : 'true');\n }\n }\n });\n }\n lockCount$1++;\n return () => {\n hiddenElements.forEach(element => {\n const counterMap = getCounterMap(controlAttribute);\n const currentCounterValue = counterMap.get(element) || 0;\n const counterValue = currentCounterValue - 1;\n const markerValue = (markerCounter.get(element) || 0) - 1;\n counterMap.set(element, counterValue);\n markerCounter.set(element, markerValue);\n if (!counterValue) {\n if (!uncontrolledElementsSet.has(element) && controlAttribute) {\n element.removeAttribute(controlAttribute);\n }\n uncontrolledElementsSet.delete(element);\n }\n if (!markerValue) {\n element.removeAttribute(markerName);\n }\n });\n lockCount$1--;\n if (!lockCount$1) {\n counters.inert = new WeakMap();\n counters['aria-hidden'] = new WeakMap();\n counters.none = new WeakMap();\n uncontrolledElementsSet = new WeakSet();\n markerMap = {};\n }\n };\n}\nfunction markOthers(avoidElements, ariaHidden, inert) {\n if (ariaHidden === void 0) {\n ariaHidden = false;\n }\n if (inert === void 0) {\n inert = false;\n }\n const body = getDocument(avoidElements[0]).body;\n return applyAttributeToOthers(avoidElements.concat(Array.from(body.querySelectorAll('[aria-live]'))), body, ariaHidden, inert);\n}\n\nconst HIDDEN_STYLES = {\n border: 0,\n clip: 'rect(0 0 0 0)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: 0,\n position: 'fixed',\n whiteSpace: 'nowrap',\n width: '1px',\n top: 0,\n left: 0\n};\nconst FocusGuard = /*#__PURE__*/React.forwardRef(function FocusGuard(props, ref) {\n const [role, setRole] = React.useState();\n useModernLayoutEffect(() => {\n if (isSafari()) {\n // Unlike other screen readers such as NVDA and JAWS, the virtual cursor\n // on VoiceOver does trigger the onFocus event, so we can use the focus\n // trap element. On Safari, only buttons trigger the onFocus event.\n // NB: \"group\" role in the Sandbox no longer appears to work, must be a\n // button role.\n setRole('button');\n }\n }, []);\n const restProps = {\n ref,\n tabIndex: 0,\n // Role is only for VoiceOver\n role,\n 'aria-hidden': role ? undefined : true,\n [createAttribute('focus-guard')]: '',\n style: HIDDEN_STYLES\n };\n return /*#__PURE__*/jsx(\"span\", {\n ...props,\n ...restProps\n });\n});\n\nconst PortalContext = /*#__PURE__*/React.createContext(null);\nconst attr = /*#__PURE__*/createAttribute('portal');\n/**\n * @see https://floating-ui.com/docs/FloatingPortal#usefloatingportalnode\n */\nfunction useFloatingPortalNode(props) {\n if (props === void 0) {\n props = {};\n }\n const {\n id,\n root\n } = props;\n const uniqueId = useId();\n const portalContext = usePortalContext();\n const [portalNode, setPortalNode] = React.useState(null);\n const portalNodeRef = React.useRef(null);\n useModernLayoutEffect(() => {\n return () => {\n portalNode == null || portalNode.remove();\n // Allow the subsequent layout effects to create a new node on updates.\n // The portal node will still be cleaned up on unmount.\n // https://github.com/floating-ui/floating-ui/issues/2454\n queueMicrotask(() => {\n portalNodeRef.current = null;\n });\n };\n }, [portalNode]);\n useModernLayoutEffect(() => {\n // Wait for the uniqueId to be generated before creating the portal node in\n // React <18 (using `useFloatingId` instead of the native `useId`).\n // https://github.com/floating-ui/floating-ui/issues/2778\n if (!uniqueId) return;\n if (portalNodeRef.current) return;\n const existingIdRoot = id ? document.getElementById(id) : null;\n if (!existingIdRoot) return;\n const subRoot = document.createElement('div');\n subRoot.id = uniqueId;\n subRoot.setAttribute(attr, '');\n existingIdRoot.appendChild(subRoot);\n portalNodeRef.current = subRoot;\n setPortalNode(subRoot);\n }, [id, uniqueId]);\n useModernLayoutEffect(() => {\n // Wait for the root to exist before creating the portal node. The root must\n // be stored in state, not a ref, for this to work reactively.\n if (root === null) return;\n if (!uniqueId) return;\n if (portalNodeRef.current) return;\n let container = root || (portalContext == null ? void 0 : portalContext.portalNode);\n if (container && !isElement(container)) container = container.current;\n container = container || document.body;\n let idWrapper = null;\n if (id) {\n idWrapper = document.createElement('div');\n idWrapper.id = id;\n container.appendChild(idWrapper);\n }\n const subRoot = document.createElement('div');\n subRoot.id = uniqueId;\n subRoot.setAttribute(attr, '');\n container = idWrapper || container;\n container.appendChild(subRoot);\n portalNodeRef.current = subRoot;\n setPortalNode(subRoot);\n }, [id, root, uniqueId, portalContext]);\n return portalNode;\n}\n/**\n * Portals the floating element into a given container element — by default,\n * outside of the app root and into the body.\n * This is necessary to ensure the floating element can appear outside any\n * potential parent containers that cause clipping (such as `overflow: hidden`),\n * while retaining its location in the React tree.\n * @see https://floating-ui.com/docs/FloatingPortal\n */\nfunction FloatingPortal(props) {\n const {\n children,\n id,\n root,\n preserveTabOrder = true\n } = props;\n const portalNode = useFloatingPortalNode({\n id,\n root\n });\n const [focusManagerState, setFocusManagerState] = React.useState(null);\n const beforeOutsideRef = React.useRef(null);\n const afterOutsideRef = React.useRef(null);\n const beforeInsideRef = React.useRef(null);\n const afterInsideRef = React.useRef(null);\n const modal = focusManagerState == null ? void 0 : focusManagerState.modal;\n const open = focusManagerState == null ? void 0 : focusManagerState.open;\n const shouldRenderGuards =\n // The FocusManager and therefore floating element are currently open/\n // rendered.\n !!focusManagerState &&\n // Guards are only for non-modal focus management.\n !focusManagerState.modal &&\n // Don't render if unmount is transitioning.\n focusManagerState.open && preserveTabOrder && !!(root || portalNode);\n\n // https://codesandbox.io/s/tabbable-portal-f4tng?file=/src/TabbablePortal.tsx\n React.useEffect(() => {\n if (!portalNode || !preserveTabOrder || modal) {\n return;\n }\n\n // Make sure elements inside the portal element are tabbable only when the\n // portal has already been focused, either by tabbing into a focus trap\n // element outside or using the mouse.\n function onFocus(event) {\n if (portalNode && isOutsideEvent(event)) {\n const focusing = event.type === 'focusin';\n const manageFocus = focusing ? enableFocusInside : disableFocusInside;\n manageFocus(portalNode);\n }\n }\n // Listen to the event on the capture phase so they run before the focus\n // trap elements onFocus prop is called.\n portalNode.addEventListener('focusin', onFocus, true);\n portalNode.addEventListener('focusout', onFocus, true);\n return () => {\n portalNode.removeEventListener('focusin', onFocus, true);\n portalNode.removeEventListener('focusout', onFocus, true);\n };\n }, [portalNode, preserveTabOrder, modal]);\n React.useEffect(() => {\n if (!portalNode) return;\n if (open) return;\n enableFocusInside(portalNode);\n }, [open, portalNode]);\n return /*#__PURE__*/jsxs(PortalContext.Provider, {\n value: React.useMemo(() => ({\n preserveTabOrder,\n beforeOutsideRef,\n afterOutsideRef,\n beforeInsideRef,\n afterInsideRef,\n portalNode,\n setFocusManagerState\n }), [preserveTabOrder, portalNode]),\n children: [shouldRenderGuards && portalNode && /*#__PURE__*/jsx(FocusGuard, {\n \"data-type\": \"outside\",\n ref: beforeOutsideRef,\n onFocus: event => {\n if (isOutsideEvent(event, portalNode)) {\n var _beforeInsideRef$curr;\n (_beforeInsideRef$curr = beforeInsideRef.current) == null || _beforeInsideRef$curr.focus();\n } else {\n const domReference = focusManagerState ? focusManagerState.domReference : null;\n const prevTabbable = getPreviousTabbable(domReference);\n prevTabbable == null || prevTabbable.focus();\n }\n }\n }), shouldRenderGuards && portalNode && /*#__PURE__*/jsx(\"span\", {\n \"aria-owns\": portalNode.id,\n style: HIDDEN_STYLES\n }), portalNode && /*#__PURE__*/ReactDOM.createPortal(children, portalNode), shouldRenderGuards && portalNode && /*#__PURE__*/jsx(FocusGuard, {\n \"data-type\": \"outside\",\n ref: afterOutsideRef,\n onFocus: event => {\n if (isOutsideEvent(event, portalNode)) {\n var _afterInsideRef$curre;\n (_afterInsideRef$curre = afterInsideRef.current) == null || _afterInsideRef$curre.focus();\n } else {\n const domReference = focusManagerState ? focusManagerState.domReference : null;\n const nextTabbable = getNextTabbable(domReference);\n nextTabbable == null || nextTabbable.focus();\n (focusManagerState == null ? void 0 : focusManagerState.closeOnFocusOut) && (focusManagerState == null ? void 0 : focusManagerState.onOpenChange(false, event.nativeEvent, 'focus-out'));\n }\n }\n })]\n });\n}\nconst usePortalContext = () => React.useContext(PortalContext);\n\nfunction useLiteMergeRefs(refs) {\n return React.useMemo(() => {\n return value => {\n refs.forEach(ref => {\n if (ref) {\n ref.current = value;\n }\n });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, refs);\n}\n\nconst LIST_LIMIT = 20;\nlet previouslyFocusedElements = [];\nfunction addPreviouslyFocusedElement(element) {\n previouslyFocusedElements = previouslyFocusedElements.filter(el => el.isConnected);\n if (element && getNodeName(element) !== 'body') {\n previouslyFocusedElements.push(element);\n if (previouslyFocusedElements.length > LIST_LIMIT) {\n previouslyFocusedElements = previouslyFocusedElements.slice(-20);\n }\n }\n}\nfunction getPreviouslyFocusedElement() {\n return previouslyFocusedElements.slice().reverse().find(el => el.isConnected);\n}\nfunction getFirstTabbableElement(container) {\n const tabbableOptions = getTabbableOptions();\n if (isTabbable(container, tabbableOptions)) {\n return container;\n }\n return tabbable(container, tabbableOptions)[0] || container;\n}\nfunction handleTabIndex(floatingFocusElement, orderRef) {\n var _floatingFocusElement;\n if (!orderRef.current.includes('floating') && !((_floatingFocusElement = floatingFocusElement.getAttribute('role')) != null && _floatingFocusElement.includes('dialog'))) {\n return;\n }\n const options = getTabbableOptions();\n const focusableElements = focusable(floatingFocusElement, options);\n const tabbableContent = focusableElements.filter(element => {\n const dataTabIndex = element.getAttribute('data-tabindex') || '';\n return isTabbable(element, options) || element.hasAttribute('data-tabindex') && !dataTabIndex.startsWith('-');\n });\n const tabIndex = floatingFocusElement.getAttribute('tabindex');\n if (orderRef.current.includes('floating') || tabbableContent.length === 0) {\n if (tabIndex !== '0') {\n floatingFocusElement.setAttribute('tabindex', '0');\n }\n } else if (tabIndex !== '-1' || floatingFocusElement.hasAttribute('data-tabindex') && floatingFocusElement.getAttribute('data-tabindex') !== '-1') {\n floatingFocusElement.setAttribute('tabindex', '-1');\n floatingFocusElement.setAttribute('data-tabindex', '-1');\n }\n}\nconst VisuallyHiddenDismiss = /*#__PURE__*/React.forwardRef(function VisuallyHiddenDismiss(props, ref) {\n return /*#__PURE__*/jsx(\"button\", {\n ...props,\n type: \"button\",\n ref: ref,\n tabIndex: -1,\n style: HIDDEN_STYLES\n });\n});\n/**\n * Provides focus management for the floating element.\n * @see https://floating-ui.com/docs/FloatingFocusManager\n */\nfunction FloatingFocusManager(props) {\n const {\n context,\n children,\n disabled = false,\n order = ['content'],\n guards: _guards = true,\n initialFocus = 0,\n returnFocus = true,\n restoreFocus = false,\n modal = true,\n visuallyHiddenDismiss = false,\n closeOnFocusOut = true,\n outsideElementsInert = false,\n getInsideElements: _getInsideElements = () => []\n } = props;\n const {\n open,\n onOpenChange,\n events,\n dataRef,\n elements: {\n domReference,\n floating\n }\n } = context;\n const getNodeId = useEffectEvent(() => {\n var _dataRef$current$floa;\n return (_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.nodeId;\n });\n const getInsideElements = useEffectEvent(_getInsideElements);\n const ignoreInitialFocus = typeof initialFocus === 'number' && initialFocus < 0;\n // If the reference is a combobox and is typeable (e.g. input/textarea),\n // there are different focus semantics. The guards should not be rendered, but\n // aria-hidden should be applied to all nodes still. Further, the visually\n // hidden dismiss button should only appear at the end of the list, not the\n // start.\n const isUntrappedTypeableCombobox = isTypeableCombobox(domReference) && ignoreInitialFocus;\n\n // Force the guards to be rendered if the `inert` attribute is not supported.\n const inertSupported = supportsInert();\n const guards = inertSupported ? _guards : true;\n const useInert = !guards || inertSupported && outsideElementsInert;\n const orderRef = useLatestRef(order);\n const initialFocusRef = useLatestRef(initialFocus);\n const returnFocusRef = useLatestRef(returnFocus);\n const tree = useFloatingTree();\n const portalContext = usePortalContext();\n const startDismissButtonRef = React.useRef(null);\n const endDismissButtonRef = React.useRef(null);\n const preventReturnFocusRef = React.useRef(false);\n const isPointerDownRef = React.useRef(false);\n const tabbableIndexRef = React.useRef(-1);\n const isInsidePortal = portalContext != null;\n const floatingFocusElement = getFloatingFocusElement(floating);\n const getTabbableContent = useEffectEvent(function (container) {\n if (container === void 0) {\n container = floatingFocusElement;\n }\n return container ? tabbable(container, getTabbableOptions()) : [];\n });\n const getTabbableElements = useEffectEvent(container => {\n const content = getTabbableContent(container);\n return orderRef.current.map(type => {\n if (domReference && type === 'reference') {\n return domReference;\n }\n if (floatingFocusElement && type === 'floating') {\n return floatingFocusElement;\n }\n return content;\n }).filter(Boolean).flat();\n });\n React.useEffect(() => {\n if (disabled) return;\n if (!modal) return;\n function onKeyDown(event) {\n if (event.key === 'Tab') {\n // The focus guards have nothing to focus, so we need to stop the event.\n if (contains$1(floatingFocusElement, activeElement(getDocument$1(floatingFocusElement))) && getTabbableContent().length === 0 && !isUntrappedTypeableCombobox) {\n stopEvent(event);\n }\n const els = getTabbableElements();\n const target = getTarget$1(event);\n if (orderRef.current[0] === 'reference' && target === domReference) {\n stopEvent(event);\n if (event.shiftKey) {\n enqueueFocus(els[els.length - 1]);\n } else {\n enqueueFocus(els[1]);\n }\n }\n if (orderRef.current[1] === 'floating' && target === floatingFocusElement && event.shiftKey) {\n stopEvent(event);\n enqueueFocus(els[0]);\n }\n }\n }\n const doc = getDocument$1(floatingFocusElement);\n doc.addEventListener('keydown', onKeyDown);\n return () => {\n doc.removeEventListener('keydown', onKeyDown);\n };\n }, [disabled, domReference, floatingFocusElement, modal, orderRef, isUntrappedTypeableCombobox, getTabbableContent, getTabbableElements]);\n React.useEffect(() => {\n if (disabled) return;\n if (!floating) return;\n function handleFocusIn(event) {\n const target = getTarget$1(event);\n const tabbableContent = getTabbableContent();\n const tabbableIndex = tabbableContent.indexOf(target);\n if (tabbableIndex !== -1) {\n tabbableIndexRef.current = tabbableIndex;\n }\n }\n floating.addEventListener('focusin', handleFocusIn);\n return () => {\n floating.removeEventListener('focusin', handleFocusIn);\n };\n }, [disabled, floating, getTabbableContent]);\n React.useEffect(() => {\n if (disabled) return;\n if (!closeOnFocusOut) return;\n\n // In Safari, buttons lose focus when pressing them.\n function handlePointerDown() {\n isPointerDownRef.current = true;\n setTimeout(() => {\n isPointerDownRef.current = false;\n });\n }\n function handleFocusOutside(event) {\n const relatedTarget = event.relatedTarget;\n const currentTarget = event.currentTarget;\n const target = getTarget$1(event);\n queueMicrotask(() => {\n const nodeId = getNodeId();\n const movedToUnrelatedNode = !(contains$1(domReference, relatedTarget) || contains$1(floating, relatedTarget) || contains$1(relatedTarget, floating) || contains$1(portalContext == null ? void 0 : portalContext.portalNode, relatedTarget) || relatedTarget != null && relatedTarget.hasAttribute(createAttribute('focus-guard')) || tree && (getNodeChildren$1(tree.nodesRef.current, nodeId).find(node => {\n var _node$context, _node$context2;\n return contains$1((_node$context = node.context) == null ? void 0 : _node$context.elements.floating, relatedTarget) || contains$1((_node$context2 = node.context) == null ? void 0 : _node$context2.elements.domReference, relatedTarget);\n }) || getNodeAncestors(tree.nodesRef.current, nodeId).find(node => {\n var _node$context3, _node$context4, _node$context5;\n return [(_node$context3 = node.context) == null ? void 0 : _node$context3.elements.floating, getFloatingFocusElement((_node$context4 = node.context) == null ? void 0 : _node$context4.elements.floating)].includes(relatedTarget) || ((_node$context5 = node.context) == null ? void 0 : _node$context5.elements.domReference) === relatedTarget;\n })));\n if (currentTarget === domReference && floatingFocusElement) {\n handleTabIndex(floatingFocusElement, orderRef);\n }\n\n // Restore focus to the previous tabbable element index to prevent\n // focus from being lost outside the floating tree.\n if (restoreFocus && currentTarget !== domReference && !(target != null && target.isConnected) && activeElement(getDocument$1(floatingFocusElement)) === getDocument$1(floatingFocusElement).body) {\n // Let `FloatingPortal` effect knows that focus is still inside the\n // floating tree.\n if (isHTMLElement(floatingFocusElement)) {\n floatingFocusElement.focus();\n }\n const prevTabbableIndex = tabbableIndexRef.current;\n const tabbableContent = getTabbableContent();\n const nodeToFocus = tabbableContent[prevTabbableIndex] || tabbableContent[tabbableContent.length - 1] || floatingFocusElement;\n if (isHTMLElement(nodeToFocus)) {\n nodeToFocus.focus();\n }\n }\n\n // https://github.com/floating-ui/floating-ui/issues/3060\n if (dataRef.current.insideReactTree) {\n dataRef.current.insideReactTree = false;\n return;\n }\n\n // Focus did not move inside the floating tree, and there are no tabbable\n // portal guards to handle closing.\n if ((isUntrappedTypeableCombobox ? true : !modal) && relatedTarget && movedToUnrelatedNode && !isPointerDownRef.current &&\n // Fix React 18 Strict Mode returnFocus due to double rendering.\n relatedTarget !== getPreviouslyFocusedElement()) {\n preventReturnFocusRef.current = true;\n onOpenChange(false, event, 'focus-out');\n }\n });\n }\n if (floating && isHTMLElement(domReference)) {\n domReference.addEventListener('focusout', handleFocusOutside);\n domReference.addEventListener('pointerdown', handlePointerDown);\n floating.addEventListener('focusout', handleFocusOutside);\n return () => {\n domReference.removeEventListener('focusout', handleFocusOutside);\n domReference.removeEventListener('pointerdown', handlePointerDown);\n floating.removeEventListener('focusout', handleFocusOutside);\n };\n }\n }, [disabled, domReference, floating, floatingFocusElement, modal, tree, portalContext, onOpenChange, closeOnFocusOut, restoreFocus, getTabbableContent, isUntrappedTypeableCombobox, getNodeId, orderRef, dataRef]);\n const beforeGuardRef = React.useRef(null);\n const afterGuardRef = React.useRef(null);\n const mergedBeforeGuardRef = useLiteMergeRefs([beforeGuardRef, portalContext == null ? void 0 : portalContext.beforeInsideRef]);\n const mergedAfterGuardRef = useLiteMergeRefs([afterGuardRef, portalContext == null ? void 0 : portalContext.afterInsideRef]);\n React.useEffect(() => {\n var _portalContext$portal, _ancestors$find;\n if (disabled) return;\n if (!floating) return;\n\n // Don't hide portals nested within the parent portal.\n const portalNodes = Array.from((portalContext == null || (_portalContext$portal = portalContext.portalNode) == null ? void 0 : _portalContext$portal.querySelectorAll(\"[\" + createAttribute('portal') + \"]\")) || []);\n const ancestors = tree ? getNodeAncestors(tree.nodesRef.current, getNodeId()) : [];\n const ancestorFloatingNodes = tree && !modal ? ancestors.map(node => {\n var _node$context6;\n return (_node$context6 = node.context) == null ? void 0 : _node$context6.elements.floating;\n }) : [];\n const rootAncestorComboboxDomReference = (_ancestors$find = ancestors.find(node => {\n var _node$context7;\n return isTypeableCombobox(((_node$context7 = node.context) == null ? void 0 : _node$context7.elements.domReference) || null);\n })) == null || (_ancestors$find = _ancestors$find.context) == null ? void 0 : _ancestors$find.elements.domReference;\n const insideElements = [floating, rootAncestorComboboxDomReference, ...portalNodes, ...ancestorFloatingNodes, ...getInsideElements(), startDismissButtonRef.current, endDismissButtonRef.current, beforeGuardRef.current, afterGuardRef.current, portalContext == null ? void 0 : portalContext.beforeOutsideRef.current, portalContext == null ? void 0 : portalContext.afterOutsideRef.current, orderRef.current.includes('reference') || isUntrappedTypeableCombobox ? domReference : null].filter(x => x != null);\n const cleanup = modal || isUntrappedTypeableCombobox ? markOthers(insideElements, !useInert, useInert) : markOthers(insideElements);\n return () => {\n cleanup();\n };\n }, [disabled, domReference, floating, modal, orderRef, portalContext, isUntrappedTypeableCombobox, guards, useInert, tree, getNodeId, getInsideElements]);\n useModernLayoutEffect(() => {\n if (disabled || !isHTMLElement(floatingFocusElement)) return;\n const doc = getDocument$1(floatingFocusElement);\n const previouslyFocusedElement = activeElement(doc);\n\n // Wait for any layout effect state setters to execute to set `tabIndex`.\n queueMicrotask(() => {\n const focusableElements = getTabbableElements(floatingFocusElement);\n const initialFocusValue = initialFocusRef.current;\n const elToFocus = (typeof initialFocusValue === 'number' ? focusableElements[initialFocusValue] : initialFocusValue.current) || floatingFocusElement;\n const focusAlreadyInsideFloatingEl = contains$1(floatingFocusElement, previouslyFocusedElement);\n if (!ignoreInitialFocus && !focusAlreadyInsideFloatingEl && open) {\n enqueueFocus(elToFocus, {\n preventScroll: elToFocus === floatingFocusElement\n });\n }\n });\n }, [disabled, open, floatingFocusElement, ignoreInitialFocus, getTabbableElements, initialFocusRef]);\n useModernLayoutEffect(() => {\n if (disabled || !floatingFocusElement) return;\n const doc = getDocument$1(floatingFocusElement);\n const previouslyFocusedElement = activeElement(doc);\n addPreviouslyFocusedElement(previouslyFocusedElement);\n\n // Dismissing via outside press should always ignore `returnFocus` to\n // prevent unwanted scrolling.\n function onOpenChange(_ref) {\n let {\n reason,\n event,\n nested\n } = _ref;\n if (['hover', 'safe-polygon'].includes(reason) && event.type === 'mouseleave') {\n preventReturnFocusRef.current = true;\n }\n if (reason !== 'outside-press') return;\n if (nested) {\n preventReturnFocusRef.current = false;\n } else if (isVirtualClick(event) || isVirtualPointerEvent(event)) {\n preventReturnFocusRef.current = false;\n } else {\n let isPreventScrollSupported = false;\n document.createElement('div').focus({\n get preventScroll() {\n isPreventScrollSupported = true;\n return false;\n }\n });\n if (isPreventScrollSupported) {\n preventReturnFocusRef.current = false;\n } else {\n preventReturnFocusRef.current = true;\n }\n }\n }\n events.on('openchange', onOpenChange);\n const fallbackEl = doc.createElement('span');\n fallbackEl.setAttribute('tabindex', '-1');\n fallbackEl.setAttribute('aria-hidden', 'true');\n Object.assign(fallbackEl.style, HIDDEN_STYLES);\n if (isInsidePortal && domReference) {\n domReference.insertAdjacentElement('afterend', fallbackEl);\n }\n function getReturnElement() {\n if (typeof returnFocusRef.current === 'boolean') {\n const el = domReference || getPreviouslyFocusedElement();\n return el && el.isConnected ? el : fallbackEl;\n }\n return returnFocusRef.current.current || fallbackEl;\n }\n return () => {\n events.off('openchange', onOpenChange);\n const activeEl = activeElement(doc);\n const isFocusInsideFloatingTree = contains$1(floating, activeEl) || tree && getNodeChildren$1(tree.nodesRef.current, getNodeId()).some(node => {\n var _node$context8;\n return contains$1((_node$context8 = node.context) == null ? void 0 : _node$context8.elements.floating, activeEl);\n });\n const returnElement = getReturnElement();\n queueMicrotask(() => {\n // This is `returnElement`, if it's tabbable, or its first tabbable child.\n const tabbableReturnElement = getFirstTabbableElement(returnElement);\n if (\n // eslint-disable-next-line react-hooks/exhaustive-deps\n returnFocusRef.current && !preventReturnFocusRef.current && isHTMLElement(tabbableReturnElement) && (\n // If the focus moved somewhere else after mount, avoid returning focus\n // since it likely entered a different element which should be\n // respected: https://github.com/floating-ui/floating-ui/issues/2607\n tabbableReturnElement !== activeEl && activeEl !== doc.body ? isFocusInsideFloatingTree : true)) {\n tabbableReturnElement.focus({\n preventScroll: true\n });\n }\n fallbackEl.remove();\n });\n };\n }, [disabled, floating, floatingFocusElement, returnFocusRef, dataRef, events, tree, isInsidePortal, domReference, getNodeId]);\n React.useEffect(() => {\n // The `returnFocus` cleanup behavior is inside a microtask; ensure we\n // wait for it to complete before resetting the flag.\n queueMicrotask(() => {\n preventReturnFocusRef.current = false;\n });\n }, [disabled]);\n\n // Synchronize the `context` & `modal` value to the FloatingPortal context.\n // It will decide whether or not it needs to render its own guards.\n useModernLayoutEffect(() => {\n if (disabled) return;\n if (!portalContext) return;\n portalContext.setFocusManagerState({\n modal,\n closeOnFocusOut,\n open,\n onOpenChange,\n domReference\n });\n return () => {\n portalContext.setFocusManagerState(null);\n };\n }, [disabled, portalContext, modal, open, onOpenChange, closeOnFocusOut, domReference]);\n useModernLayoutEffect(() => {\n if (disabled) return;\n if (!floatingFocusElement) return;\n handleTabIndex(floatingFocusElement, orderRef);\n }, [disabled, floatingFocusElement, orderRef]);\n function renderDismissButton(location) {\n if (disabled || !visuallyHiddenDismiss || !modal) {\n return null;\n }\n return /*#__PURE__*/jsx(VisuallyHiddenDismiss, {\n ref: location === 'start' ? startDismissButtonRef : endDismissButtonRef,\n onClick: event => onOpenChange(false, event.nativeEvent),\n children: typeof visuallyHiddenDismiss === 'string' ? visuallyHiddenDismiss : 'Dismiss'\n });\n }\n const shouldRenderGuards = !disabled && guards && (modal ? !isUntrappedTypeableCombobox : true) && (isInsidePortal || modal);\n return /*#__PURE__*/jsxs(Fragment, {\n children: [shouldRenderGuards && /*#__PURE__*/jsx(FocusGuard, {\n \"data-type\": \"inside\",\n ref: mergedBeforeGuardRef,\n onFocus: event => {\n if (modal) {\n const els = getTabbableElements();\n enqueueFocus(order[0] === 'reference' ? els[0] : els[els.length - 1]);\n } else if (portalContext != null && portalContext.preserveTabOrder && portalContext.portalNode) {\n preventReturnFocusRef.current = false;\n if (isOutsideEvent(event, portalContext.portalNode)) {\n const nextTabbable = getNextTabbable(domReference);\n nextTabbable == null || nextTabbable.focus();\n } else {\n var _portalContext$before;\n (_portalContext$before = portalContext.beforeOutsideRef.current) == null || _portalContext$before.focus();\n }\n }\n }\n }), !isUntrappedTypeableCombobox && renderDismissButton('start'), children, renderDismissButton('end'), shouldRenderGuards && /*#__PURE__*/jsx(FocusGuard, {\n \"data-type\": \"inside\",\n ref: mergedAfterGuardRef,\n onFocus: event => {\n if (modal) {\n enqueueFocus(getTabbableElements()[0]);\n } else if (portalContext != null && portalContext.preserveTabOrder && portalContext.portalNode) {\n if (closeOnFocusOut) {\n preventReturnFocusRef.current = true;\n }\n if (isOutsideEvent(event, portalContext.portalNode)) {\n const prevTabbable = getPreviousTabbable(domReference);\n prevTabbable == null || prevTabbable.focus();\n } else {\n var _portalContext$afterO;\n (_portalContext$afterO = portalContext.afterOutsideRef.current) == null || _portalContext$afterO.focus();\n }\n }\n }\n })]\n });\n}\n\nlet lockCount = 0;\nconst scrollbarProperty = '--floating-ui-scrollbar-width';\nfunction enableScrollLock() {\n const platform = getPlatform();\n const isIOS = /iP(hone|ad|od)|iOS/.test(platform) ||\n // iPads can claim to be MacIntel\n platform === 'MacIntel' && navigator.maxTouchPoints > 1;\n const bodyStyle = document.body.style;\n // RTL <body> scrollbar\n const scrollbarX = Math.round(document.documentElement.getBoundingClientRect().left) + document.documentElement.scrollLeft;\n const paddingProp = scrollbarX ? 'paddingLeft' : 'paddingRight';\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n const scrollX = bodyStyle.left ? parseFloat(bodyStyle.left) : window.scrollX;\n const scrollY = bodyStyle.top ? parseFloat(bodyStyle.top) : window.scrollY;\n bodyStyle.overflow = 'hidden';\n bodyStyle.setProperty(scrollbarProperty, scrollbarWidth + \"px\");\n if (scrollbarWidth) {\n bodyStyle[paddingProp] = scrollbarWidth + \"px\";\n }\n\n // Only iOS doesn't respect `overflow: hidden` on document.body, and this\n // technique has fewer side effects.\n if (isIOS) {\n var _window$visualViewpor, _window$visualViewpor2;\n // iOS 12 does not support `visualViewport`.\n const offsetLeft = ((_window$visualViewpor = window.visualViewport) == null ? void 0 : _window$visualViewpor.offsetLeft) || 0;\n const offsetTop = ((_window$visualViewpor2 = window.visualViewport) == null ? void 0 : _window$visualViewpor2.offsetTop) || 0;\n Object.assign(bodyStyle, {\n position: 'fixed',\n top: -(scrollY - Math.floor(offsetTop)) + \"px\",\n left: -(scrollX - Math.floor(offsetLeft)) + \"px\",\n right: '0'\n });\n }\n return () => {\n Object.assign(bodyStyle, {\n overflow: '',\n [paddingProp]: ''\n });\n bodyStyle.removeProperty(scrollbarProperty);\n if (isIOS) {\n Object.assign(bodyStyle, {\n position: '',\n top: '',\n left: '',\n right: ''\n });\n window.scrollTo(scrollX, scrollY);\n }\n };\n}\nlet cleanup = () => {};\n\n/**\n * Provides base styling for a fixed overlay element to dim content or block\n * pointer events behind a floating element.\n * It's a regular `<div>`, so it can be styled via any CSS solution you prefer.\n * @see https://floating-ui.com/docs/FloatingOverlay\n */\nconst FloatingOverlay = /*#__PURE__*/React.forwardRef(function FloatingOverlay(props, ref) {\n const {\n lockScroll = false,\n ...rest\n } = props;\n useModernLayoutEffect(() => {\n if (!lockScroll) return;\n lockCount++;\n if (lockCount === 1) {\n cleanup = enableScrollLock();\n }\n return () => {\n lockCount--;\n if (lockCount === 0) {\n cleanup();\n }\n };\n }, [lockScroll]);\n return /*#__PURE__*/jsx(\"div\", {\n ref: ref,\n ...rest,\n style: {\n position: 'fixed',\n overflow: 'auto',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...rest.style\n }\n });\n});\n\nfunction isButtonTarget(event) {\n return isHTMLElement(event.target) && event.target.tagName === 'BUTTON';\n}\nfunction isAnchorTarget(event) {\n return isHTMLElement(event.target) && event.target.tagName === 'A';\n}\nfunction isSpaceIgnored(element) {\n return isTypeableElement(element);\n}\n/**\n * Opens or closes the floating element when clicking the reference element.\n * @see https://floating-ui.com/docs/useClick\n */\nfunction useClick(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n onOpenChange,\n dataRef,\n elements: {\n domReference\n }\n } = context;\n const {\n enabled = true,\n event: eventOption = 'click',\n toggle = true,\n ignoreMouse = false,\n keyboardHandlers = true,\n stickIfOpen = true\n } = props;\n const pointerTypeRef = React.useRef();\n const didKeyDownRef = React.useRef(false);\n const reference = React.useMemo(() => ({\n onPointerDown(event) {\n pointerTypeRef.current = event.pointerType;\n },\n onMouseDown(event) {\n const pointerType = pointerTypeRef.current;\n\n // Ignore all buttons except for the \"main\" button.\n // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\n if (event.button !== 0) return;\n if (eventOption === 'click') return;\n if (isMouseLikePointerType(pointerType, true) && ignoreMouse) return;\n if (open && toggle && (dataRef.current.openEvent && stickIfOpen ? dataRef.current.openEvent.type === 'mousedown' : true)) {\n onOpenChange(false, event.nativeEvent, 'click');\n } else {\n // Prevent stealing focus from the floating element\n event.preventDefault();\n onOpenChange(true, event.nativeEvent, 'click');\n }\n },\n onClick(event) {\n const pointerType = pointerTypeRef.current;\n if (eventOption === 'mousedown' && pointerTypeRef.current) {\n pointerTypeRef.current = undefined;\n return;\n }\n if (isMouseLikePointerType(pointerType, true) && ignoreMouse) return;\n if (open && toggle && (dataRef.current.openEvent && stickIfOpen ? dataRef.current.openEvent.type === 'click' : true)) {\n onOpenChange(false, event.nativeEvent, 'click');\n } else {\n onOpenChange(true, event.nativeEvent, 'click');\n }\n },\n onKeyDown(event) {\n pointerTypeRef.current = undefined;\n if (event.defaultPrevented || !keyboardHandlers || isButtonTarget(event)) {\n return;\n }\n if (event.key === ' ' && !isSpaceIgnored(domReference)) {\n // Prevent scrolling\n event.preventDefault();\n didKeyDownRef.current = true;\n }\n if (isAnchorTarget(event)) {\n return;\n }\n if (event.key === 'Enter') {\n if (open && toggle) {\n onOpenChange(false, event.nativeEvent, 'click');\n } else {\n onOpenChange(true, event.nativeEvent, 'click');\n }\n }\n },\n onKeyUp(event) {\n if (event.defaultPrevented || !keyboardHandlers || isButtonTarget(event) || isSpaceIgnored(domReference)) {\n return;\n }\n if (event.key === ' ' && didKeyDownRef.current) {\n didKeyDownRef.current = false;\n if (open && toggle) {\n onOpenChange(false, event.nativeEvent, 'click');\n } else {\n onOpenChange(true, event.nativeEvent, 'click');\n }\n }\n }\n }), [dataRef, domReference, eventOption, ignoreMouse, keyboardHandlers, onOpenChange, open, stickIfOpen, toggle]);\n return React.useMemo(() => enabled ? {\n reference\n } : {}, [enabled, reference]);\n}\n\nfunction createVirtualElement(domElement, data) {\n let offsetX = null;\n let offsetY = null;\n let isAutoUpdateEvent = false;\n return {\n contextElement: domElement || undefined,\n getBoundingClientRect() {\n var _data$dataRef$current;\n const domRect = (domElement == null ? void 0 : domElement.getBoundingClientRect()) || {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n };\n const isXAxis = data.axis === 'x' || data.axis === 'both';\n const isYAxis = data.axis === 'y' || data.axis === 'both';\n const canTrackCursorOnAutoUpdate = ['mouseenter', 'mousemove'].includes(((_data$dataRef$current = data.dataRef.current.openEvent) == null ? void 0 : _data$dataRef$current.type) || '') && data.pointerType !== 'touch';\n let width = domRect.width;\n let height = domRect.height;\n let x = domRect.x;\n let y = domRect.y;\n if (offsetX == null && data.x && isXAxis) {\n offsetX = domRect.x - data.x;\n }\n if (offsetY == null && data.y && isYAxis) {\n offsetY = domRect.y - data.y;\n }\n x -= offsetX || 0;\n y -= offsetY || 0;\n width = 0;\n height = 0;\n if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) {\n width = data.axis === 'y' ? domRect.width : 0;\n height = data.axis === 'x' ? domRect.height : 0;\n x = isXAxis && data.x != null ? data.x : x;\n y = isYAxis && data.y != null ? data.y : y;\n } else if (isAutoUpdateEvent && !canTrackCursorOnAutoUpdate) {\n height = data.axis === 'x' ? domRect.height : height;\n width = data.axis === 'y' ? domRect.width : width;\n }\n isAutoUpdateEvent = true;\n return {\n width,\n height,\n x,\n y,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x\n };\n }\n };\n}\nfunction isMouseBasedEvent(event) {\n return event != null && event.clientX != null;\n}\n/**\n * Positions the floating element relative to a client point (in the viewport),\n * such as the mouse position. By default, it follows the mouse cursor.\n * @see https://floating-ui.com/docs/useClientPoint\n */\nfunction useClientPoint(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n dataRef,\n elements: {\n floating,\n domReference\n },\n refs\n } = context;\n const {\n enabled = true,\n axis = 'both',\n x = null,\n y = null\n } = props;\n const initialRef = React.useRef(false);\n const cleanupListenerRef = React.useRef(null);\n const [pointerType, setPointerType] = React.useState();\n const [reactive, setReactive] = React.useState([]);\n const setReference = useEffectEvent((x, y) => {\n if (initialRef.current) return;\n\n // Prevent setting if the open event was not a mouse-like one\n // (e.g. focus to open, then hover over the reference element).\n // Only apply if the event exists.\n if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) {\n return;\n }\n refs.setPositionReference(createVirtualElement(domReference, {\n x,\n y,\n axis,\n dataRef,\n pointerType\n }));\n });\n const handleReferenceEnterOrMove = useEffectEvent(event => {\n if (x != null || y != null) return;\n if (!open) {\n setReference(event.clientX, event.clientY);\n } else if (!cleanupListenerRef.current) {\n // If there's no cleanup, there's no listener, but we want to ensure\n // we add the listener if the cursor landed on the floating element and\n // then back on the reference (i.e. it's interactive).\n setReactive([]);\n }\n });\n\n // If the pointer is a mouse-like pointer, we want to continue following the\n // mouse even if the floating element is transitioning out. On touch\n // devices, this is undesirable because the floating element will move to\n // the dismissal touch point.\n const openCheck = isMouseLikePointerType(pointerType) ? floating : open;\n const addListener = React.useCallback(() => {\n // Explicitly specified `x`/`y` coordinates shouldn't add a listener.\n if (!openCheck || !enabled || x != null || y != null) return;\n const win = getWindow(floating);\n function handleMouseMove(event) {\n const target = getTarget$1(event);\n if (!contains$1(floating, target)) {\n setReference(event.clientX, event.clientY);\n } else {\n win.removeEventListener('mousemove', handleMouseMove);\n cleanupListenerRef.current = null;\n }\n }\n if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) {\n win.addEventListener('mousemove', handleMouseMove);\n const cleanup = () => {\n win.removeEventListener('mousemove', handleMouseMove);\n cleanupListenerRef.current = null;\n };\n cleanupListenerRef.current = cleanup;\n return cleanup;\n }\n refs.setPositionReference(domReference);\n }, [openCheck, enabled, x, y, floating, dataRef, refs, domReference, setReference]);\n React.useEffect(() => {\n return addListener();\n }, [addListener, reactive]);\n React.useEffect(() => {\n if (enabled && !floating) {\n initialRef.current = false;\n }\n }, [enabled, floating]);\n React.useEffect(() => {\n if (!enabled && open) {\n initialRef.current = true;\n }\n }, [enabled, open]);\n useModernLayoutEffect(() => {\n if (enabled && (x != null || y != null)) {\n initialRef.current = false;\n setReference(x, y);\n }\n }, [enabled, x, y, setReference]);\n const reference = React.useMemo(() => {\n function setPointerTypeRef(_ref) {\n let {\n pointerType\n } = _ref;\n setPointerType(pointerType);\n }\n return {\n onPointerDown: setPointerTypeRef,\n onPointerEnter: setPointerTypeRef,\n onMouseMove: handleReferenceEnterOrMove,\n onMouseEnter: handleReferenceEnterOrMove\n };\n }, [handleReferenceEnterOrMove]);\n return React.useMemo(() => enabled ? {\n reference\n } : {}, [enabled, reference]);\n}\n\nconst bubbleHandlerKeys = {\n pointerdown: 'onPointerDown',\n mousedown: 'onMouseDown',\n click: 'onClick'\n};\nconst captureHandlerKeys = {\n pointerdown: 'onPointerDownCapture',\n mousedown: 'onMouseDownCapture',\n click: 'onClickCapture'\n};\nconst normalizeProp = normalizable => {\n var _normalizable$escapeK, _normalizable$outside;\n return {\n escapeKey: typeof normalizable === 'boolean' ? normalizable : (_normalizable$escapeK = normalizable == null ? void 0 : normalizable.escapeKey) != null ? _normalizable$escapeK : false,\n outsidePress: typeof normalizable === 'boolean' ? normalizable : (_normalizable$outside = normalizable == null ? void 0 : normalizable.outsidePress) != null ? _normalizable$outside : true\n };\n};\n/**\n * Closes the floating element when a dismissal is requested — by default, when\n * the user presses the `escape` key or outside of the floating element.\n * @see https://floating-ui.com/docs/useDismiss\n */\nfunction useDismiss(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n onOpenChange,\n elements,\n dataRef\n } = context;\n const {\n enabled = true,\n escapeKey = true,\n outsidePress: unstable_outsidePress = true,\n outsidePressEvent = 'pointerdown',\n referencePress = false,\n referencePressEvent = 'pointerdown',\n ancestorScroll = false,\n bubbles,\n capture\n } = props;\n const tree = useFloatingTree();\n const outsidePressFn = useEffectEvent(typeof unstable_outsidePress === 'function' ? unstable_outsidePress : () => false);\n const outsidePress = typeof unstable_outsidePress === 'function' ? outsidePressFn : unstable_outsidePress;\n const endedOrStartedInsideRef = React.useRef(false);\n const {\n escapeKey: escapeKeyBubbles,\n outsidePress: outsidePressBubbles\n } = normalizeProp(bubbles);\n const {\n escapeKey: escapeKeyCapture,\n outsidePress: outsidePressCapture\n } = normalizeProp(capture);\n const isComposingRef = React.useRef(false);\n const blurTimeoutRef = React.useRef(-1);\n const closeOnEscapeKeyDown = useEffectEvent(event => {\n var _dataRef$current$floa;\n if (!open || !enabled || !escapeKey || event.key !== 'Escape') {\n return;\n }\n\n // Wait until IME is settled. Pressing `Escape` while composing should\n // close the compose menu, but not the floating element.\n if (isComposingRef.current) {\n return;\n }\n const nodeId = (_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.nodeId;\n const children = tree ? getNodeChildren$1(tree.nodesRef.current, nodeId) : [];\n if (!escapeKeyBubbles) {\n event.stopPropagation();\n if (children.length > 0) {\n let shouldDismiss = true;\n children.forEach(child => {\n var _child$context;\n if ((_child$context = child.context) != null && _child$context.open && !child.context.dataRef.current.__escapeKeyBubbles) {\n shouldDismiss = false;\n return;\n }\n });\n if (!shouldDismiss) {\n return;\n }\n }\n }\n onOpenChange(false, isReactEvent(event) ? event.nativeEvent : event, 'escape-key');\n });\n const closeOnEscapeKeyDownCapture = useEffectEvent(event => {\n var _getTarget2;\n const callback = () => {\n var _getTarget;\n closeOnEscapeKeyDown(event);\n (_getTarget = getTarget$1(event)) == null || _getTarget.removeEventListener('keydown', callback);\n };\n (_getTarget2 = getTarget$1(event)) == null || _getTarget2.addEventListener('keydown', callback);\n });\n const closeOnPressOutside = useEffectEvent(event => {\n var _dataRef$current$floa2;\n // Given developers can stop the propagation of the synthetic event,\n // we can only be confident with a positive value.\n const insideReactTree = dataRef.current.insideReactTree;\n dataRef.current.insideReactTree = false;\n\n // When click outside is lazy (`click` event), handle dragging.\n // Don't close if:\n // - The click started inside the floating element.\n // - The click ended inside the floating element.\n const endedOrStartedInside = endedOrStartedInsideRef.current;\n endedOrStartedInsideRef.current = false;\n if (outsidePressEvent === 'click' && endedOrStartedInside) {\n return;\n }\n if (insideReactTree) {\n return;\n }\n if (typeof outsidePress === 'function' && !outsidePress(event)) {\n return;\n }\n const target = getTarget$1(event);\n const inertSelector = \"[\" + createAttribute('inert') + \"]\";\n const markers = getDocument$1(elements.floating).querySelectorAll(inertSelector);\n let targetRootAncestor = isElement(target) ? target : null;\n while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) {\n const nextParent = getParentNode(targetRootAncestor);\n if (isLastTraversableNode(nextParent) || !isElement(nextParent)) {\n break;\n }\n targetRootAncestor = nextParent;\n }\n\n // Check if the click occurred on a third-party element injected after the\n // floating element rendered.\n if (markers.length && isElement(target) && !isRootElement(target) &&\n // Clicked on a direct ancestor (e.g. FloatingOverlay).\n !contains$1(target, elements.floating) &&\n // If the target root element contains none of the markers, then the\n // element was injected after the floating element rendered.\n Array.from(markers).every(marker => !contains$1(targetRootAncestor, marker))) {\n return;\n }\n\n // Check if the click occurred on the scrollbar\n if (isHTMLElement(target) && floating) {\n const lastTraversableNode = isLastTraversableNode(target);\n const style = getComputedStyle(target);\n const scrollRe = /auto|scroll/;\n const isScrollableX = lastTraversableNode || scrollRe.test(style.overflowX);\n const isScrollableY = lastTraversableNode || scrollRe.test(style.overflowY);\n const canScrollX = isScrollableX && target.clientWidth > 0 && target.scrollWidth > target.clientWidth;\n const canScrollY = isScrollableY && target.clientHeight > 0 && target.scrollHeight > target.clientHeight;\n const isRTL = style.direction === 'rtl';\n\n // Check click position relative to scrollbar.\n // In some browsers it is possible to change the <body> (or window)\n // scrollbar to the left side, but is very rare and is difficult to\n // check for. Plus, for modal dialogs with backdrops, it is more\n // important that the backdrop is checked but not so much the window.\n const pressedVerticalScrollbar = canScrollY && (isRTL ? event.offsetX <= target.offsetWidth - target.clientWidth : event.offsetX > target.clientWidth);\n const pressedHorizontalScrollbar = canScrollX && event.offsetY > target.clientHeight;\n if (pressedVerticalScrollbar || pressedHorizontalScrollbar) {\n return;\n }\n }\n const nodeId = (_dataRef$current$floa2 = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa2.nodeId;\n const targetIsInsideChildren = tree && getNodeChildren$1(tree.nodesRef.current, nodeId).some(node => {\n var _node$context;\n return isEventTargetWithin(event, (_node$context = node.context) == null ? void 0 : _node$context.elements.floating);\n });\n if (isEventTargetWithin(event, elements.floating) || isEventTargetWithin(event, elements.domReference) || targetIsInsideChildren) {\n return;\n }\n const children = tree ? getNodeChildren$1(tree.nodesRef.current, nodeId) : [];\n if (children.length > 0) {\n let shouldDismiss = true;\n children.forEach(child => {\n var _child$context2;\n if ((_child$context2 = child.context) != null && _child$context2.open && !child.context.dataRef.current.__outsidePressBubbles) {\n shouldDismiss = false;\n return;\n }\n });\n if (!shouldDismiss) {\n return;\n }\n }\n onOpenChange(false, event, 'outside-press');\n });\n const closeOnPressOutsideCapture = useEffectEvent(event => {\n var _getTarget4;\n const callback = () => {\n var _getTarget3;\n closeOnPressOutside(event);\n (_getTarget3 = getTarget$1(event)) == null || _getTarget3.removeEventListener(outsidePressEvent, callback);\n };\n (_getTarget4 = getTarget$1(event)) == null || _getTarget4.addEventListener(outsidePressEvent, callback);\n });\n React.useEffect(() => {\n if (!open || !enabled) {\n return;\n }\n dataRef.current.__escapeKeyBubbles = escapeKeyBubbles;\n dataRef.current.__outsidePressBubbles = outsidePressBubbles;\n let compositionTimeout = -1;\n function onScroll(event) {\n onOpenChange(false, event, 'ancestor-scroll');\n }\n function handleCompositionStart() {\n window.clearTimeout(compositionTimeout);\n isComposingRef.current = true;\n }\n function handleCompositionEnd() {\n // Safari fires `compositionend` before `keydown`, so we need to wait\n // until the next tick to set `isComposing` to `false`.\n // https://bugs.webkit.org/show_bug.cgi?id=165004\n compositionTimeout = window.setTimeout(() => {\n isComposingRef.current = false;\n },\n // 0ms or 1ms don't work in Safari. 5ms appears to consistently work.\n // Only apply to WebKit for the test to remain 0ms.\n isWebKit() ? 5 : 0);\n }\n const doc = getDocument$1(elements.floating);\n if (escapeKey) {\n doc.addEventListener('keydown', escapeKeyCapture ? closeOnEscapeKeyDownCapture : closeOnEscapeKeyDown, escapeKeyCapture);\n doc.addEventListener('compositionstart', handleCompositionStart);\n doc.addEventListener('compositionend', handleCompositionEnd);\n }\n outsidePress && doc.addEventListener(outsidePressEvent, outsidePressCapture ? closeOnPressOutsideCapture : closeOnPressOutside, outsidePressCapture);\n let ancestors = [];\n if (ancestorScroll) {\n if (isElement(elements.domReference)) {\n ancestors = getOverflowAncestors(elements.domReference);\n }\n if (isElement(elements.floating)) {\n ancestors = ancestors.concat(getOverflowAncestors(elements.floating));\n }\n if (!isElement(elements.reference) && elements.reference && elements.reference.contextElement) {\n ancestors = ancestors.concat(getOverflowAncestors(elements.reference.contextElement));\n }\n }\n\n // Ignore the visual viewport for scrolling dismissal (allow pinch-zoom)\n ancestors = ancestors.filter(ancestor => {\n var _doc$defaultView;\n return ancestor !== ((_doc$defaultView = doc.defaultView) == null ? void 0 : _doc$defaultView.visualViewport);\n });\n ancestors.forEach(ancestor => {\n ancestor.addEventListener('scroll', onScroll, {\n passive: true\n });\n });\n return () => {\n if (escapeKey) {\n doc.removeEventListener('keydown', escapeKeyCapture ? closeOnEscapeKeyDownCapture : closeOnEscapeKeyDown, escapeKeyCapture);\n doc.removeEventListener('compositionstart', handleCompositionStart);\n doc.removeEventListener('compositionend', handleCompositionEnd);\n }\n outsidePress && doc.removeEventListener(outsidePressEvent, outsidePressCapture ? closeOnPressOutsideCapture : closeOnPressOutside, outsidePressCapture);\n ancestors.forEach(ancestor => {\n ancestor.removeEventListener('scroll', onScroll);\n });\n window.clearTimeout(compositionTimeout);\n };\n }, [dataRef, elements, escapeKey, outsidePress, outsidePressEvent, open, onOpenChange, ancestorScroll, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, escapeKeyCapture, closeOnEscapeKeyDownCapture, closeOnPressOutside, outsidePressCapture, closeOnPressOutsideCapture]);\n React.useEffect(() => {\n dataRef.current.insideReactTree = false;\n }, [dataRef, outsidePress, outsidePressEvent]);\n const reference = React.useMemo(() => ({\n onKeyDown: closeOnEscapeKeyDown,\n ...(referencePress && {\n [bubbleHandlerKeys[referencePressEvent]]: event => {\n onOpenChange(false, event.nativeEvent, 'reference-press');\n },\n ...(referencePressEvent !== 'click' && {\n onClick(event) {\n onOpenChange(false, event.nativeEvent, 'reference-press');\n }\n })\n })\n }), [closeOnEscapeKeyDown, onOpenChange, referencePress, referencePressEvent]);\n const floating = React.useMemo(() => ({\n onKeyDown: closeOnEscapeKeyDown,\n onMouseDown() {\n endedOrStartedInsideRef.current = true;\n },\n onMouseUp() {\n endedOrStartedInsideRef.current = true;\n },\n [captureHandlerKeys[outsidePressEvent]]: () => {\n dataRef.current.insideReactTree = true;\n },\n onBlurCapture() {\n if (tree) return;\n clearTimeoutIfSet(blurTimeoutRef);\n dataRef.current.insideReactTree = true;\n blurTimeoutRef.current = window.setTimeout(() => {\n dataRef.current.insideReactTree = false;\n });\n }\n }), [closeOnEscapeKeyDown, outsidePressEvent, dataRef, tree]);\n return React.useMemo(() => enabled ? {\n reference,\n floating\n } : {}, [enabled, reference, floating]);\n}\n\nfunction useFloatingRootContext(options) {\n const {\n open = false,\n onOpenChange: onOpenChangeProp,\n elements: elementsProp\n } = options;\n const floatingId = useId();\n const dataRef = React.useRef({});\n const [events] = React.useState(() => createEventEmitter());\n const nested = useFloatingParentNodeId() != null;\n if (process.env.NODE_ENV !== \"production\") {\n const optionDomReference = elementsProp.reference;\n if (optionDomReference && !isElement(optionDomReference)) {\n error('Cannot pass a virtual element to the `elements.reference` option,', 'as it must be a real DOM element. Use `refs.setPositionReference()`', 'instead.');\n }\n }\n const [positionReference, setPositionReference] = React.useState(elementsProp.reference);\n const onOpenChange = useEffectEvent((open, event, reason) => {\n dataRef.current.openEvent = open ? event : undefined;\n events.emit('openchange', {\n open,\n event,\n reason,\n nested\n });\n onOpenChangeProp == null || onOpenChangeProp(open, event, reason);\n });\n const refs = React.useMemo(() => ({\n setPositionReference\n }), []);\n const elements = React.useMemo(() => ({\n reference: positionReference || elementsProp.reference || null,\n floating: elementsProp.floating || null,\n domReference: elementsProp.reference\n }), [positionReference, elementsProp.reference, elementsProp.floating]);\n return React.useMemo(() => ({\n dataRef,\n open,\n onOpenChange,\n elements,\n events,\n floatingId,\n refs\n }), [open, onOpenChange, elements, events, floatingId, refs]);\n}\n\n/**\n * Provides data to position a floating element and context to add interactions.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n nodeId\n } = options;\n const internalRootContext = useFloatingRootContext({\n ...options,\n elements: {\n reference: null,\n floating: null,\n ...options.elements\n }\n });\n const rootContext = options.rootContext || internalRootContext;\n const computedElements = rootContext.elements;\n const [_domReference, setDomReference] = React.useState(null);\n const [positionReference, _setPositionReference] = React.useState(null);\n const optionDomReference = computedElements == null ? void 0 : computedElements.domReference;\n const domReference = optionDomReference || _domReference;\n const domReferenceRef = React.useRef(null);\n const tree = useFloatingTree();\n useModernLayoutEffect(() => {\n if (domReference) {\n domReferenceRef.current = domReference;\n }\n }, [domReference]);\n const position = useFloating$1({\n ...options,\n elements: {\n ...computedElements,\n ...(positionReference && {\n reference: positionReference\n })\n }\n });\n const setPositionReference = React.useCallback(node => {\n const computedPositionReference = isElement(node) ? {\n getBoundingClientRect: () => node.getBoundingClientRect(),\n getClientRects: () => node.getClientRects(),\n contextElement: node\n } : node;\n // Store the positionReference in state if the DOM reference is specified externally via the\n // `elements.reference` option. This ensures that it won't be overridden on future renders.\n _setPositionReference(computedPositionReference);\n position.refs.setReference(computedPositionReference);\n }, [position.refs]);\n const setReference = React.useCallback(node => {\n if (isElement(node) || node === null) {\n domReferenceRef.current = node;\n setDomReference(node);\n }\n\n // Backwards-compatibility for passing a virtual element to `reference`\n // after it has set the DOM reference.\n if (isElement(position.refs.reference.current) || position.refs.reference.current === null ||\n // Don't allow setting virtual elements using the old technique back to\n // `null` to support `positionReference` + an unstable `reference`\n // callback ref.\n node !== null && !isElement(node)) {\n position.refs.setReference(node);\n }\n }, [position.refs]);\n const refs = React.useMemo(() => ({\n ...position.refs,\n setReference,\n setPositionReference,\n domReference: domReferenceRef\n }), [position.refs, setReference, setPositionReference]);\n const elements = React.useMemo(() => ({\n ...position.elements,\n domReference: domReference\n }), [position.elements, domReference]);\n const context = React.useMemo(() => ({\n ...position,\n ...rootContext,\n refs,\n elements,\n nodeId\n }), [position, refs, elements, nodeId, rootContext]);\n useModernLayoutEffect(() => {\n rootContext.dataRef.current.floatingContext = context;\n const node = tree == null ? void 0 : tree.nodesRef.current.find(node => node.id === nodeId);\n if (node) {\n node.context = context;\n }\n });\n return React.useMemo(() => ({\n ...position,\n context,\n refs,\n elements\n }), [position, refs, elements, context]);\n}\n\nfunction isMacSafari() {\n return isMac() && isSafari();\n}\n/**\n * Opens the floating element while the reference element has focus, like CSS\n * `:focus`.\n * @see https://floating-ui.com/docs/useFocus\n */\nfunction useFocus(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n onOpenChange,\n events,\n dataRef,\n elements\n } = context;\n const {\n enabled = true,\n visibleOnly = true\n } = props;\n const blockFocusRef = React.useRef(false);\n const timeoutRef = React.useRef(-1);\n const keyboardModalityRef = React.useRef(true);\n React.useEffect(() => {\n if (!enabled) return;\n const win = getWindow(elements.domReference);\n\n // If the reference was focused and the user left the tab/window, and the\n // floating element was not open, the focus should be blocked when they\n // return to the tab/window.\n function onBlur() {\n if (!open && isHTMLElement(elements.domReference) && elements.domReference === activeElement(getDocument$1(elements.domReference))) {\n blockFocusRef.current = true;\n }\n }\n function onKeyDown() {\n keyboardModalityRef.current = true;\n }\n function onPointerDown() {\n keyboardModalityRef.current = false;\n }\n win.addEventListener('blur', onBlur);\n if (isMacSafari()) {\n win.addEventListener('keydown', onKeyDown, true);\n win.addEventListener('pointerdown', onPointerDown, true);\n }\n return () => {\n win.removeEventListener('blur', onBlur);\n if (isMacSafari()) {\n win.removeEventListener('keydown', onKeyDown, true);\n win.removeEventListener('pointerdown', onPointerDown, true);\n }\n };\n }, [elements.domReference, open, enabled]);\n React.useEffect(() => {\n if (!enabled) return;\n function onOpenChange(_ref) {\n let {\n reason\n } = _ref;\n if (reason === 'reference-press' || reason === 'escape-key') {\n blockFocusRef.current = true;\n }\n }\n events.on('openchange', onOpenChange);\n return () => {\n events.off('openchange', onOpenChange);\n };\n }, [events, enabled]);\n React.useEffect(() => {\n return () => {\n clearTimeoutIfSet(timeoutRef);\n };\n }, []);\n const reference = React.useMemo(() => ({\n onMouseLeave() {\n blockFocusRef.current = false;\n },\n onFocus(event) {\n if (blockFocusRef.current) return;\n const target = getTarget$1(event.nativeEvent);\n if (visibleOnly && isElement(target)) {\n // Safari fails to match `:focus-visible` if focus was initially\n // outside the document.\n if (isMacSafari() && !event.relatedTarget) {\n if (!keyboardModalityRef.current && !isTypeableElement(target)) {\n return;\n }\n } else if (!matchesFocusVisible(target)) {\n return;\n }\n }\n onOpenChange(true, event.nativeEvent, 'focus');\n },\n onBlur(event) {\n blockFocusRef.current = false;\n const relatedTarget = event.relatedTarget;\n const nativeEvent = event.nativeEvent;\n\n // Hit the non-modal focus management portal guard. Focus will be\n // moved into the floating element immediately after.\n const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute('focus-guard')) && relatedTarget.getAttribute('data-type') === 'outside';\n\n // Wait for the window blur listener to fire.\n timeoutRef.current = window.setTimeout(() => {\n var _dataRef$current$floa;\n const activeEl = activeElement(elements.domReference ? elements.domReference.ownerDocument : document);\n\n // Focus left the page, keep it open.\n if (!relatedTarget && activeEl === elements.domReference) return;\n\n // When focusing the reference element (e.g. regular click), then\n // clicking into the floating element, prevent it from hiding.\n // Note: it must be focusable, e.g. `tabindex=\"-1\"`.\n // We can not rely on relatedTarget to point to the correct element\n // as it will only point to the shadow host of the newly focused element\n // and not the element that actually has received focus if it is located\n // inside a shadow root.\n if (contains$1((_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.refs.floating.current, activeEl) || contains$1(elements.domReference, activeEl) || movedToFocusGuard) {\n return;\n }\n onOpenChange(false, nativeEvent, 'focus');\n });\n }\n }), [dataRef, elements.domReference, onOpenChange, visibleOnly]);\n return React.useMemo(() => enabled ? {\n reference\n } : {}, [enabled, reference]);\n}\n\nfunction mergeProps(userProps, propsList, elementKey) {\n const map = new Map();\n const isItem = elementKey === 'item';\n let domUserProps = userProps;\n if (isItem && userProps) {\n const {\n [ACTIVE_KEY]: _,\n [SELECTED_KEY]: __,\n ...validProps\n } = userProps;\n domUserProps = validProps;\n }\n return {\n ...(elementKey === 'floating' && {\n tabIndex: -1,\n [FOCUSABLE_ATTRIBUTE]: ''\n }),\n ...domUserProps,\n ...propsList.map(value => {\n const propsOrGetProps = value ? value[elementKey] : null;\n if (typeof propsOrGetProps === 'function') {\n return userProps ? propsOrGetProps(userProps) : null;\n }\n return propsOrGetProps;\n }).concat(userProps).reduce((acc, props) => {\n if (!props) {\n return acc;\n }\n Object.entries(props).forEach(_ref => {\n let [key, value] = _ref;\n if (isItem && [ACTIVE_KEY, SELECTED_KEY].includes(key)) {\n return;\n }\n if (key.indexOf('on') === 0) {\n if (!map.has(key)) {\n map.set(key, []);\n }\n if (typeof value === 'function') {\n var _map$get;\n (_map$get = map.get(key)) == null || _map$get.push(value);\n acc[key] = function () {\n var _map$get2;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return (_map$get2 = map.get(key)) == null ? void 0 : _map$get2.map(fn => fn(...args)).find(val => val !== undefined);\n };\n }\n } else {\n acc[key] = value;\n }\n });\n return acc;\n }, {})\n };\n}\n/**\n * Merges an array of interaction hooks' props into prop getters, allowing\n * event handler functions to be composed together without overwriting one\n * another.\n * @see https://floating-ui.com/docs/useInteractions\n */\nfunction useInteractions(propsList) {\n if (propsList === void 0) {\n propsList = [];\n }\n const referenceDeps = propsList.map(key => key == null ? void 0 : key.reference);\n const floatingDeps = propsList.map(key => key == null ? void 0 : key.floating);\n const itemDeps = propsList.map(key => key == null ? void 0 : key.item);\n const getReferenceProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'reference'),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n referenceDeps);\n const getFloatingProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'floating'),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n floatingDeps);\n const getItemProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'item'),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n itemDeps);\n return React.useMemo(() => ({\n getReferenceProps,\n getFloatingProps,\n getItemProps\n }), [getReferenceProps, getFloatingProps, getItemProps]);\n}\n\nconst ESCAPE = 'Escape';\nfunction doSwitch(orientation, vertical, horizontal) {\n switch (orientation) {\n case 'vertical':\n return vertical;\n case 'horizontal':\n return horizontal;\n default:\n return vertical || horizontal;\n }\n}\nfunction isMainOrientationKey(key, orientation) {\n const vertical = key === ARROW_UP || key === ARROW_DOWN;\n const horizontal = key === ARROW_LEFT || key === ARROW_RIGHT;\n return doSwitch(orientation, vertical, horizontal);\n}\nfunction isMainOrientationToEndKey(key, orientation, rtl) {\n const vertical = key === ARROW_DOWN;\n const horizontal = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n return doSwitch(orientation, vertical, horizontal) || key === 'Enter' || key === ' ' || key === '';\n}\nfunction isCrossOrientationOpenKey(key, orientation, rtl) {\n const vertical = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n const horizontal = key === ARROW_DOWN;\n return doSwitch(orientation, vertical, horizontal);\n}\nfunction isCrossOrientationCloseKey(key, orientation, rtl, cols) {\n const vertical = rtl ? key === ARROW_RIGHT : key === ARROW_LEFT;\n const horizontal = key === ARROW_UP;\n if (orientation === 'both' || orientation === 'horizontal' && cols && cols > 1) {\n return key === ESCAPE;\n }\n return doSwitch(orientation, vertical, horizontal);\n}\n/**\n * Adds arrow key-based navigation of a list of items, either using real DOM\n * focus or virtual focus.\n * @see https://floating-ui.com/docs/useListNavigation\n */\nfunction useListNavigation(context, props) {\n const {\n open,\n onOpenChange,\n elements,\n floatingId\n } = context;\n const {\n listRef,\n activeIndex,\n onNavigate: unstable_onNavigate = () => {},\n enabled = true,\n selectedIndex = null,\n allowEscape = false,\n loop = false,\n nested = false,\n rtl = false,\n virtual = false,\n focusItemOnOpen = 'auto',\n focusItemOnHover = true,\n openOnArrowKeyDown = true,\n disabledIndices = undefined,\n orientation = 'vertical',\n parentOrientation,\n cols = 1,\n scrollItemIntoView = true,\n virtualItemRef,\n itemSizes,\n dense = false\n } = props;\n if (process.env.NODE_ENV !== \"production\") {\n if (allowEscape) {\n if (!loop) {\n warn('`useListNavigation` looping must be enabled to allow escaping.');\n }\n if (!virtual) {\n warn('`useListNavigation` must be virtual to allow escaping.');\n }\n }\n if (orientation === 'vertical' && cols > 1) {\n warn('In grid list navigation mode (`cols` > 1), the `orientation` should', 'be either \"horizontal\" or \"both\".');\n }\n }\n const floatingFocusElement = getFloatingFocusElement(elements.floating);\n const floatingFocusElementRef = useLatestRef(floatingFocusElement);\n const parentId = useFloatingParentNodeId();\n const tree = useFloatingTree();\n useModernLayoutEffect(() => {\n context.dataRef.current.orientation = orientation;\n }, [context, orientation]);\n const onNavigate = useEffectEvent(() => {\n unstable_onNavigate(indexRef.current === -1 ? null : indexRef.current);\n });\n const typeableComboboxReference = isTypeableCombobox(elements.domReference);\n const focusItemOnOpenRef = React.useRef(focusItemOnOpen);\n const indexRef = React.useRef(selectedIndex != null ? selectedIndex : -1);\n const keyRef = React.useRef(null);\n const isPointerModalityRef = React.useRef(true);\n const previousOnNavigateRef = React.useRef(onNavigate);\n const previousMountedRef = React.useRef(!!elements.floating);\n const previousOpenRef = React.useRef(open);\n const forceSyncFocusRef = React.useRef(false);\n const forceScrollIntoViewRef = React.useRef(false);\n const disabledIndicesRef = useLatestRef(disabledIndices);\n const latestOpenRef = useLatestRef(open);\n const scrollItemIntoViewRef = useLatestRef(scrollItemIntoView);\n const selectedIndexRef = useLatestRef(selectedIndex);\n const [activeId, setActiveId] = React.useState();\n const [virtualId, setVirtualId] = React.useState();\n const focusItem = useEffectEvent(() => {\n function runFocus(item) {\n if (virtual) {\n var _item$id;\n if ((_item$id = item.id) != null && _item$id.endsWith('-fui-option')) {\n item.id = floatingId + \"-\" + Math.random().toString(16).slice(2, 10);\n }\n setActiveId(item.id);\n tree == null || tree.events.emit('virtualfocus', item);\n if (virtualItemRef) {\n virtualItemRef.current = item;\n }\n } else {\n enqueueFocus(item, {\n sync: forceSyncFocusRef.current,\n preventScroll: true\n });\n }\n }\n const initialItem = listRef.current[indexRef.current];\n const forceScrollIntoView = forceScrollIntoViewRef.current;\n if (initialItem) {\n runFocus(initialItem);\n }\n const scheduler = forceSyncFocusRef.current ? v => v() : requestAnimationFrame;\n scheduler(() => {\n const waitedItem = listRef.current[indexRef.current] || initialItem;\n if (!waitedItem) return;\n if (!initialItem) {\n runFocus(waitedItem);\n }\n const scrollIntoViewOptions = scrollItemIntoViewRef.current;\n const shouldScrollIntoView = scrollIntoViewOptions && item && (forceScrollIntoView || !isPointerModalityRef.current);\n if (shouldScrollIntoView) {\n // JSDOM doesn't support `.scrollIntoView()` but it's widely supported\n // by all browsers.\n waitedItem.scrollIntoView == null || waitedItem.scrollIntoView(typeof scrollIntoViewOptions === 'boolean' ? {\n block: 'nearest',\n inline: 'nearest'\n } : scrollIntoViewOptions);\n }\n });\n });\n\n // Sync `selectedIndex` to be the `activeIndex` upon opening the floating\n // element. Also, reset `activeIndex` upon closing the floating element.\n useModernLayoutEffect(() => {\n if (!enabled) return;\n if (open && elements.floating) {\n if (focusItemOnOpenRef.current && selectedIndex != null) {\n // Regardless of the pointer modality, we want to ensure the selected\n // item comes into view when the floating element is opened.\n forceScrollIntoViewRef.current = true;\n indexRef.current = selectedIndex;\n onNavigate();\n }\n } else if (previousMountedRef.current) {\n // Since the user can specify `onNavigate` conditionally\n // (onNavigate: open ? setActiveIndex : setSelectedIndex),\n // we store and call the previous function.\n indexRef.current = -1;\n previousOnNavigateRef.current();\n }\n }, [enabled, open, elements.floating, selectedIndex, onNavigate]);\n\n // Sync `activeIndex` to be the focused item while the floating element is\n // open.\n useModernLayoutEffect(() => {\n if (!enabled) return;\n if (!open) return;\n if (!elements.floating) return;\n if (activeIndex == null) {\n forceSyncFocusRef.current = false;\n if (selectedIndexRef.current != null) {\n return;\n }\n\n // Reset while the floating element was open (e.g. the list changed).\n if (previousMountedRef.current) {\n indexRef.current = -1;\n focusItem();\n }\n\n // Initial sync.\n if ((!previousOpenRef.current || !previousMountedRef.current) && focusItemOnOpenRef.current && (keyRef.current != null || focusItemOnOpenRef.current === true && keyRef.current == null)) {\n let runs = 0;\n const waitForListPopulated = () => {\n if (listRef.current[0] == null) {\n // Avoid letting the browser paint if possible on the first try,\n // otherwise use rAF. Don't try more than twice, since something\n // is wrong otherwise.\n if (runs < 2) {\n const scheduler = runs ? requestAnimationFrame : queueMicrotask;\n scheduler(waitForListPopulated);\n }\n runs++;\n } else {\n indexRef.current = keyRef.current == null || isMainOrientationToEndKey(keyRef.current, orientation, rtl) || nested ? getMinListIndex(listRef, disabledIndicesRef.current) : getMaxListIndex(listRef, disabledIndicesRef.current);\n keyRef.current = null;\n onNavigate();\n }\n };\n waitForListPopulated();\n }\n } else if (!isIndexOutOfListBounds(listRef, activeIndex)) {\n indexRef.current = activeIndex;\n focusItem();\n forceScrollIntoViewRef.current = false;\n }\n }, [enabled, open, elements.floating, activeIndex, selectedIndexRef, nested, listRef, orientation, rtl, onNavigate, focusItem, disabledIndicesRef]);\n\n // Ensure the parent floating element has focus when a nested child closes\n // to allow arrow key navigation to work after the pointer leaves the child.\n useModernLayoutEffect(() => {\n var _nodes$find;\n if (!enabled || elements.floating || !tree || virtual || !previousMountedRef.current) {\n return;\n }\n const nodes = tree.nodesRef.current;\n const parent = (_nodes$find = nodes.find(node => node.id === parentId)) == null || (_nodes$find = _nodes$find.context) == null ? void 0 : _nodes$find.elements.floating;\n const activeEl = activeElement(getDocument$1(elements.floating));\n const treeContainsActiveEl = nodes.some(node => node.context && contains$1(node.context.elements.floating, activeEl));\n if (parent && !treeContainsActiveEl && isPointerModalityRef.current) {\n parent.focus({\n preventScroll: true\n });\n }\n }, [enabled, elements.floating, tree, parentId, virtual]);\n useModernLayoutEffect(() => {\n if (!enabled) return;\n if (!tree) return;\n if (!virtual) return;\n if (parentId) return;\n function handleVirtualFocus(item) {\n setVirtualId(item.id);\n if (virtualItemRef) {\n virtualItemRef.current = item;\n }\n }\n tree.events.on('virtualfocus', handleVirtualFocus);\n return () => {\n tree.events.off('virtualfocus', handleVirtualFocus);\n };\n }, [enabled, tree, virtual, parentId, virtualItemRef]);\n useModernLayoutEffect(() => {\n previousOnNavigateRef.current = onNavigate;\n previousOpenRef.current = open;\n previousMountedRef.current = !!elements.floating;\n });\n useModernLayoutEffect(() => {\n if (!open) {\n keyRef.current = null;\n focusItemOnOpenRef.current = focusItemOnOpen;\n }\n }, [open, focusItemOnOpen]);\n const hasActiveIndex = activeIndex != null;\n const item = React.useMemo(() => {\n function syncCurrentTarget(currentTarget) {\n if (!latestOpenRef.current) return;\n const index = listRef.current.indexOf(currentTarget);\n if (index !== -1 && indexRef.current !== index) {\n indexRef.current = index;\n onNavigate();\n }\n }\n const props = {\n onFocus(_ref) {\n let {\n currentTarget\n } = _ref;\n forceSyncFocusRef.current = true;\n syncCurrentTarget(currentTarget);\n },\n onClick: _ref2 => {\n let {\n currentTarget\n } = _ref2;\n return currentTarget.focus({\n preventScroll: true\n });\n },\n // Safari\n ...(focusItemOnHover && {\n onMouseMove(_ref3) {\n let {\n currentTarget\n } = _ref3;\n forceSyncFocusRef.current = true;\n forceScrollIntoViewRef.current = false;\n syncCurrentTarget(currentTarget);\n },\n onPointerLeave(_ref4) {\n let {\n pointerType\n } = _ref4;\n if (!isPointerModalityRef.current || pointerType === 'touch') {\n return;\n }\n forceSyncFocusRef.current = true;\n indexRef.current = -1;\n onNavigate();\n if (!virtual) {\n var _floatingFocusElement;\n (_floatingFocusElement = floatingFocusElementRef.current) == null || _floatingFocusElement.focus({\n preventScroll: true\n });\n }\n }\n })\n };\n return props;\n }, [latestOpenRef, floatingFocusElementRef, focusItemOnHover, listRef, onNavigate, virtual]);\n const getParentOrientation = React.useCallback(() => {\n var _tree$nodesRef$curren;\n return parentOrientation != null ? parentOrientation : tree == null || (_tree$nodesRef$curren = tree.nodesRef.current.find(node => node.id === parentId)) == null || (_tree$nodesRef$curren = _tree$nodesRef$curren.context) == null || (_tree$nodesRef$curren = _tree$nodesRef$curren.dataRef) == null ? void 0 : _tree$nodesRef$curren.current.orientation;\n }, [parentId, tree, parentOrientation]);\n const commonOnKeyDown = useEffectEvent(event => {\n isPointerModalityRef.current = false;\n forceSyncFocusRef.current = true;\n\n // When composing a character, Chrome fires ArrowDown twice. Firefox/Safari\n // don't appear to suffer from this. `event.isComposing` is avoided due to\n // Safari not supporting it properly (although it's not needed in the first\n // place for Safari, just avoiding any possible issues).\n if (event.which === 229) {\n return;\n }\n\n // If the floating element is animating out, ignore navigation. Otherwise,\n // the `activeIndex` gets set to 0 despite not being open so the next time\n // the user ArrowDowns, the first item won't be focused.\n if (!latestOpenRef.current && event.currentTarget === floatingFocusElementRef.current) {\n return;\n }\n if (nested && isCrossOrientationCloseKey(event.key, orientation, rtl, cols)) {\n // If the nested list's close key is also the parent navigation key,\n // let the parent navigate. Otherwise, stop propagating the event.\n if (!isMainOrientationKey(event.key, getParentOrientation())) {\n stopEvent(event);\n }\n onOpenChange(false, event.nativeEvent, 'list-navigation');\n if (isHTMLElement(elements.domReference)) {\n if (virtual) {\n tree == null || tree.events.emit('virtualfocus', elements.domReference);\n } else {\n elements.domReference.focus();\n }\n }\n return;\n }\n const currentIndex = indexRef.current;\n const minIndex = getMinListIndex(listRef, disabledIndices);\n const maxIndex = getMaxListIndex(listRef, disabledIndices);\n if (!typeableComboboxReference) {\n if (event.key === 'Home') {\n stopEvent(event);\n indexRef.current = minIndex;\n onNavigate();\n }\n if (event.key === 'End') {\n stopEvent(event);\n indexRef.current = maxIndex;\n onNavigate();\n }\n }\n\n // Grid navigation.\n if (cols > 1) {\n const sizes = itemSizes || Array.from({\n length: listRef.current.length\n }, () => ({\n width: 1,\n height: 1\n }));\n // To calculate movements on the grid, we use hypothetical cell indices\n // as if every item was 1x1, then convert back to real indices.\n const cellMap = createGridCellMap(sizes, cols, dense);\n const minGridIndex = cellMap.findIndex(index => index != null && !isListIndexDisabled(listRef, index, disabledIndices));\n // last enabled index\n const maxGridIndex = cellMap.reduce((foundIndex, index, cellIndex) => index != null && !isListIndexDisabled(listRef, index, disabledIndices) ? cellIndex : foundIndex, -1);\n const index = cellMap[getGridNavigatedIndex({\n current: cellMap.map(itemIndex => itemIndex != null ? listRef.current[itemIndex] : null)\n }, {\n event,\n orientation,\n loop,\n rtl,\n cols,\n // treat undefined (empty grid spaces) as disabled indices so we\n // don't end up in them\n disabledIndices: getGridCellIndices([...((typeof disabledIndices !== 'function' ? disabledIndices : null) || listRef.current.map((_, index) => isListIndexDisabled(listRef, index, disabledIndices) ? index : undefined)), undefined], cellMap),\n minIndex: minGridIndex,\n maxIndex: maxGridIndex,\n prevIndex: getGridCellIndexOfCorner(indexRef.current > maxIndex ? minIndex : indexRef.current, sizes, cellMap, cols,\n // use a corner matching the edge closest to the direction\n // we're moving in so we don't end up in the same item. Prefer\n // top/left over bottom/right.\n event.key === ARROW_DOWN ? 'bl' : event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT) ? 'tr' : 'tl'),\n stopEvent: true\n })];\n if (index != null) {\n indexRef.current = index;\n onNavigate();\n }\n if (orientation === 'both') {\n return;\n }\n }\n if (isMainOrientationKey(event.key, orientation)) {\n stopEvent(event);\n\n // Reset the index if no item is focused.\n if (open && !virtual && activeElement(event.currentTarget.ownerDocument) === event.currentTarget) {\n indexRef.current = isMainOrientationToEndKey(event.key, orientation, rtl) ? minIndex : maxIndex;\n onNavigate();\n return;\n }\n if (isMainOrientationToEndKey(event.key, orientation, rtl)) {\n if (loop) {\n indexRef.current = currentIndex >= maxIndex ? allowEscape && currentIndex !== listRef.current.length ? -1 : minIndex : findNonDisabledListIndex(listRef, {\n startingIndex: currentIndex,\n disabledIndices\n });\n } else {\n indexRef.current = Math.min(maxIndex, findNonDisabledListIndex(listRef, {\n startingIndex: currentIndex,\n disabledIndices\n }));\n }\n } else {\n if (loop) {\n indexRef.current = currentIndex <= minIndex ? allowEscape && currentIndex !== -1 ? listRef.current.length : maxIndex : findNonDisabledListIndex(listRef, {\n startingIndex: currentIndex,\n decrement: true,\n disabledIndices\n });\n } else {\n indexRef.current = Math.max(minIndex, findNonDisabledListIndex(listRef, {\n startingIndex: currentIndex,\n decrement: true,\n disabledIndices\n }));\n }\n }\n if (isIndexOutOfListBounds(listRef, indexRef.current)) {\n indexRef.current = -1;\n }\n onNavigate();\n }\n });\n const ariaActiveDescendantProp = React.useMemo(() => {\n return virtual && open && hasActiveIndex && {\n 'aria-activedescendant': virtualId || activeId\n };\n }, [virtual, open, hasActiveIndex, virtualId, activeId]);\n const floating = React.useMemo(() => {\n return {\n 'aria-orientation': orientation === 'both' ? undefined : orientation,\n ...(!typeableComboboxReference ? ariaActiveDescendantProp : {}),\n onKeyDown: commonOnKeyDown,\n onPointerMove() {\n isPointerModalityRef.current = true;\n }\n };\n }, [ariaActiveDescendantProp, commonOnKeyDown, orientation, typeableComboboxReference]);\n const reference = React.useMemo(() => {\n function checkVirtualMouse(event) {\n if (focusItemOnOpen === 'auto' && isVirtualClick(event.nativeEvent)) {\n focusItemOnOpenRef.current = true;\n }\n }\n function checkVirtualPointer(event) {\n // `pointerdown` fires first, reset the state then perform the checks.\n focusItemOnOpenRef.current = focusItemOnOpen;\n if (focusItemOnOpen === 'auto' && isVirtualPointerEvent(event.nativeEvent)) {\n focusItemOnOpenRef.current = true;\n }\n }\n return {\n ...ariaActiveDescendantProp,\n onKeyDown(event) {\n isPointerModalityRef.current = false;\n const isArrowKey = event.key.startsWith('Arrow');\n const isHomeOrEndKey = ['Home', 'End'].includes(event.key);\n const isMoveKey = isArrowKey || isHomeOrEndKey;\n const isCrossOpenKey = isCrossOrientationOpenKey(event.key, orientation, rtl);\n const isCrossCloseKey = isCrossOrientationCloseKey(event.key, orientation, rtl, cols);\n const isParentCrossOpenKey = isCrossOrientationOpenKey(event.key, getParentOrientation(), rtl);\n const isMainKey = isMainOrientationKey(event.key, orientation);\n const isNavigationKey = (nested ? isParentCrossOpenKey : isMainKey) || event.key === 'Enter' || event.key.trim() === '';\n if (virtual && open) {\n const rootNode = tree == null ? void 0 : tree.nodesRef.current.find(node => node.parentId == null);\n const deepestNode = tree && rootNode ? getDeepestNode(tree.nodesRef.current, rootNode.id) : null;\n if (isMoveKey && deepestNode && virtualItemRef) {\n const eventObject = new KeyboardEvent('keydown', {\n key: event.key,\n bubbles: true\n });\n if (isCrossOpenKey || isCrossCloseKey) {\n var _deepestNode$context, _deepestNode$context2;\n const isCurrentTarget = ((_deepestNode$context = deepestNode.context) == null ? void 0 : _deepestNode$context.elements.domReference) === event.currentTarget;\n const dispatchItem = isCrossCloseKey && !isCurrentTarget ? (_deepestNode$context2 = deepestNode.context) == null ? void 0 : _deepestNode$context2.elements.domReference : isCrossOpenKey ? listRef.current.find(item => (item == null ? void 0 : item.id) === activeId) : null;\n if (dispatchItem) {\n stopEvent(event);\n dispatchItem.dispatchEvent(eventObject);\n setVirtualId(undefined);\n }\n }\n if ((isMainKey || isHomeOrEndKey) && deepestNode.context) {\n if (deepestNode.context.open && deepestNode.parentId && event.currentTarget !== deepestNode.context.elements.domReference) {\n var _deepestNode$context$;\n stopEvent(event);\n (_deepestNode$context$ = deepestNode.context.elements.domReference) == null || _deepestNode$context$.dispatchEvent(eventObject);\n return;\n }\n }\n }\n return commonOnKeyDown(event);\n }\n // If a floating element should not open on arrow key down, avoid\n // setting `activeIndex` while it's closed.\n if (!open && !openOnArrowKeyDown && isArrowKey) {\n return;\n }\n if (isNavigationKey) {\n const isParentMainKey = isMainOrientationKey(event.key, getParentOrientation());\n keyRef.current = nested && isParentMainKey ? null : event.key;\n }\n if (nested) {\n if (isParentCrossOpenKey) {\n stopEvent(event);\n if (open) {\n indexRef.current = getMinListIndex(listRef, disabledIndicesRef.current);\n onNavigate();\n } else {\n onOpenChange(true, event.nativeEvent, 'list-navigation');\n }\n }\n return;\n }\n if (isMainKey) {\n if (selectedIndex != null) {\n indexRef.current = selectedIndex;\n }\n stopEvent(event);\n if (!open && openOnArrowKeyDown) {\n onOpenChange(true, event.nativeEvent, 'list-navigation');\n } else {\n commonOnKeyDown(event);\n }\n if (open) {\n onNavigate();\n }\n }\n },\n onFocus() {\n if (open && !virtual) {\n indexRef.current = -1;\n onNavigate();\n }\n },\n onPointerDown: checkVirtualPointer,\n onPointerEnter: checkVirtualPointer,\n onMouseDown: checkVirtualMouse,\n onClick: checkVirtualMouse\n };\n }, [activeId, ariaActiveDescendantProp, cols, commonOnKeyDown, disabledIndicesRef, focusItemOnOpen, listRef, nested, onNavigate, onOpenChange, open, openOnArrowKeyDown, orientation, getParentOrientation, rtl, selectedIndex, tree, virtual, virtualItemRef]);\n return React.useMemo(() => enabled ? {\n reference,\n floating,\n item\n } : {}, [enabled, reference, floating, item]);\n}\n\nconst componentRoleToAriaRoleMap = /*#__PURE__*/new Map([['select', 'listbox'], ['combobox', 'listbox'], ['label', false]]);\n\n/**\n * Adds base screen reader props to the reference and floating elements for a\n * given floating element `role`.\n * @see https://floating-ui.com/docs/useRole\n */\nfunction useRole(context, props) {\n var _elements$domReferenc, _componentRoleToAriaR;\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n elements,\n floatingId: defaultFloatingId\n } = context;\n const {\n enabled = true,\n role = 'dialog'\n } = props;\n const defaultReferenceId = useId();\n const referenceId = ((_elements$domReferenc = elements.domReference) == null ? void 0 : _elements$domReferenc.id) || defaultReferenceId;\n const floatingId = React.useMemo(() => {\n var _getFloatingFocusElem;\n return ((_getFloatingFocusElem = getFloatingFocusElement(elements.floating)) == null ? void 0 : _getFloatingFocusElem.id) || defaultFloatingId;\n }, [elements.floating, defaultFloatingId]);\n const ariaRole = (_componentRoleToAriaR = componentRoleToAriaRoleMap.get(role)) != null ? _componentRoleToAriaR : role;\n const parentId = useFloatingParentNodeId();\n const isNested = parentId != null;\n const reference = React.useMemo(() => {\n if (ariaRole === 'tooltip' || role === 'label') {\n return {\n [\"aria-\" + (role === 'label' ? 'labelledby' : 'describedby')]: open ? floatingId : undefined\n };\n }\n return {\n 'aria-expanded': open ? 'true' : 'false',\n 'aria-haspopup': ariaRole === 'alertdialog' ? 'dialog' : ariaRole,\n 'aria-controls': open ? floatingId : undefined,\n ...(ariaRole === 'listbox' && {\n role: 'combobox'\n }),\n ...(ariaRole === 'menu' && {\n id: referenceId\n }),\n ...(ariaRole === 'menu' && isNested && {\n role: 'menuitem'\n }),\n ...(role === 'select' && {\n 'aria-autocomplete': 'none'\n }),\n ...(role === 'combobox' && {\n 'aria-autocomplete': 'list'\n })\n };\n }, [ariaRole, floatingId, isNested, open, referenceId, role]);\n const floating = React.useMemo(() => {\n const floatingProps = {\n id: floatingId,\n ...(ariaRole && {\n role: ariaRole\n })\n };\n if (ariaRole === 'tooltip' || role === 'label') {\n return floatingProps;\n }\n return {\n ...floatingProps,\n ...(ariaRole === 'menu' && {\n 'aria-labelledby': referenceId\n })\n };\n }, [ariaRole, floatingId, referenceId, role]);\n const item = React.useCallback(_ref => {\n let {\n active,\n selected\n } = _ref;\n const commonProps = {\n role: 'option',\n ...(active && {\n id: floatingId + \"-fui-option\"\n })\n };\n\n // For `menu`, we are unable to tell if the item is a `menuitemradio`\n // or `menuitemcheckbox`. For backwards-compatibility reasons, also\n // avoid defaulting to `menuitem` as it may overwrite custom role props.\n switch (role) {\n case 'select':\n return {\n ...commonProps,\n 'aria-selected': active && selected\n };\n case 'combobox':\n {\n return {\n ...commonProps,\n 'aria-selected': selected\n };\n }\n }\n return {};\n }, [floatingId, role]);\n return React.useMemo(() => enabled ? {\n reference,\n floating,\n item\n } : {}, [enabled, reference, floating, item]);\n}\n\n// Converts a JS style key like `backgroundColor` to a CSS transition-property\n// like `background-color`.\nconst camelCaseToKebabCase = str => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? '-' : '') + $.toLowerCase());\nfunction execWithArgsOrReturn(valueOrFn, args) {\n return typeof valueOrFn === 'function' ? valueOrFn(args) : valueOrFn;\n}\nfunction useDelayUnmount(open, durationMs) {\n const [isMounted, setIsMounted] = React.useState(open);\n if (open && !isMounted) {\n setIsMounted(true);\n }\n React.useEffect(() => {\n if (!open && isMounted) {\n const timeout = setTimeout(() => setIsMounted(false), durationMs);\n return () => clearTimeout(timeout);\n }\n }, [open, isMounted, durationMs]);\n return isMounted;\n}\n/**\n * Provides a status string to apply CSS transitions to a floating element,\n * correctly handling placement-aware transitions.\n * @see https://floating-ui.com/docs/useTransition#usetransitionstatus\n */\nfunction useTransitionStatus(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n elements: {\n floating\n }\n } = context;\n const {\n duration = 250\n } = props;\n const isNumberDuration = typeof duration === 'number';\n const closeDuration = (isNumberDuration ? duration : duration.close) || 0;\n const [status, setStatus] = React.useState('unmounted');\n const isMounted = useDelayUnmount(open, closeDuration);\n if (!isMounted && status === 'close') {\n setStatus('unmounted');\n }\n useModernLayoutEffect(() => {\n if (!floating) return;\n if (open) {\n setStatus('initial');\n const frame = requestAnimationFrame(() => {\n // Ensure it opens before paint. With `FloatingDelayGroup`,\n // this avoids a flicker when moving between floating elements\n // to ensure one is always open with no missing frames.\n ReactDOM.flushSync(() => {\n setStatus('open');\n });\n });\n return () => {\n cancelAnimationFrame(frame);\n };\n }\n setStatus('close');\n }, [open, floating]);\n return {\n isMounted,\n status\n };\n}\n/**\n * Provides styles to apply CSS transitions to a floating element, correctly\n * handling placement-aware transitions. Wrapper around `useTransitionStatus`.\n * @see https://floating-ui.com/docs/useTransition#usetransitionstyles\n */\nfunction useTransitionStyles(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n initial: unstable_initial = {\n opacity: 0\n },\n open: unstable_open,\n close: unstable_close,\n common: unstable_common,\n duration = 250\n } = props;\n const placement = context.placement;\n const side = placement.split('-')[0];\n const fnArgs = React.useMemo(() => ({\n side,\n placement\n }), [side, placement]);\n const isNumberDuration = typeof duration === 'number';\n const openDuration = (isNumberDuration ? duration : duration.open) || 0;\n const closeDuration = (isNumberDuration ? duration : duration.close) || 0;\n const [styles, setStyles] = React.useState(() => ({\n ...execWithArgsOrReturn(unstable_common, fnArgs),\n ...execWithArgsOrReturn(unstable_initial, fnArgs)\n }));\n const {\n isMounted,\n status\n } = useTransitionStatus(context, {\n duration\n });\n const initialRef = useLatestRef(unstable_initial);\n const openRef = useLatestRef(unstable_open);\n const closeRef = useLatestRef(unstable_close);\n const commonRef = useLatestRef(unstable_common);\n useModernLayoutEffect(() => {\n const initialStyles = execWithArgsOrReturn(initialRef.current, fnArgs);\n const closeStyles = execWithArgsOrReturn(closeRef.current, fnArgs);\n const commonStyles = execWithArgsOrReturn(commonRef.current, fnArgs);\n const openStyles = execWithArgsOrReturn(openRef.current, fnArgs) || Object.keys(initialStyles).reduce((acc, key) => {\n acc[key] = '';\n return acc;\n }, {});\n if (status === 'initial') {\n setStyles(styles => ({\n transitionProperty: styles.transitionProperty,\n ...commonStyles,\n ...initialStyles\n }));\n }\n if (status === 'open') {\n setStyles({\n transitionProperty: Object.keys(openStyles).map(camelCaseToKebabCase).join(','),\n transitionDuration: openDuration + \"ms\",\n ...commonStyles,\n ...openStyles\n });\n }\n if (status === 'close') {\n const styles = closeStyles || initialStyles;\n setStyles({\n transitionProperty: Object.keys(styles).map(camelCaseToKebabCase).join(','),\n transitionDuration: closeDuration + \"ms\",\n ...commonStyles,\n ...styles\n });\n }\n }, [closeDuration, closeRef, initialRef, openRef, commonRef, openDuration, status, fnArgs]);\n return {\n isMounted,\n styles\n };\n}\n\n/**\n * Provides a matching callback that can be used to focus an item as the user\n * types, often used in tandem with `useListNavigation()`.\n * @see https://floating-ui.com/docs/useTypeahead\n */\nfunction useTypeahead(context, props) {\n var _ref;\n const {\n open,\n dataRef\n } = context;\n const {\n listRef,\n activeIndex,\n onMatch: unstable_onMatch,\n onTypingChange: unstable_onTypingChange,\n enabled = true,\n findMatch = null,\n resetMs = 750,\n ignoreKeys = [],\n selectedIndex = null\n } = props;\n const timeoutIdRef = React.useRef(-1);\n const stringRef = React.useRef('');\n const prevIndexRef = React.useRef((_ref = selectedIndex != null ? selectedIndex : activeIndex) != null ? _ref : -1);\n const matchIndexRef = React.useRef(null);\n const onMatch = useEffectEvent(unstable_onMatch);\n const onTypingChange = useEffectEvent(unstable_onTypingChange);\n const findMatchRef = useLatestRef(findMatch);\n const ignoreKeysRef = useLatestRef(ignoreKeys);\n useModernLayoutEffect(() => {\n if (open) {\n clearTimeoutIfSet(timeoutIdRef);\n matchIndexRef.current = null;\n stringRef.current = '';\n }\n }, [open]);\n useModernLayoutEffect(() => {\n // Sync arrow key navigation but not typeahead navigation.\n if (open && stringRef.current === '') {\n var _ref2;\n prevIndexRef.current = (_ref2 = selectedIndex != null ? selectedIndex : activeIndex) != null ? _ref2 : -1;\n }\n }, [open, selectedIndex, activeIndex]);\n const setTypingChange = useEffectEvent(value => {\n if (value) {\n if (!dataRef.current.typing) {\n dataRef.current.typing = value;\n onTypingChange(value);\n }\n } else {\n if (dataRef.current.typing) {\n dataRef.current.typing = value;\n onTypingChange(value);\n }\n }\n });\n const onKeyDown = useEffectEvent(event => {\n function getMatchingIndex(list, orderedList, string) {\n const str = findMatchRef.current ? findMatchRef.current(orderedList, string) : orderedList.find(text => (text == null ? void 0 : text.toLocaleLowerCase().indexOf(string.toLocaleLowerCase())) === 0);\n return str ? list.indexOf(str) : -1;\n }\n const listContent = listRef.current;\n if (stringRef.current.length > 0 && stringRef.current[0] !== ' ') {\n if (getMatchingIndex(listContent, listContent, stringRef.current) === -1) {\n setTypingChange(false);\n } else if (event.key === ' ') {\n stopEvent(event);\n }\n }\n if (listContent == null || ignoreKeysRef.current.includes(event.key) ||\n // Character key.\n event.key.length !== 1 ||\n // Modifier key.\n event.ctrlKey || event.metaKey || event.altKey) {\n return;\n }\n if (open && event.key !== ' ') {\n stopEvent(event);\n setTypingChange(true);\n }\n\n // Bail out if the list contains a word like \"llama\" or \"aaron\". TODO:\n // allow it in this case, too.\n const allowRapidSuccessionOfFirstLetter = listContent.every(text => {\n var _text$, _text$2;\n return text ? ((_text$ = text[0]) == null ? void 0 : _text$.toLocaleLowerCase()) !== ((_text$2 = text[1]) == null ? void 0 : _text$2.toLocaleLowerCase()) : true;\n });\n\n // Allows the user to cycle through items that start with the same letter\n // in rapid succession.\n if (allowRapidSuccessionOfFirstLetter && stringRef.current === event.key) {\n stringRef.current = '';\n prevIndexRef.current = matchIndexRef.current;\n }\n stringRef.current += event.key;\n clearTimeoutIfSet(timeoutIdRef);\n timeoutIdRef.current = window.setTimeout(() => {\n stringRef.current = '';\n prevIndexRef.current = matchIndexRef.current;\n setTypingChange(false);\n }, resetMs);\n const prevIndex = prevIndexRef.current;\n const index = getMatchingIndex(listContent, [...listContent.slice((prevIndex || 0) + 1), ...listContent.slice(0, (prevIndex || 0) + 1)], stringRef.current);\n if (index !== -1) {\n onMatch(index);\n matchIndexRef.current = index;\n } else if (event.key !== ' ') {\n stringRef.current = '';\n setTypingChange(false);\n }\n });\n const reference = React.useMemo(() => ({\n onKeyDown\n }), [onKeyDown]);\n const floating = React.useMemo(() => {\n return {\n onKeyDown,\n onKeyUp(event) {\n if (event.key === ' ') {\n setTypingChange(false);\n }\n }\n };\n }, [onKeyDown, setTypingChange]);\n return React.useMemo(() => enabled ? {\n reference,\n floating\n } : {}, [enabled, reference, floating]);\n}\n\nfunction getArgsWithCustomFloatingHeight(state, height) {\n return {\n ...state,\n rects: {\n ...state.rects,\n floating: {\n ...state.rects.floating,\n height\n }\n }\n };\n}\n/**\n * Positions the floating element such that an inner element inside of it is\n * anchored to the reference element.\n * @see https://floating-ui.com/docs/inner\n * @deprecated\n */\nconst inner = props => ({\n name: 'inner',\n options: props,\n async fn(state) {\n const {\n listRef,\n overflowRef,\n onFallbackChange,\n offset: innerOffset = 0,\n index = 0,\n minItemsVisible = 4,\n referenceOverflowThreshold = 0,\n scrollRef,\n ...detectOverflowOptions\n } = evaluate(props, state);\n const {\n rects,\n elements: {\n floating\n }\n } = state;\n const item = listRef.current[index];\n const scrollEl = (scrollRef == null ? void 0 : scrollRef.current) || floating;\n\n // Valid combinations:\n // 1. Floating element is the scrollRef and has a border (default)\n // 2. Floating element is not the scrollRef, floating element has a border\n // 3. Floating element is not the scrollRef, scrollRef has a border\n // Floating > {...getFloatingProps()} wrapper > scrollRef > items is not\n // allowed as VoiceOver doesn't work.\n const clientTop = floating.clientTop || scrollEl.clientTop;\n const floatingIsBordered = floating.clientTop !== 0;\n const scrollElIsBordered = scrollEl.clientTop !== 0;\n const floatingIsScrollEl = floating === scrollEl;\n if (process.env.NODE_ENV !== \"production\") {\n if (!state.placement.startsWith('bottom')) {\n warn('`placement` side must be \"bottom\" when using the `inner`', 'middleware.');\n }\n }\n if (!item) {\n return {};\n }\n const nextArgs = {\n ...state,\n ...(await offset(-item.offsetTop - floating.clientTop - rects.reference.height / 2 - item.offsetHeight / 2 - innerOffset).fn(state))\n };\n const overflow = await detectOverflow(getArgsWithCustomFloatingHeight(nextArgs, scrollEl.scrollHeight + clientTop + floating.clientTop), detectOverflowOptions);\n const refOverflow = await detectOverflow(nextArgs, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const diffY = max(0, overflow.top);\n const nextY = nextArgs.y + diffY;\n const isScrollable = scrollEl.scrollHeight > scrollEl.clientHeight;\n const rounder = isScrollable ? v => v : round;\n const maxHeight = rounder(max(0, scrollEl.scrollHeight + (floatingIsBordered && floatingIsScrollEl || scrollElIsBordered ? clientTop * 2 : 0) - diffY - max(0, overflow.bottom)));\n scrollEl.style.maxHeight = maxHeight + \"px\";\n scrollEl.scrollTop = diffY;\n\n // There is not enough space, fallback to standard anchored positioning\n if (onFallbackChange) {\n const shouldFallback = scrollEl.offsetHeight < item.offsetHeight * min(minItemsVisible, listRef.current.length) - 1 || refOverflow.top >= -referenceOverflowThreshold || refOverflow.bottom >= -referenceOverflowThreshold;\n ReactDOM.flushSync(() => onFallbackChange(shouldFallback));\n }\n if (overflowRef) {\n overflowRef.current = await detectOverflow(getArgsWithCustomFloatingHeight({\n ...nextArgs,\n y: nextY\n }, scrollEl.offsetHeight + clientTop + floating.clientTop), detectOverflowOptions);\n }\n return {\n y: nextY\n };\n }\n});\n/**\n * Changes the `inner` middleware's `offset` upon a `wheel` event to\n * expand the floating element's height, revealing more list items.\n * @see https://floating-ui.com/docs/inner\n * @deprecated\n */\nfunction useInnerOffset(context, props) {\n const {\n open,\n elements\n } = context;\n const {\n enabled = true,\n overflowRef,\n scrollRef,\n onChange: unstable_onChange\n } = props;\n const onChange = useEffectEvent(unstable_onChange);\n const controlledScrollingRef = React.useRef(false);\n const prevScrollTopRef = React.useRef(null);\n const initialOverflowRef = React.useRef(null);\n React.useEffect(() => {\n if (!enabled) return;\n function onWheel(e) {\n if (e.ctrlKey || !el || overflowRef.current == null) {\n return;\n }\n const dY = e.deltaY;\n const isAtTop = overflowRef.current.top >= -0.5;\n const isAtBottom = overflowRef.current.bottom >= -0.5;\n const remainingScroll = el.scrollHeight - el.clientHeight;\n const sign = dY < 0 ? -1 : 1;\n const method = dY < 0 ? 'max' : 'min';\n if (el.scrollHeight <= el.clientHeight) {\n return;\n }\n if (!isAtTop && dY > 0 || !isAtBottom && dY < 0) {\n e.preventDefault();\n ReactDOM.flushSync(() => {\n onChange(d => d + Math[method](dY, remainingScroll * sign));\n });\n } else if (/firefox/i.test(getUserAgent())) {\n // Needed to propagate scrolling during momentum scrolling phase once\n // it gets limited by the boundary. UX improvement, not critical.\n el.scrollTop += dY;\n }\n }\n const el = (scrollRef == null ? void 0 : scrollRef.current) || elements.floating;\n if (open && el) {\n el.addEventListener('wheel', onWheel);\n\n // Wait for the position to be ready.\n requestAnimationFrame(() => {\n prevScrollTopRef.current = el.scrollTop;\n if (overflowRef.current != null) {\n initialOverflowRef.current = {\n ...overflowRef.current\n };\n }\n });\n return () => {\n prevScrollTopRef.current = null;\n initialOverflowRef.current = null;\n el.removeEventListener('wheel', onWheel);\n };\n }\n }, [enabled, open, elements.floating, overflowRef, scrollRef, onChange]);\n const floating = React.useMemo(() => ({\n onKeyDown() {\n controlledScrollingRef.current = true;\n },\n onWheel() {\n controlledScrollingRef.current = false;\n },\n onPointerMove() {\n controlledScrollingRef.current = false;\n },\n onScroll() {\n const el = (scrollRef == null ? void 0 : scrollRef.current) || elements.floating;\n if (!overflowRef.current || !el || !controlledScrollingRef.current) {\n return;\n }\n if (prevScrollTopRef.current !== null) {\n const scrollDiff = el.scrollTop - prevScrollTopRef.current;\n if (overflowRef.current.bottom < -0.5 && scrollDiff < -1 || overflowRef.current.top < -0.5 && scrollDiff > 1) {\n ReactDOM.flushSync(() => onChange(d => d + scrollDiff));\n }\n }\n\n // [Firefox] Wait for the height change to have been applied.\n requestAnimationFrame(() => {\n prevScrollTopRef.current = el.scrollTop;\n });\n }\n }), [elements.floating, onChange, overflowRef, scrollRef]);\n return React.useMemo(() => enabled ? {\n floating\n } : {}, [enabled, floating]);\n}\n\nfunction getNodeChildren(nodes, id) {\n let allChildren = nodes.filter(node => {\n var _node$context;\n return node.parentId === id && ((_node$context = node.context) == null ? void 0 : _node$context.open);\n });\n let currentChildren = allChildren;\n while (currentChildren.length) {\n currentChildren = nodes.filter(node => {\n var _currentChildren;\n return (_currentChildren = currentChildren) == null ? void 0 : _currentChildren.some(n => {\n var _node$context2;\n return node.parentId === n.id && ((_node$context2 = node.context) == null ? void 0 : _node$context2.open);\n });\n });\n allChildren = allChildren.concat(currentChildren);\n }\n return allChildren;\n}\n\nfunction isPointInPolygon(point, polygon) {\n const [x, y] = point;\n let isInside = false;\n const length = polygon.length;\n for (let i = 0, j = length - 1; i < length; j = i++) {\n const [xi, yi] = polygon[i] || [0, 0];\n const [xj, yj] = polygon[j] || [0, 0];\n const intersect = yi >= y !== yj >= y && x <= (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) {\n isInside = !isInside;\n }\n }\n return isInside;\n}\nfunction isInside(point, rect) {\n return point[0] >= rect.x && point[0] <= rect.x + rect.width && point[1] >= rect.y && point[1] <= rect.y + rect.height;\n}\n/**\n * Generates a safe polygon area that the user can traverse without closing the\n * floating element once leaving the reference element.\n * @see https://floating-ui.com/docs/useHover#safepolygon\n */\nfunction safePolygon(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n buffer = 0.5,\n blockPointerEvents = false,\n requireIntent = true\n } = options;\n const timeoutRef = {\n current: -1\n };\n let hasLanded = false;\n let lastX = null;\n let lastY = null;\n let lastCursorTime = performance.now();\n function getCursorSpeed(x, y) {\n const currentTime = performance.now();\n const elapsedTime = currentTime - lastCursorTime;\n if (lastX === null || lastY === null || elapsedTime === 0) {\n lastX = x;\n lastY = y;\n lastCursorTime = currentTime;\n return null;\n }\n const deltaX = x - lastX;\n const deltaY = y - lastY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n const speed = distance / elapsedTime; // px / ms\n\n lastX = x;\n lastY = y;\n lastCursorTime = currentTime;\n return speed;\n }\n const fn = _ref => {\n let {\n x,\n y,\n placement,\n elements,\n onClose,\n nodeId,\n tree\n } = _ref;\n return function onMouseMove(event) {\n function close() {\n clearTimeoutIfSet(timeoutRef);\n onClose();\n }\n clearTimeoutIfSet(timeoutRef);\n if (!elements.domReference || !elements.floating || placement == null || x == null || y == null) {\n return;\n }\n const {\n clientX,\n clientY\n } = event;\n const clientPoint = [clientX, clientY];\n const target = getTarget(event);\n const isLeave = event.type === 'mouseleave';\n const isOverFloatingEl = contains(elements.floating, target);\n const isOverReferenceEl = contains(elements.domReference, target);\n const refRect = elements.domReference.getBoundingClientRect();\n const rect = elements.floating.getBoundingClientRect();\n const side = placement.split('-')[0];\n const cursorLeaveFromRight = x > rect.right - rect.width / 2;\n const cursorLeaveFromBottom = y > rect.bottom - rect.height / 2;\n const isOverReferenceRect = isInside(clientPoint, refRect);\n const isFloatingWider = rect.width > refRect.width;\n const isFloatingTaller = rect.height > refRect.height;\n const left = (isFloatingWider ? refRect : rect).left;\n const right = (isFloatingWider ? refRect : rect).right;\n const top = (isFloatingTaller ? refRect : rect).top;\n const bottom = (isFloatingTaller ? refRect : rect).bottom;\n if (isOverFloatingEl) {\n hasLanded = true;\n if (!isLeave) {\n return;\n }\n }\n if (isOverReferenceEl) {\n hasLanded = false;\n }\n if (isOverReferenceEl && !isLeave) {\n hasLanded = true;\n return;\n }\n\n // Prevent overlapping floating element from being stuck in an open-close\n // loop: https://github.com/floating-ui/floating-ui/issues/1910\n if (isLeave && isElement(event.relatedTarget) && contains(elements.floating, event.relatedTarget)) {\n return;\n }\n\n // If any nested child is open, abort.\n if (tree && getNodeChildren(tree.nodesRef.current, nodeId).length) {\n return;\n }\n\n // If the pointer is leaving from the opposite side, the \"buffer\" logic\n // creates a point where the floating element remains open, but should be\n // ignored.\n // A constant of 1 handles floating point rounding errors.\n if (side === 'top' && y >= refRect.bottom - 1 || side === 'bottom' && y <= refRect.top + 1 || side === 'left' && x >= refRect.right - 1 || side === 'right' && x <= refRect.left + 1) {\n return close();\n }\n\n // Ignore when the cursor is within the rectangular trough between the\n // two elements. Since the triangle is created from the cursor point,\n // which can start beyond the ref element's edge, traversing back and\n // forth from the ref to the floating element can cause it to close. This\n // ensures it always remains open in that case.\n let rectPoly = [];\n switch (side) {\n case 'top':\n rectPoly = [[left, refRect.top + 1], [left, rect.bottom - 1], [right, rect.bottom - 1], [right, refRect.top + 1]];\n break;\n case 'bottom':\n rectPoly = [[left, rect.top + 1], [left, refRect.bottom - 1], [right, refRect.bottom - 1], [right, rect.top + 1]];\n break;\n case 'left':\n rectPoly = [[rect.right - 1, bottom], [rect.right - 1, top], [refRect.left + 1, top], [refRect.left + 1, bottom]];\n break;\n case 'right':\n rectPoly = [[refRect.right - 1, bottom], [refRect.right - 1, top], [rect.left + 1, top], [rect.left + 1, bottom]];\n break;\n }\n function getPolygon(_ref2) {\n let [x, y] = _ref2;\n switch (side) {\n case 'top':\n {\n const cursorPointOne = [isFloatingWider ? x + buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y + buffer + 1];\n const cursorPointTwo = [isFloatingWider ? x - buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y + buffer + 1];\n const commonPoints = [[rect.left, cursorLeaveFromRight ? rect.bottom - buffer : isFloatingWider ? rect.bottom - buffer : rect.top], [rect.right, cursorLeaveFromRight ? isFloatingWider ? rect.bottom - buffer : rect.top : rect.bottom - buffer]];\n return [cursorPointOne, cursorPointTwo, ...commonPoints];\n }\n case 'bottom':\n {\n const cursorPointOne = [isFloatingWider ? x + buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y - buffer];\n const cursorPointTwo = [isFloatingWider ? x - buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y - buffer];\n const commonPoints = [[rect.left, cursorLeaveFromRight ? rect.top + buffer : isFloatingWider ? rect.top + buffer : rect.bottom], [rect.right, cursorLeaveFromRight ? isFloatingWider ? rect.top + buffer : rect.bottom : rect.top + buffer]];\n return [cursorPointOne, cursorPointTwo, ...commonPoints];\n }\n case 'left':\n {\n const cursorPointOne = [x + buffer + 1, isFloatingTaller ? y + buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n const cursorPointTwo = [x + buffer + 1, isFloatingTaller ? y - buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n const commonPoints = [[cursorLeaveFromBottom ? rect.right - buffer : isFloatingTaller ? rect.right - buffer : rect.left, rect.top], [cursorLeaveFromBottom ? isFloatingTaller ? rect.right - buffer : rect.left : rect.right - buffer, rect.bottom]];\n return [...commonPoints, cursorPointOne, cursorPointTwo];\n }\n case 'right':\n {\n const cursorPointOne = [x - buffer, isFloatingTaller ? y + buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n const cursorPointTwo = [x - buffer, isFloatingTaller ? y - buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n const commonPoints = [[cursorLeaveFromBottom ? rect.left + buffer : isFloatingTaller ? rect.left + buffer : rect.right, rect.top], [cursorLeaveFromBottom ? isFloatingTaller ? rect.left + buffer : rect.right : rect.left + buffer, rect.bottom]];\n return [cursorPointOne, cursorPointTwo, ...commonPoints];\n }\n }\n }\n if (isPointInPolygon([clientX, clientY], rectPoly)) {\n return;\n }\n if (hasLanded && !isOverReferenceRect) {\n return close();\n }\n if (!isLeave && requireIntent) {\n const cursorSpeed = getCursorSpeed(event.clientX, event.clientY);\n const cursorSpeedThreshold = 0.1;\n if (cursorSpeed !== null && cursorSpeed < cursorSpeedThreshold) {\n return close();\n }\n }\n if (!isPointInPolygon([clientX, clientY], getPolygon([x, y]))) {\n close();\n } else if (!hasLanded && requireIntent) {\n timeoutRef.current = window.setTimeout(close, 40);\n }\n };\n };\n fn.__options = {\n blockPointerEvents\n };\n return fn;\n}\n\nexport { Composite, CompositeItem, FloatingArrow, FloatingDelayGroup, FloatingFocusManager, FloatingList, FloatingNode, FloatingOverlay, FloatingPortal, FloatingTree, NextFloatingDelayGroup, inner, safePolygon, useClick, useClientPoint, useDelayGroup, useDelayGroupContext, useDismiss, useFloating, useFloatingNodeId, useFloatingParentNodeId, useFloatingPortalNode, useFloatingRootContext, useFloatingTree, useFocus, useHover, useId, useInnerOffset, useInteractions, useListItem, useListNavigation, useMergeRefs, useNextDelayGroup, useRole, useTransitionStatus, useTransitionStyles, useTypeahead };\n","import { KEY_SIZE_DATA } from '@local/theme';\n\nimport { autoUpdate, flip, offset, shift, useFloating } from '@floating-ui/react';\nimport { AnimatePresence } from 'framer-motion';\nimport { FC, Ref, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { DEFAULT_POPOVER_CLOSE_DELAY, DEFAULT_POPOVER_OFFSET, PopoverProps, PopoverWrapper, UsePopoverProps } from '.';\n\nexport const Popover: FC<PopoverProps> = (props) => {\n return ReactDOM.createPortal(\n <AnimatePresence>\n {props.isOpen && (\n <div\n tabIndex={-1}\n ref={props.ref as Ref<HTMLDivElement | null>}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n ...props.floatingStyles,\n transform: props.floatingStyles.transform,\n zIndex: 9999,\n }}\n >\n <PopoverWrapper\n tabIndex={-1}\n $isShowAlwaysOutline={props.isShowAlwaysOutline}\n $genre={props.genre ?? 'black'}\n $font={{\n ...props.font,\n size: props.font?.size ?? KEY_SIZE_DATA[props.size ?? 'medium'].font,\n weight: props.font?.weight ?? 700,\n }}\n className={props.className}\n initial={{ opacity: 0, scale: 0.95 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.95 }}\n transition={{ duration: 0.2 }}\n $sx={props.sx}\n $size={props.size}\n $sxTypography={props.sxTypography}\n $maxHeight={props.maxHeight}\n $maxWidth={props.maxWidth}\n >\n {props.children}\n </PopoverWrapper>\n </div>\n )}\n </AnimatePresence>,\n document.body,\n );\n};\n\nexport const usePopover = (props: UsePopoverProps) => {\n const { onFocus, onBlur, onBlurReference } = props;\n\n // Состояние открытия поповера\n const [isOpen, setIsOpen] = useState(false);\n // Минимальная ширина поповера (нужна, если хотим, чтобы ширина совпадала с референсом)\n const [minWidth, setMinWidth] = useState<number | undefined>(undefined);\n // Флаг, был ли поповер когда-либо открыт (чтобы onBlur не вызывался при первом рендере)\n const [wasEverOpen, setWasEverOpen] = useState(false);\n\n // Позиционирование через floating-ui\n const {\n refs,\n floatingStyles,\n update,\n placement: actualPlacement,\n } = useFloating({\n open: isOpen,\n placement: props.placement,\n middleware: [offset(props.offset ?? 8), flip(), shift()],\n whileElementsMounted: autoUpdate,\n });\n\n // Сохраняем обработчик клика вне поповера (чтобы можно было удалить при cleanup)\n const clickOutsideHandler = useRef<((e: MouseEvent) => void) | null>(null);\n // Таймаут для закрытия при hover-режиме\n const hoverCloseTimeout = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Отступ для hover-зоны (чтобы не закрывался мгновенно при небольших движениях мыши)\n const hoverOffset = useMemo(\n () => props.hoverOffset ?? props.offset ?? DEFAULT_POPOVER_OFFSET,\n [props.hoverOffset, props.offset],\n );\n // Задержка перед закрытием при hover\n const hoverCloseDelay = useMemo(() => props.hoverCloseDelay ?? DEFAULT_POPOVER_CLOSE_DELAY, [props.hoverCloseDelay]);\n\n /**\n * Навешиваем обработчики на reference-элемент в зависимости от режима:\n * - click / clickOpen → открытие/переключение по клику\n * - hover → открытие/закрытие при наведении\n */\n useEffect(() => {\n if (props.isDisabled) return;\n const refEl = refs.reference.current;\n if (!refEl) return;\n\n // Режим клика\n if ((props.mode === 'click' || props.mode === 'clickOpen') && refEl instanceof HTMLElement) {\n const handleClick = () => {\n if (props.mode === 'click') {\n setIsOpen((prev) => !prev);\n } else if (props.mode === 'clickOpen') {\n setIsOpen(true);\n }\n };\n\n refEl.addEventListener('click', handleClick);\n return () => {\n refEl.removeEventListener('click', handleClick);\n };\n\n // Режим ховера\n } else if (props.mode === 'hover' && refEl instanceof HTMLElement) {\n const handleMouseEnter = () => {\n setIsOpen(true);\n };\n const handleMouseLeave = () => {\n if (hoverCloseTimeout.current) clearTimeout(hoverCloseTimeout.current);\n hoverCloseTimeout.current = setTimeout(() => setIsOpen(false), hoverCloseDelay);\n };\n\n refEl.addEventListener('mouseenter', handleMouseEnter);\n refEl.addEventListener('mouseleave', handleMouseLeave);\n return () => {\n refEl.removeEventListener('mouseenter', handleMouseEnter);\n refEl.removeEventListener('mouseleave', handleMouseLeave);\n if (hoverCloseTimeout.current) clearTimeout(hoverCloseTimeout.current);\n };\n }\n }, [props.mode, refs.reference, hoverCloseDelay, props.isDisabled]);\n\n // Автоматическое обновление позиции, пока поповер открыт\n useEffect(() => {\n if (!isOpen || !refs.reference.current || !refs.floating.current || props.isDisabled) return;\n\n const cleanup = autoUpdate(refs.reference.current, refs.floating.current, update);\n\n return () => cleanup();\n }, [isOpen, refs.reference, refs.floating, update, props.isDisabled]);\n\n /**\n * Логика закрытия поповера при клике вне него\n */\n useEffect(() => {\n if (!isOpen || !refs.reference.current || !refs.floating.current || props.isDisabled) return;\n\n if (props.isClickOutside) {\n clickOutsideHandler.current = (e: MouseEvent) => {\n const refEl = refs.reference.current;\n const floatingEl = refs.floating.current;\n const otherRefs = props.refsExcludeClickOutside || [];\n\n // Проверяем, что клик не по поповеру, не по reference и не по исключенным ref'ам\n if (\n refEl instanceof HTMLElement &&\n floatingEl instanceof HTMLElement &&\n !refEl.contains(e.target as Node) &&\n !floatingEl.contains(e.target as Node) &&\n !otherRefs.some((ref) => {\n if (typeof ref === 'object' && ref !== null && 'current' in ref) {\n return (ref.current as HTMLElement | null)?.contains(e.target as Node);\n }\n return false;\n })\n ) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('mousedown', clickOutsideHandler.current);\n }\n\n return () => {\n if (clickOutsideHandler.current) {\n document.removeEventListener('mousedown', clickOutsideHandler.current);\n clickOutsideHandler.current = null;\n }\n if (hoverCloseTimeout.current) {\n clearTimeout(hoverCloseTimeout.current);\n }\n };\n }, [isOpen, refs.reference, refs.floating, props.isClickOutside, props.isDisabled, props.refsExcludeClickOutside]);\n\n /**\n * Поддержка режима \"плавающего hover\"\n * Закрывает поповер, если мышь ушла за пределы reference+floating с отступом\n */\n useEffect(() => {\n if (!isOpen || !props.isFloatingHover || !refs.reference.current || !refs.floating.current || props.isDisabled)\n return;\n\n const refEl = refs.reference.current;\n const floatingEl = refs.floating.current;\n\n const handleMouseMove = (e: MouseEvent) => {\n const mouseX = e.clientX;\n const mouseY = e.clientY;\n\n const refRect = refEl.getBoundingClientRect();\n const floatingRect = floatingEl.getBoundingClientRect();\n\n // Находим, внутри ли курсор reference или floating с учётом отступа\n const isInsideRef =\n mouseX >= refRect.left - hoverOffset &&\n mouseX <= refRect.right + hoverOffset &&\n mouseY >= refRect.top - hoverOffset &&\n mouseY <= refRect.bottom + hoverOffset;\n\n const isInsideFloating =\n mouseX >= floatingRect.left - hoverOffset &&\n mouseX <= floatingRect.right + hoverOffset &&\n mouseY >= floatingRect.top - hoverOffset &&\n mouseY <= floatingRect.bottom + hoverOffset;\n\n if (isInsideRef || isInsideFloating) {\n // Если вернулись внутрь — отменяем закрытие\n if (hoverCloseTimeout.current) {\n clearTimeout(hoverCloseTimeout.current);\n hoverCloseTimeout.current = null;\n }\n } else {\n // Если вышли — запускаем таймер на закрытие\n if (hoverCloseTimeout.current) clearTimeout(hoverCloseTimeout.current);\n hoverCloseTimeout.current = setTimeout(() => setIsOpen(false), hoverCloseDelay);\n }\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n if (hoverCloseTimeout.current) {\n clearTimeout(hoverCloseTimeout.current);\n }\n };\n }, [isOpen, props.isFloatingHover, refs.reference, refs.floating, hoverOffset, hoverCloseDelay, props.isDisabled]);\n\n /**\n * Устанавливаем минимальную ширину поповера, равную reference (если включено isWidthAsContent)\n */\n useLayoutEffect(() => {\n if (!props.isWidthAsContent || !refs.reference.current) return;\n const rect = refs.reference.current.getBoundingClientRect();\n setMinWidth(rect.width);\n }, [props.isWidthAsContent, refs.reference]);\n\n // Методы управления открытием\n const open = useCallback(() => {\n if (props.isDisabled) return;\n setIsOpen(true);\n }, [props.isDisabled]);\n const close = useCallback(() => {\n if (props.isDisabled) return;\n setIsOpen(false);\n }, [props.isDisabled]);\n const toggle = useCallback(() => {\n if (props.isDisabled) return;\n setIsOpen((prev) => !prev);\n }, [props.isDisabled]);\n\n // Объединяем стили floating-ui с дополнительными ограничениями по ширине\n const combinedStyles = useMemo(() => {\n return {\n ...floatingStyles,\n minWidth: props.isWidthAsContent && minWidth ? `${minWidth}px` : undefined,\n maxWidth: props.isWidthAsContent && minWidth ? `${minWidth}px` : undefined,\n };\n }, [floatingStyles, props.isWidthAsContent, minWidth]);\n\n /**\n * Вызываем onFocus при открытии\n * и запоминаем, что поповер хоть раз был открыт\n */\n useEffect(() => {\n if (isOpen) {\n onFocus?.();\n setWasEverOpen(true);\n }\n }, [isOpen, onFocus]);\n\n /**\n * Вызываем onBlur при первом закрытии после открытия\n */\n useEffect(() => {\n if (!isOpen && wasEverOpen) {\n onBlur?.();\n }\n }, [isOpen, wasEverOpen, onBlur]);\n\n /**\n * Закрытие при потере фокуса (focusin вне поповера + reference)\n * (но не на исключённые элементы)\n */\n useEffect(() => {\n if (!isOpen || props.isDisabled) return;\n\n const handleFocusIn = (e: FocusEvent) => {\n const refEl = refs.reference.current;\n const floatingEl = refs.floating.current;\n const otherRefs = props.refsExcludeClickOutside || [];\n\n const isInside =\n (refEl instanceof HTMLElement && refEl.contains(e.target as Node)) ||\n (floatingEl instanceof HTMLElement && floatingEl.contains(e.target as Node)) ||\n otherRefs.some((ref) => {\n if (ref && 'current' in ref && ref.current && ref.current instanceof HTMLElement) {\n return ref.current.contains(e.target as Node);\n }\n return false;\n });\n\n if (!isInside) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('focusin', handleFocusIn);\n\n return () => {\n document.removeEventListener('focusin', handleFocusIn);\n };\n }, [isOpen, refs.reference, refs.floating, props.refsExcludeClickOutside, props.isDisabled]);\n\n /**\n * Вызываем onBlurReference, если фокус ушёл с reference-элемента\n * (но не на исключённые элементы)\n */\n useEffect(() => {\n if (!refs.reference.current || props.isDisabled || !onBlurReference) return;\n\n const refEl = refs.reference.current;\n const otherRefs = props.refsExcludeBlur || [];\n\n const handleBlur = (e: FocusEvent) => {\n if (\n refEl instanceof HTMLElement &&\n !refEl.contains(e.relatedTarget as Node) &&\n !otherRefs.some((ref) => {\n if (ref && 'current' in ref && ref.current && ref.current instanceof HTMLElement)\n return ref.current.contains(e.relatedTarget as Node);\n })\n ) {\n onBlurReference();\n }\n };\n\n if (refEl instanceof HTMLElement) refEl.addEventListener('blur', handleBlur, true);\n\n return () => {\n if (refEl instanceof HTMLElement) refEl.removeEventListener('blur', handleBlur, true);\n };\n }, [refs.reference, props.isDisabled, onBlurReference, props.refsExcludeBlur]);\n\n /**\n * Функция возвращает true или false в зависимости от состояния от FocusEvent который находится внутри или снаружи\n */\n const getIsInside = useCallback(\n (target: Node | null) => {\n if (!target) return false; // если relatedTarget null, значит фокус ушёл вне окна — закрываем\n\n const refEl = refs.reference.current;\n const floatingEl = refs.floating.current;\n const otherRefs = props.refsExcludeBlur || [];\n\n return (\n (refEl instanceof HTMLElement && refEl.contains(target)) ||\n (floatingEl instanceof HTMLElement && floatingEl.contains(target)) ||\n otherRefs.some((ref) => {\n if (ref && 'current' in ref && ref.current && ref.current instanceof HTMLElement) {\n return ref.current.contains(target);\n }\n return false;\n })\n );\n },\n [refs.reference, refs.floating, props.refsExcludeBlur],\n );\n // Возвращаем наружу API для использования поповера\n return {\n getIsInside,\n isOpen,\n setIsOpen,\n open,\n close,\n toggle,\n refReference: refs.setReference as Ref<HTMLElement | null>,\n refFloating: refs.setFloating as Ref<HTMLElement | null>,\n floatingStyles: combinedStyles,\n placement: actualPlacement,\n };\n};\n","import { addSXTypography } from '@local/components/typography';\nimport { addAlwaysOutline, addFont } from '@local/styles/add';\nimport { addSX } from '@local/styles/sx';\nimport { IThemeSizePropertyDefault, KEY_SIZE_DATA } from '@local/theme';\n\nimport { motion } from 'framer-motion';\nimport styled, { css } from 'styled-components';\n\nimport { StyledPopoverProps } from '.';\n\n/****************************************** Popover Genre *************************************************/\nconst addPopoverGenre = css<StyledPopoverProps>`\n ${(props) => css`\n background: ${props.theme.colors.button[props.$genre].background.rest};\n border-color: ${props.theme.colors.button[props.$genre].border.rest};\n color: ${props.theme.colors.button[props.$genre].color.rest};\n /* box-shadow: ${props.theme.effects.button}; */\n `};\n`;\n\n/****************************************** Popover Size *************************************************/\nexport const addPopoverSize = css<StyledPopoverProps>`\n ${(props) =>\n addPopoverSizeConstructor({\n ...KEY_SIZE_DATA[props.$size ?? 'medium'],\n })};\n`;\nexport const addPopoverSizeConstructor = (props: IThemeSizePropertyDefault) => css`\n display: flex;\n border-radius: ${props.radius}px;\n padding: ${props.padding}px;\n gap: ${props.padding - 2}px;\n`;\n\n/****************************************** Default *************************************************/\nexport const PopoverWrapper = styled(motion.div)<StyledPopoverProps>`\n max-width: ${(props) => props.$maxWidth || '100%'};\n max-height: ${(props) => props.$maxHeight || '100%'};\n overflow: auto;\n flex-direction: column;\n ${addFont};\n ${addPopoverSize};\n ${addAlwaysOutline};\n ${addSXTypography};\n ${addPopoverGenre};\n ${addSX};\n`;\n","export const DEFAULT_POPOVER_OFFSET = 8;\nexport const DEFAULT_POPOVER_CLOSE_DELAY = 100;\n","import { IThemeSizePropertyDefault, KEY_SIZE_DATA } from '@local/theme';\n\nimport styled, { css } from 'styled-components';\n\nimport { Popover, PopoverProps } from '../popover';\nimport { Stack } from '../stack';\n\nexport const TooltipContainer = styled(Stack)`\n display: flex;\n width: fit-content;\n height: fit-content;\n`;\n\nexport const addTooltipBoxSize = css<PopoverProps>`\n ${(props) =>\n addTooltipBoxSizeConstructor({\n ...KEY_SIZE_DATA[props.size ?? 'medium'],\n })};\n`;\nexport const addTooltipBoxSizeConstructor = (props: IThemeSizePropertyDefault) => css`\n gap: 0px;\n padding: ${props.padding}px ${props.padding}px 0px ${props.padding}px;\n :after {\n content: '';\n display: block;\n height: ${props.padding}px;\n width: 100%;\n }\n`;\n\n/****************************************** TooltipBox *************************************************/\nexport const TooltipBox = styled(Popover)`\n ${addTooltipBoxSize};\n`;\n","import { Typography } from '@local/components/typography';\n\nimport { FC, memo, Ref } from 'react';\n\nimport { usePopover } from '../popover';\nimport {\n DEFAULT_TOOLTIP_OFFSET_FALLBACK,\n DEFAULT_TOOLTIP_PLACEMENT_FALLBACK,\n TooltipBox,\n TooltipContainer,\n TooltipProps,\n} from '.';\n\nexport const Tooltip: FC<TooltipProps> = memo((props) => {\n if (props.isDisabled) return <TooltipContainer sx={props.sx}>{props.children}</TooltipContainer>;\n\n return <TooltipContent {...props} />;\n});\n\nexport const TooltipContent: FC<TooltipProps> = (props) => {\n const { isOpen, refReference, refFloating, floatingStyles } = usePopover({\n placement: props.placement ?? DEFAULT_TOOLTIP_PLACEMENT_FALLBACK,\n offset: props.offset ?? DEFAULT_TOOLTIP_OFFSET_FALLBACK,\n mode: props.mode ?? 'hover',\n isClickOutside: props.isClickOutside ?? true,\n isFloatingHover: props.isFloatingHover ?? true,\n isWidthAsContent: props.isWidthAsContent ?? false,\n hoverCloseDelay: props.hoverCloseDelay ?? undefined,\n hoverOffset: props.hoverOffset ?? undefined,\n });\n return (\n <>\n <TooltipContainer sx={props.sx} ref={refReference as Ref<HTMLDivElement | null>}>\n {props.children}\n </TooltipContainer>\n <TooltipBox\n size={props.size}\n isOpen={isOpen}\n genre={props.genre}\n floatingStyles={floatingStyles}\n ref={refFloating}\n maxHeight={props.maxHeight}\n maxWidth={props.maxWidth}\n >\n <Typography\n sx={\n props.sxTypography ?? {\n default: {\n size: 14,\n },\n }\n }\n >\n {props.content}\n </Typography>\n </TooltipBox>\n </>\n );\n};\n\nTooltip.displayName = 'Tooltip';\n","import { Placement } from '@floating-ui/react';\n\nexport const DEFAULT_TOOLTIP_PLACEMENT_FALLBACK: Placement = 'bottom-start';\nexport const DEFAULT_TOOLTIP_OFFSET_FALLBACK: number = 8;\n","import { useScreenWidth } from '@local/contexts/context-screen-width';\nimport { useOverflowing } from '@local/hooks/use-overflowing';\n\nimport { createLink, LinkProps } from '@tanstack/react-router';\nimport { memo, useMemo } from 'react';\n\nimport { Tooltip } from '../tooltip';\nimport { Title, TypographyCSSProps, TypographyProps, TypographyTooltipProps } from '.';\n\nconst TypographyWithRef = (props: TypographyProps) => {\n const { screenActual } = useScreenWidth();\n const cssProps: TypographyCSSProps & Pick<TypographyProps, 'onClick' | 'className' | 'style'> = useMemo(\n () => ({\n $sxTypography: props.sx,\n style: props.style,\n className: props.className,\n $sx: props.sxStandard,\n $isTransitionFontSize: props.isTransitionFontSize,\n $isDisabledOutline: props.isDisabledOutline,\n $isOutlineBoxShadow: props.isOutlineBoxShadow,\n $isReadOnly: props.isReadOnly,\n onClick: props.onClick ? props.onClick : () => {},\n }),\n [\n props.sx,\n props.style,\n props.className,\n props.sxStandard,\n props.onClick,\n props.isDisabledOutline,\n props.isOutlineBoxShadow,\n props.isReadOnly,\n props.isTransitionFontSize,\n ],\n );\n\n const screenSX = useMemo(() => props.sx?.[screenActual] ?? props.sx?.default, [props.sx, screenActual]);\n\n if (screenSX && 'variant' in screenSX) {\n if (screenSX.variant === 'h7' || screenSX.variant === 'h8' || screenSX.variant === 'h9') {\n return (\n <Title\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n ref={props.ref as any}\n as={props.isAnchor ? 'a' : props.isParagraph ? 'p' : props.isSpan ? 'span' : 'span'}\n href={props.href}\n {...cssProps}\n >\n {props.children}\n </Title>\n );\n } else {\n return (\n <Title\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n ref={props.ref as any}\n as={props.isAnchor ? 'a' : props.isParagraph ? 'p' : props.isSpan ? 'span' : screenSX.variant}\n href={props.href}\n {...cssProps}\n >\n {props.children}\n </Title>\n );\n }\n }\n\n return (\n <Title\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n ref={props.ref as any}\n as={props.isAnchor ? 'a' : props.isParagraph ? 'p' : props.isSpan ? 'span' : 'span'}\n href={props.href}\n {...cssProps}\n >\n {props.children}\n </Title>\n );\n};\n\nexport const Typography = (props: TypographyProps) => {\n return <TypographyWithRef {...props} />;\n};\n\nconst TypographySizeIsAnchor = (props: TypographyProps & LinkProps) => {\n return <TypographyWithRef isAnchor {...props} ref={props.ref} href={props.href} />;\n};\n\nexport const TypographyLink = createLink(TypographySizeIsAnchor);\n\nexport const TypographyTooltip = memo((props: TypographyTooltipProps) => {\n const { isDisabled, ref } = useOverflowing<HTMLDivElement>({\n isCheckSize: props.tooltip.isDisabled !== undefined ? !props.tooltip.isDisabled : true,\n dependencies: [props.children],\n });\n return (\n <Tooltip isDisabled={isDisabled} content={props.children} {...props.tooltip}>\n <TypographyWithRef ref={ref} {...props.typography} style={{ position: 'relative' }}>\n {props.children}\n </TypographyWithRef>\n </Tooltip>\n );\n});\n\nTypographyTooltip.displayName = 'TypographyTooltip';\nTypographyWithRef.displayName = 'TypographyWithRef';\nTypographySizeIsAnchor.displayName = 'TypographySizeIsAnchor';\n","import { addRippleDefault } from '@local/components/ripple';\nimport { addSXTypography } from '@local/components/typography';\nimport { addFont, addOutline, addTransition } from '@local/styles/add';\nimport { addSX } from '@local/styles/sx';\nimport { KEY_SIZE_DATA } from '@local/theme';\n\nimport { motion } from 'framer-motion';\nimport styled, { css } from 'styled-components';\n\nimport { StyledDollarButtonIconsWrapperProps, StyledDollarButtonProps } from '.';\n\n/**\n * Add\n */\nconst addButtonGenre = css<StyledDollarButtonProps>`\n ${(props) => css`\n background: ${props.theme.colors.button[props.$genre].background.rest};\n border-color: ${props.theme.colors.button[props.$genre].border.rest};\n color: ${props.theme.colors.button[props.$genre].color.rest};\n &:hover {\n ${\n (!props.$isHidden || props.$isNotHoverEffect) &&\n css`\n background: ${props.theme.colors.button[props.$genre].background.hover};\n border-color: ${props.theme.colors.button[props.$genre].border.hover};\n color: ${props.theme.colors.button[props.$genre].color.hover};\n `\n }\n }\n `};\n`;\nconst addButtonDisabled = css<StyledDollarButtonProps>`\n ${(props) =>\n props.$isHidden\n ? css`\n opacity: 0.5;\n background: ${props.theme.colors.button[props.$genre].background.rest} !important;\n color: ${props.theme.colors.button[props.$genre].color.rest} !important;\n `\n : css`\n opacity: 1;\n `}\n`;\nconst addButtonIsHiddenBorder = css<StyledDollarButtonProps>`\n ${(props) =>\n props.$isHiddenBorder &&\n css`\n border: 0px transparent !important;\n `}\n`;\nconst addButtonIsRadius = css<StyledDollarButtonProps>`\n ${(props) =>\n props.$isRadius &&\n css`\n border-radius: 100px;\n `}\n`;\nconst addButtonIsPlaystationEffect = css<StyledDollarButtonProps>`\n ${(props) =>\n props.$isPlaystationEffect &&\n css`\n box-shadow: ${props.theme.effects.button};\n `}\n`;\nconst addButtonSize = css<StyledDollarButtonProps>`\n height: fit-content;\n min-height: ${(props) => KEY_SIZE_DATA[props.$size].height}px;\n max-height: fit-content;\n padding: 2px ${(props) => KEY_SIZE_DATA[props.$size].padding}px;\n border-radius: ${(props) => KEY_SIZE_DATA[props.$size].radius}px;\n gap: ${(props) => KEY_SIZE_DATA[props.$size].padding - 2}px;\n ${(props) =>\n props.$isFullSize &&\n css`\n height: 100%;\n width: 100%;\n border-radius: 0px;\n `};\n ${(props) =>\n props.$isWidthAsHeight &&\n css`\n width: ${KEY_SIZE_DATA[props.$size].height}px;\n min-width: ${KEY_SIZE_DATA[props.$size].height}px;\n padding: 0px;\n `};\n ${(props) =>\n props.$isMinWidthAsContent &&\n css`\n min-width: max-content;\n `};\n`;\nconst addButtonBorder = css`\n border: 1px solid transparent;\n`;\nconst addButtonFlex = css<StyledDollarButtonProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n/**\n * Styled\n */\nexport const StyledButton = styled(motion.button)<StyledDollarButtonProps>`\n cursor: pointer;\n user-select: none;\n\n ${addButtonBorder};\n ${addButtonSize};\n ${addButtonGenre};\n ${addButtonDisabled};\n ${addButtonIsHiddenBorder};\n ${addButtonIsRadius};\n ${addButtonIsPlaystationEffect};\n ${addButtonFlex};\n ${addRippleDefault};\n ${addTransition};\n ${addFont};\n ${addOutline};\n ${addSXTypography};\n ${addSX};\n`;\nexport const StyledButtonIconsWrapper = styled.div<StyledDollarButtonIconsWrapperProps>`\n ${(props) =>\n props.$isIconGroup\n ? css`\n display: flex;\n gap: ${KEY_SIZE_DATA[props.$size].padding - 2}px;\n align-items: center;\n order: ${props.$iconGroupOrder || 'initial'};\n `\n : css`\n display: contents;\n `}\n`;\n","import { getIconComponents } from '@local/components/icon';\nimport { Ripple } from '@local/components/ripple';\nimport { KEY_SIZE_DATA } from '@local/theme';\n\nimport { useMergeRefs } from '@floating-ui/react';\nimport { FC, Ref, useMemo, useRef } from 'react';\nimport { useTheme } from 'styled-components';\n\nimport { ButtonProps, StyledButton, StyledButtonIconsWrapper } from '.';\n\nexport const Button: FC<ButtonProps> = (props) => {\n const theme = useTheme();\n\n const iconComponents = useMemo(\n () => getIconComponents({ icons: props.icons ?? [], size: props.size }),\n [props.icons, props.size],\n );\n\n const handleClick: ButtonProps['onClick'] = (event) => {\n if (!props.isDisabled && props.onClick) {\n props.onClick(event);\n }\n };\n const refDefault = useRef<HTMLButtonElement>(null);\n\n const ref = useMergeRefs([refDefault, props.ref]);\n\n return (\n <StyledButton\n $font={{\n ...props.font,\n size: props.font?.size ?? KEY_SIZE_DATA[props.size].font,\n weight: props.font?.weight ?? 700,\n }}\n $isNotHoverEffect={props.isNotHoverEffect}\n whileTap={props.isWhileTapEffect ? { scale: 0.9, transition: { duration: 0.01 } } : {}}\n id={props.id}\n tabIndex={props.tabIndex ?? 0}\n $isFullSize={props.isFullSize}\n $genre={props.genre}\n $size={props.size}\n $isDisabled={props.isDisabled}\n $isDisabledOutline={props.isDisabled ?? props.isDisabledOutline}\n $isOutlineBoxShadow={props.isOutlineBoxShadow}\n $isReadOnly={props.isReadOnly}\n $isMinWidthAsContent={props.isMinWidthAsContent}\n $isWidthAsHeight={props.isWidthAsHeight}\n $isRadius={props.isRadius}\n $isHidden={props.isHidden}\n $isPlaystationEffect={props.isPlaystationEffect}\n $sxTypography={props.sxTypography}\n $isHiddenBorder={props.isHiddenBorder || props.isPlaystationEffect}\n disabled={props.isDisabled}\n type={props.type ?? 'button'}\n className={props.className}\n onClick={handleClick}\n onFocus={props.onFocus}\n onMouseDown={props.onMouseDown}\n ref={ref as Ref<HTMLButtonElement>}\n $sx={props.sx}\n >\n <Ripple\n color={theme.colors.checkbox[props.genre].color.rest}\n isDisabled={props.isDisabled || props.isDisabledRipple}\n isHidden={props.isHidden}\n />\n\n {!props.isOnlyIcon && <div style={{ order: 0, display: 'contents' }}>{props.children && props.children}</div>}\n <StyledButtonIconsWrapper\n $size={props.size}\n $isIconGroup={props.isIconGroup}\n $iconGroupOrder={'iconGroupOrder' in props ? props.iconGroupOrder : undefined}\n >\n {iconComponents}\n </StyledButtonIconsWrapper>\n </StyledButton>\n );\n};\n","import { css, styled } from 'styled-components';\n\nimport { addSX } from '@local/styles/sx';\n\nimport { StyledButtonGroupProps } from '.';\n\n/****************************************** Position *************************************************/\nconst ButtonGroupWrapperPositionHorizontal = css`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-content: flex-start;\n justify-content: space-between;\n & #jenesei-button {\n &:not(:only-child) {\n flex-grow: 1;\n &:first-child {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n }\n &:last-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n }\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n }\n }\n`;\n\nconst ButtonGroupWrapperPositionVertical = css`\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n\n & #jenesei-button {\n &:not(:only-child) {\n &:first-child {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n &:last-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n }\n }\n`;\n\nexport const ButtonGroupWrapper = styled.div<StyledButtonGroupProps>`\n & #jenesei-button {\n &:focus-visible {\n z-index: 1;\n }\n }\n ${(props) =>\n props.$position === 'horizontal' ? ButtonGroupWrapperPositionHorizontal : ButtonGroupWrapperPositionVertical};\n ${addSX};\n`;\n","import { IThemeSizePropertyDefault, KEY_SIZE_DATA } from '@local/theme';\n\nimport { FC } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { addFont } from '../add';\nimport { WordsPullUp } from '../motion';\nimport { addSX } from '../sx';\nimport { addErrorStylesProps, ErrorMessageProps, ErrorMessagePropsDollar } from '.';\n\nconst ErrorMessageSize = css<ErrorMessagePropsDollar>`\n ${(props) =>\n props.$size\n ? ErrorMessageSizeConstructor({ ...KEY_SIZE_DATA[props.$size], $isErrorAbsolute: props.$isErrorAbsolute })\n : null};\n`;\nconst ErrorMessageSizeConstructor = (\n props: IThemeSizePropertyDefault & { $isErrorAbsolute: ErrorMessageProps['isErrorAbsolute'] },\n) => css`\n ${\n props.$isErrorAbsolute\n ? css`\n position: absolute;\n top: calc(100% + 4px);\n padding-left: ${props.padding}px;\n color: ${(props) => props.theme.states.danger};\n `\n : css`\n position: static;\n padding: 0px ${props.padding}px;\n color: ${(props) => props.theme.states.danger};\n `\n }\n`;\n\nexport const ErrorMessageComponent = styled.div<ErrorMessagePropsDollar>`\n width: 100%;\n display: flex;\n flex-wrap: wrap;\n ${ErrorMessageSize}\n ${addFont};\n ${addSX}\n`;\nexport const addError = css<addErrorStylesProps>`\n ${(props) =>\n props.$error?.isError &&\n css`\n border-color: ${(props) => props.theme.states.danger};\n &:focus,\n &:active,\n &:hover,\n &:focus-visible {\n border-color: ${(props) => props.theme.states.danger};\n }\n `};\n`;\nexport const ErrorMessage: FC<ErrorMessageProps> = (props) => {\n return (\n <>\n {props.errorMessage && props.isError ? (\n <ErrorMessageComponent\n $size={props.size}\n $font={props.font}\n $sx={props.sx}\n $isErrorAbsolute={props.isErrorAbsolute}\n >\n <WordsPullUp text={props.errorMessage} />\n </ErrorMessageComponent>\n ) : null}\n </>\n );\n};\n","import { addSXTypography } from '@local/components/typography';\nimport { addDisabled, addFont, addOutline, addTransition } from '@local/styles/add';\nimport { addError } from '@local/styles/error';\nimport { addSX } from '@local/styles/sx';\nimport { IThemeSizePropertyDefault, KEY_SIZE_DATA } from '@local/theme';\n\nimport styled, { css } from 'styled-components';\n\nimport { addRippleDefault } from '../ripple';\nimport { StyledCheckboxProps } from '.';\n\n/****************************************** Size *************************************************/\nexport const CheckboxSize = css<StyledCheckboxProps>`\n ${(props) => CheckboxSizeConstructor({ ...KEY_SIZE_DATA[props.$size], isWidthAsHeight: props.$isWidthAsHeight })};\n`;\nexport const CheckboxSizeConstructor = (\n props: IThemeSizePropertyDefault & {\n isWidthAsHeight?: boolean;\n },\n) => css`\n height: ${props.height}px;\n min-height: ${props.height}px;\n border-radius: ${props.radius}px;\n gap: ${props.padding - 2}px;\n padding: ${props.padding - 4}px;\n ${\n props.isWidthAsHeight &&\n css`\n width: ${props.height}px;\n min-width: ${props.height}px;\n padding: 0px;\n `\n };\n`;\n\n/****************************************** Genre *************************************************/\nexport const CheckboxGenre = css<StyledCheckboxProps>`\n ${(props) => css`\n background: ${props.theme.colors.checkbox[props.$genre].background.rest};\n border-color: ${props.theme.colors.checkbox[props.$genre].border.rest};\n color: ${props.theme.colors.checkbox[props.$genre].color.rest};\n &:hover {\n background: ${props.theme.colors.checkbox[props.$genre].background.hover};\n border-color: ${props.theme.colors.checkbox[props.$genre].border.hover};\n color: ${props.theme.colors.checkbox[props.$genre].color.hover};\n }\n `};\n`;\n\n/****************************************** Disabled *************************************************/\nconst addCheckboxDisabled = css<StyledCheckboxProps>`\n ${addDisabled};\n ${(props) =>\n props.$isDisabled\n ? css`\n background: ${props.theme.colors.checkbox[props.$genre].background.rest} !important;\n border-color: ${props.theme.colors.checkbox[props.$genre].border.rest} !important;\n color: ${props.theme.colors.checkbox[props.$genre].color.rest} !important;\n `\n : ''}\n`;\n\n/****************************************** HiddenBorder *************************************************/\nconst CheckboxHiddenBorder = css<StyledCheckboxProps>`\n ${(props) =>\n props.$isHiddenBorder &&\n css`\n border-color: transparent !important;\n `}\n`;\n\n/****************************************** Default *************************************************/\nexport const CheckboxWrapper = styled.button<StyledCheckboxProps>`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n border: 1px solid transparent;\n user-select: none;\n cursor: pointer;\n background-color: ${(props) => props.$isNotBackground && 'transparent'};\n\n ${addRippleDefault};\n ${addTransition};\n ${CheckboxGenre};\n ${CheckboxHiddenBorder};\n ${CheckboxSize};\n ${addCheckboxDisabled}\n ${addOutline};\n ${addFont};\n ${addError};\n ${addSXTypography};\n ${addSX};\n`;\n","import { addFont } from '@local/styles/add';\nimport { addSX } from '@local/styles/sx';\nimport { IThemeSizePropertyDefault, KEY_SIZE_DATA } from '@local/theme';\n\nimport styled, { css } from 'styled-components';\n\nimport { CheckboxGroupWrapperProps } from '.';\n\n/****************************************** Size *************************************************/\nexport const CheckboxGroupSize = css<CheckboxGroupWrapperProps>`\n ${(props) => CheckboxGroupSizeConstructor(KEY_SIZE_DATA[props.$size])};\n`;\nexport const CheckboxGroupSizeConstructor = (props: IThemeSizePropertyDefault) => css`\n gap: ${props.padding - 2}px;\n`;\n\n/****************************************** Default *************************************************/\nexport const CheckboxGroupWrapper = styled.div<CheckboxGroupWrapperProps>`\n display: flex;\n flex-direction: column;\n align-items: stretch;\n ${CheckboxGroupSize};\n ${addFont};\n ${addSX};\n`;\n\nexport const CheckboxGroupItem = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n`;\n\nexport const CheckboxGroupLabel = styled.div`\n user-select: none;\n`;\n\nexport const CheckboxChildren = styled.div`\n user-select: none;\n`;\n","import { LIST_LANGUAGE, LIST_MAP_THEME } from '@local/consts';\nimport { ErrorMessage } from '@local/styles/error';\nimport { KEY_SIZE_DATA } from '@local/theme';\n\nimport { useMergeRefs } from '@floating-ui/react';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport moment from 'moment';\nimport { FC, KeyboardEvent, memo, Ref, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTheme } from 'styled-components';\n\nimport { Button } from '../button';\nimport { Icon } from '../icon';\nimport { Popover, usePopover } from '../popover';\nimport { Typography } from '../typography';\nimport {\n ButtonList,\n ContainerDropdownListOptionProps,\n ContainerSelectListOptionProps,\n DropdownList,\n DropdownListOption,\n DropdownListOptionIcon,\n DropdownListParent,\n ISelectItem,\n ISelectLanguageOption,\n ISelectMapThemeOption,\n SelectLanguageProps,\n SelectList,\n SelectListOption,\n SelectMapThemeProps,\n SelectMonthProps,\n SelectMonthsProps,\n SelectProps,\n SelectTextArea,\n SelectWrapper,\n SelectYearProps,\n} from '.';\n\nconst DEFAULT_LABEL_SELECT_ALL = 'Select all option';\nconst DEFAULT_LABEL_PLACEHOLDER = 'Select an option';\nconst DEFAULT_LABEL_EMPTY_OPTION = 'No options available';\nconst DEFAULT_LABEL_AND_MORE = (count: number) => `+${count} more`;\nconst DEFAULT_LABEL_ADD_OPTION = (value: string) => `Add \"${value}\" option`;\n\nconst DEFAULT_MAX_VIEW_SELECT = 2;\nconst DEFAULT_MAX_VIEW_DROPDOWN = 5;\nconst DEFAULT_MIN_VIEW_DROPDOWN = 1;\nconst DEFAULT_OVERSCAN = 1;\n\nexport const Select = <T extends object & ISelectItem>(props: SelectProps<T>) => {\n const sizeHeight = useMemo(() => KEY_SIZE_DATA[props.size].height, [props.size]);\n const sizePadding = useMemo(() => KEY_SIZE_DATA[props.size].padding, [props.size]);\n const sizeRadius = useMemo(() => KEY_SIZE_DATA[props.size].radius, [props.size]);\n\n const {\n isOpen,\n close,\n open,\n refReference: refReferencePopover,\n refFloating: refFloatingPopover,\n floatingStyles,\n toggle,\n } = usePopover({\n placement: 'bottom-start',\n offset: sizePadding,\n mode: 'independence',\n isClickOutside: true,\n isWidthAsContent: true,\n isDisabled: props?.isDisabled,\n onBlur: props.onBlur,\n onFocus: props.onFocus,\n });\n const refTextArea = useRef<HTMLTextAreaElement>(null);\n const refDropdownList = useRef<HTMLDivElement>(null);\n\n const refReference = useMergeRefs([props.refReference, refReferencePopover]);\n const refFloating = useMergeRefs([props.refFloating, refFloatingPopover]);\n\n const labelSelectAll = useMemo(() => props.labelSelectAll ?? DEFAULT_LABEL_SELECT_ALL, [props.labelSelectAll]);\n const labelPlaceholder = useMemo(() => props.labelPlaceholder ?? DEFAULT_LABEL_PLACEHOLDER, [props.labelPlaceholder]);\n const labelEmptyOption = useMemo(\n () => props.labelEmptyOption ?? DEFAULT_LABEL_EMPTY_OPTION,\n [props.labelEmptyOption],\n );\n const labelAndMore = useMemo(() => props.labelAndMore ?? DEFAULT_LABEL_AND_MORE, [props.labelAndMore]);\n const labelAddOption = useMemo(() => props.labelAddOption ?? DEFAULT_LABEL_ADD_OPTION, [props.labelAddOption]);\n\n const maxViewSelect = useMemo(() => props.maxViewSelect ?? DEFAULT_MAX_VIEW_SELECT, [props.maxViewSelect]);\n const maxViewDropdown = useMemo(() => props.maxViewDropdown ?? DEFAULT_MAX_VIEW_DROPDOWN, [props.maxViewDropdown]);\n const minViewDropdown = useMemo(() => props.minViewDropdown ?? DEFAULT_MIN_VIEW_DROPDOWN, [props.minViewDropdown]);\n\n const isAll = useMemo(\n () => props.value.length === props.option.length || props.value.length === props.optionAllLength,\n [props.option.length, props.optionAllLength, props.value.length],\n );\n const isHaveOption = useMemo(() => !!props.option.length, [props.option.length]);\n const isHaveValue = useMemo(() => !!props.value.length, [props.value.length]);\n const isShowAddOption = useMemo(\n () => props.valueSearch && props.isShowAddOption,\n [props.valueSearch, props.isShowAddOption],\n );\n const [isShowSearch, setIsShowSearch] = useState<boolean>(false);\n\n const optionsLength = useMemo(() => {\n if (props.isNotShowDisabledOptions) {\n return props.option.filter((option) => !option.isDisabled).length;\n } else {\n return props.option.length;\n }\n }, [props.option, props.isNotShowDisabledOptions]);\n\n const heightDropdownList = useMemo(\n () =>\n sizeHeight *\n (optionsLength < maxViewDropdown\n ? optionsLength < minViewDropdown\n ? optionsLength\n : optionsLength\n : maxViewDropdown),\n [sizeHeight, optionsLength, maxViewDropdown, minViewDropdown],\n );\n const heightPopover = useMemo(() => {\n const selectAll = props.isShowSelectAll && isHaveOption ? sizeHeight : 0;\n const selectNoOption = !isHaveOption ? sizeHeight : 0;\n const selectList = isHaveOption ? heightDropdownList : 0;\n const selectAdd = isShowAddOption ? sizeHeight : 0;\n const sum =\n (selectAll !== 0 ? 1 : 0) +\n (selectNoOption !== 0 ? 1 : 0) +\n (selectList !== 0 ? 1 : 0) +\n (selectAdd !== 0 ? 1 : 0);\n const padding = sum <= 1 ? 0 : (sum - 1) * (sizePadding / 2.8);\n return selectAll + selectNoOption + selectList + selectAdd + padding;\n }, [props.isShowSelectAll, sizeHeight, isHaveOption, sizePadding, heightDropdownList, isShowAddOption]);\n\n const isValueMoreMaxViewSelect = useMemo(\n () => props.value.length > maxViewSelect,\n [maxViewSelect, props.value.length],\n );\n const isShowIconSearchClear = useMemo(\n () => props.isShowIconSearchClear && props.valueSearch,\n [props.isShowIconSearchClear, props.valueSearch],\n );\n const isShowButtonList = useMemo(\n () => isShowIconSearchClear || props.isShowIconToggle || (props.isShowIconFetching && props.isFetching),\n [isShowIconSearchClear, props.isShowIconToggle, props.isShowIconFetching, props.isFetching],\n );\n const isShowScroll = useMemo(() => optionsLength > maxViewDropdown, [maxViewDropdown, optionsLength]);\n const isSelectedItem = useCallback(\n (option: T): boolean => {\n return isAll || props.value.some((val) => val.value === option.value);\n },\n [isAll, props.value],\n );\n const isShowDropdownSettingsList = useMemo(\n () => isShowAddOption || (props.isShowSelectAll && isHaveOption) || !isHaveOption,\n [isHaveOption, isShowAddOption, props.isShowSelectAll],\n );\n const listVirtualizer = useVirtualizer({\n count: optionsLength,\n estimateSize: props.getEstimateSize ? props.getEstimateSize : () => sizeHeight,\n getScrollElement: () => refDropdownList.current,\n overscan: DEFAULT_OVERSCAN,\n paddingEnd: 0,\n });\n\n const onChangeShowSearch = useCallback(\n (show: boolean) => {\n if (props.isSearch && !props.isDisabled) {\n setIsShowSearch(show);\n } else {\n setIsShowSearch(false);\n }\n },\n [props.isDisabled, props.isSearch],\n );\n const onClick = useCallback(\n (option: T) => {\n let newValues: T[] = [];\n const optionValue = option.value;\n\n const findIndex = (val: T) => val.value === optionValue;\n const index = props.value.findIndex(findIndex);\n const isFind = index !== -1;\n\n if (props.isMulti) {\n if (isFind) {\n newValues = [...props.value.slice(0, index), ...props.value.slice(index + 1)];\n } else {\n newValues = [...props.value, option];\n }\n } else {\n if (isFind && !props.isStayValueAfterSelect) {\n newValues = [...props.value.slice(0, index), ...props.value.slice(index + 1)];\n } else {\n newValues = [option];\n }\n }\n props.onChange(newValues);\n onChangeShowSearch(!!props.isStaySearchAfterSelect);\n if (props.isOnClickOptionClose) {\n close();\n }\n },\n [close, onChangeShowSearch, props],\n );\n const onClickAll = useCallback(() => {\n props.onChangeAll?.(isAll ? [] : props.option, !isAll);\n onChangeShowSearch(!!props.isStaySearchAfterSelect);\n if (props.isOnClickOptionClose) {\n close();\n }\n }, [close, isAll, onChangeShowSearch, props]);\n // const onClear = useCallback(() => {\n // props.onChange([]);\n // }, [props]);\n const onClearSearch = useCallback(() => {\n props.onChangeSearch?.('');\n }, [props]);\n const onScroll = useCallback(\n (containerRefElement?: HTMLDivElement | null) => {\n if (containerRefElement) {\n const { scrollHeight, scrollTop, clientHeight } = containerRefElement;\n if (scrollHeight - scrollTop - clientHeight < heightDropdownList && !props.isFetching && props.fetchNextPage) {\n props.fetchNextPage();\n }\n }\n },\n [heightDropdownList, props],\n );\n const onAddOption = useCallback(\n (value: string) => {\n props.onAddOption?.(value);\n props.onChangeSearch?.('');\n },\n [props],\n );\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n onChangeShowSearch(false);\n }, [onChangeShowSearch, props.isDisabled]);\n useEffect(() => {\n if (!isHaveValue) {\n onChangeShowSearch(true);\n }\n }, [isHaveValue, onChangeShowSearch]);\n useEffect(() => {\n if (!isOpen && isHaveValue) {\n onChangeShowSearch(false);\n }\n }, [isHaveValue, isOpen, onChangeShowSearch]);\n\n const theme = useTheme();\n const font = useMemo(() => {\n return {\n size: props.font?.size ?? 16,\n weight: props.font?.weight ?? (props.isBold ? 500 : 400),\n family: props.font?.family ?? theme.font.family,\n height: props.font?.height,\n };\n }, [props.font, theme.font.family, props.isBold]);\n return (\n <>\n <SelectWrapper\n tabIndex={0}\n $error={props?.error}\n $isNotShowHoverStyle={props?.isNotShowHoverStyle}\n $size={props.size}\n $genre={props.genre}\n $isCenter={props.isCenter}\n $sx={props.sx}\n $isOpen={isOpen}\n ref={refReference as Ref<HTMLDivElement | null>}\n onClick={() => {\n open();\n onChangeShowSearch(true);\n }}\n onFocus={() => {\n open();\n }}\n >\n {isShowSearch && (\n <SelectTextArea\n ref={refTextArea}\n genre={props.genre}\n size={props.size}\n minRows={1}\n maxRows={5}\n isAutoHeight\n onChange={(value) => {\n props?.onChangeSearch?.(value);\n }}\n value={props.valueSearch}\n placeholder={labelPlaceholder}\n />\n )}\n {isHaveValue && (props.isShowSelectAllLabel ? !isAll : true) ? (\n <SelectList\n $size={props.size}\n tabIndex={-1}\n $isWrapSelectOption={props.isWrapSelectOption}\n onMouseDown={(e) => {\n e.preventDefault();\n }}\n onClick={(e) => {\n e.preventDefault();\n }}\n >\n {props.value.map((value, index) => {\n if (index >= maxViewSelect) return null;\n\n const isChecked = isSelectedItem(value);\n return (\n <ContainerSelectListOption\n key={`${value.value}-${index}`}\n isChecked={isChecked}\n onClick={() => props.isClearWhenClickSelectListOption && onClick(value)}\n item={value}\n genre={props.genre}\n size={props.size}\n isBold={props.isBold}\n isOnlyColorInSelectListOption={props.isOnlyColorInSelectListOption}\n isClearWhenClickSelectListOption={props.isClearWhenClickSelectListOption}\n isWrapSelectOption={props.isWrapSelectOption}\n isNotShowHoverStyle={props.isNotShowHoverStyle}\n isCenter={props.isCenter}\n />\n );\n })}\n </SelectList>\n ) : null}\n {isHaveValue && (props.isShowSelectAllLabel ? isAll : false) ? (\n <Typography\n sxStandard={{\n default: { padding: `${sizePadding / 2.8}px 0px ${sizePadding / 2.8}px ${sizePadding / 2.8}px` },\n }}\n sx={{ default: { size: 16, line: 1, isNoUserSelect: true } }}\n >\n {labelSelectAll}\n </Typography>\n ) : null}\n {!isHaveValue && !props.isSearch ? (\n <Typography\n sxStandard={(theme) => ({\n default: {\n color: theme.colors.input[props.genre].color.placeholder,\n padding: `${sizePadding / 2.8}px 0px ${sizePadding / 2.8}px ${sizePadding / 2.8}px`,\n },\n })}\n sx={{ default: { size: 16, line: 1, isNoUserSelect: true } }}\n >\n {labelPlaceholder}\n </Typography>\n ) : null}\n\n {isValueMoreMaxViewSelect && isHaveValue && (props.isShowSelectAllLabel ? !isAll : true) ? (\n <Typography\n sxStandard={{\n default: { padding: `${sizePadding / 2.8}px 0px ${sizePadding / 2.8}px ${sizePadding / 2.8}px` },\n }}\n sx={{ default: { size: 16, line: 1, isNoUserSelect: true } }}\n >\n {labelAndMore(props.value.length - maxViewSelect)}\n </Typography>\n ) : null}\n {isShowButtonList ? (\n <ButtonList\n $size={props.size}\n onMouseDown={(e) => {\n e.preventDefault();\n }}\n >\n {isShowIconSearchClear && (\n <Button\n genre={props.genre}\n size='small'\n isWidthAsHeight\n isFullSize\n isRadius\n isOnlyIcon\n icons={[{ name: 'Close', type: 'id' }]}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onClearSearch();\n }}\n />\n )}\n {props.isShowIconToggle && (\n <Button\n genre={props.genre}\n size='small'\n isWidthAsHeight\n isFullSize\n isRadius\n isOnlyIcon\n icons={[{ name: 'Select', type: 'id' }]}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n toggle();\n }}\n />\n )}\n {props.isShowIconFetching && props.isFetching && (\n <Button\n tabIndex={-1}\n genre={props.genre}\n size='small'\n isWidthAsHeight\n isFullSize\n isRadius\n isHiddenBorder\n isDisabledRipple\n isNotHoverEffect\n >\n <Icon type={'loading'} name={'Circle'} size={props.size} />\n </Button>\n )}\n </ButtonList>\n ) : null}\n </SelectWrapper>\n <Popover\n sx={(theme) => ({\n default: {\n background: theme.colors.input[props.genre].background.rest,\n borderRadius: `${sizeRadius}px`,\n padding: '0px',\n maxHeight: `${heightPopover}px`,\n },\n })}\n isShowAlwaysOutline\n size={props.size}\n genre={props.genre}\n floatingStyles={floatingStyles}\n ref={refFloating}\n isOpen={isOpen}\n >\n <DropdownListParent\n tabIndex={-1}\n ref={refDropdownList}\n $size={props.size}\n onScroll={(e) => onScroll(e.target as HTMLDivElement)}\n >\n {isShowDropdownSettingsList && (\n <DropdownList style={{ position: 'sticky', top: 0, zIndex: 1 }}>\n {isShowAddOption ? (\n <DropdownListOption\n tabIndex={0}\n onClick={() => props.valueSearch && onAddOption(props.valueSearch)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && props.valueSearch) onAddOption(props.valueSearch);\n }}\n $isCenter={props.isCenter}\n $isNotShowHoverStyle={props.isNotShowHoverStyle}\n $genre={props.genre}\n $size={props.size}\n $font={font}\n $isBold={props.isBold}\n $isChecked={isAll}\n style={{ position: 'relative', minHeight: `${sizeHeight}px` }}\n >\n {props.valueSearch && labelAddOption(props.valueSearch)}\n </DropdownListOption>\n ) : null}\n {props.isShowSelectAll && isHaveOption ? (\n <DropdownListOption\n tabIndex={0}\n onClick={() => onClickAll()}\n onKeyDown={(e) => {\n if (e.key === 'Enter') onClickAll();\n }}\n $isCenter={props.isCenter}\n $isNotShowHoverStyle={props.isNotShowHoverStyle}\n $genre={props.genre}\n $size={props.size}\n $font={font}\n $isBold={props.isBold}\n $isChecked={isAll}\n $isShowScroll={isShowScroll}\n style={{ position: 'relative', minHeight: `${sizeHeight}px` }}\n >\n {labelSelectAll}\n {props.isShowDropdownOptionIcon && (\n <DropdownListOptionIcon\n tabIndex={-1}\n size={props.size}\n type='checkbox'\n name='Arrow'\n $genre={props.genre}\n $checked={isAll}\n $size={props.size}\n />\n )}\n </DropdownListOption>\n ) : null}\n {!isHaveOption ? (\n <DropdownListOption\n tabIndex={-1}\n $isCenter={props.isCenter}\n $isNotShowHoverStyle={props.isNotShowHoverStyle}\n $genre={props.genre}\n $size={props.size}\n $font={font}\n $isBold={props.isBold}\n $isChecked={isAll}\n $isShowScroll={isShowScroll}\n style={{ position: 'relative', minHeight: `${sizeHeight}px` }}\n >\n <Typography sx={{ default: { size: 16, line: 1 } }}>{labelEmptyOption}</Typography>\n </DropdownListOption>\n ) : null}\n </DropdownList>\n )}\n\n {isHaveOption ? (\n <DropdownList\n tabIndex={-1}\n style={{ height: `${listVirtualizer.getTotalSize()}px`, minHeight: `${heightDropdownList}px` }}\n >\n {listVirtualizer.getVirtualItems().map((virtualRow) => {\n const item = props.option[virtualRow.index];\n const isChecked = isSelectedItem(item);\n return (\n <ContainerDropdownListOption\n key={virtualRow.index}\n virtualRowSize={virtualRow.size}\n virtualRowStart={virtualRow.start}\n isChecked={isChecked}\n onClick={() => onClick(item)}\n item={item}\n genre={props.genre}\n size={props.size}\n font={font}\n isBold={props.isBold}\n isNotShowHoverStyle={props.isNotShowHoverStyle}\n isCenter={props.isCenter}\n isShowScroll={isShowScroll}\n isShowDropdownOptionIcon={props.isShowDropdownOptionIcon}\n />\n );\n })}\n </DropdownList>\n ) : null}\n </DropdownListParent>\n </Popover>\n {props?.error ? (\n <ErrorMessage\n {...props.error}\n size={props?.error.size ?? props.size}\n font={{\n size: 12,\n weight: 400,\n family: props.font?.family ?? theme.font.family,\n }}\n />\n ) : null}\n </>\n );\n};\n\nconst ContainerDropdownListOptionComponent = <T extends object & ISelectItem>(\n props: ContainerDropdownListOptionProps<T>,\n) => {\n const handleKeyDown = (event: KeyboardEvent<HTMLLIElement>) => {\n if (props.item.isDisabled) return;\n if (event.key === 'Enter') {\n props.onClick();\n }\n };\n\n return (\n <DropdownListOption\n tabIndex={0}\n onClick={() => {\n !props.item.isDisabled && props.onClick();\n }}\n onKeyDown={handleKeyDown}\n style={{\n position: 'absolute',\n height: `${props.virtualRowSize}px`,\n transform: `translateY(${props.virtualRowStart}px)`,\n }}\n $isCenter={props.isCenter}\n $isNotShowHoverStyle={props.isNotShowHoverStyle}\n $item={props.item}\n $genre={props.genre}\n $size={props.size}\n $font={props.font}\n $isBold={props.isBold}\n $isChecked={props.isChecked}\n $isShowScroll={props.isShowScroll}\n >\n {props.item.label}\n {props.isShowDropdownOptionIcon && (\n <DropdownListOptionIcon\n tabIndex={-1}\n size={props.size}\n type='checkbox'\n name='Arrow'\n $genre={props.genre}\n $checked={props.isChecked}\n $size={props.size}\n />\n )}\n </DropdownListOption>\n );\n};\n\nconst ContainerSelectListOptionComponent = <T extends object & ISelectItem>(\n props: ContainerSelectListOptionProps<T>,\n) => {\n return (\n <SelectListOption\n tabIndex={-1}\n onClick={props.onClick}\n $isOnlyColorInSelectListOption={props.isOnlyColorInSelectListOption}\n $isClearWhenClickSelectListOption={props.isClearWhenClickSelectListOption}\n $isWrapSelectOption={props.isWrapSelectOption}\n $isCenter={props.isCenter}\n $isNotShowHoverStyle={props.isNotShowHoverStyle}\n $item={props.item}\n $genre={props.genre}\n $size={props.size}\n $isBold={props.isBold}\n $isChecked={props.isChecked}\n >\n <Typography sx={{ default: { size: 16, line: 1 } }}>{props.item.label}</Typography>\n </SelectListOption>\n );\n};\n\nexport const ContainerDropdownListOption = memo(ContainerDropdownListOptionComponent);\nexport const ContainerSelectListOption = memo(ContainerSelectListOptionComponent);\n\nexport const SelectLanguage: FC<SelectLanguageProps> = (props) => {\n const { value, onChange } = props;\n\n const option = LIST_LANGUAGE;\n\n const [viewOption] = useState<ISelectLanguageOption[]>(option);\n\n const handleSelectChange = (value: ISelectLanguageOption[]) => {\n if (value.length === 0) onChange(null);\n onChange(value[0].value.toString());\n };\n const valueLocal = useMemo(() => {\n const findOption = option.find((e) => e.value === value);\n if (!findOption) return [];\n return [findOption];\n }, [option, value]);\n\n return (\n <Select<ISelectLanguageOption> {...props} option={viewOption} value={valueLocal} onChange={handleSelectChange} />\n );\n};\nexport const SelectMonth: FC<SelectMonthProps> = (props) => {\n const { value, onChange, dateMin, dateMax, monthsLocale, isShortLabel } = props;\n\n const year = moment(value).utc().year();\n\n const option = useMemo(() => {\n return monthsLocale.map((monthItem) => {\n const monthIndex = moment().month(monthItem.value).month();\n\n const monthMoment = moment.utc().year(year).month(monthIndex).startOf('month');\n const isDisabled =\n (dateMin && monthMoment.isBefore(moment.utc(dateMin), 'month')) ||\n (dateMax && monthMoment.isAfter(moment.utc(dateMax), 'month'));\n\n return {\n value: monthMoment.valueOf(),\n label: isShortLabel ? monthItem.localeShort : monthItem.localeLong,\n placeholder: isShortLabel ? monthItem.localeShort : monthItem.localeLong,\n search: `${monthItem.localeLong.toLowerCase()}, ${monthIndex + 1}`,\n isDisabled: !!isDisabled,\n monthValue: monthItem.value,\n };\n });\n }, [monthsLocale, year, dateMin, dateMax, isShortLabel]);\n\n const handleSelectChange = (value: ISelectLanguageOption[]) => {\n if (value.length === 0) onChange(null);\n onChange(+value[0].value);\n };\n const valueLocal = useMemo(() => {\n const findOption = option.find((e) => e.value === value);\n if (!findOption) return [];\n return [findOption];\n }, [value, option]);\n\n return <Select<ISelectLanguageOption> {...props} option={option} value={valueLocal} onChange={handleSelectChange} />;\n};\nexport const SelectMonths: FC<SelectMonthsProps> = (props) => {\n const { value, onChange, dateMin, dateMax, monthsLocale, isShortLabel } = props;\n\n const year = moment(value).utc().year();\n\n const option = useMemo(() => {\n return monthsLocale.map((monthItem) => {\n const monthIndex = moment().month(monthItem.value).month();\n\n const monthMoment = moment.utc().year(year).month(monthIndex).startOf('month');\n const isDisabled =\n (dateMin && monthMoment.isBefore(moment.utc(dateMin), 'month')) ||\n (dateMax && monthMoment.isAfter(moment.utc(dateMax), 'month'));\n\n return {\n value: monthMoment.valueOf(),\n label: isShortLabel ? monthItem.localeShort : monthItem.localeLong,\n placeholder: isShortLabel ? monthItem.localeShort : monthItem.localeLong,\n search: `${monthItem.localeLong.toLowerCase()}, ${monthIndex + 1}`,\n isDisabled: !!isDisabled,\n monthValue: monthItem.value,\n };\n });\n }, [monthsLocale, year, dateMin, dateMax, isShortLabel]);\n const [viewOption, setViewOption] = useState<ISelectLanguageOption[]>(option);\n\n useEffect(() => {\n setViewOption(option);\n }, [option]);\n const handleSelectChange = (value: ISelectLanguageOption[]) => {\n if (value.length === 0) onChange([]);\n onChange(value.map((e) => +e.value));\n };\n const valueLocal = useMemo(() => {\n if (!value || value.length === 0) return [];\n return value.map((val) => option.find((opt) => opt.value === val)).filter(Boolean) as ISelectLanguageOption[];\n }, [value, option]);\n\n const [search, setSearch] = useState<string>('');\n const handleSearchChange = useCallback(\n (value: string) => {\n setSearch(value);\n\n if (value === '') {\n setViewOption(option);\n } else {\n const filteredOptions = option.filter((option) =>\n Object.values(option).some((field) => field?.toString().toLowerCase().includes(value.toLowerCase())),\n );\n setViewOption(filteredOptions);\n }\n },\n [option],\n );\n return (\n <Select<ISelectLanguageOption>\n {...props}\n valueSearch={search}\n onChangeSearch={handleSearchChange}\n optionAllLength={option.length}\n option={viewOption}\n minViewDropdown={1}\n isMulti\n value={valueLocal}\n onChange={handleSelectChange}\n onChangeAll={(_value, isAll) => {\n if (isAll) {\n onChange(viewOption.map((e) => +e.value));\n } else {\n onChange([]);\n }\n }}\n />\n );\n};\nexport const SelectYear: FC<SelectYearProps> = (props) => {\n const { value, onChange, dateMin, dateMax, sortOrder = 'desc' } = props;\n\n const startYear = moment(dateMin).utc().year();\n const endYear = moment(dateMax).utc().year();\n\n const option = useMemo(() => {\n const yearArray = Array.from({ length: endYear - startYear + 1 }, (_, index) => {\n const year = startYear + index;\n return {\n value: moment().year(year).utc().startOf('year').valueOf(),\n label: moment().year(year).utc().format('YYYY'),\n placeholder: moment().year(year).utc().format('YYYY'),\n search: `${moment().year(year).utc().format('YYYY').toLowerCase()}`,\n };\n });\n\n return sortOrder === 'asc'\n ? yearArray.sort((a, b) => a.value - b.value)\n : yearArray.sort((a, b) => b.value - a.value);\n }, [endYear, startYear, sortOrder]);\n\n const handleSelectChange = (value: ISelectLanguageOption[]) => {\n if (value.length === 0) onChange(null);\n onChange(+value[0].value);\n };\n const valueLocal = useMemo(() => {\n const findOption = option.find((e) => e.value === value);\n if (!findOption) return [];\n return [findOption];\n }, [value, option]);\n\n return <Select<ISelectLanguageOption> {...props} option={option} value={valueLocal} onChange={handleSelectChange} />;\n};\nexport const SelectMapTheme: FC<SelectMapThemeProps> = (props) => {\n const { value, onChange } = props;\n\n const option = useMemo(() => LIST_MAP_THEME.map((e) => ({ label: e.name, value: e.name, placeholder: e.name })), []);\n\n const [viewOption, setViewOption] = useState<ISelectMapThemeOption[]>(option);\n useEffect(() => {\n setViewOption(option);\n }, [option]);\n const handleSelectChange = (value: ISelectMapThemeOption[]) => {\n if (value.length === 0) onChange(null);\n const findOption = LIST_MAP_THEME.find((e) => e.name === value[0].value);\n onChange(findOption ?? null);\n };\n const valueLocal = useMemo(() => {\n const findOption = option.find((e) => e.value === value.name);\n if (!findOption) return [];\n return [findOption];\n }, [value, option]);\n\n const [search, setSearch] = useState<string>('');\n const handleSearchChange = useCallback(\n (value: string) => {\n setSearch(value);\n\n if (value === '') {\n setViewOption(option);\n } else {\n const filteredOptions = option.filter((option) =>\n Object.values(option).some((field) => field?.toString().toLowerCase().includes(value.toLowerCase())),\n );\n setViewOption(filteredOptions);\n }\n },\n [option],\n );\n return (\n <Select<ISelectMapThemeOption>\n {...props}\n option={viewOption}\n value={valueLocal}\n onChange={handleSelectChange}\n valueSearch={search}\n onChangeSearch={handleSearchChange}\n />\n );\n};\n","import { ErrorMessage } from '@local/styles/error';\n\nimport { useMergeRefs } from '@floating-ui/react';\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { useTheme } from 'styled-components';\n\nimport { StyledTextArea, TextAreaProps, TextAreaWrapper } from '.';\n\nexport const TextArea = (props: TextAreaProps) => {\n const theme = useTheme();\n\n const refLocal = useRef<HTMLTextAreaElement>(null);\n const ref = useMergeRefs([refLocal, props.ref]);\n\n const lineHeight = useMemo(\n () => theme.font.sizeDefault.default * theme.font.lineHeight,\n [theme.font.lineHeight, theme.font.sizeDefault.default],\n );\n const maxHeight = useMemo(() => (props.maxRows ? props.maxRows * lineHeight : 0), [lineHeight, props.maxRows]);\n const minHeight = useMemo(\n () => (props.minRows ? props.minRows * lineHeight : lineHeight),\n [lineHeight, props.minRows],\n );\n\n const resizeTextarea = useCallback(() => {\n const el = refLocal.current;\n if (el && props.isAutoHeight) {\n el.style.height = 'auto';\n const newHeight = Math.min(el.scrollHeight, maxHeight);\n el.style.height = `${newHeight}px`;\n }\n }, [props.isAutoHeight, maxHeight]);\n\n const handleOnChange = useCallback(\n (value: string) => {\n if (props.isNoSpaces) {\n const valueWithoutSpaces = value.replace(/\\s+/g, '');\n props.onChange?.(valueWithoutSpaces);\n } else {\n props.onChange?.(value);\n }\n },\n [props],\n );\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (props.isAutoHeight) {\n requestAnimationFrame(resizeTextarea);\n }\n }, [props.value, resizeTextarea, props.isAutoHeight]);\n return (\n <>\n <TextAreaWrapper\n $isInputEffect={props.isInputEffect}\n $isDisabled={props.isDisabled}\n $isDisabledOutline={props.isDisabled ?? props.isDisabledOutline}\n $isOutlineBoxShadow={props.isOutlineBoxShadow}\n $sx={props.sx}\n $genre={props.genre}\n $size={props.size}\n $lineHeight={lineHeight}\n $isReadOnly={props.isReadOnly}\n className={props.className}\n tabIndex={-1}\n >\n <StyledTextArea\n tabIndex={0}\n ref={ref}\n $font={{\n ...props.font,\n size: props.font?.size ?? 16,\n weight: props.font?.weight ?? (props.isBold ? 500 : 400),\n height: props.font?.height ?? `${lineHeight}px`,\n }}\n $lineHeight={lineHeight}\n $isResize={props.isResize}\n $error={props.error}\n $isInputEffect={props.isInputEffect}\n $isLoading={props.isLoading}\n $genre={props.genre}\n $size={props.size}\n $isBold={props.isBold}\n $isDisabled={props.isDisabled}\n maxLength={props.maxLength}\n minLength={props.minLength}\n disabled={props.isDisabled}\n readOnly={props.isReadOnly}\n required={props.isRequired}\n defaultValue={props.defaultValue === null ? '' : props.defaultValue}\n value={props.value === null ? '' : props.value}\n rows={props.minRows}\n placeholder={props.placeholder}\n onChange={(event) => handleOnChange(event.target.value)}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onKeyDown={props.onKeyDown}\n name={props.name}\n aria-label={props.ariaLabel ?? props.name}\n autoComplete={props.autoComplete}\n id={props.id}\n style={{\n minHeight: `${minHeight}px`,\n maxHeight: props.isResize ? 'none' : props.isAutoHeight ? `${maxHeight}px` : `${minHeight}px`,\n }}\n />\n </TextAreaWrapper>\n {props?.error ? (\n <ErrorMessage\n {...props.error}\n size={props?.error.size ?? props.size}\n font={{\n size: 12,\n weight: 400,\n family: props.font?.family ?? theme.font.family,\n }}\n />\n ) : null}\n </>\n );\n};\n","import {\n addDisabled,\n addFont,\n addOutlineChildren,\n addRemoveOutline,\n addTransitionWithoutSize,\n} from '@local/styles/add';\nimport { addError } from '@local/styles/error';\nimport { addSX } from '@local/styles/sx';\nimport { KEY_SIZE_DATA } from '@local/theme';\n\nimport styled, { css } from 'styled-components';\n\nimport { StyledTextAreaProps, TextAreaWrapperProps } from '.';\n\n/****************************************** Wrapper *************************************************/\nconst addTextAreaWrapperGenre = css<TextAreaWrapperProps>`\n ${(props) => css`\n background: ${props.theme.colors.input[props.$genre].background.rest};\n border-color: ${props.theme.colors.input[props.$genre].border.rest};\n color: ${props.theme.colors.input[props.$genre].color.rest};\n\n &:active {\n background: ${props.theme.colors.input[props.$genre].background.rest};\n border-color: ${props.theme.colors.input[props.$genre].border.rest};\n color: ${props.theme.colors.input[props.$genre].color.rest};\n }\n &:hover {\n background: ${props.theme.colors.input[props.$genre].background.hover};\n border-color: ${props.theme.colors.input[props.$genre].border.hover};\n color: ${props.theme.colors.input[props.$genre].color.hover};\n }\n &:focus-visible {\n border-color: ${props.theme.colors.input[props.$genre].border.rest};\n background: ${props.theme.colors.input[props.$genre].background.rest};\n color: ${props.theme.colors.input[props.$genre].color.rest};\n }\n `};\n`;\n\nconst addTextAreaWrapperIsInputEffect = css<Pick<TextAreaWrapperProps, '$isInputEffect'>>`\n ${(props) =>\n props.$isInputEffect &&\n css`\n box-shadow: ${props.theme.effects.input};\n `}\n`;\nconst addTextAreaWrapperSize = css<TextAreaWrapperProps>`\n ${(props) => css`\n padding: ${KEY_SIZE_DATA[props.$size].padding - 4}px ${KEY_SIZE_DATA[props.$size].padding}px ${KEY_SIZE_DATA[props.$size].padding - 4}px ${KEY_SIZE_DATA[props.$size].padding}px;\n border-radius: ${KEY_SIZE_DATA[props.$size].radius}px;\n min-height: ${KEY_SIZE_DATA[props.$size].height}px;\n `};\n`;\n\nexport const TextAreaWrapper = styled.div<TextAreaWrapperProps>`\n border: 1px solid;\n position: relative;\n display: flex;\n align-items: flex-start;\n justify-content: flex-start;\n flex-direction: column;\n overflow: hidden;\n width: 100%;\n ${addTransitionWithoutSize};\n ${addTextAreaWrapperSize};\n ${addTextAreaWrapperGenre};\n ${addTextAreaWrapperIsInputEffect};\n ${addDisabled};\n ${addOutlineChildren};\n ${addSX};\n`;\n\n/****************************************** TextArea *************************************************/\nconst addTextAreaPlaceholder = css<StyledTextAreaProps>`\n &::placeholder,\n &::-webkit-input-placeholder {\n ${addFont};\n color: ${(props) => props.theme.colors.input[props.$genre].color.placeholder};\n opacity: 1;\n }\n &:-ms-input-placeholder {\n ${addFont};\n color: ${(props) => props.theme.colors.input[props.$genre].color.placeholder};\n opacity: 1;\n }\n`;\nconst addTextAreaGenre = css<StyledTextAreaProps>`\n ${(props) => css`\n color: ${props.theme.colors.input[props.$genre].color.rest};\n border-color: transparent;\n &:active {\n color: ${props.theme.colors.input[props.$genre].color.rest};\n }\n &:hover {\n color: ${props.theme.colors.input[props.$genre].color.hover};\n }\n &:focus-visible {\n color: ${props.theme.colors.input[props.$genre].color.rest};\n }\n `};\n`;\nconst addTextAreaIsResize = css<Pick<StyledTextAreaProps, '$isResize'>>`\n ${(props) =>\n !props.$isResize &&\n css`\n resize: none;\n `}\n`;\nexport const addTextArea = css<StyledTextAreaProps>`\n overflow-x: hidden;\n width: -webkit-fill-available;\n padding: 0 !important;\n border: none !important;\n margin: 0 !important;\n white-space: normal;\n text-overflow: ellipsis;\n height: auto;\n background-color: transparent;\n\n ${addFont};\n ${addTextAreaGenre};\n ${addTextAreaIsResize};\n ${addTextAreaPlaceholder};\n ${addRemoveOutline};\n ${addError};\n`;\n\nexport const StyledTextArea = styled.textarea<StyledTextAreaProps>`\n ${addTextArea};\n`;\n","import { Icon } from '@local/components/icon';\nimport { addFont, addRemoveOutline } from '@local/styles/add';\nimport { addError } from '@local/styles/error';\nimport { addSX } from '@local/styles/sx';\nimport { KEY_SIZE_DATA } from '@local/theme/theme';\n\nimport { motion } from 'framer-motion';\nimport styled, { css } from 'styled-components';\n\nimport { TextArea } from '../textarea';\nimport {\n ButtonListProps,\n DropdownListOptionIconProps,\n DropdownListOptionProps,\n DropdownListParentProps,\n SelectListOptionProps,\n SelectListProps,\n SelectWrapperProps,\n} from '.';\n\nconst addSelectWrapperGenre = css<SelectWrapperProps>`\n ${(props) => css`\n background: ${props.theme.colors.input[props.$genre].background.rest};\n border-color: ${props.theme.colors.input[props.$genre].border.rest};\n color: ${props.theme.colors.input[props.$genre].color.rest};\n ${\n !props.$isNotShowHoverStyle &&\n css`\n &:hover {\n background: ${props.theme.colors.input[props.$genre].background.hover};\n border-color: ${props.theme.colors.input[props.$genre].border.hover};\n color: ${props.theme.colors.input[props.$genre].color.hover};\n }\n `\n }\n ${\n props.$isOpen &&\n css`\n background: ${props.theme.colors.input[props.$genre].background.rest};\n border-color: ${props.theme.colors.input[props.$genre].border.rest};\n color: ${props.theme.colors.input[props.$genre].color.rest};\n `\n }\n `};\n`;\nconst addSelectWrapperSize = css<SelectWrapperProps>`\n border: 1px solid;\n width: 100%;\n padding: ${(props) => KEY_SIZE_DATA[props.$size].padding / 4}px\n ${(props) => KEY_SIZE_DATA[props.$size].padding - KEY_SIZE_DATA[props.$size].padding / 2.8}px;\n gap: ${(props) => KEY_SIZE_DATA[props.$size].padding / 2.8}px;\n height: fit-content;\n min-height: ${(props) => KEY_SIZE_DATA[props.$size].height}px;\n border-radius: ${(props) => KEY_SIZE_DATA[props.$size].radius}px;\n justify-content: ${(props) => (props.$isCenter ? 'center' : 'flex-start')};\n ${(props) =>\n props.$isOpen &&\n css`\n outline: 2px ${(props) => props.theme.states.focus} solid;\n outline-offset: 1px;\n `}\n`;\nexport const SelectWrapper = styled(motion.div)<SelectWrapperProps>`\n position: relative;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n align-content: center;\n flex-wrap: wrap;\n ${addSelectWrapperGenre};\n ${addSelectWrapperSize};\n ${addError};\n ${addSX};\n`;\nconst addDropdownListParentSize = css<DropdownListParentProps>`\n gap: ${(props) => KEY_SIZE_DATA[props.$size].padding / 2.8}px;\n`;\nexport const DropdownListParent = styled(motion.div)<DropdownListParentProps>`\n height: 100%;\n width: 100%;\n overflow: hidden;\n overflow-y: auto;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n ${addDropdownListParentSize};\n`;\nexport const DropdownList = styled.ul`\n list-style: none;\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n transform: translateZ(0);\n flex-shrink: 0;\n`;\n\nconst addDropdownListOptionGenre = css<DropdownListOptionProps>`\n ${(props) => css`\n background: ${props.theme.colors.select[props.$genre].background.rest};\n border-color: ${props.theme.colors.select[props.$genre].border.rest};\n color: ${props.theme.colors.select[props.$genre].color.rest};\n &:active {\n background: ${props.theme.colors.select[props.$genre].background.rest};\n border-color: ${props.theme.colors.select[props.$genre].border.rest};\n color: ${props.theme.colors.select[props.$genre].color.rest};\n }\n ${\n !props.$isNotShowHoverStyle &&\n css`\n &:hover {\n background: ${props.theme.colors.select[props.$genre].background.hover};\n border-color: ${props.theme.colors.select[props.$genre].border.hover};\n color: ${props.theme.colors.select[props.$genre].color.hover};\n }\n `\n }\n &:focus-visible {\n background: ${props.theme.colors.select[props.$genre].background.rest};\n border-color: ${props.theme.colors.select[props.$genre].border.rest};\n color: ${props.theme.colors.select[props.$genre].color.rest};\n }\n `};\n`;\nconst addDropdownListOptionSize = css<DropdownListOptionProps>`\n padding: 0px ${(props) => KEY_SIZE_DATA[props.$size].padding}px;\n width: 100%;\n border: 1px solid;\n border-radius: 0;\n justify-content: ${(props) => (props.$isCenter ? 'center' : 'flex-start')};\n &:first-child {\n ${(props) =>\n props.$isShowScroll\n ? css`\n border-radius: ${KEY_SIZE_DATA[props.$size].radius}px 0px 0px 0px;\n `\n : css`\n border-radius: ${KEY_SIZE_DATA[props.$size].radius}px ${KEY_SIZE_DATA[props.$size].radius}px 0px 0px;\n `}\n }\n &:last-child {\n ${(props) =>\n props.$isShowScroll\n ? css`\n border-radius: 0px 0px 0px ${KEY_SIZE_DATA[props.$size].radius}px;\n `\n : css`\n border-radius: 0px 0px ${KEY_SIZE_DATA[props.$size].radius}px ${KEY_SIZE_DATA[props.$size].radius}px;\n `}\n }\n &:not(:first-child):not(:last-child) {\n border-radius: 0px;\n }\n &:first-child:last-child {\n ${(props) =>\n props.$isShowScroll\n ? css`\n border-radius: ${KEY_SIZE_DATA[props.$size].radius}px 0px 0px ${KEY_SIZE_DATA[props.$size].radius}px;\n `\n : css`\n border-radius: ${KEY_SIZE_DATA[props.$size].radius}px;\n `}\n }\n`;\nexport const DropdownListOption = styled.li<DropdownListOptionProps>`\n display: flex;\n align-items: center;\n cursor: pointer;\n top: 0;\n left: 0;\n user-select: none;\n flex-shrink: 0;\n opacity: ${(props) => (props.$item?.isDisabled ? 0.5 : 1)};\n ${addFont};\n ${addDropdownListOptionGenre};\n ${addDropdownListOptionSize};\n ${addRemoveOutline};\n`;\n\nconst addDropdownOptionIconSize = css<DropdownListOptionIconProps>`\n right: ${(props) => KEY_SIZE_DATA[props.$size].padding - 6}px;\n height: ${(props) => KEY_SIZE_DATA[props.$size].height}px;\n`;\nexport const DropdownListOptionIcon = styled(Icon)<DropdownListOptionIconProps>`\n position: absolute;\n right: 0;\n height: 100%;\n align-items: center;\n ${addDropdownOptionIconSize};\n ${addRemoveOutline};\n color: ${(props) =>\n props.$checked\n ? props.theme.colors.select[props.$genre].border.select\n : props.theme.colors.input[props.$genre].border.rest};\n`;\n\nconst addSelectListSize = css<SelectListProps>`\n display: flex;\n flex-direction: row;\n flex-wrap: ${(props) => (props.$isWrapSelectOption ? 'wrap' : 'nowrap')};\n gap: ${(props) => KEY_SIZE_DATA[props.$size].padding / 2.8}px;\n`;\nexport const SelectList = styled.ul<SelectListProps>`\n list-style: none;\n position: relative;\n overflow: hidden;\n ${addSelectListSize};\n`;\nconst addButtonListSize = css<ButtonListProps>`\n display: flex;\n flex-direction: row;\n gap: ${(props) => KEY_SIZE_DATA[props.$size].padding / 2.8}px;\n padding: ${(props) => KEY_SIZE_DATA[props.$size].padding / 2.8}px ${(props) => KEY_SIZE_DATA[props.$size].padding}px;\n`;\nexport const ButtonList = styled.div<ButtonListProps>`\n position: absolute;\n right: 0;\n ${addButtonListSize};\n`;\nconst addSelectListOptionGenre = css<SelectListOptionProps>`\n${(props) =>\n props.$isOnlyColorInSelectListOption\n ? css`\n border: 0px solid;\n border-color: transparent;\n background-color: transparent;\n color: ${props.theme.colors.select[props.$genre].color.rest};\n &:active {\n color: ${props.theme.colors.select[props.$genre].color.rest};\n }\n ${\n !props.$isNotShowHoverStyle &&\n css`\n &:hover {\n color: ${props.theme.colors.select[props.$genre].color.hover};\n }\n `\n }\n &:focus-visible {\n color: ${props.theme.colors.select[props.$genre].color.rest};\n }\n `\n : css`\n border: 1px solid;\n background: ${props.theme.colors.select[props.$genre].background.rest};\n border-color: ${props.theme.colors.select[props.$genre].border.rest};\n color: ${props.theme.colors.select[props.$genre].color.rest};\n &:active {\n background: ${props.theme.colors.select[props.$genre].background.rest};\n border-color: ${props.theme.colors.select[props.$genre].border.rest};\n color: ${props.theme.colors.select[props.$genre].color.rest};\n }\n ${\n !props.$isNotShowHoverStyle &&\n css`\n &:hover {\n background: ${props.theme.colors.select[props.$genre].background.hover};\n border-color: ${props.theme.colors.select[props.$genre].border.hover};\n color: ${props.theme.colors.select[props.$genre].color.hover};\n }\n `\n }\n &:focus-visible {\n background: ${props.theme.colors.select[props.$genre].background.rest};\n border-color: ${props.theme.colors.select[props.$genre].border.rest};\n color: ${props.theme.colors.select[props.$genre].color.rest};\n }\n `}\n`;\nconst addSelectListOptionSize = css<SelectListOptionProps>`\n padding: ${(props) => KEY_SIZE_DATA[props.$size].padding / 2.8}px;\n border-radius: ${(props) => KEY_SIZE_DATA[props.$size].radius}px;\n`;\nexport const SelectListOption = styled(motion.li)<SelectListOptionProps>`\n display: flex;\n align-items: center;\n opacity: 1;\n cursor: ${(props) => (props.$isClearWhenClickSelectListOption ? 'pointer' : 'default')};\n flex-shrink: 0;\n overflow: hidden;\n width: fit-content;\n ${addSelectListOptionGenre};\n ${addSelectListOptionSize};\n ${addRemoveOutline};\n`;\n\nexport const SelectTextArea = styled(TextArea)`\n border: 0 !important;\n background-color: transparent !important;\n min-height: initial !important;\n width: 100%;\n max-width: 100%;\n flex-grow: 1;\n padding: ${(props) => KEY_SIZE_DATA[props.size].padding / 2.8}px 0px ${(props) => KEY_SIZE_DATA[props.size].padding / 2.8}px ${(props) => KEY_SIZE_DATA[props.size].padding / 2.8}px;\n ${addRemoveOutline};\n`;\n","/**\n * react-number-format - 5.4.4\n * Author : Sudhanshu Yadav\n * Copyright (c) 2016, 2025 to Sudhanshu Yadav, released under the MIT license.\n * https://github.com/s-yadav/react-number-format\n */\n\nimport React, { useState, useMemo, useRef, useEffect, useLayoutEffect } from 'react';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) { if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n { t[p] = s[p]; } }\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n { for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n { t[p[i]] = s[p[i]]; }\r\n } }\r\n return t;\r\n}\n\nvar SourceType;\n(function (SourceType) {\n SourceType[\"event\"] = \"event\";\n SourceType[\"props\"] = \"prop\";\n})(SourceType || (SourceType = {}));\n\n// basic noop function\nfunction noop() { }\nfunction memoizeOnce(cb) {\n var lastArgs;\n var lastValue = undefined;\n return function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (lastArgs &&\n args.length === lastArgs.length &&\n args.every(function (value, index) { return value === lastArgs[index]; })) {\n return lastValue;\n }\n lastArgs = args;\n lastValue = cb.apply(void 0, args);\n return lastValue;\n };\n}\nfunction charIsNumber(char) {\n return !!(char || '').match(/\\d/);\n}\nfunction isNil(val) {\n return val === null || val === undefined;\n}\nfunction isNanValue(val) {\n return typeof val === 'number' && isNaN(val);\n}\nfunction isNotValidValue(val) {\n return isNil(val) || isNanValue(val) || (typeof val === 'number' && !isFinite(val));\n}\nfunction escapeRegExp(str) {\n return str.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, '\\\\$&');\n}\nfunction getThousandsGroupRegex(thousandsGroupStyle) {\n switch (thousandsGroupStyle) {\n case 'lakh':\n return /(\\d+?)(?=(\\d\\d)+(\\d)(?!\\d))(\\.\\d+)?/g;\n case 'wan':\n return /(\\d)(?=(\\d{4})+(?!\\d))/g;\n case 'thousand':\n default:\n return /(\\d)(?=(\\d{3})+(?!\\d))/g;\n }\n}\nfunction applyThousandSeparator(str, thousandSeparator, thousandsGroupStyle) {\n var thousandsGroupRegex = getThousandsGroupRegex(thousandsGroupStyle);\n var index = str.search(/[1-9]/);\n index = index === -1 ? str.length : index;\n return (str.substring(0, index) +\n str.substring(index, str.length).replace(thousandsGroupRegex, '$1' + thousandSeparator));\n}\nfunction usePersistentCallback(cb) {\n var callbackRef = useRef(cb);\n // keep the callback ref upto date\n callbackRef.current = cb;\n /**\n * initialize a persistent callback which never changes\n * through out the component lifecycle\n */\n var persistentCbRef = useRef(function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return callbackRef.current.apply(callbackRef, args);\n });\n return persistentCbRef.current;\n}\n//spilt a float number into different parts beforeDecimal, afterDecimal, and negation\nfunction splitDecimal(numStr, allowNegative) {\n if ( allowNegative === void 0 ) allowNegative = true;\n\n var hasNegation = numStr[0] === '-';\n var addNegation = hasNegation && allowNegative;\n numStr = numStr.replace('-', '');\n var parts = numStr.split('.');\n var beforeDecimal = parts[0];\n var afterDecimal = parts[1] || '';\n return {\n beforeDecimal: beforeDecimal,\n afterDecimal: afterDecimal,\n hasNegation: hasNegation,\n addNegation: addNegation,\n };\n}\nfunction fixLeadingZero(numStr) {\n if (!numStr)\n { return numStr; }\n var isNegative = numStr[0] === '-';\n if (isNegative)\n { numStr = numStr.substring(1, numStr.length); }\n var parts = numStr.split('.');\n var beforeDecimal = parts[0].replace(/^0+/, '') || '0';\n var afterDecimal = parts[1] || '';\n return (\"\" + (isNegative ? '-' : '') + beforeDecimal + (afterDecimal ? (\".\" + afterDecimal) : ''));\n}\n/**\n * limit decimal numbers to given scale\n * Not used .fixedTo because that will break with big numbers\n */\nfunction limitToScale(numStr, scale, fixedDecimalScale) {\n var str = '';\n var filler = fixedDecimalScale ? '0' : '';\n for (var i = 0; i <= scale - 1; i++) {\n str += numStr[i] || filler;\n }\n return str;\n}\nfunction repeat(str, count) {\n return Array(count + 1).join(str);\n}\nfunction toNumericString(num) {\n var _num = num + ''; // typecast number to string\n // store the sign and remove it from the number.\n var sign = _num[0] === '-' ? '-' : '';\n if (sign)\n { _num = _num.substring(1); }\n // split the number into cofficient and exponent\n var ref = _num.split(/[eE]/g);\n var coefficient = ref[0];\n var exponent = ref[1];\n // covert exponent to number;\n exponent = Number(exponent);\n // if there is no exponent part or its 0, return the coffiecient with sign\n if (!exponent)\n { return sign + coefficient; }\n coefficient = coefficient.replace('.', '');\n /**\n * for scientific notation the current decimal index will be after first number (index 0)\n * So effective decimal index will always be 1 + exponent value\n */\n var decimalIndex = 1 + exponent;\n var coffiecientLn = coefficient.length;\n if (decimalIndex < 0) {\n // if decimal index is less then 0 add preceding 0s\n // add 1 as join will have\n coefficient = '0.' + repeat('0', Math.abs(decimalIndex)) + coefficient;\n }\n else if (decimalIndex >= coffiecientLn) {\n // if decimal index is less then 0 add leading 0s\n coefficient = coefficient + repeat('0', decimalIndex - coffiecientLn);\n }\n else {\n // else add decimal point at proper index\n coefficient =\n (coefficient.substring(0, decimalIndex) || '0') + '.' + coefficient.substring(decimalIndex);\n }\n return sign + coefficient;\n}\n/**\n * This method is required to round prop value to given scale.\n * Not used .round or .fixedTo because that will break with big numbers\n */\nfunction roundToPrecision(numStr, scale, fixedDecimalScale) {\n //if number is empty don't do anything return empty string\n if (['', '-'].indexOf(numStr) !== -1)\n { return numStr; }\n var shouldHaveDecimalSeparator = (numStr.indexOf('.') !== -1 || fixedDecimalScale) && scale;\n var ref = splitDecimal(numStr);\n var beforeDecimal = ref.beforeDecimal;\n var afterDecimal = ref.afterDecimal;\n var hasNegation = ref.hasNegation;\n var floatValue = parseFloat((\"0.\" + (afterDecimal || '0')));\n var floatValueStr = afterDecimal.length <= scale ? (\"0.\" + afterDecimal) : floatValue.toFixed(scale);\n var roundedDecimalParts = floatValueStr.split('.');\n var intPart = beforeDecimal;\n // if we have cary over from rounding decimal part, add that on before decimal\n if (beforeDecimal && Number(roundedDecimalParts[0])) {\n intPart = beforeDecimal\n .split('')\n .reverse()\n .reduce(function (roundedStr, current, idx) {\n if (roundedStr.length > idx) {\n return ((Number(roundedStr[0]) + Number(current)).toString() +\n roundedStr.substring(1, roundedStr.length));\n }\n return current + roundedStr;\n }, roundedDecimalParts[0]);\n }\n var decimalPart = limitToScale(roundedDecimalParts[1] || '', scale, fixedDecimalScale);\n var negation = hasNegation ? '-' : '';\n var decimalSeparator = shouldHaveDecimalSeparator ? '.' : '';\n return (\"\" + negation + intPart + decimalSeparator + decimalPart);\n}\n/** set the caret positon in an input field **/\nfunction setCaretPosition(el, caretPos) {\n el.value = el.value;\n // ^ this is used to not only get 'focus', but\n // to make sure we don't have it everything -selected-\n // (it causes an issue in chrome, and having it doesn't hurt any other browser)\n if (el !== null) {\n /* @ts-ignore */\n if (el.createTextRange) {\n /* @ts-ignore */\n var range = el.createTextRange();\n range.move('character', caretPos);\n range.select();\n return true;\n }\n // (el.selectionStart === 0 added for Firefox bug)\n if (el.selectionStart || el.selectionStart === 0) {\n el.focus();\n el.setSelectionRange(caretPos, caretPos);\n return true;\n }\n // fail city, fortunately this never happens (as far as I've tested) :)\n el.focus();\n return false;\n }\n}\n/**\n * TODO: remove dependency of findChangeRange, findChangedRangeFromCaretPositions is better way to find what is changed\n * currently this is mostly required by test and isCharacterSame util\n * Given previous value and newValue it returns the index\n * start - end to which values have changed.\n * This function makes assumption about only consecutive\n * characters are changed which is correct assumption for caret input.\n */\nvar findChangeRange = memoizeOnce(function (prevValue, newValue) {\n var i = 0, j = 0;\n var prevLength = prevValue.length;\n var newLength = newValue.length;\n while (prevValue[i] === newValue[i] && i < prevLength)\n { i++; }\n //check what has been changed from last\n while (prevValue[prevLength - 1 - j] === newValue[newLength - 1 - j] &&\n newLength - j > i &&\n prevLength - j > i) {\n j++;\n }\n return {\n from: { start: i, end: prevLength - j },\n to: { start: i, end: newLength - j },\n };\n});\nvar findChangedRangeFromCaretPositions = function (lastCaretPositions, currentCaretPosition) {\n var startPosition = Math.min(lastCaretPositions.selectionStart, currentCaretPosition);\n return {\n from: { start: startPosition, end: lastCaretPositions.selectionEnd },\n to: { start: startPosition, end: currentCaretPosition },\n };\n};\n/*\n Returns a number whose value is limited to the given range\n*/\nfunction clamp(num, min, max) {\n return Math.min(Math.max(num, min), max);\n}\nfunction geInputCaretPosition(el) {\n /*Max of selectionStart and selectionEnd is taken for the patch of pixel and other mobile device caret bug*/\n return Math.max(el.selectionStart, el.selectionEnd);\n}\nfunction addInputMode() {\n return (typeof navigator !== 'undefined' &&\n !(navigator.platform && /iPhone|iPod/.test(navigator.platform)));\n}\nfunction getDefaultChangeMeta(value) {\n return {\n from: {\n start: 0,\n end: 0,\n },\n to: {\n start: 0,\n end: value.length,\n },\n lastValue: '',\n };\n}\nfunction getMaskAtIndex(mask, index) {\n if ( mask === void 0 ) mask = ' ';\n\n if (typeof mask === 'string') {\n return mask;\n }\n return mask[index] || ' ';\n}\nfunction defaultIsCharacterSame(ref) {\n var currentValue = ref.currentValue;\n var formattedValue = ref.formattedValue;\n var currentValueIndex = ref.currentValueIndex;\n var formattedValueIndex = ref.formattedValueIndex;\n\n return currentValue[currentValueIndex] === formattedValue[formattedValueIndex];\n}\nfunction getCaretPosition(newFormattedValue, lastFormattedValue, curValue, curCaretPos, boundary, isValidInputCharacter, \n/**\n * format function can change the character, the caret engine relies on mapping old value and new value\n * In such case if character is changed, parent can tell which chars are equivalent\n * Some example, all allowedDecimalCharacters are updated to decimalCharacters, 2nd case if user is coverting\n * number to different numeric system.\n */\nisCharacterSame) {\n if ( isCharacterSame === void 0 ) isCharacterSame = defaultIsCharacterSame;\n\n /**\n * if something got inserted on empty value, add the formatted character before the current value,\n * This is to avoid the case where typed character is present on format characters\n */\n var firstAllowedPosition = boundary.findIndex(function (b) { return b; });\n var prefixFormat = newFormattedValue.slice(0, firstAllowedPosition);\n if (!lastFormattedValue && !curValue.startsWith(prefixFormat)) {\n lastFormattedValue = prefixFormat;\n curValue = prefixFormat + curValue;\n curCaretPos = curCaretPos + prefixFormat.length;\n }\n var curValLn = curValue.length;\n var formattedValueLn = newFormattedValue.length;\n // create index map\n var addedIndexMap = {};\n var indexMap = new Array(curValLn);\n for (var i = 0; i < curValLn; i++) {\n indexMap[i] = -1;\n for (var j = 0, jLn = formattedValueLn; j < jLn; j++) {\n var isCharSame = isCharacterSame({\n currentValue: curValue,\n lastValue: lastFormattedValue,\n formattedValue: newFormattedValue,\n currentValueIndex: i,\n formattedValueIndex: j,\n });\n if (isCharSame && addedIndexMap[j] !== true) {\n indexMap[i] = j;\n addedIndexMap[j] = true;\n break;\n }\n }\n }\n /**\n * For current caret position find closest characters (left and right side)\n * which are properly mapped to formatted value.\n * The idea is that the new caret position will exist always in the boundary of\n * that mapped index\n */\n var pos = curCaretPos;\n while (pos < curValLn && (indexMap[pos] === -1 || !isValidInputCharacter(curValue[pos]))) {\n pos++;\n }\n // if the caret position is on last keep the endIndex as last for formatted value\n var endIndex = pos === curValLn || indexMap[pos] === -1 ? formattedValueLn : indexMap[pos];\n pos = curCaretPos - 1;\n while (pos > 0 && indexMap[pos] === -1)\n { pos--; }\n var startIndex = pos === -1 || indexMap[pos] === -1 ? 0 : indexMap[pos] + 1;\n /**\n * case where a char is added on suffix and removed from middle, example 2sq345 becoming $2,345 sq\n * there is still a mapping but the order of start index and end index is changed\n */\n if (startIndex > endIndex)\n { return endIndex; }\n /**\n * given the current caret position if it closer to startIndex\n * keep the new caret position on start index or keep it closer to endIndex\n */\n return curCaretPos - startIndex < endIndex - curCaretPos ? startIndex : endIndex;\n}\n/* This keeps the caret within typing area so people can't type in between prefix or suffix or format characters */\nfunction getCaretPosInBoundary(value, caretPos, boundary, direction) {\n var valLn = value.length;\n // clamp caret position to [0, value.length]\n caretPos = clamp(caretPos, 0, valLn);\n if (direction === 'left') {\n while (caretPos >= 0 && !boundary[caretPos])\n { caretPos--; }\n // if we don't find any suitable caret position on left, set it on first allowed position\n if (caretPos === -1)\n { caretPos = boundary.indexOf(true); }\n }\n else {\n while (caretPos <= valLn && !boundary[caretPos])\n { caretPos++; }\n // if we don't find any suitable caret position on right, set it on last allowed position\n if (caretPos > valLn)\n { caretPos = boundary.lastIndexOf(true); }\n }\n // if we still don't find caret position, set it at the end of value\n if (caretPos === -1)\n { caretPos = valLn; }\n return caretPos;\n}\nfunction caretUnknownFormatBoundary(formattedValue) {\n var boundaryAry = Array.from({ length: formattedValue.length + 1 }).map(function () { return true; });\n for (var i = 0, ln = boundaryAry.length; i < ln; i++) {\n // consider caret to be in boundary if it is before or after numeric value\n boundaryAry[i] = Boolean(charIsNumber(formattedValue[i]) || charIsNumber(formattedValue[i - 1]));\n }\n return boundaryAry;\n}\nfunction useInternalValues(value, defaultValue, valueIsNumericString, format, removeFormatting, onValueChange) {\n if ( onValueChange === void 0 ) onValueChange = noop;\n\n var getValues = usePersistentCallback(function (value, valueIsNumericString) {\n var formattedValue, numAsString;\n if (isNotValidValue(value)) {\n numAsString = '';\n formattedValue = '';\n }\n else if (typeof value === 'number' || valueIsNumericString) {\n numAsString = typeof value === 'number' ? toNumericString(value) : value;\n formattedValue = format(numAsString);\n }\n else {\n numAsString = removeFormatting(value, undefined);\n formattedValue = format(numAsString);\n }\n return { formattedValue: formattedValue, numAsString: numAsString };\n });\n var ref = useState(function () {\n return getValues(isNil(value) ? defaultValue : value, valueIsNumericString);\n });\n var values = ref[0];\n var setValues = ref[1];\n var _onValueChange = function (newValues, sourceInfo) {\n if (newValues.formattedValue !== values.formattedValue) {\n setValues({\n formattedValue: newValues.formattedValue,\n numAsString: newValues.value,\n });\n }\n // call parent on value change if only if formatted value is changed\n onValueChange(newValues, sourceInfo);\n };\n // if value is switch from controlled to uncontrolled, use the internal state's value to format with new props\n var _value = value;\n var _valueIsNumericString = valueIsNumericString;\n if (isNil(value)) {\n _value = values.numAsString;\n _valueIsNumericString = true;\n }\n var newValues = getValues(_value, _valueIsNumericString);\n useMemo(function () {\n setValues(newValues);\n }, [newValues.formattedValue]);\n return [values, _onValueChange];\n}\n\nfunction defaultRemoveFormatting(value) {\n return value.replace(/[^0-9]/g, '');\n}\nfunction defaultFormat(value) {\n return value;\n}\nfunction NumberFormatBase(props) {\n var type = props.type; if ( type === void 0 ) type = 'text';\n var displayType = props.displayType; if ( displayType === void 0 ) displayType = 'input';\n var customInput = props.customInput;\n var renderText = props.renderText;\n var getInputRef = props.getInputRef;\n var format = props.format; if ( format === void 0 ) format = defaultFormat;\n var removeFormatting = props.removeFormatting; if ( removeFormatting === void 0 ) removeFormatting = defaultRemoveFormatting;\n var defaultValue = props.defaultValue;\n var valueIsNumericString = props.valueIsNumericString;\n var onValueChange = props.onValueChange;\n var isAllowed = props.isAllowed;\n var onChange = props.onChange; if ( onChange === void 0 ) onChange = noop;\n var onKeyDown = props.onKeyDown; if ( onKeyDown === void 0 ) onKeyDown = noop;\n var onMouseUp = props.onMouseUp; if ( onMouseUp === void 0 ) onMouseUp = noop;\n var onFocus = props.onFocus; if ( onFocus === void 0 ) onFocus = noop;\n var onBlur = props.onBlur; if ( onBlur === void 0 ) onBlur = noop;\n var propValue = props.value;\n var getCaretBoundary = props.getCaretBoundary; if ( getCaretBoundary === void 0 ) getCaretBoundary = caretUnknownFormatBoundary;\n var isValidInputCharacter = props.isValidInputCharacter; if ( isValidInputCharacter === void 0 ) isValidInputCharacter = charIsNumber;\n var isCharacterSame = props.isCharacterSame;\n var otherProps = __rest(props, [\"type\", \"displayType\", \"customInput\", \"renderText\", \"getInputRef\", \"format\", \"removeFormatting\", \"defaultValue\", \"valueIsNumericString\", \"onValueChange\", \"isAllowed\", \"onChange\", \"onKeyDown\", \"onMouseUp\", \"onFocus\", \"onBlur\", \"value\", \"getCaretBoundary\", \"isValidInputCharacter\", \"isCharacterSame\"]);\n var ref = useInternalValues(propValue, defaultValue, Boolean(valueIsNumericString), format, removeFormatting, onValueChange);\n var ref_0 = ref[0];\n var formattedValue = ref_0.formattedValue;\n var numAsString = ref_0.numAsString;\n var onFormattedValueChange = ref[1];\n var caretPositionBeforeChange = useRef();\n var lastUpdatedValue = useRef({ formattedValue: formattedValue, numAsString: numAsString });\n var _onValueChange = function (values, source) {\n lastUpdatedValue.current = { formattedValue: values.formattedValue, numAsString: values.value };\n onFormattedValueChange(values, source);\n };\n var ref$1 = useState(false);\n var mounted = ref$1[0];\n var setMounted = ref$1[1];\n var focusedElm = useRef(null);\n var timeout = useRef({\n setCaretTimeout: null,\n focusTimeout: null,\n });\n useEffect(function () {\n setMounted(true);\n return function () {\n clearTimeout(timeout.current.setCaretTimeout);\n clearTimeout(timeout.current.focusTimeout);\n };\n }, []);\n var _format = format;\n var getValueObject = function (formattedValue, numAsString) {\n var floatValue = parseFloat(numAsString);\n return {\n formattedValue: formattedValue,\n value: numAsString,\n floatValue: isNaN(floatValue) ? undefined : floatValue,\n };\n };\n var setPatchedCaretPosition = function (el, caretPos, currentValue) {\n // don't reset the caret position when the whole input content is selected\n if (el.selectionStart === 0 && el.selectionEnd === el.value.length)\n { return; }\n /* setting caret position within timeout of 0ms is required for mobile chrome,\n otherwise browser resets the caret position after we set it\n We are also setting it without timeout so that in normal browser we don't see the flickering */\n setCaretPosition(el, caretPos);\n timeout.current.setCaretTimeout = setTimeout(function () {\n if (el.value === currentValue && el.selectionStart !== caretPos) {\n setCaretPosition(el, caretPos);\n }\n }, 0);\n };\n /* This keeps the caret within typing area so people can't type in between prefix or suffix */\n var correctCaretPosition = function (value, caretPos, direction) {\n return getCaretPosInBoundary(value, caretPos, getCaretBoundary(value), direction);\n };\n var getNewCaretPosition = function (inputValue, newFormattedValue, caretPos) {\n var caretBoundary = getCaretBoundary(newFormattedValue);\n var updatedCaretPos = getCaretPosition(newFormattedValue, formattedValue, inputValue, caretPos, caretBoundary, isValidInputCharacter, isCharacterSame);\n //correct caret position if its outside of editable area\n updatedCaretPos = getCaretPosInBoundary(newFormattedValue, updatedCaretPos, caretBoundary);\n return updatedCaretPos;\n };\n var updateValueAndCaretPosition = function (params) {\n var newFormattedValue = params.formattedValue; if ( newFormattedValue === void 0 ) newFormattedValue = '';\n var input = params.input;\n var source = params.source;\n var event = params.event;\n var numAsString = params.numAsString;\n var caretPos;\n if (input) {\n var inputValue = params.inputValue || input.value;\n var currentCaretPosition = geInputCaretPosition(input);\n /**\n * set the value imperatively, this is required for IE fix\n * This is also required as if new caret position is beyond the previous value.\n * Caret position will not be set correctly\n */\n input.value = newFormattedValue;\n //get the caret position\n caretPos = getNewCaretPosition(inputValue, newFormattedValue, currentCaretPosition);\n //set caret position imperatively\n if (caretPos !== undefined) {\n setPatchedCaretPosition(input, caretPos, newFormattedValue);\n }\n }\n if (newFormattedValue !== formattedValue) {\n // trigger onValueChange synchronously, so parent is updated along with the number format. Fix for #277, #287\n _onValueChange(getValueObject(newFormattedValue, numAsString), { event: event, source: source });\n }\n };\n /**\n * if the formatted value is not synced to parent, or if the formatted value is different from last synced value sync it\n * if the formatting props is removed, in which case last formatted value will be different from the numeric string value\n * in such case we need to inform the parent.\n */\n useEffect(function () {\n var ref = lastUpdatedValue.current;\n var lastFormattedValue = ref.formattedValue;\n var lastNumAsString = ref.numAsString;\n if (formattedValue !== lastFormattedValue || numAsString !== lastNumAsString) {\n _onValueChange(getValueObject(formattedValue, numAsString), {\n event: undefined,\n source: SourceType.props,\n });\n }\n }, [formattedValue, numAsString]);\n // also if formatted value is changed from the props, we need to update the caret position\n // keep the last caret position if element is focused\n var currentCaretPosition = focusedElm.current\n ? geInputCaretPosition(focusedElm.current)\n : undefined;\n // needed to prevent warning with useLayoutEffect on server\n var useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n useIsomorphicLayoutEffect(function () {\n var input = focusedElm.current;\n if (formattedValue !== lastUpdatedValue.current.formattedValue && input) {\n var caretPos = getNewCaretPosition(lastUpdatedValue.current.formattedValue, formattedValue, currentCaretPosition);\n /**\n * set the value imperatively, as we set the caret position as well imperatively.\n * This is to keep value and caret position in sync\n */\n input.value = formattedValue;\n setPatchedCaretPosition(input, caretPos, formattedValue);\n }\n }, [formattedValue]);\n var formatInputValue = function (inputValue, event, source) {\n var input = event.target;\n var changeRange = caretPositionBeforeChange.current\n ? findChangedRangeFromCaretPositions(caretPositionBeforeChange.current, input.selectionEnd)\n : findChangeRange(formattedValue, inputValue);\n var changeMeta = Object.assign(Object.assign({}, changeRange), { lastValue: formattedValue });\n var _numAsString = removeFormatting(inputValue, changeMeta);\n var _formattedValue = _format(_numAsString);\n // formatting can remove some of the number chars, so we need to fine number string again\n _numAsString = removeFormatting(_formattedValue, undefined);\n if (isAllowed && !isAllowed(getValueObject(_formattedValue, _numAsString))) {\n //reset the caret position\n var input$1 = event.target;\n var currentCaretPosition = geInputCaretPosition(input$1);\n var caretPos = getNewCaretPosition(inputValue, formattedValue, currentCaretPosition);\n input$1.value = formattedValue;\n setPatchedCaretPosition(input$1, caretPos, formattedValue);\n return false;\n }\n updateValueAndCaretPosition({\n formattedValue: _formattedValue,\n numAsString: _numAsString,\n inputValue: inputValue,\n event: event,\n source: source,\n input: event.target,\n });\n return true;\n };\n var setCaretPositionInfoBeforeChange = function (el, endOffset) {\n if ( endOffset === void 0 ) endOffset = 0;\n\n var selectionStart = el.selectionStart;\n var selectionEnd = el.selectionEnd;\n caretPositionBeforeChange.current = { selectionStart: selectionStart, selectionEnd: selectionEnd + endOffset };\n };\n var _onChange = function (e) {\n var el = e.target;\n var inputValue = el.value;\n var changed = formatInputValue(inputValue, e, SourceType.event);\n if (changed)\n { onChange(e); }\n // reset the position, as we have already handled the caret position\n caretPositionBeforeChange.current = undefined;\n };\n var _onKeyDown = function (e) {\n var el = e.target;\n var key = e.key;\n var selectionStart = el.selectionStart;\n var selectionEnd = el.selectionEnd;\n var value = el.value; if ( value === void 0 ) value = '';\n var expectedCaretPosition;\n //Handle backspace and delete against non numerical/decimal characters or arrow keys\n if (key === 'ArrowLeft' || key === 'Backspace') {\n expectedCaretPosition = Math.max(selectionStart - 1, 0);\n }\n else if (key === 'ArrowRight') {\n expectedCaretPosition = Math.min(selectionStart + 1, value.length);\n }\n else if (key === 'Delete') {\n expectedCaretPosition = selectionStart;\n }\n // if key is delete and text is not selected keep the end offset to 1, as it deletes one character\n // this is required as selection is not changed on delete case, which changes the change range calculation\n var endOffset = 0;\n if (key === 'Delete' && selectionStart === selectionEnd) {\n endOffset = 1;\n }\n var isArrowKey = key === 'ArrowLeft' || key === 'ArrowRight';\n //if expectedCaretPosition is not set it means we don't want to Handle keyDown\n // also if multiple characters are selected don't handle\n if (expectedCaretPosition === undefined || (selectionStart !== selectionEnd && !isArrowKey)) {\n onKeyDown(e);\n // keep information of what was the caret position before keyDown\n // set it after onKeyDown, in case parent updates the position manually\n setCaretPositionInfoBeforeChange(el, endOffset);\n return;\n }\n var newCaretPosition = expectedCaretPosition;\n if (isArrowKey) {\n var direction = key === 'ArrowLeft' ? 'left' : 'right';\n newCaretPosition = correctCaretPosition(value, expectedCaretPosition, direction);\n // arrow left or right only moves the caret, so no need to handle the event, if we are handling it manually\n if (newCaretPosition !== expectedCaretPosition) {\n e.preventDefault();\n }\n }\n else if (key === 'Delete' && !isValidInputCharacter(value[expectedCaretPosition])) {\n // in case of delete go to closest caret boundary on the right side\n newCaretPosition = correctCaretPosition(value, expectedCaretPosition, 'right');\n }\n else if (key === 'Backspace' && !isValidInputCharacter(value[expectedCaretPosition])) {\n // in case of backspace go to closest caret boundary on the left side\n newCaretPosition = correctCaretPosition(value, expectedCaretPosition, 'left');\n }\n if (newCaretPosition !== expectedCaretPosition) {\n setPatchedCaretPosition(el, newCaretPosition, value);\n }\n onKeyDown(e);\n setCaretPositionInfoBeforeChange(el, endOffset);\n };\n /** required to handle the caret position when click anywhere within the input **/\n var _onMouseUp = function (e) {\n var el = e.target;\n /**\n * NOTE: we have to give default value for value as in case when custom input is provided\n * value can come as undefined when nothing is provided on value prop.\n */\n var correctCaretPositionIfRequired = function () {\n var selectionStart = el.selectionStart;\n var selectionEnd = el.selectionEnd;\n var value = el.value; if ( value === void 0 ) value = '';\n if (selectionStart === selectionEnd) {\n var caretPosition = correctCaretPosition(value, selectionStart);\n if (caretPosition !== selectionStart) {\n setPatchedCaretPosition(el, caretPosition, value);\n }\n }\n };\n correctCaretPositionIfRequired();\n // try to correct after selection has updated by browser\n // this case is required when user clicks on some position while a text is selected on input\n requestAnimationFrame(function () {\n correctCaretPositionIfRequired();\n });\n onMouseUp(e);\n setCaretPositionInfoBeforeChange(el);\n };\n var _onFocus = function (e) {\n // Workaround Chrome and Safari bug https://bugs.chromium.org/p/chromium/issues/detail?id=779328\n // (onFocus event target selectionStart is always 0 before setTimeout)\n if (e.persist)\n { e.persist(); }\n var el = e.target;\n var currentTarget = e.currentTarget;\n focusedElm.current = el;\n timeout.current.focusTimeout = setTimeout(function () {\n var selectionStart = el.selectionStart;\n var selectionEnd = el.selectionEnd;\n var value = el.value; if ( value === void 0 ) value = '';\n var caretPosition = correctCaretPosition(value, selectionStart);\n //setPatchedCaretPosition only when everything is not selected on focus (while tabbing into the field)\n if (caretPosition !== selectionStart &&\n !(selectionStart === 0 && selectionEnd === value.length)) {\n setPatchedCaretPosition(el, caretPosition, value);\n }\n onFocus(Object.assign(Object.assign({}, e), { currentTarget: currentTarget }));\n }, 0);\n };\n var _onBlur = function (e) {\n focusedElm.current = null;\n clearTimeout(timeout.current.focusTimeout);\n clearTimeout(timeout.current.setCaretTimeout);\n onBlur(e);\n };\n // add input mode on element based on format prop and device once the component is mounted\n var inputMode = mounted && addInputMode() ? 'numeric' : undefined;\n var inputProps = Object.assign({ inputMode: inputMode }, otherProps, {\n type: type,\n value: formattedValue,\n onChange: _onChange,\n onKeyDown: _onKeyDown,\n onMouseUp: _onMouseUp,\n onFocus: _onFocus,\n onBlur: _onBlur,\n });\n if (displayType === 'text') {\n return renderText ? (React.createElement(React.Fragment, null, renderText(formattedValue, otherProps) || null)) : (React.createElement(\"span\", Object.assign({}, otherProps, { ref: getInputRef }), formattedValue));\n }\n else if (customInput) {\n var CustomInput = customInput;\n /* @ts-ignore */\n return React.createElement(CustomInput, Object.assign({}, inputProps, { ref: getInputRef }));\n }\n return React.createElement(\"input\", Object.assign({}, inputProps, { ref: getInputRef }));\n}\n\nfunction format(numStr, props) {\n var decimalScale = props.decimalScale;\n var fixedDecimalScale = props.fixedDecimalScale;\n var prefix = props.prefix; if ( prefix === void 0 ) prefix = '';\n var suffix = props.suffix; if ( suffix === void 0 ) suffix = '';\n var allowNegative = props.allowNegative;\n var thousandsGroupStyle = props.thousandsGroupStyle; if ( thousandsGroupStyle === void 0 ) thousandsGroupStyle = 'thousand';\n // don't apply formatting on empty string or '-'\n if (numStr === '' || numStr === '-') {\n return numStr;\n }\n var ref = getSeparators(props);\n var thousandSeparator = ref.thousandSeparator;\n var decimalSeparator = ref.decimalSeparator;\n /**\n * Keep the decimal separator\n * when decimalScale is not defined or non zero and the numStr has decimal in it\n * Or if decimalScale is > 0 and fixeDecimalScale is true (even if numStr has no decimal)\n */\n var hasDecimalSeparator = (decimalScale !== 0 && numStr.indexOf('.') !== -1) || (decimalScale && fixedDecimalScale);\n var ref$1 = splitDecimal(numStr, allowNegative);\n var beforeDecimal = ref$1.beforeDecimal;\n var afterDecimal = ref$1.afterDecimal;\n var addNegation = ref$1.addNegation; // eslint-disable-line prefer-const\n //apply decimal precision if its defined\n if (decimalScale !== undefined) {\n afterDecimal = limitToScale(afterDecimal, decimalScale, !!fixedDecimalScale);\n }\n if (thousandSeparator) {\n beforeDecimal = applyThousandSeparator(beforeDecimal, thousandSeparator, thousandsGroupStyle);\n }\n //add prefix and suffix when there is a number present\n if (prefix)\n { beforeDecimal = prefix + beforeDecimal; }\n if (suffix)\n { afterDecimal = afterDecimal + suffix; }\n //restore negation sign\n if (addNegation)\n { beforeDecimal = '-' + beforeDecimal; }\n numStr = beforeDecimal + ((hasDecimalSeparator && decimalSeparator) || '') + afterDecimal;\n return numStr;\n}\nfunction getSeparators(props) {\n var decimalSeparator = props.decimalSeparator; if ( decimalSeparator === void 0 ) decimalSeparator = '.';\n var thousandSeparator = props.thousandSeparator;\n var allowedDecimalSeparators = props.allowedDecimalSeparators;\n if (thousandSeparator === true) {\n thousandSeparator = ',';\n }\n if (!allowedDecimalSeparators) {\n allowedDecimalSeparators = [decimalSeparator, '.'];\n }\n return {\n decimalSeparator: decimalSeparator,\n thousandSeparator: thousandSeparator,\n allowedDecimalSeparators: allowedDecimalSeparators,\n };\n}\nfunction handleNegation(value, allowNegative) {\n if ( value === void 0 ) value = '';\n\n var negationRegex = new RegExp('(-)');\n var doubleNegationRegex = new RegExp('(-)(.)*(-)');\n // Check number has '-' value\n var hasNegation = negationRegex.test(value);\n // Check number has 2 or more '-' values\n var removeNegation = doubleNegationRegex.test(value);\n //remove negation\n value = value.replace(/-/g, '');\n if (hasNegation && !removeNegation && allowNegative) {\n value = '-' + value;\n }\n return value;\n}\nfunction getNumberRegex(decimalSeparator, global) {\n return new RegExp((\"(^-)|[0-9]|\" + (escapeRegExp(decimalSeparator))), global ? 'g' : undefined);\n}\nfunction isNumericString(val, prefix, suffix) {\n // for empty value we can always treat it as numeric string\n if (val === '')\n { return true; }\n return (!(prefix === null || prefix === void 0 ? void 0 : prefix.match(/\\d/)) && !(suffix === null || suffix === void 0 ? void 0 : suffix.match(/\\d/)) && typeof val === 'string' && !isNaN(Number(val)));\n}\nfunction removeFormatting(value, changeMeta, props) {\n var assign;\n\n if ( changeMeta === void 0 ) changeMeta = getDefaultChangeMeta(value);\n var allowNegative = props.allowNegative;\n var prefix = props.prefix; if ( prefix === void 0 ) prefix = '';\n var suffix = props.suffix; if ( suffix === void 0 ) suffix = '';\n var decimalScale = props.decimalScale;\n var from = changeMeta.from;\n var to = changeMeta.to;\n var start = to.start;\n var end = to.end;\n var ref = getSeparators(props);\n var allowedDecimalSeparators = ref.allowedDecimalSeparators;\n var decimalSeparator = ref.decimalSeparator;\n var isBeforeDecimalSeparator = value[end] === decimalSeparator;\n /**\n * If only a number is added on empty input which matches with the prefix or suffix,\n * then don't remove it, just return the same\n */\n if (charIsNumber(value) &&\n (value === prefix || value === suffix) &&\n changeMeta.lastValue === '') {\n return value;\n }\n /** Check for any allowed decimal separator is added in the numeric format and replace it with decimal separator */\n if (end - start === 1 && allowedDecimalSeparators.indexOf(value[start]) !== -1) {\n var separator = decimalScale === 0 ? '' : decimalSeparator;\n value = value.substring(0, start) + separator + value.substring(start + 1, value.length);\n }\n var stripNegation = function (value, start, end) {\n /**\n * if prefix starts with - we don't allow negative number to avoid confusion\n * if suffix starts with - and the value length is same as suffix length, then the - sign is from the suffix\n * In other cases, if the value starts with - then it is a negation\n */\n var hasNegation = false;\n var hasDoubleNegation = false;\n if (prefix.startsWith('-')) {\n hasNegation = false;\n }\n else if (value.startsWith('--')) {\n hasNegation = false;\n hasDoubleNegation = true;\n }\n else if (suffix.startsWith('-') && value.length === suffix.length) {\n hasNegation = false;\n }\n else if (value[0] === '-') {\n hasNegation = true;\n }\n var charsToRemove = hasNegation ? 1 : 0;\n if (hasDoubleNegation)\n { charsToRemove = 2; }\n // remove negation/double negation from start to simplify prefix logic as negation comes before prefix\n if (charsToRemove) {\n value = value.substring(charsToRemove);\n // account for the removal of the negation for start and end index\n start -= charsToRemove;\n end -= charsToRemove;\n }\n return { value: value, start: start, end: end, hasNegation: hasNegation };\n };\n var toMetadata = stripNegation(value, start, end);\n var hasNegation = toMetadata.hasNegation;\n ((assign = toMetadata, value = assign.value, start = assign.start, end = assign.end));\n var ref$1 = stripNegation(changeMeta.lastValue, from.start, from.end);\n var fromStart = ref$1.start;\n var fromEnd = ref$1.end;\n var lastValue = ref$1.value;\n // if only prefix and suffix part is updated reset the value to last value\n // if the changed range is from suffix in the updated value, and the the suffix starts with the same characters, allow the change\n var updatedSuffixPart = value.substring(start, end);\n if (value.length &&\n lastValue.length &&\n (fromStart > lastValue.length - suffix.length || fromEnd < prefix.length) &&\n !(updatedSuffixPart && suffix.startsWith(updatedSuffixPart))) {\n value = lastValue;\n }\n /**\n * remove prefix\n * Remove whole prefix part if its present on the value\n * If the prefix is partially deleted (in which case change start index will be less the prefix length)\n * Remove only partial part of prefix.\n */\n var startIndex = 0;\n if (value.startsWith(prefix))\n { startIndex += prefix.length; }\n else if (start < prefix.length)\n { startIndex = start; }\n value = value.substring(startIndex);\n // account for deleted prefix for end\n end -= startIndex;\n /**\n * Remove suffix\n * Remove whole suffix part if its present on the value\n * If the suffix is partially deleted (in which case change end index will be greater than the suffixStartIndex)\n * remove the partial part of suffix\n */\n var endIndex = value.length;\n var suffixStartIndex = value.length - suffix.length;\n if (value.endsWith(suffix))\n { endIndex = suffixStartIndex; }\n // if the suffix is removed from the end\n else if (end > suffixStartIndex)\n { endIndex = end; }\n // if the suffix is removed from start\n else if (end > value.length - suffix.length)\n { endIndex = end; }\n value = value.substring(0, endIndex);\n // add the negation back and handle for double negation\n value = handleNegation(hasNegation ? (\"-\" + value) : value, allowNegative);\n // remove non numeric characters\n value = (value.match(getNumberRegex(decimalSeparator, true)) || []).join('');\n // replace the decimalSeparator with ., and only keep the first separator, ignore following ones\n var firstIndex = value.indexOf(decimalSeparator);\n value = value.replace(new RegExp(escapeRegExp(decimalSeparator), 'g'), function (match, index) {\n return index === firstIndex ? '.' : '';\n });\n //check if beforeDecimal got deleted and there is nothing after decimal,\n //clear all numbers in such case while keeping the - sign\n var ref$2 = splitDecimal(value, allowNegative);\n var beforeDecimal = ref$2.beforeDecimal;\n var afterDecimal = ref$2.afterDecimal;\n var addNegation = ref$2.addNegation; // eslint-disable-line prefer-const\n //clear only if something got deleted before decimal (cursor is before decimal)\n if (to.end - to.start < from.end - from.start &&\n beforeDecimal === '' &&\n isBeforeDecimalSeparator &&\n !parseFloat(afterDecimal)) {\n value = addNegation ? '-' : '';\n }\n return value;\n}\nfunction getCaretBoundary(formattedValue, props) {\n var prefix = props.prefix; if ( prefix === void 0 ) prefix = '';\n var suffix = props.suffix; if ( suffix === void 0 ) suffix = '';\n var boundaryAry = Array.from({ length: formattedValue.length + 1 }).map(function () { return true; });\n var hasNegation = formattedValue[0] === '-';\n // fill for prefix and negation\n boundaryAry.fill(false, 0, prefix.length + (hasNegation ? 1 : 0));\n // fill for suffix\n var valLn = formattedValue.length;\n boundaryAry.fill(false, valLn - suffix.length + 1, valLn + 1);\n return boundaryAry;\n}\nfunction validateAndUpdateProps(props) {\n var ref = getSeparators(props);\n var thousandSeparator = ref.thousandSeparator;\n var decimalSeparator = ref.decimalSeparator;\n // eslint-disable-next-line prefer-const\n var prefix = props.prefix; if ( prefix === void 0 ) prefix = '';\n var allowNegative = props.allowNegative; if ( allowNegative === void 0 ) allowNegative = true;\n if (thousandSeparator === decimalSeparator) {\n throw new Error((\"\\n Decimal separator can't be same as thousand separator.\\n thousandSeparator: \" + thousandSeparator + \" (thousandSeparator = {true} is same as thousandSeparator = \\\",\\\")\\n decimalSeparator: \" + decimalSeparator + \" (default value for decimalSeparator is .)\\n \"));\n }\n if (prefix.startsWith('-') && allowNegative) {\n // TODO: throw error in next major version\n console.error((\"\\n Prefix can't start with '-' when allowNegative is true.\\n prefix: \" + prefix + \"\\n allowNegative: \" + allowNegative + \"\\n \"));\n allowNegative = false;\n }\n return Object.assign(Object.assign({}, props), { allowNegative: allowNegative });\n}\nfunction useNumericFormat(props) {\n // validate props\n props = validateAndUpdateProps(props);\n var _decimalSeparator = props.decimalSeparator;\n var _allowedDecimalSeparators = props.allowedDecimalSeparators;\n var thousandsGroupStyle = props.thousandsGroupStyle;\n var suffix = props.suffix;\n var allowNegative = props.allowNegative;\n var allowLeadingZeros = props.allowLeadingZeros;\n var onKeyDown = props.onKeyDown; if ( onKeyDown === void 0 ) onKeyDown = noop;\n var onBlur = props.onBlur; if ( onBlur === void 0 ) onBlur = noop;\n var thousandSeparator = props.thousandSeparator;\n var decimalScale = props.decimalScale;\n var fixedDecimalScale = props.fixedDecimalScale;\n var prefix = props.prefix; if ( prefix === void 0 ) prefix = '';\n var defaultValue = props.defaultValue;\n var value = props.value;\n var valueIsNumericString = props.valueIsNumericString;\n var onValueChange = props.onValueChange;\n var restProps = __rest(props, [\"decimalSeparator\", \"allowedDecimalSeparators\", \"thousandsGroupStyle\", \"suffix\", \"allowNegative\", \"allowLeadingZeros\", \"onKeyDown\", \"onBlur\", \"thousandSeparator\", \"decimalScale\", \"fixedDecimalScale\", \"prefix\", \"defaultValue\", \"value\", \"valueIsNumericString\", \"onValueChange\"]);\n // get derived decimalSeparator and allowedDecimalSeparators\n var ref = getSeparators(props);\n var decimalSeparator = ref.decimalSeparator;\n var allowedDecimalSeparators = ref.allowedDecimalSeparators;\n var _format = function (numStr) { return format(numStr, props); };\n var _removeFormatting = function (inputValue, changeMeta) { return removeFormatting(inputValue, changeMeta, props); };\n var _value = isNil(value) ? defaultValue : value;\n // try to figure out isValueNumericString based on format prop and value\n var _valueIsNumericString = valueIsNumericString !== null && valueIsNumericString !== void 0 ? valueIsNumericString : isNumericString(_value, prefix, suffix);\n if (!isNil(value)) {\n _valueIsNumericString = _valueIsNumericString || typeof value === 'number';\n }\n else if (!isNil(defaultValue)) {\n _valueIsNumericString = _valueIsNumericString || typeof defaultValue === 'number';\n }\n var roundIncomingValueToPrecision = function (value) {\n if (isNotValidValue(value))\n { return value; }\n if (typeof value === 'number') {\n value = toNumericString(value);\n }\n /**\n * only round numeric or float string values coming through props,\n * we don't need to do it for onChange events, as we want to prevent typing there\n */\n if (_valueIsNumericString && typeof decimalScale === 'number') {\n return roundToPrecision(value, decimalScale, Boolean(fixedDecimalScale));\n }\n return value;\n };\n var ref$1 = useInternalValues(roundIncomingValueToPrecision(value), roundIncomingValueToPrecision(defaultValue), Boolean(_valueIsNumericString), _format, _removeFormatting, onValueChange);\n var ref$1_0 = ref$1[0];\n var numAsString = ref$1_0.numAsString;\n var formattedValue = ref$1_0.formattedValue;\n var _onValueChange = ref$1[1];\n var _onKeyDown = function (e) {\n var el = e.target;\n var key = e.key;\n var selectionStart = el.selectionStart;\n var selectionEnd = el.selectionEnd;\n var value = el.value; if ( value === void 0 ) value = '';\n // if user tries to delete partial prefix then ignore it\n if ((key === 'Backspace' || key === 'Delete') && selectionEnd < prefix.length) {\n e.preventDefault();\n return;\n }\n // if multiple characters are selected and user hits backspace, no need to handle anything manually\n if (selectionStart !== selectionEnd) {\n onKeyDown(e);\n return;\n }\n // if user hits backspace, while the cursor is before prefix, and the input has negation, remove the negation\n if (key === 'Backspace' &&\n value[0] === '-' &&\n selectionStart === prefix.length + 1 &&\n allowNegative) {\n // bring the cursor to after negation\n setCaretPosition(el, 1);\n }\n // don't allow user to delete decimal separator when decimalScale and fixedDecimalScale is set\n if (decimalScale && fixedDecimalScale) {\n if (key === 'Backspace' && value[selectionStart - 1] === decimalSeparator) {\n setCaretPosition(el, selectionStart - 1);\n e.preventDefault();\n }\n else if (key === 'Delete' && value[selectionStart] === decimalSeparator) {\n e.preventDefault();\n }\n }\n // if user presses the allowed decimal separator before the separator, move the cursor after the separator\n if ((allowedDecimalSeparators === null || allowedDecimalSeparators === void 0 ? void 0 : allowedDecimalSeparators.includes(key)) && value[selectionStart] === decimalSeparator) {\n setCaretPosition(el, selectionStart + 1);\n }\n var _thousandSeparator = thousandSeparator === true ? ',' : thousandSeparator;\n // move cursor when delete or backspace is pressed before/after thousand separator\n if (key === 'Backspace' && value[selectionStart - 1] === _thousandSeparator) {\n setCaretPosition(el, selectionStart - 1);\n }\n if (key === 'Delete' && value[selectionStart] === _thousandSeparator) {\n setCaretPosition(el, selectionStart + 1);\n }\n onKeyDown(e);\n };\n var _onBlur = function (e) {\n var _value = numAsString;\n // if there no no numeric value, clear the input\n if (!_value.match(/\\d/g)) {\n _value = '';\n }\n // clear leading 0s\n if (!allowLeadingZeros) {\n _value = fixLeadingZero(_value);\n }\n // apply fixedDecimalScale on blur event\n if (fixedDecimalScale && decimalScale) {\n _value = roundToPrecision(_value, decimalScale, fixedDecimalScale);\n }\n if (_value !== numAsString) {\n var formattedValue = format(_value, props);\n _onValueChange({\n formattedValue: formattedValue,\n value: _value,\n floatValue: parseFloat(_value),\n }, {\n event: e,\n source: SourceType.event,\n });\n }\n onBlur(e);\n };\n var isValidInputCharacter = function (inputChar) {\n if (inputChar === decimalSeparator)\n { return true; }\n return charIsNumber(inputChar);\n };\n var isCharacterSame = function (ref) {\n var currentValue = ref.currentValue;\n var lastValue = ref.lastValue;\n var formattedValue = ref.formattedValue;\n var currentValueIndex = ref.currentValueIndex;\n var formattedValueIndex = ref.formattedValueIndex;\n\n var curChar = currentValue[currentValueIndex];\n var newChar = formattedValue[formattedValueIndex];\n /**\n * NOTE: as thousand separator and allowedDecimalSeparators can be same, we need to check on\n * typed range if we have typed any character from allowedDecimalSeparators, in that case we\n * consider different characters like , and . same within the range of updated value.\n */\n var typedRange = findChangeRange(lastValue, currentValue);\n var to = typedRange.to;\n // handle corner case where if we user types a decimal separator with fixedDecimalScale\n // and pass back float value the cursor jumps. #851\n var getDecimalSeparatorIndex = function (value) {\n return _removeFormatting(value).indexOf('.') + prefix.length;\n };\n if (value === 0 &&\n fixedDecimalScale &&\n decimalScale &&\n currentValue[to.start] === decimalSeparator &&\n getDecimalSeparatorIndex(currentValue) < currentValueIndex &&\n getDecimalSeparatorIndex(formattedValue) > formattedValueIndex) {\n return false;\n }\n if (currentValueIndex >= to.start &&\n currentValueIndex < to.end &&\n allowedDecimalSeparators &&\n allowedDecimalSeparators.includes(curChar) &&\n newChar === decimalSeparator) {\n return true;\n }\n return curChar === newChar;\n };\n return Object.assign(Object.assign({}, restProps), { value: formattedValue, valueIsNumericString: false, isValidInputCharacter: isValidInputCharacter,\n isCharacterSame: isCharacterSame, onValueChange: _onValueChange, format: _format, removeFormatting: _removeFormatting, getCaretBoundary: function (formattedValue) { return getCaretBoundary(formattedValue, props); }, onKeyDown: _onKeyDown, onBlur: _onBlur });\n}\nfunction NumericFormat(props) {\n var numericFormatProps = useNumericFormat(props);\n return React.createElement(NumberFormatBase, Object.assign({}, numericFormatProps));\n}\n\nfunction format$1(numStr, props) {\n var format = props.format;\n var allowEmptyFormatting = props.allowEmptyFormatting;\n var mask = props.mask;\n var patternChar = props.patternChar; if ( patternChar === void 0 ) patternChar = '#';\n if (numStr === '' && !allowEmptyFormatting)\n { return ''; }\n var hashCount = 0;\n var formattedNumberAry = format.split('');\n for (var i = 0, ln = format.length; i < ln; i++) {\n if (format[i] === patternChar) {\n formattedNumberAry[i] = numStr[hashCount] || getMaskAtIndex(mask, hashCount);\n hashCount += 1;\n }\n }\n return formattedNumberAry.join('');\n}\nfunction removeFormatting$1(value, changeMeta, props) {\n if ( changeMeta === void 0 ) changeMeta = getDefaultChangeMeta(value);\n\n var format = props.format;\n var patternChar = props.patternChar; if ( patternChar === void 0 ) patternChar = '#';\n var from = changeMeta.from;\n var to = changeMeta.to;\n var lastValue = changeMeta.lastValue; if ( lastValue === void 0 ) lastValue = '';\n var isNumericSlot = function (caretPos) { return format[caretPos] === patternChar; };\n var removeFormatChar = function (string, startIndex) {\n var str = '';\n for (var i = 0; i < string.length; i++) {\n if (isNumericSlot(startIndex + i) && charIsNumber(string[i])) {\n str += string[i];\n }\n }\n return str;\n };\n var extractNumbers = function (str) { return str.replace(/[^0-9]/g, ''); };\n // if format doesn't have any number, remove all the non numeric characters\n if (!format.match(/\\d/)) {\n return extractNumbers(value);\n }\n /**\n * if user paste the whole formatted text in an empty input or doing select all and paste, check if matches to the pattern\n * and remove the format characters, if there is a mismatch on the pattern, do plane number extract\n */\n if ((lastValue === '' || from.end - from.start === lastValue.length) &&\n value.length === format.length) {\n var str = '';\n for (var i = 0; i < value.length; i++) {\n if (isNumericSlot(i)) {\n if (charIsNumber(value[i])) {\n str += value[i];\n }\n }\n else if (value[i] !== format[i]) {\n // if there is a mismatch on the pattern, do plane number extract\n return extractNumbers(value);\n }\n }\n return str;\n }\n /**\n * For partial change,\n * where ever there is a change on the input, we can break the number in three parts\n * 1st: left part which is unchanged\n * 2nd: middle part which is changed\n * 3rd: right part which is unchanged\n *\n * The first and third section will be same as last value, only the middle part will change\n * We can consider on the change part all the new characters are non format characters.\n * And on the first and last section it can have partial format characters.\n *\n * We pick first and last section from the lastValue (as that has 1-1 mapping with format)\n * and middle one from the update value.\n */\n var firstSection = lastValue.substring(0, from.start);\n var middleSection = value.substring(to.start, to.end);\n var lastSection = lastValue.substring(from.end);\n return (\"\" + (removeFormatChar(firstSection, 0)) + (extractNumbers(middleSection)) + (removeFormatChar(lastSection, from.end)));\n}\nfunction getCaretBoundary$1(formattedValue, props) {\n var format = props.format;\n var mask = props.mask;\n var patternChar = props.patternChar; if ( patternChar === void 0 ) patternChar = '#';\n var boundaryAry = Array.from({ length: formattedValue.length + 1 }).map(function () { return true; });\n var hashCount = 0;\n var firstEmptySlot = -1;\n var maskAndIndexMap = {};\n format.split('').forEach(function (char, index) {\n var maskAtIndex = undefined;\n if (char === patternChar) {\n hashCount++;\n maskAtIndex = getMaskAtIndex(mask, hashCount - 1);\n if (firstEmptySlot === -1 && formattedValue[index] === maskAtIndex) {\n firstEmptySlot = index;\n }\n }\n maskAndIndexMap[index] = maskAtIndex;\n });\n var isPosAllowed = function (pos) {\n // the position is allowed if the position is not masked and valid number area\n return format[pos] === patternChar && formattedValue[pos] !== maskAndIndexMap[pos];\n };\n for (var i = 0, ln = boundaryAry.length; i < ln; i++) {\n // consider caret to be in boundary if it is before or after numeric value\n // Note: on pattern based format its denoted by patternCharacter\n // we should also allow user to put cursor on first empty slot\n boundaryAry[i] = i === firstEmptySlot || isPosAllowed(i) || isPosAllowed(i - 1);\n }\n // the first patternChar position is always allowed\n boundaryAry[format.indexOf(patternChar)] = true;\n return boundaryAry;\n}\nfunction validateProps(props) {\n var mask = props.mask;\n if (mask) {\n var maskAsStr = mask === 'string' ? mask : mask.toString();\n if (maskAsStr.match(/\\d/g)) {\n throw new Error((\"Mask \" + mask + \" should not contain numeric character;\"));\n }\n }\n}\nfunction isNumericString$1(val, format) {\n //we can treat empty string as numeric string\n if (val === '')\n { return true; }\n return !(format === null || format === void 0 ? void 0 : format.match(/\\d/)) && typeof val === 'string' && (!!val.match(/^\\d+$/) || val === '');\n}\nfunction usePatternFormat(props) {\n var mask = props.mask;\n var allowEmptyFormatting = props.allowEmptyFormatting;\n var formatProp = props.format;\n var inputMode = props.inputMode; if ( inputMode === void 0 ) inputMode = 'numeric';\n var onKeyDown = props.onKeyDown; if ( onKeyDown === void 0 ) onKeyDown = noop;\n var patternChar = props.patternChar; if ( patternChar === void 0 ) patternChar = '#';\n var value = props.value;\n var defaultValue = props.defaultValue;\n var valueIsNumericString = props.valueIsNumericString;\n var restProps = __rest(props, [\"mask\", \"allowEmptyFormatting\", \"format\", \"inputMode\", \"onKeyDown\", \"patternChar\", \"value\", \"defaultValue\", \"valueIsNumericString\"]);\n // validate props\n validateProps(props);\n var _getCaretBoundary = function (formattedValue) {\n return getCaretBoundary$1(formattedValue, props);\n };\n var _onKeyDown = function (e) {\n var key = e.key;\n var el = e.target;\n var selectionStart = el.selectionStart;\n var selectionEnd = el.selectionEnd;\n var value = el.value;\n // if multiple characters are selected and user hits backspace, no need to handle anything manually\n if (selectionStart !== selectionEnd) {\n onKeyDown(e);\n return;\n }\n // bring the cursor to closest numeric section\n var caretPos = selectionStart;\n // if backspace is pressed after the format characters, bring it to numeric section\n // if delete is pressed before the format characters, bring it to numeric section\n if (key === 'Backspace' || key === 'Delete') {\n var direction = 'right';\n if (key === 'Backspace') {\n while (caretPos > 0 && formatProp[caretPos - 1] !== patternChar) {\n caretPos--;\n }\n direction = 'left';\n }\n else {\n var formatLn = formatProp.length;\n while (caretPos < formatLn && formatProp[caretPos] !== patternChar) {\n caretPos++;\n }\n direction = 'right';\n }\n caretPos = getCaretPosInBoundary(value, caretPos, _getCaretBoundary(value), direction);\n }\n else if (formatProp[caretPos] !== patternChar &&\n key !== 'ArrowLeft' &&\n key !== 'ArrowRight') {\n // if user is typing on format character position, bring user to next allowed caret position\n caretPos = getCaretPosInBoundary(value, caretPos + 1, _getCaretBoundary(value), 'right');\n }\n // if we changing caret position, set the caret position\n if (caretPos !== selectionStart) {\n setCaretPosition(el, caretPos);\n }\n onKeyDown(e);\n };\n // try to figure out isValueNumericString based on format prop and value\n var _value = isNil(value) ? defaultValue : value;\n var isValueNumericString = valueIsNumericString !== null && valueIsNumericString !== void 0 ? valueIsNumericString : isNumericString$1(_value, formatProp);\n var _props = Object.assign(Object.assign({}, props), { valueIsNumericString: isValueNumericString });\n return Object.assign(Object.assign({}, restProps), { value: value,\n defaultValue: defaultValue, valueIsNumericString: isValueNumericString, inputMode: inputMode, format: function (numStr) { return format$1(numStr, _props); }, removeFormatting: function (inputValue, changeMeta) { return removeFormatting$1(inputValue, changeMeta, _props); }, getCaretBoundary: _getCaretBoundary, onKeyDown: _onKeyDown });\n}\nfunction PatternFormat(props) {\n var patternFormatProps = usePatternFormat(props);\n return React.createElement(NumberFormatBase, Object.assign({}, patternFormatProps));\n}\n\nexport { NumberFormatBase, NumericFormat, PatternFormat, getCaretBoundary as getNumericCaretBoundary, getCaretBoundary$1 as getPatternCaretBoundary, format as numericFormatter, format$1 as patternFormatter, removeFormatting as removeNumericFormat, removeFormatting$1 as removePatternFormat, useNumericFormat, usePatternFormat };\n","import { addDisabled, addFont, addNiceNumber, addOutline, addTransition } from '@local/styles/add';\nimport { addError } from '@local/styles/error';\nimport { addSX } from '@local/styles/sx';\nimport { IThemeSizePropertyDefault, KEY_SIZE_DATA } from '@local/theme';\n\nimport { motion } from 'framer-motion';\nimport { NumericFormat, PatternFormat } from 'react-number-format';\nimport styled, { css } from 'styled-components';\n\nimport { StyledInputChildrenProps, StyledInputProps, StyledInputWrapperProps } from '.';\n\n/****************************************** Wrapper *************************************************/\nexport const StyledInputWrapper = styled.div<StyledInputWrapperProps>`\n position: relative;\n display: flex;\n justify-content: flex-start;\n flex-direction: column;\n ${(props) =>\n props.$isWidthAsHeight\n ? css`\n width: ${KEY_SIZE_DATA[props.$size].height}px;\n min-width: ${KEY_SIZE_DATA[props.$size].height}px;\n & input {\n text-align: center;\n }\n `\n : null};\n ${addSX};\n`;\n\n/****************************************** Placeholder *************************************************/\nexport const addInputPlaceholder = css<StyledInputProps>`\n &::placeholder,\n &::-webkit-input-placeholder {\n ${addFont};\n color: ${(props) => props.theme.colors.input[props.$genre].color.placeholder};\n opacity: 1;\n }\n &:-ms-input-placeholder {\n ${addFont};\n color: ${(props) => props.theme.colors.input[props.$genre].color.placeholder};\n opacity: 1;\n }\n`;\nexport const addInputPlaceholderNiceNumber = css<StyledInputProps>`\n &::placeholder,\n &::-webkit-input-placeholder {\n ${addFont};\n color: ${(props) => props.theme.colors.input[props.$genre].color.placeholder};\n opacity: 1;\n ${addNiceNumber};\n background: transparent;\n }\n &:-ms-input-placeholder {\n ${addFont};\n color: ${(props) => props.theme.colors.input[props.$genre].color.placeholder};\n opacity: 1;\n ${addNiceNumber};\n background: transparent;\n }\n`;\n\n/****************************************** Genre *************************************************/\nconst InputGenre = css<StyledInputProps>`\n ${(props) => css`\n background: ${props.theme.colors.input[props.$genre].background.rest};\n border-color: ${props.theme.colors.input[props.$genre].border.rest};\n color: ${props.theme.colors.input[props.$genre].color.rest};\n &:active {\n background: ${props.theme.colors.input[props.$genre].background.rest};\n border-color: ${props.theme.colors.input[props.$genre].border.rest};\n color: ${props.theme.colors.input[props.$genre].color.rest};\n }\n ${\n !props.$isNotShowHoverStyle &&\n css`\n &:hover {\n background: ${props.theme.colors.input[props.$genre].background.hover};\n border-color: ${props.theme.colors.input[props.$genre].border.hover};\n color: ${props.theme.colors.input[props.$genre].color.hover};\n }\n `\n }\n &:focus-visible {\n background: ${props.theme.colors.input[props.$genre].background.rest};\n border-color: ${props.theme.colors.input[props.$genre].border.rest};\n color: ${props.theme.colors.input[props.$genre].color.rest};\n }\n `};\n`;\n\n/****************************************** Size *************************************************/\nexport const InputSize = css<StyledInputProps>`\n ${(props) => InputSizeConstructor(KEY_SIZE_DATA[props.$size])};\n`;\nexport const InputSizeConstructor = (props: IThemeSizePropertyDefault) => css`\n padding: 0px ${props.padding}px;\n height: ${props.height}px;\n min-height: ${props.height}px;\n max-height: ${props.height}px;\n border-radius: ${props.radius}px;\n`;\n\n/****************************************** is isInputEffect *************************************************/\nexport const addInputIsInputEffect = css<Pick<StyledInputProps, '$isInputEffect'>>`\n ${(props) =>\n props.$isInputEffect &&\n css`\n box-shadow: ${props.theme.effects.input};\n `}\n`;\n\n/****************************************** Default *************************************************/\nexport const StyledInputCSS = css<StyledInputProps>`\n resize: none;\n overflow: hidden;\n width: 100%;\n border: 1px solid;\n\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n\n ${addFont};\n ${InputSize};\n ${InputGenre};\n ${addInputPlaceholder};\n ${addDisabled};\n ${addInputIsInputEffect};\n ${addOutline};\n ${addTransition};\n ${addError};\n\n ${(props) =>\n props.$isNiceNumber &&\n css`\n ${addNiceNumber};\n `};\n ${(props) =>\n props.$isCenter &&\n css`\n text-align: center;\n justify-content: center;\n `};\n\n ${(props) =>\n props.$prefixChildren &&\n css`\n padding-left: ${`calc(${props.$prefixChildren.width} + ${props.$prefixChildren.right} + ${props.$prefixChildren.left})`};\n `};\n\n ${(props) =>\n props.$postfixChildren &&\n css`\n padding-right: ${`calc(${props.$postfixChildren.width} + ${props.$postfixChildren.right} + ${props.$postfixChildren.left})`};\n `};\n`;\n\nexport const StyledInput = styled.input<StyledInputProps>`\n ${StyledInputCSS};\n`;\n\nexport const StyledMotionInput = styled(motion.input)<StyledInputProps>`\n ${StyledInputCSS};\n`;\n\nexport const StyledInputPattern = styled(PatternFormat)<StyledInputProps>`\n ${StyledInputCSS};\n`;\nexport const StyledInputNumeric = styled(NumericFormat)<StyledInputProps>`\n ${StyledInputCSS};\n`;\n\n/****************************************** Children *************************************************/\nexport const InputPrefixChildren = styled.div<StyledInputChildrenProps>`\n position: absolute;\n display: flex;\n left: ${(props) => props.$left};\n width: ${(props) => props.$width};\n height: 100%;\n ${addDisabled};\n ${addTransition};\n`;\n\nexport const InputPostfixChildren = styled.div<StyledInputChildrenProps>`\n position: absolute;\n display: flex;\n right: ${(props) => props.$right};\n width: ${(props) => props.$width};\n height: 100%;\n ${addDisabled};\n ${addTransition};\n`;\n","import { addInputIsInputEffect } from '@local/components/input';\nimport {\n addDisabled,\n addFont,\n addNiceNumber,\n addOutline,\n addRemoveOutline,\n addRemoveScrollbar,\n addTransition,\n} from '@local/styles/add';\nimport { addError } from '@local/styles/error';\nimport { addSX } from '@local/styles/sx';\nimport { KEY_SIZE_DATA } from '@local/theme/theme';\n\nimport { motion } from 'framer-motion';\nimport styled, { css } from 'styled-components';\n\nimport { Button, ButtonProps } from '../button';\nimport { DateDropdownDayProps, DateDropdownListProps, DateInputProps, DateStyledListProps, DateWrapperProps } from '.';\n\nexport const DateWrapper = styled.div<DateWrapperProps>`\n width: 100%;\n position: relative;\n height: fit-content;\n ${(props) =>\n props.$isMinWidth &&\n css`\n width: min-content;\n `}\n ${addSX};\n ${addNiceNumber};\n`;\n\nexport const DateDropdownListParent = styled(motion.div)<DateStyledListProps>`\n ${addRemoveScrollbar};\n`;\n\nexport const DateDropdownList = styled.div<DateDropdownListProps>`\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n padding-top: 6px;\n transform: translateZ(0);\n justify-content: flex-start;\n gap: 10px;\n ${addInputIsInputEffect};\n`;\n\nexport const DateDropdownDays = styled.div<{ $rows: number }>`\n display: grid;\n column-gap: normal;\n row-gap: normal;\n gap: 6px;\n grid-template-columns: repeat(7, 28px);\n grid-template-rows: repeat(${(props) => props.$rows}, 28px);\n justify-content: space-between;\n`;\n\nexport const addDateDropdownDaySize = css<DateDropdownDayProps>`\n ${(props) =>\n props.$size &&\n css`\n border-radius: ${KEY_SIZE_DATA[props.$size].radius}px;\n `};\n position: relative;\n overflow: hidden;\n isolation: isolate;\n user-select: none;\n background: ${(props) => props.theme.colors.date[props.$genre].background.rest};\n border-color: ${(props) => props.theme.colors.date[props.$genre].border.rest};\n color: ${(props) => props.theme.colors.date[props.$genre].color.rest};\n border: 1px solid transparent;\n grid-row: ${(props) => props.$row};\n grid-column: ${(props) => props.$column};\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n cursor: pointer;\n &:hover {\n ${(props) =>\n !props.$isDisabled &&\n css`\n background: ${props.theme.colors.date[props.$genre].background.hover};\n border-color: ${props.theme.colors.date[props.$genre].border.hover};\n color: ${props.theme.colors.date[props.$genre].color.hover};\n `}\n }\n ${addTransition};\n\n ${(props) =>\n props.$isWeekend &&\n css`\n background: ${props.theme.colors.date[props.$genre].background.weekend};\n border-color: ${props.theme.colors.date[props.$genre].border.weekend};\n color: ${props.theme.colors.date[props.$genre].color.weekend};\n `}\n ${(props) =>\n props.$isToday &&\n css`\n background: ${props.theme.colors.date[props.$genre].background.today};\n border-color: ${props.theme.colors.date[props.$genre].border.today};\n color: ${props.theme.colors.date[props.$genre].color.today};\n `}\n ${(props) =>\n props.$isChoice &&\n css`\n background: ${props.theme.colors.date[props.$genre].background.choice};\n border-color: ${props.theme.colors.date[props.$genre].border.choice};\n color: ${props.theme.colors.date[props.$genre].color.choice};\n `}\n ${(props) =>\n props.$isDisabled &&\n css`\n background: ${props.theme.colors.date[props.$genre].background.weekend};\n border-color: ${props.theme.colors.date[props.$genre].border.weekend};\n color: ${props.theme.colors.date[props.$genre].color.weekend};\n opacity: 0.5;\n `}\n ${(props) =>\n !props.$isCurrentMonth &&\n css`\n opacity: 0.5;\n `}\n \n ${addFont};\n ${addOutline};\n`;\n\nexport const DateDropdownDay = styled.button<DateDropdownDayProps>`\n ${addDateDropdownDaySize}\n`;\nexport const DateDropdownDayOfWeek = styled.button<DateDropdownDayProps>`\n ${addDateDropdownDaySize}\n opacity: 1;\n background-color: transparent;\n`;\n\n/****************************************** Genre *************************************************/\nconst addDateInputGenre = css<DateInputProps>`\n background-color: ${(props) => (props.$isActive ? props.theme.palette.black10 : 'transparent')};\n ${(props) =>\n props.$isHaveValue\n ? css`\n color: ${props.theme.colors.input[props.$genre].color.rest};\n &:focus-visible {\n color: ${props.theme.colors.input[props.$genre].color.rest};\n }\n `\n : css`\n color: ${props.theme.colors.input[props.$genre].color.placeholder};\n `};\n`;\nconst addDateInputSize = css<DateInputProps>`\n border-radius: 4px;\n padding: 2px;\n min-width: 10px;\n`;\nexport const DateInput = styled.div<DateInputProps>`\n text-align: center;\n resize: none;\n overflow: hidden;\n border: 0px solid;\n background: transparent;\n margin: 0px !important;\n white-space: nowrap;\n ${addFont};\n ${addDateInputSize};\n ${addDateInputGenre};\n ${addRemoveOutline};\n`;\n\n/****************************************** Genre *************************************************/\nconst addDateInputWrapperGenre = css<DateInputProps>`\n ${(props) => css`\n background: ${props.theme.colors.input[props.$genre].background.rest};\n border-color: ${props.theme.colors.input[props.$genre].border.rest};\n color: ${props.theme.colors.input[props.$genre].color.rest};\n outline: 2px solid transparent;\n outline-offset: 1px;\n &:hover {\n background: ${props.theme.colors.input[props.$genre].background.hover};\n border-color: ${props.theme.colors.input[props.$genre].border.hover};\n color: ${props.theme.colors.input[props.$genre].color.hover};\n }\n ${\n props.$isOpen && !props.$isReadOnly && !props.$isDisabledOutline\n ? props.$isOutlineBoxShadow\n ? css`\n outline: 1px solid transparent;\n outline-offset: 0px;\n outline: 1px solid #83b7e8;\n box-shadow: 0 1px 1px rgba(24,36,51, .06), 0 0 0 .25rem rgba(6,111,209, .25);\n `\n : css`\n background: ${props.theme.colors.input[props.$genre].background.rest};\n border-color: ${props.theme.colors.input[props.$genre].border.rest};\n color: ${props.theme.colors.input[props.$genre].color.rest};\n outline: 2px solid ${(props) => props.theme.states.focus};\n `\n : null\n }\n `};\n`;\n\n/****************************************** Size *************************************************/\nexport const addDateInputWrapperSize = css<DateInputProps>`\n ${(props) => css`\n padding: ${props.$isShowPlaceholder ? `0px ${KEY_SIZE_DATA[props.$size].padding}px` : `0px ${KEY_SIZE_DATA[props.$size].padding}px 0px ${KEY_SIZE_DATA[props.$size].padding - 2}px`};\n height: ${KEY_SIZE_DATA[props.$size].height}px;\n min-height: ${KEY_SIZE_DATA[props.$size].height}px;\n max-height: ${KEY_SIZE_DATA[props.$size].height}px;\n border-radius: ${KEY_SIZE_DATA[props.$size].radius}px;\n `}\n`;\n\nexport const DateInputWrapper = styled.div<DateInputProps>`\n resize: none;\n overflow: hidden;\n width: 100%;\n border: 1px solid transparent;\n\n white-space: nowrap;\n\n display: flex;\n align-items: center;\n gap: 0px;\n\n ${addDisabled};\n ${addDateInputWrapperSize};\n ${addDateInputWrapperGenre};\n ${addTransition};\n ${addError};\n`;\n\nexport const addDateInputButtonSize = css<ButtonProps>`\n ${(props) => css`\n right:${KEY_SIZE_DATA[props.size].padding}px;\n `}\n`;\nexport const DateInputButton = styled(Button)`\n position: absolute;\n height: max-content !important;\n ${addDateInputButtonSize};\n`;\nexport const addDateInputButtonClearSize = css<ButtonProps>`\n ${(props) => css`\n right:${KEY_SIZE_DATA[props.size].padding * 2 + KEY_SIZE_DATA[props.size].height}px;\n `}\n`;\nexport const DateInputButtonClear = styled(Button)`\n position: absolute;\n height: max-content !important;\n ${addDateInputButtonClearSize};\n`;\n","import { addTransition } from '@local/styles/add';\nimport { addSX } from '@local/styles/sx';\n\nimport styled from 'styled-components';\n\nimport { ImageIMGProps } from '.';\n\nexport const ImageIMG = styled.img<ImageIMGProps>`\n position: absolute;\n width: 100%;\n height: 100%;\n object-fit: cover;\n opacity: ${(props) => (props.$isPending ? 0 : 1)};\n ${addTransition};\n ${addSX};\n`;\n","import { motion } from 'framer-motion';\nimport styled, { css } from 'styled-components';\n\nimport { addError } from '@local/styles/error';\nimport { addSX } from '@local/styles/sx';\nimport { IThemeSizePropertyDefault, KEY_SIZE_DATA } from '@local/theme';\n\nimport { ImageSelectWrapperProps } from '.';\n\nconst ImageSelectListGenre = css<ImageSelectWrapperProps>`\n ${(props) => css`\n background: ${props.theme.colors.imageSelect[props.$genre].background.rest};\n color: ${props.theme.colors.imageSelect[props.$genre].color.rest};\n &:active {\n background: ${props.theme.colors.imageSelect[props.$genre].background.rest};\n color: ${props.theme.colors.imageSelect[props.$genre].color.rest};\n }\n &:focus-visible {\n background: ${props.theme.colors.imageSelect[props.$genre].background.rest};\n color: ${props.theme.colors.imageSelect[props.$genre].color.rest};\n }\n `};\n`;\n/****************************************** Size *************************************************/\nexport const ImageSelectListSize = css<ImageSelectWrapperProps>`\n ${(props) => ImageSelectListSizeConstructor(KEY_SIZE_DATA[props.$size])};\n`;\nexport const ImageSelectListSizeConstructor = (props: IThemeSizePropertyDefault) => css`\n padding: ${props.padding}px;\n border-radius: ${props.radius}px;\n`;\nexport const ImageSelectSize = css<ImageSelectWrapperProps>`\n ${(props) => ImageSelectSizeConstructor(KEY_SIZE_DATA[props.$size])};\n`;\nexport const ImageSelectSizeConstructor = (props: IThemeSizePropertyDefault) => css`\n gap: ${props.padding - 2}px;\n`;\nexport const ImageSelectWrapper = styled.div<ImageSelectWrapperProps>`\n display: flex;\n flex-direction: column;\n width: 100%;\n ${ImageSelectSize};\n ${addError};\n ${addSX};\n`;\nexport const ImageSelectListWrapper = styled(motion.div)<ImageSelectWrapperProps>`\n border: 2px dashed;\n\n display: flex;\n flex-direction: column;\n width: 100%;\n ${ImageSelectListGenre}\n ${ImageSelectListSize}\n`;\n","import { motion } from 'framer-motion';\nimport styled from 'styled-components';\n\nexport const SliderImage = styled(motion.div)`\n display: flex;\n position: absolute;\n height: 100%;\n width: 100%;\n touch-action: pan-y;\n &:hover {\n cursor: grab;\n }\n\n &:active {\n cursor: grabbing;\n }\n`;\n\nexport const SliderDot = styled(motion.div)`\n width: 6px;\n height: 6px;\n background-color: ${(props) => props.theme.palette.whiteStandard};\n border-radius: 5px;\n opacity: 0.8;\n cursor: pointer;\n`;\n","import styled, { css } from 'styled-components';\n\nimport { addSX } from '@local/styles/sx';\nimport { IThemeSizePropertyDefault, KEY_SIZE_DATA } from '@local/theme';\n\nimport { InputOTPWrapperProps } from '.';\n\n/****************************************** Size *************************************************/\nexport const InputOTPSize = css<InputOTPWrapperProps>`\n ${(props) => InputOTPSizeConstructor({ ...KEY_SIZE_DATA[props.$size], ...props })};\n`;\nexport const InputOTPSizeConstructor = (props: IThemeSizePropertyDefault & InputOTPWrapperProps) => css`\n gap: ${props.padding - 2}px;\n width: 100%;\n`;\n\nexport const InputOTPWrapper = styled.div<InputOTPWrapperProps>`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n ${InputOTPSize};\n ${addSX};\n`;\n","import { LIST_MAP_THEME } from '@local/consts';\n\nimport { MapTheme } from '.';\n\nexport const DEFAULT_MAP_MAX_ZOOM = 18;\nexport const DEFAULT_MAP_MIN_ZOOM = 2;\nexport const DEFAULT_MAP_ZOOM = 13;\nexport const DEFAULT_MAP_CENTER: [number, number] = [-8.409518, 115.188919];\nexport const DEFAULT_MAP_THEME: MapTheme = LIST_MAP_THEME.find((e) => e.name === 'OpenStreetMap') || LIST_MAP_THEME[0];\n","import styled, { css } from 'styled-components';\n\nimport { MapProps } from '.';\n\nexport const MapWrapper = styled.div<{ style?: MapProps<object>['style'] }>`\n display: contents;\n .leaflet-popup-content-wrapper {\n ${(props) => props.style?.popupWrapper && css(props.style.popupWrapper)}\n }\n .leaflet-popup-content {\n max-width: fit-content;\n width: 100%;\n ${(props) => props.style?.popupContent && css(props.style.popupContent)}\n }\n .leaflet-div-icon {\n background: none;\n border: none;\n }\n`;\n","import styled from 'styled-components';\n\nimport { addError } from '@local/styles/error';\nimport { addSX } from '@local/styles/sx';\n\nimport { RangeComponentProps, RangeThumbProps, RangeWrapperProps } from '.';\n\nexport const RangeWrapper = styled.div<RangeWrapperProps>`\n position: relative;\n display: flex;\n width: 100%;\n box-sizing: border-box;\n align-items: center;\n height: 20px;\n ${addError};\n ${addSX};\n`;\n\nexport const RangeTrack = styled.div<RangeComponentProps>`\n position: absolute;\n height: 3px;\n width: 100%;\n padding: 0px 10px;\n border-radius: 2px;\n`;\nexport const RangeThumb = styled.input<RangeThumbProps>`\n position: absolute;\n width: 100%;\n outline: none !important;\n pointer-events: none;\n appearance: none;\n -webkit-appearance: none;\n background: transparent;\n left: 0;\n margin: 0;\n &::-webkit-slider-thumb {\n pointer-events: all;\n width: 16px;\n height: 16px;\n margin: 0;\n padding: 0;\n border-radius: 50%;\n background: ${(props) => props.$colorBackground};\n border: 3px ${(props) => props.$colorBorder} solid;\n cursor: pointer;\n -webkit-appearance: none;\n margin-top: 0px;\n transition:\n transform ${(props) => props.theme.transition.default},\n color ${(props) => props.theme.transition.default},\n background-color ${(props) => props.theme.transition.default};\n &:hover {\n transform: scale(1.2);\n }\n }\n`;\n","import { addDisabled, addOutline, addTransition } from '@local/styles/add';\nimport { addError } from '@local/styles/error';\nimport { KEY_SIZE_DATA_TOGGLE } from '@local/theme';\n\nimport { motion } from 'framer-motion';\nimport styled, { css } from 'styled-components';\n\nimport { StyledToggleProps } from '.';\n\n/****************************************** Add *************************************************/\nconst addToggleWrapperSize = css<StyledToggleProps>`\n ${(props) => css`\n height: ${KEY_SIZE_DATA_TOGGLE[props.$size].height}px;\n width: ${KEY_SIZE_DATA_TOGGLE[props.$size].width}px;\n padding: ${KEY_SIZE_DATA_TOGGLE[props.$size].padding}px;\n border-radius: 100px;\n `};\n`;\n\nconst addToggleCenterSize = css<StyledToggleProps>`\n ${(props) => css`\n height: ${KEY_SIZE_DATA_TOGGLE[props.$size].thumb}px;\n width: ${KEY_SIZE_DATA_TOGGLE[props.$size].thumb}px;\n border-radius: 100px;\n `}\n`;\n/****************************************** Standard *************************************************/\nexport const ToggleWrapper = styled(motion.div)<StyledToggleProps>`\n cursor: pointer;\n border: 1px solid transparent;\n\n display: flex;\n align-items: center;\n\n ${addToggleWrapperSize};\n ${addTransition};\n ${addOutline};\n ${addDisabled};\n\n ${(props) =>\n props.$value\n ? css`\n background: ${props.theme.colors.toggle[props.$genre].active.rest.track};\n border-color: ${props.theme.colors.toggle[props.$genre].active.rest.border};\n justify-content: flex-start;\n &:hover {\n background: ${props.theme.colors.toggle[props.$genre].active.hover.track};\n border-color: ${props.theme.colors.toggle[props.$genre].active.hover.border};\n }\n `\n : css`\n background: ${props.theme.colors.toggle[props.$genre].unActive.rest.track};\n border-color: ${props.theme.colors.toggle[props.$genre].unActive.rest.border};\n justify-content: flex-start;\n &:hover {\n background: ${props.theme.colors.toggle[props.$genre].unActive.hover.track};\n border-color: ${props.theme.colors.toggle[props.$genre].unActive.hover.border};\n }\n `};\n\n ${addError};\n`;\n\nexport const ToggleCenter = styled(motion.div)<StyledToggleProps>`\n ${addToggleCenterSize};\n ${addTransition};\n\n ${(props) =>\n props.$value\n ? css`\n background: ${props.theme.colors.toggle[props.$genre].active.rest.thumb};\n box-shadow: ${props.theme.colors.toggle[props.$genre].active.rest.thumbBoxShadow};\n &:hover {\n background: ${props.theme.colors.toggle[props.$genre].active.hover.thumb};\n box-shadow: ${props.theme.colors.toggle[props.$genre].active.hover.thumbBoxShadow};\n }\n `\n : css`\n background: ${props.theme.colors.toggle[props.$genre].unActive.rest.thumb};\n box-shadow: ${props.theme.colors.toggle[props.$genre].unActive.rest.thumbBoxShadow};\n &:hover {\n background: ${props.theme.colors.toggle[props.$genre].unActive.hover.thumb};\n box-shadow: ${props.theme.colors.toggle[props.$genre].unActive.hover.thumbBoxShadow};\n }\n `}\n`;\n","import { Preview, PreviewAdditionalProps } from '@local/areas/preview';\nimport { IThemePaletteKeys, JeneseiPalette } from '@local/theme';\n\nimport { createContext, FC, useCallback, useEffect, useState } from 'react';\n\nimport { useScreenWidth } from '../context-screen-width';\nimport {\n AppContextProps,\n ProviderAppOutlet,\n ProviderAppOutletChildren,\n ProviderAppOutletFooter,\n ProviderAppOutletHeader,\n ProviderAppOutletLeftAside,\n ProviderAppOutletNav,\n ProviderAppOutletNotification,\n ProviderAppOutletRightAside,\n ProviderAppProps,\n ProviderAppWrapper,\n} from '.';\n\nexport const AppContext = createContext<AppContextProps | null>(null);\n\n/**\n * ProviderApp component is a context context that manages various application-level states\n * such as background color, status bar color, background image, title, and description.\n * It uses several custom hooks to handle these states and provides them via the AppContext.\n *\n * @component\n *\n * @param {ProviderAppProps} props - The properties passed to the ProviderApp component.\n * @param {string} props.defaultBgColor - The default background color.\n * @param {string} props.defaultStatusBarColor - The default status bar color.\n * @param {string} [props.defaultBgImage] - The default background image.\n * @param {string} [props.defaultTitle] - The default title.\n * @param {string} [props.defaultDescription] - The default description.\n * @param {boolean} [props.isScrollOutlet] - Determines if the outlet should be scrollable.\n * @param {object} [props.footer] - The footer component and its properties.\n * @param {object} [props.notification] - The notification component and its properties.\n * @param {object} [props.header] - The header component and its properties.\n * @param {object} [props.nav] - The navigation component and its properties.\n * @param {object} [props.leftAside] - The left aside component and its properties.\n * @param {object} [props.rightAside] - The right aside component and its properties.\n * @param {React.ReactNode} props.children - The children components to be rendered inside the ProviderApp.\n *\n * @returns {JSX.Element} The rendered ProviderApp component.\n */\nexport const ProviderApp: FC<ProviderAppProps> = (props) => {\n const { bgColor, changeBgColor, historyBgColor, setDefaultBgColor } = useBgColor(props.defaultBgColor);\n const { statusBarColor, changeStatusBarColor, historyStatusBarColor, setDefaultStatusBarColor } = useStatusBarColor(\n props.defaultStatusBarColor,\n );\n const { bgImage, changeBgImage, historyBgImage, setDefaultBgImage } = useBgImage(props.defaultBgImage || null);\n const { title, changeTitle, setHistoryTitle, setDefaultTitle } = useTitle(props.defaultTitle || null);\n const { description, changeDescription, historyDescription, setDefaultDescription } = useDescription(\n props.defaultDescription,\n );\n const { changePreview, previewProps } = usePreview(props.defaultPreview);\n const { screenActual } = useScreenWidth();\n\n return (\n <AppContext.Provider\n value={{\n changePreview,\n changeStatusBarColor,\n changeBgColor,\n changeBgImage,\n changeTitle,\n changeDescription,\n historyStatusBarColor,\n historyBgColor,\n historyBgImage,\n setHistoryTitle,\n historyDescription,\n setDefaultStatusBarColor,\n setDefaultBgColor,\n setDefaultBgImage,\n setDefaultTitle,\n setDefaultDescription,\n }}\n >\n <title>{title}</title>\n <meta name='description' content={description} />\n <meta name='theme-color' content={JeneseiPalette[statusBarColor]} />\n <meta name='apple-mobile-web-app-status-bar-style' content='default' />\n <meta name='mobile-web-app-capable' content='yes' />\n <Preview {...previewProps}>\n <ProviderAppWrapper $bgColor={bgColor} $bgImage={bgImage}>\n <ProviderAppOutlet\n $isScrollOutlet={props.isScrollOutlet}\n $footer={props.footer}\n $notification={props.notification}\n $header={props.header}\n $nav={props.nav}\n $leftAside={props.leftAside}\n $rightAside={props.rightAside}\n >\n {props.notification?.length && props.notification?.length?.[screenActual] ? (\n <ProviderAppOutletNotification $notification={props.notification}>\n {props.notification?.component || null}\n </ProviderAppOutletNotification>\n ) : null}\n\n {props.header?.length && props.header?.length?.[screenActual] ? (\n <ProviderAppOutletHeader $header={props.header}>\n {props.header?.component || null}\n </ProviderAppOutletHeader>\n ) : null}\n\n {props.nav?.length && props.nav?.length?.[screenActual] ? (\n <ProviderAppOutletNav $nav={props.nav}>{props.nav?.component || null}</ProviderAppOutletNav>\n ) : null}\n\n {props.leftAside?.length && props.leftAside?.length?.[screenActual] ? (\n <ProviderAppOutletLeftAside $leftAside={props.leftAside}>\n {props.leftAside?.component || null}\n </ProviderAppOutletLeftAside>\n ) : null}\n\n <ProviderAppOutletChildren $isScrollOutlet={props.isScrollOutlet} $main={props.main}>\n {props.children}\n </ProviderAppOutletChildren>\n\n {props.rightAside?.length && props.rightAside?.length?.[screenActual] ? (\n <ProviderAppOutletRightAside $rightAside={props.rightAside}>\n {props.rightAside?.component || null}\n </ProviderAppOutletRightAside>\n ) : null}\n\n {props.footer?.length && props.footer?.length?.[screenActual] ? (\n <ProviderAppOutletFooter $footer={props.footer}>\n {props.footer?.component || null}\n </ProviderAppOutletFooter>\n ) : null}\n </ProviderAppOutlet>\n </ProviderAppWrapper>\n </Preview>\n </AppContext.Provider>\n );\n};\n\n/**\n * Custom hook to manage preview properties.\n */\nconst usePreview = (defaultPreview: ProviderAppProps['defaultPreview']) => {\n const [previewProps, setPreviewProps] = useState(defaultPreview || { visible: true, defaultVisible: true });\n\n const changePreview = useCallback((newPreviewProps: PreviewAdditionalProps) => {\n setPreviewProps(newPreviewProps);\n }, []);\n\n useEffect(() => {\n if (defaultPreview) setPreviewProps(defaultPreview);\n }, [defaultPreview]);\n\n return { previewProps, changePreview };\n};\n\n/**\n * Custom hook to manage background color state with history tracking.\n */\ntype BgColorState = {\n bgColor: IThemePaletteKeys;\n bgColorHistory: IThemePaletteKeys[];\n bgColorIndex: number;\n};\n\nexport const useBgColor = (defaultColor: IThemePaletteKeys) => {\n const [state, setState] = useState<BgColorState>({\n bgColor: defaultColor,\n bgColorHistory: [defaultColor],\n bgColorIndex: 0,\n });\n\n const changeBgColor = useCallback((color: IThemePaletteKeys) => {\n setState((prev) => {\n const newHistory = [...prev.bgColorHistory.slice(0, prev.bgColorIndex + 1), color];\n return {\n bgColor: color,\n bgColorHistory: newHistory,\n bgColorIndex: newHistory.length - 1,\n };\n });\n }, []);\n\n const historyBgColor = useCallback((steps: number) => {\n setState((prev) => {\n const newIndex = prev.bgColorIndex + steps;\n if (newIndex >= 0 && newIndex < prev.bgColorHistory.length) {\n return {\n ...prev,\n bgColor: prev.bgColorHistory[newIndex],\n bgColorIndex: newIndex,\n };\n }\n return prev;\n });\n }, []);\n\n const setDefaultBgColor = useCallback(() => {\n setState({\n bgColor: defaultColor,\n bgColorHistory: [defaultColor],\n bgColorIndex: 0,\n });\n }, [defaultColor]);\n\n useEffect(() => {\n setState({\n bgColor: defaultColor,\n bgColorHistory: [defaultColor],\n bgColorIndex: 0,\n });\n }, [defaultColor]);\n\n return {\n bgColor: state.bgColor,\n changeBgColor,\n historyBgColor,\n setDefaultBgColor,\n bgColorIndex: state.bgColorIndex,\n };\n};\n\n/**\n * Custom hook to manage the status bar color with history tracking.\n */\ntype StatusBarColorState = {\n statusBarColor: IThemePaletteKeys;\n statusBarColorHistory: IThemePaletteKeys[];\n statusBarColorIndex: number;\n};\n\nexport const useStatusBarColor = (defaultColor: IThemePaletteKeys) => {\n const [state, setState] = useState<StatusBarColorState>({\n statusBarColor: defaultColor,\n statusBarColorHistory: [defaultColor],\n statusBarColorIndex: 0,\n });\n\n const changeStatusBarColor = useCallback((color: IThemePaletteKeys) => {\n setState((prev) => {\n const newHistory = [...prev.statusBarColorHistory.slice(0, prev.statusBarColorIndex + 1), color];\n return {\n statusBarColor: color,\n statusBarColorHistory: newHistory,\n statusBarColorIndex: newHistory.length - 1,\n };\n });\n }, []);\n\n const historyStatusBarColor = useCallback((steps: number) => {\n setState((prev) => {\n const newIndex = prev.statusBarColorIndex + steps;\n if (newIndex >= 0 && newIndex < prev.statusBarColorHistory.length) {\n return {\n ...prev,\n statusBarColor: prev.statusBarColorHistory[newIndex],\n statusBarColorIndex: newIndex,\n };\n }\n return prev;\n });\n }, []);\n\n const setDefaultStatusBarColor = useCallback(() => {\n setState({\n statusBarColor: defaultColor,\n statusBarColorHistory: [defaultColor],\n statusBarColorIndex: 0,\n });\n }, [defaultColor]);\n\n useEffect(() => {\n setState({\n statusBarColor: defaultColor,\n statusBarColorHistory: [defaultColor],\n statusBarColorIndex: 0,\n });\n }, [defaultColor]);\n\n return {\n statusBarColor: state.statusBarColor,\n changeStatusBarColor,\n historyStatusBarColor,\n setDefaultStatusBarColor,\n statusBarColorIndex: state.statusBarColorIndex,\n };\n};\n\n/**\n * Custom hook to manage background images with history.\n */\ntype BgImageState = {\n bgImage: string | null;\n bgImageHistory: (string | null)[];\n bgImageIndex: number;\n};\n\nexport const useBgImage = (defaultImage: string | null) => {\n const [state, setState] = useState<BgImageState>({\n bgImage: defaultImage,\n bgImageHistory: [defaultImage],\n bgImageIndex: 0,\n });\n\n const changeBgImage = useCallback((image: string | null) => {\n setState((prev) => {\n const newHistory = [...prev.bgImageHistory.slice(0, prev.bgImageIndex + 1), image];\n return {\n bgImage: image,\n bgImageHistory: newHistory,\n bgImageIndex: newHistory.length - 1,\n };\n });\n }, []);\n\n const historyBgImage = useCallback((steps: number) => {\n setState((prev) => {\n const newIndex = prev.bgImageIndex + steps;\n if (newIndex >= 0 && newIndex < prev.bgImageHistory.length) {\n return {\n ...prev,\n bgImage: prev.bgImageHistory[newIndex],\n bgImageIndex: newIndex,\n };\n }\n return prev;\n });\n }, []);\n\n const setDefaultBgImage = useCallback(() => {\n setState({\n bgImage: defaultImage,\n bgImageHistory: [defaultImage],\n bgImageIndex: 0,\n });\n }, [defaultImage]);\n\n useEffect(() => {\n setState({\n bgImage: defaultImage,\n bgImageHistory: [defaultImage],\n bgImageIndex: 0,\n });\n }, [defaultImage]);\n\n return {\n bgImage: state.bgImage,\n changeBgImage,\n historyBgImage,\n setDefaultBgImage,\n bgImageIndex: state.bgImageIndex,\n };\n};\n\ntype TitleState = {\n title: string | null;\n titleHistory: (string | null)[];\n titleIndex: number;\n};\n/**\n * Custom hook to manage the document title with history tracking.\n */\nconst useTitle = (defaultTitle: string | null) => {\n const [state, setState] = useState<TitleState>({\n title: defaultTitle,\n titleHistory: [defaultTitle],\n titleIndex: 0,\n });\n\n const changeTitle = useCallback((newTitle: string | null) => {\n setState((prev) => {\n const newHistory = [...prev.titleHistory.slice(0, prev.titleIndex + 1), newTitle];\n return {\n title: newTitle,\n titleHistory: newHistory,\n titleIndex: newHistory.length - 1,\n };\n });\n }, []);\n\n const setHistoryTitle = useCallback((steps: number) => {\n setState((prev) => {\n const newIndex = prev.titleIndex + steps;\n if (newIndex >= 0 && newIndex < prev.titleHistory.length) {\n return {\n ...prev,\n title: prev.titleHistory[newIndex],\n titleIndex: newIndex,\n };\n }\n return prev;\n });\n }, []);\n\n const setDefaultTitle = useCallback(() => {\n setState({\n title: defaultTitle,\n titleHistory: [defaultTitle],\n titleIndex: 0,\n });\n }, [defaultTitle]);\n\n useEffect(() => {\n setState({\n title: defaultTitle,\n titleHistory: [defaultTitle],\n titleIndex: 0,\n });\n }, [defaultTitle]);\n\n return {\n title: state.title,\n titleIndex: state.titleIndex,\n titleHistory: state.titleHistory,\n changeTitle,\n setHistoryTitle,\n setDefaultTitle,\n };\n};\n\n/**\n * Custom hook to manage a description with history tracking.\n */\ntype DescriptionState = {\n description: string;\n descriptionHistory: string[];\n descriptionIndex: number;\n};\n\nexport const useDescription = (defaultDescription: string) => {\n const [state, setState] = useState<DescriptionState>({\n description: defaultDescription,\n descriptionHistory: [defaultDescription],\n descriptionIndex: 0,\n });\n\n const changeDescription = useCallback((newDescription: string) => {\n setState((prev) => {\n const newHistory = [...prev.descriptionHistory.slice(0, prev.descriptionIndex + 1), newDescription];\n return {\n description: newDescription,\n descriptionHistory: newHistory,\n descriptionIndex: newHistory.length - 1,\n };\n });\n }, []);\n\n const historyDescription = useCallback((steps: number) => {\n setState((prev) => {\n const newIndex = prev.descriptionIndex + steps;\n if (newIndex >= 0 && newIndex < prev.descriptionHistory.length) {\n return {\n ...prev,\n description: prev.descriptionHistory[newIndex],\n descriptionIndex: newIndex,\n };\n }\n return prev;\n });\n }, []);\n\n const setDefaultDescription = useCallback(() => {\n setState({\n description: defaultDescription,\n descriptionHistory: [defaultDescription],\n descriptionIndex: 0,\n });\n }, [defaultDescription]);\n\n useEffect(() => {\n setState({\n description: defaultDescription,\n descriptionHistory: [defaultDescription],\n descriptionIndex: 0,\n });\n }, [defaultDescription]);\n\n return {\n description: state.description,\n changeDescription,\n historyDescription,\n setDefaultDescription,\n descriptionIndex: state.descriptionIndex,\n };\n};\n","import { addGridTransition } from '@local/styles/add';\nimport { JeneseiPalette } from '@local/theme';\n\nimport { css, styled } from 'styled-components';\n\nimport { ScreenWidthProps } from '../context-screen-width';\nimport { ProviderAppOutletChildrenProps, ProviderAppOutletProps, ProviderAppWrapperProps } from '.';\n\nexport const ProviderAppWrapper = styled.div<ProviderAppWrapperProps>`\n display: flex;\n flex-direction: column;\n max-width: 100dvw;\n min-height: 100dvh;\n width: 100%;\n overflow: hidden;\n position: relative;\n\n background-color: ${(props) => JeneseiPalette[props.$bgColor]};\n background-image: url(${(props) => props.$bgImage});\n`;\n\nconst generateGridTemplateAreas = (props: ProviderAppOutletProps) => {\n let templateAreas = `\n \"notification notification notification\"\n \"header header header\"\n \"nav nav nav\"\n \"leftAside children rightAside\"\n \"footer footer footer\"\n `;\n\n templateAreas = `\n \"notification notification notification\"\n \"${props.$leftAside?.isTopHeader ? 'leftAside' : 'header'} header ${props.$rightAside?.isTopHeader ? 'rightAside' : 'header'}\"\n \"${props.$leftAside?.isTopHeader ? 'leftAside' : props.$leftAside?.isTopNav ? 'leftAside' : 'nav'} nav ${props.$rightAside?.isTopHeader ? 'rightAside' : props.$rightAside?.isTopNav ? 'rightAside' : 'nav'}\"\n \"leftAside children rightAside\"\n \"${props.$leftAside?.isTopFooter ? 'leftAside' : 'footer'} footer ${props.$rightAside?.isTopFooter ? 'rightAside' : 'footer'}\"\n `;\n\n return templateAreas;\n};\n\nfunction toStyledAppOutletCSS(props: {\n leftAsideWidth: string;\n rightAsideWidth: string;\n notificationHeight: string;\n headerHeight: string;\n navHeight: string;\n footerHeight: string;\n}) {\n return css`\n grid-template-columns: ${() => `${props.leftAsideWidth} 1fr ${props.rightAsideWidth}`};\n grid-template-rows: ${() =>\n `${props.notificationHeight} ${props.headerHeight} ${props.navHeight} 1fr ${props.footerHeight}`};\n `;\n}\nconst addSXAppOutlet = css<ProviderAppOutletProps>`\n ${(props) => {\n const leftAsideWidth = props.$leftAside?.length?.default;\n const rightAsideWidth = props.$rightAside?.length?.default;\n const notificationHeight = props.$notification?.length?.default;\n const headerHeight = props.$header?.length?.default;\n const navHeight = props.$nav?.length?.default;\n const footerHeight = props.$footer?.length?.default;\n return toStyledAppOutletCSS({\n leftAsideWidth: leftAsideWidth ?? '0px',\n rightAsideWidth: rightAsideWidth ?? '0px',\n notificationHeight: notificationHeight ?? '0px',\n headerHeight: headerHeight ?? '0px',\n navHeight: navHeight ?? '0px',\n footerHeight: footerHeight ?? '0px',\n });\n }}\n ${(props) => {\n const leftAsideWidth = props.$leftAside?.length;\n const rightAsideWidth = props.$rightAside?.length;\n const notificationHeight = props.$notification?.length;\n const headerHeight = props.$header?.length;\n const navHeight = props.$nav?.length;\n const footerHeight = props.$footer?.length;\n\n return Object.entries(props.theme.screens)\n .filter(([key]) => key !== 'default')\n .map(([key]) => {\n const deviceKey = key as keyof ScreenWidthProps<string | null>;\n const screenWidth = props.theme.screens[deviceKey]?.width;\n if (!screenWidth) return null;\n return css`\n @media (max-width: ${screenWidth}px) {\n ${toStyledAppOutletCSS({\n leftAsideWidth: leftAsideWidth && leftAsideWidth[deviceKey] ? leftAsideWidth[deviceKey] : '0px',\n rightAsideWidth: rightAsideWidth && rightAsideWidth[deviceKey] ? rightAsideWidth[deviceKey] : '0px',\n notificationHeight:\n notificationHeight && notificationHeight[deviceKey] ? notificationHeight[deviceKey] : '0px',\n headerHeight: headerHeight && headerHeight[deviceKey] ? headerHeight[deviceKey] : '0px',\n navHeight: navHeight && navHeight[deviceKey] ? navHeight[deviceKey] : '0px',\n footerHeight: footerHeight && footerHeight[deviceKey] ? footerHeight[deviceKey] : '0px',\n })}\n }\n `;\n });\n }}\n`;\nexport const ProviderAppOutlet = styled.div<ProviderAppOutletProps>`\n display: grid;\n width: 100%;\n height: 100%;\n\n overflow-y: auto;\n overflow-x: hidden;\n scrollbar-gutter: stable;\n \n min-height: 100dvh;\n max-height: 100dvh;\n \n ${addGridTransition};\n\n ${(props) => `\n grid-template-areas: ${generateGridTemplateAreas(props)};\n `}\n\n ${addSXAppOutlet};\n`;\n\nexport const ProviderAppOutletChildren = styled.main<ProviderAppOutletChildrenProps>`\n z-index: ${(props) => props?.$main?.zIndex ?? 'auto'};\n display: flex;\n grid-area: children;\n max-width: 100%;\n max-height: 100%;\n overflow: ${(props) => (props.$isScrollOutlet ? 'auto' : 'visible')};\n scrollbar-gutter: stable;\n`;\n\nexport const ProviderAppOutletNotification = styled.section<ProviderAppOutletProps>`\n z-index: ${(props) => props?.$notification?.zIndex ?? 'auto'};\n grid-area: notification;\n display: flex;\n`;\n\nexport const ProviderAppOutletHeader = styled.header<ProviderAppOutletProps>`\n z-index: ${(props) => props?.$header?.zIndex ?? 'auto'};\n grid-area: header;\n display: flex;\n`;\n\nexport const ProviderAppOutletFooter = styled.footer<ProviderAppOutletProps>`\n z-index: ${(props) => props?.$footer?.zIndex ?? 'auto'};\n grid-area: footer;\n display: flex;\n`;\n\nexport const ProviderAppOutletNav = styled.nav<ProviderAppOutletProps>`\n z-index: ${(props) => props?.$nav?.zIndex ?? 'auto'};\n grid-area: nav;\n display: flex;\n`;\n\nexport const ProviderAppOutletLeftAside = styled.aside<ProviderAppOutletProps>`\n z-index: ${(props) => props?.$leftAside?.zIndex ?? 'auto'};\n grid-area: leftAside;\n display: flex;\n`;\n\nexport const ProviderAppOutletRightAside = styled.aside<ProviderAppOutletProps>`\n z-index: ${(props) => props?.$rightAside?.zIndex ?? 'auto'};\n grid-area: rightAside;\n display: flex;\n`;\n","import { Button } from '@local/components/button';\nimport { Icon } from '@local/components/icon';\n\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { createContext, FC, memo, useCallback, useMemo, useState } from 'react';\nimport { useTheme } from 'styled-components';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n DEFAULT_PROVIDER_SONNER_BUTTON,\n DEFAULT_PROVIDER_SONNER_DURATION,\n DEFAULT_PROVIDER_SONNER_GENRE,\n DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM,\n DEFAULT_PROVIDER_SONNER_SCALE,\n DEFAULT_PROVIDER_SONNER_Y,\n DEFAULT_PROVIDER_SONNER_Z_INDEX,\n ProviderSonnerProps,\n SonnerButtonWrapper,\n SonnerContent,\n SonnerContentDescription,\n SonnerContentProps,\n SonnerContentStandardProps,\n SonnerContentTitle,\n SonnerContextProps,\n SonnerElementProps,\n SonnerElementWrapper,\n SonnerIcon,\n SonnerLayout,\n} from '.';\n\nexport const SonnerContext = createContext<SonnerContextProps | null>(null);\n\nexport const ProviderSonner: FC<ProviderSonnerProps> = (props) => {\n const memoVisibleToasts: ProviderSonnerProps['visibleToasts'] = useMemo(\n () => props.visibleToasts,\n [props.visibleToasts],\n );\n const memoDefaultDescription: ProviderSonnerProps['default']['description'] = useMemo(\n () => props?.default?.description,\n [props?.default?.description],\n );\n const memoDefaultTitle: ProviderSonnerProps['default']['title'] = useMemo(\n () => props?.default?.title,\n [props?.default?.title],\n );\n const memoDefaultButton: ProviderSonnerProps['default']['button'] = useMemo(\n () => props?.default?.button,\n [props?.default?.button],\n );\n const memoDefaultHidingTime: ProviderSonnerProps['default']['hidingTime'] = useMemo(\n () => props?.default?.hidingTime,\n [props?.default?.hidingTime],\n );\n const memoDefaultHidingMode: ProviderSonnerProps['default']['hidingMode'] = useMemo(\n () => props?.default?.hidingMode ?? 'clickOnButton',\n [props?.default?.hidingMode],\n );\n const memoDefaultGenre = useMemo(\n () => props?.default?.genre ?? DEFAULT_PROVIDER_SONNER_GENRE,\n [props?.default?.genre],\n );\n\n const isTop = useMemo(() => props.position.includes('top'), [props.position]);\n\n const [contentHistory, setContentHistory] = useState<SonnerContentProps[]>([]);\n\n const [isHovered, setIsHovered] = useState(false);\n\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n const remove: SonnerContextProps['remove'] = useCallback(\n (id) => {\n setContentHistory((prev) => {\n const itemToRemove = prev.find((item) => item.id === id);\n\n if (!itemToRemove) return prev;\n\n const indexToRemove = itemToRemove.index;\n\n const updatedHistory = prev\n .filter((item) => item.id !== id)\n .map((item) => ({\n ...item,\n index: item.index > indexToRemove ? item.index - 1 : item.index,\n }));\n\n if (updatedHistory.length === 0) handleMouseLeave();\n\n return updatedHistory;\n });\n },\n [handleMouseLeave],\n );\n\n const toast: SonnerContextProps['toast'] = useCallback(\n (content) => {\n const id = content.id ?? uuidv4();\n\n const hidingTime = content.hidingTime ?? memoDefaultHidingTime;\n\n setContentHistory((prev) => {\n const existingIndex = prev.findIndex((item) => item.id === id);\n\n let updatedHistory;\n if (existingIndex !== -1) {\n // Replace existing item\n updatedHistory = [...prev];\n updatedHistory[existingIndex] = { ...content, id, index: prev[existingIndex].index };\n } else {\n // Add new item\n updatedHistory = prev.map((item) => ({\n ...item,\n index: item.index + 1,\n }));\n const newContent = { ...content, id, index: 0 };\n updatedHistory.unshift(newContent);\n }\n\n return updatedHistory;\n });\n\n if (hidingTime !== undefined) {\n setTimeout(() => {\n remove(id);\n }, hidingTime);\n }\n },\n [memoDefaultHidingTime, remove],\n );\n const promise: SonnerContextProps['promise'] = useCallback(\n <T,>(\n promise: Promise<T>,\n expectation: Omit<SonnerContentProps, 'index'>,\n localToast: (success: T | undefined, error: unknown | undefined) => Omit<SonnerContentProps, 'index'>,\n ) => {\n const id = uuidv4();\n toast({ ...expectation, id, isLoading: true });\n\n return promise\n .then((result) => {\n toast({ ...localToast(result, undefined), id });\n })\n .catch((error) => {\n toast({ ...localToast(undefined, error), id });\n });\n },\n [toast],\n );\n const handleOnClick = useCallback(\n (id: SonnerContentStandardProps['id']) => {\n remove(id);\n },\n [remove],\n );\n const theme = useTheme();\n return (\n <SonnerContext.Provider value={{ toast, promise, remove, contentHistory }}>\n <SonnerLayout\n $zIndex={props.zIndex ?? DEFAULT_PROVIDER_SONNER_Z_INDEX}\n $position={props.position}\n $gap={props.gap}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <AnimatePresence>\n {contentHistory.map((content) => {\n const index = content.index;\n const isMoreThanLastViewIndexPlusOne = memoVisibleToasts ? index > memoVisibleToasts : false;\n const isMoreThanLastViewIndex = memoVisibleToasts ? index > memoVisibleToasts - 1 : false;\n const isLastViewIndex = memoVisibleToasts ? index === memoVisibleToasts - 1 : false;\n const localGenre = content.genre ?? memoDefaultGenre;\n const buttonGenre = theme.colors.sonner[localGenre].button.genre;\n const hidingMode = content.hidingMode ?? memoDefaultHidingMode;\n\n const localContent = 'content' in content ? content.content : false;\n const localTitle = 'title' in content ? content.title : false;\n const localDescription = 'description' in content ? content.description : false;\n return (\n <MemoizedSonnerElement\n isMoreThanLastViewIndexPlusOne={isMoreThanLastViewIndexPlusOne}\n isMoreThanLastViewIndex={isMoreThanLastViewIndex}\n isLastViewIndex={isLastViewIndex}\n isTop={isTop}\n key={content.id}\n id={content.id}\n icon={content.icon}\n isLoading={content.isLoading}\n index={index}\n buttonGenre={buttonGenre}\n hidingMode={hidingMode}\n isHovered={isHovered}\n genre={localGenre}\n content={localContent}\n title={localTitle || memoDefaultTitle}\n description={localDescription || memoDefaultDescription}\n button={content.button ?? memoDefaultButton ?? DEFAULT_PROVIDER_SONNER_BUTTON}\n handleOnClick={handleOnClick}\n />\n );\n })}\n </AnimatePresence>\n </SonnerLayout>\n {props.children}\n </SonnerContext.Provider>\n );\n};\n\nconst SonnerElement = (props: SonnerElementProps) => {\n return (\n <motion.div\n key={props.id}\n layout\n initial={{\n opacity: 0,\n scale: 1,\n y: props.isLastViewIndex\n ? !props.isTop\n ? -DEFAULT_PROVIDER_SONNER_Y\n : DEFAULT_PROVIDER_SONNER_Y\n : !props.isTop\n ? DEFAULT_PROVIDER_SONNER_Y\n : -DEFAULT_PROVIDER_SONNER_Y,\n }}\n animate={{\n y: 0,\n opacity: props.isMoreThanLastViewIndex ? 0 : 1,\n pointerEvents: props.isMoreThanLastViewIndex ? 'none' : 'auto',\n display: props.isMoreThanLastViewIndex ? 'none' : 'flex',\n scale: !props.isHovered ? 1 - props.index * DEFAULT_PROVIDER_SONNER_SCALE : 1,\n marginTop: props.isTop\n ? props.isHovered || props.index === 0\n ? `0px`\n : `-${DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM}px`\n : '0px',\n marginBottom: !props.isTop\n ? props.isHovered || props.index === 0\n ? `0px`\n : `-${DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM}px`\n : '0px',\n }}\n style={{\n zIndex: -props.index,\n }}\n whileInView={{ opacity: props.isMoreThanLastViewIndex ? 0 : 1 }}\n exit={{ opacity: 0, y: !props.isTop ? DEFAULT_PROVIDER_SONNER_Y : -DEFAULT_PROVIDER_SONNER_Y }}\n transition={{ type: 'spring', duration: DEFAULT_PROVIDER_SONNER_DURATION }}\n >\n <SonnerElementWrapper\n $genre={props.genre}\n onClick={() => props.hidingMode === 'clickOnSonner' && props.handleOnClick(props.id, 'clickOnSonner')}\n >\n {(props.isLoading || props.icon) && (\n <SonnerIcon>\n {props.isLoading ? (\n <Icon size='medium' type='loading' name='Line' />\n ) : (\n props.icon && <Icon {...props.icon} size={props.icon.size ?? 'medium'} />\n )}\n </SonnerIcon>\n )}\n <SonnerContent>\n {props.content ? (\n props.content\n ) : (\n <>\n {props.title && (\n <SonnerContentTitle\n $genre={props.genre}\n $font={{\n size: 14,\n weight: 700,\n }}\n >\n {props.title}\n </SonnerContentTitle>\n )}\n {props.description && (\n <SonnerContentDescription\n $font={{\n size: 12,\n weight: 400,\n }}\n $genre={props.genre}\n >\n {props.description}\n </SonnerContentDescription>\n )}\n </>\n )}\n </SonnerContent>\n\n {props.button && props.button.content && (\n <SonnerButtonWrapper>\n <Button\n genre={props.buttonGenre}\n size='small'\n onClick={() => props.hidingMode === 'clickOnButton' && props.handleOnClick(props.id, 'clickOnButton')}\n >\n {props.button.content}\n </Button>\n </SonnerButtonWrapper>\n )}\n </SonnerElementWrapper>\n </motion.div>\n );\n};\nconst MemoizedSonnerElement = memo(SonnerElement);\n","import { addFont, addRemoveScrollbar, addTransition } from '@local/styles/add';\n\nimport styled, { css } from 'styled-components';\n\nimport {\n SonnerContentDescriptionProps,\n SonnerContentTitleProps,\n SonnerElementWrapperProps,\n SonnerLayoutProps,\n} from '.';\n\nexport const SonnerLayout = styled.div<SonnerLayoutProps>`\n position: fixed;\n z-index: ${(props) => props.$zIndex};\n max-height: calc(100dvh - 20px);\n width: 320px;\n display: flex;\n margin: 10px;\n gap: ${(props) => props.$gap}px;\n box-sizing: content-box;\n overflow-y: visible;\n overflow-x: visible;\n ${addRemoveScrollbar}\n ${(props) =>\n props.$position === 'bottom-center'\n ? css`\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n justify-content: flex-start;\n flex-direction: column-reverse;\n `\n : props.$position === 'bottom-left'\n ? css`\n left: 0;\n bottom: 0;\n justify-content: flex-start;\n flex-direction: column-reverse;\n `\n : props.$position === 'bottom-right'\n ? css`\n right: 0;\n bottom: 0;\n justify-content: flex-start;\n flex-direction: column-reverse;\n `\n : props.$position === 'top-right'\n ? css`\n top: 0;\n right: 0;\n justify-content: flex-end;\n flex-direction: column;\n `\n : props.$position === 'top-left'\n ? css`\n top: 0;\n left: 0;\n justify-content: flex-end;\n flex-direction: column;\n `\n : props.$position === 'top-center'\n ? css`\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n justify-content: flex-end;\n flex-direction: column;\n `\n : css``}\n`;\n\nexport const SonnerElementWrapper = styled.div<SonnerElementWrapperProps>`\n background: ${(props) => props.theme.colors.sonner[props.$genre].wrapper.background};\n color: ${(props) => props.theme.colors.sonner[props.$genre].icon.color};\n border-radius: 12px;\n border-style: solid;\n border-color: ${(props) => props.theme.colors.sonner[props.$genre].wrapper.borderColor};\n border-width: 1px;\n padding: 16px 20px 16px 20px;\n display: flex;\n flex-direction: row;\n gap: 10px;\n align-items: center;\n justify-content: flex-start;\n align-self: stretch;\n flex-shrink: 0;\n flex-shrink: 1;\n min-width: 320px;\n min-height: 64px;\n transform-origin: center center;\n box-shadow: ${(props) => props.theme.colors.sonner[props.$genre].wrapper.boxShadow};\n overflow: visible;\n &:hover {\n box-shadow: ${(props) => props.theme.colors.sonner[props.$genre].wrapper.boxShadowHover};\n }\n ${addTransition};\n`;\nexport const SonnerContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: 2px;\n align-items: flex-start;\n justify-content: flex-start;\n align-self: stretch;\n flex-shrink: 0;\n flex: 1;\n position: relative;\n overflow: hidden;\n`;\nexport const SonnerIcon = styled.div`\n display: contents;\n`;\nexport const SonnerContentTitle = styled.div<SonnerContentTitleProps>`\n color: ${(props) => props.theme.colors.sonner[props.$genre].title.color};\n text-align: left;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n`;\nexport const SonnerContentDescription = styled.div<SonnerContentDescriptionProps>`\n color:${(props) => props.theme.colors.sonner[props.$genre].description.color};\n text-align: left;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n ${addFont};\n`;\nexport const SonnerButtonWrapper = styled.div``;\n","import { ITheme } from '@local/theme';\n\nimport { ProviderSonnerProps } from '.';\n\nexport const DEFAULT_PROVIDER_SONNER_Z_INDEX = 100;\nexport const DEFAULT_PROVIDER_SONNER_SCALE = 0.04;\nexport const DEFAULT_PROVIDER_SONNER_Y = 100;\nexport const DEFAULT_PROVIDER_SONNER_DURATION = 0.3;\nexport const DEFAULT_PROVIDER_SONNER_GENRE: keyof ITheme['colors']['sonner'] = 'black';\nexport const DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM = 60;\nexport const DEFAULT_PROVIDER_SONNER_BUTTON: ProviderSonnerProps['default']['button'] = {\n content: 'Undo',\n onClick: () => {},\n};\n"],"names":["error","jsx","index","jsxs","addSXStandard","css","clamp","isClient","noop","SafeReact","computePosition","platform","reset","flip","side","placement","overflow","offset","shift","x","y","min","max","offset$1","shift$1","flip$1","useFloating","data","useModernLayoutEffect","open","node","ReactDOM","Fragment","styled","props","count","_a","theme","value","option","_b","SourceType","format","removeFormatting","valueIsNumericString","newValues","getCaretBoundary","formattedValue","numAsString","currentCaretPosition","ref","React","start","end","hasNegation","_value","str","i","uuidv4","promise"],"mappings":"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","x_google_ignoreList":[12,13,14,15,16,17,18,36]}