react-better-html 1.1.224 → 1.1.226
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +5 -2
- package/dist/index.d.ts +5 -2
- package/dist/index.js +50 -21
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +154 -125
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/BetterHtmlProvider.tsx","../src/constants/app.ts","../src/constants/theme.ts","../src/constants/icons.ts","../src/constants/assets.ts","../src/components/alerts/AlertsHolder.tsx","../src/components/Div.tsx","../src/constants.ts","../src/utils/hooks.ts","../src/constants/css.ts","../src/components/Divider.tsx","../src/components/Text.tsx","../src/components/PageHeader.tsx","../src/components/Image.tsx","../src/components/Icon.tsx","../src/components/alerts/Alert.tsx","../src/plugins/alerts.ts","../src/plugins/reactRouterDom.ts","../src/plugins/localStorage.ts","../src/components/Button.tsx","../src/components/Loader.tsx","../src/components/Modal.tsx","../src/utils/functions.ts","../src/utils/variableFunctions.ts","../src/utils/localStorage.ts","../src/components/PageHolder.tsx","../src/components/Chip.tsx","../src/components/InputField.tsx","../src/components/Label.tsx","../src/components/Dropdown.tsx","../src/components/Calendar.tsx","../src/components/ToggleInput.tsx","../src/components/Form.tsx","../src/components/FormRow.tsx","../src/components/ColorThemeSwitch.tsx","../src/components/Table.tsx","../src/components/Pagination.tsx","../src/components/Tooltip.tsx","../src/components/Tabs.tsx","../src/components/Foldable.tsx","../src/components/SideMenu.tsx"],"sourcesContent":["export {\n useTheme,\n useLoader,\n useLoaderControls,\n countries,\n type OmitProps,\n type ExcludeOptions,\n type PickValue,\n type PartialRecord,\n type DeepPartialRecord,\n type PickAllRequired,\n type AnyOtherString,\n type AssetName,\n type AssetsConfig,\n type Country,\n type IconName,\n type IconsConfig,\n type LoaderName,\n type LoaderConfig,\n type Color,\n type ColorName,\n type ColorTheme,\n type Colors,\n type Styles,\n type Theme,\n type ThemeConfig,\n lightenColor,\n darkenColor,\n saturateColor,\n desaturateColor,\n generateRandomString,\n formatPhoneNumber,\n eventPreventDefault,\n eventStopPropagation,\n eventPreventStop,\n getPluralWord,\n useBooleanState,\n useDebounceState,\n loaderControls,\n colorThemeControls,\n} from \"react-better-core\";\n\nimport BetterHtmlProvider, {\n useBetterHtmlContext,\n useAlertControls,\n type BetterHtmlProviderConfig,\n} from \"./components/BetterHtmlProvider\";\n\nimport { isMobileDevice } from \"./constants\";\n\nimport { type AppConfig, type BetterHtmlConfig } from \"./types/config\";\nimport { type ComponentMarginProps, type ComponentPaddingProps, type ComponentHoverStyle } from \"./types/components\";\nimport { type AlertType, type AlertDuration, type AlertDisplay, type Alert } from \"./types/alert\";\nimport { type PluginName, type BetterHtmlPlugin } from \"./types/plugin\";\nimport { type BrowserName } from \"./types/other\";\n\nimport { usePageResize, usePageScroll, useMediaQuery, useForm, useUrlQuery } from \"./utils/hooks\";\nimport { getBrowser, getFormErrorObject } from \"./utils/functions\";\nimport { alertControls, sideMenuControls, filterHover } from \"./utils/variableFunctions\";\nimport { generateLocalStorage } from \"./utils/localStorage\";\n\nimport Div, { type DivProps } from \"./components/Div\";\nimport Text, { type TextProps, type TextAs } from \"./components/Text\";\nimport Loader, { type LoaderProps } from \"./components/Loader\";\nimport Icon, { type IconProps } from \"./components/Icon\";\nimport Image, { type ImageProps } from \"./components/Image\";\nimport Button, { type ButtonProps } from \"./components/Button\";\nimport Divider, { type HorizontalDividerProps, type VerticalDividerProps } from \"./components/Divider\";\nimport Modal, { type ModalRef, type ModalProps } from \"./components/Modal\";\nimport PageHolder, { type PageHolderProps } from \"./components/PageHolder\";\nimport PageHeader, { type PageHeaderProps } from \"./components/PageHeader\";\nimport Chip, { type ChipProps } from \"./components/Chip\";\nimport InputField, { type InputFieldProps, type TextareaFieldProps } from \"./components/InputField\";\nimport Dropdown, { type DropdownOption, type DropdownProps } from \"./components/Dropdown\";\nimport ToggleInput, { type ToggleInputRef, type ToggleInputProps } from \"./components/ToggleInput\";\nimport Form, { type FormProps } from \"./components/Form\";\nimport Label, { type LabelProps } from \"./components/Label\";\nimport FormRow, { type FormRowProps } from \"./components/FormRow\";\nimport ColorThemeSwitch, { type ColorThemeSwitchProps } from \"./components/ColorThemeSwitch\";\nimport Table, {\n type TableColumn,\n type TableFilterData,\n type TableListFilterListItem,\n type TableProps,\n type TableRef,\n} from \"./components/Table\";\nimport Tooltip, { type TooltipProps, type TooltipRef } from \"./components/Tooltip\";\nimport Tabs, { type TabGroup, type TabsProps, type TabsRef } from \"./components/Tabs\";\nimport Foldable, { type FoldableProps, type FoldableRef } from \"./components/Foldable\";\nimport SideMenu, { type SideMenuProps, type SideMenuItem } from \"./components/SideMenu\";\nimport Pagination from \"./components/Pagination\";\n\nexport * from \"./plugins\";\n\nexport {\n BetterHtmlProvider,\n useBetterHtmlContext,\n useAlertControls,\n BetterHtmlProviderConfig,\n\n // Constants\n isMobileDevice,\n\n // Types\n AppConfig,\n BetterHtmlConfig,\n ComponentMarginProps,\n ComponentPaddingProps,\n ComponentHoverStyle,\n AlertType,\n AlertDuration,\n AlertDisplay,\n Alert,\n PluginName,\n BetterHtmlPlugin,\n BrowserName,\n\n // Hooks\n usePageResize,\n usePageScroll,\n useMediaQuery,\n useForm,\n useUrlQuery,\n\n // Functions\n getBrowser,\n getFormErrorObject,\n\n // Variable Functions\n alertControls,\n sideMenuControls,\n filterHover,\n\n // LocalStorage\n generateLocalStorage,\n\n // Components\n Div,\n DivProps,\n Text,\n TextProps,\n TextAs,\n Loader,\n LoaderProps,\n Icon,\n IconProps,\n Image,\n ImageProps,\n Button,\n ButtonProps,\n Divider,\n HorizontalDividerProps,\n VerticalDividerProps,\n Modal,\n ModalProps,\n ModalRef,\n PageHolder,\n PageHolderProps,\n PageHeader,\n PageHeaderProps,\n Chip,\n ChipProps,\n InputField,\n InputFieldProps,\n TextareaFieldProps,\n Dropdown,\n DropdownOption,\n DropdownProps,\n ToggleInput,\n ToggleInputRef,\n ToggleInputProps,\n Form,\n FormProps,\n Label,\n LabelProps,\n FormRow,\n FormRowProps,\n ColorThemeSwitch,\n ColorThemeSwitchProps,\n Table,\n TableColumn,\n TableFilterData,\n TableListFilterListItem,\n TableProps,\n TableRef,\n Tooltip,\n TooltipProps,\n TooltipRef,\n Tabs,\n TabGroup,\n TabsProps,\n TabsRef,\n Foldable,\n FoldableProps,\n FoldableRef,\n SideMenu,\n SideMenuProps,\n SideMenuItem,\n Pagination,\n};\n","import { createContext, memo, useCallback, useContext, useEffect, useMemo, useState } from \"react\";\nimport {\n useBooleanState,\n OmitProps,\n DeepPartialRecord,\n colorThemeControls,\n useTheme,\n Color,\n BetterCoreProvider,\n BetterCoreProviderConfig,\n BetterCoreConfig,\n useBetterCoreContext,\n} from \"react-better-core\";\nimport { createGlobalStyle } from \"styled-components\";\n\nimport { appConfig } from \"../constants/app\";\nimport { theme } from \"../constants/theme\";\nimport { icons } from \"../constants/icons\";\nimport { assets } from \"../constants/assets\";\n\nimport { BetterHtmlConfig } from \"../types/config\";\nimport { Alert } from \"../types/alert\";\nimport { BetterHtmlPlugin, PluginName } from \"../types/plugin\";\n\nimport { TabGroup, TabsComponentState } from \"./Tabs\";\nimport AlertsHolder from \"./alerts/AlertsHolder\";\n\nconst GlobalStyle = createGlobalStyle<{ fontFamily: string; color: Color; backgroundColor: Color }>`\n html {\n background-color: ${(props) => props.backgroundColor};\n }\n\n body {\n font-family: ${(props) => props.fontFamily};\n color: ${(props) => props.color};\n background-color: ${(props) => props.backgroundColor};\n }\n\n * {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n -webkit-tap-highlight-color: transparent;\n }\n\n a {\n text-decoration: none;\n color: inherit;\n }\n\n .react-better-html-no-scrollbar::-webkit-scrollbar {\n display: none;\n }\n`;\n\nexport type BetterHtmlInternalConfig = BetterHtmlConfig & {\n alerts: Alert[];\n setAlerts: React.Dispatch<React.SetStateAction<Alert[]>>;\n setSideMenuIsCollapsed: ReturnType<typeof useBooleanState>[1];\n setSideMenuIsOpenMobile: ReturnType<typeof useBooleanState>[1];\n plugins: BetterHtmlPlugin[];\n componentsState: {\n tabs: TabsComponentState;\n };\n};\n\nconst betterHtmlContext = createContext<BetterHtmlInternalConfig | undefined>(undefined);\nexport let externalBetterCoreContextValue: BetterCoreConfig | undefined;\nexport let externalBetterHtmlContextValue: BetterHtmlInternalConfig | undefined;\n\nexport const useBetterHtmlContext = (): BetterHtmlConfig & BetterCoreConfig => {\n const coreContext = useBetterCoreContext();\n const context = useContext(betterHtmlContext);\n\n if (context === undefined)\n throw new Error(\n \"`useBetterHtmlContext()` must be used within a `<BetterHtmlProvider>`. Make sure to add one at the root of your component tree.\",\n );\n\n const { alerts, setAlerts, setSideMenuIsCollapsed, setSideMenuIsOpenMobile, plugins, componentsState, ...rest } =\n context;\n\n return {\n ...coreContext,\n ...rest,\n };\n};\n\nexport const useBetterHtmlContextInternal = (): BetterHtmlInternalConfig => {\n const context = useContext(betterHtmlContext);\n\n if (context === undefined)\n throw new Error(\n \"`useBetterHtmlContextInternal()` must be used within a `<BetterHtmlProvider>`. Make sure to add one at the root of your component tree.\",\n );\n\n return context;\n};\n\nexport const useAlertControls = () => {\n const context = useContext(betterHtmlContext);\n\n if (context === undefined)\n throw new Error(\n \"`useAlertControls()` must be used within a `<BetterHtmlProvider>`. Make sure to add one at the root of your component tree.\",\n );\n\n const createAlert = useCallback((alert: OmitProps<Alert, \"id\">): Alert => {\n const readyAlert: Alert = {\n id: crypto.randomUUID(),\n ...alert,\n };\n context.setAlerts((oldValue) => [...oldValue, readyAlert]);\n\n return readyAlert;\n }, []);\n const removeAlert = useCallback((alertId: string) => {\n context.setAlerts((oldValue) => oldValue.filter((alert) => alert.id !== alertId));\n }, []);\n\n return {\n createAlert,\n removeAlert,\n };\n};\n\nexport const usePlugin = <T extends object>(pluginName: PluginName): BetterHtmlPlugin<T> | undefined => {\n const context = useContext(betterHtmlContext);\n\n if (context === undefined) {\n throw new Error(\n \"`usePlugin()` must be used within a `<BetterHtmlProvider>`. Make sure to add one at the root of your component tree.\",\n );\n }\n\n return useMemo(\n () => context.plugins.find((plugin: BetterHtmlPlugin) => plugin.name === pluginName),\n [context.plugins, pluginName],\n ) as any;\n};\n\ntype BetterHtmlProviderInternalContentProps = {\n children?: React.ReactNode;\n};\n\nfunction BetterHtmlProviderInternalContent({ children }: BetterHtmlProviderInternalContentProps) {\n const theme = useTheme();\n const alertsPlugin = usePlugin(\"alerts\");\n\n return (\n <>\n <GlobalStyle\n fontFamily={theme.styles.fontFamily}\n color={theme.colors.textPrimary}\n backgroundColor={theme.colors.backgroundBase}\n />\n\n {children}\n\n {alertsPlugin && <AlertsHolder />}\n </>\n );\n}\n\ntype BetterHtmlProviderInternalConfig = DeepPartialRecord<BetterHtmlConfig>;\n\ntype BetterProviderCommonProps = {\n plugins?: BetterHtmlPlugin[];\n children?: React.ReactNode;\n};\n\ntype BetterHtmlProviderInternalProps = BetterProviderCommonProps & {\n config?: BetterHtmlProviderInternalConfig;\n};\n\nfunction BetterHtmlProviderInternal({ config, plugins, children }: BetterHtmlProviderInternalProps) {\n const betterCoreContext = useBetterCoreContext();\n\n const [alerts, setAlerts] = useState<Alert[]>([]);\n const [sideMenuIsCollapsed, setSideMenuIsCollapsed] = useBooleanState();\n const [sideMenuIsOpenMobile, setSideMenuIsOpenMobile] = useBooleanState();\n const [tabGroups, setTabGroups] = useState<TabGroup[]>([]);\n const [tabsWithDots, setTabsWithDots] = useState<string[]>([]);\n\n const readyConfig = useMemo<BetterHtmlInternalConfig>(\n () => ({\n app: {\n ...appConfig,\n ...config?.app,\n },\n alerts,\n setAlerts,\n sideMenuIsCollapsed,\n setSideMenuIsCollapsed,\n sideMenuIsOpenMobile,\n setSideMenuIsOpenMobile,\n components: {\n ...config?.components,\n },\n plugins: plugins ?? [],\n componentsState: {\n tabs: {\n tabGroups,\n setTabGroups,\n tabsWithDots,\n setTabsWithDots,\n },\n },\n }),\n [config, alerts, sideMenuIsCollapsed, sideMenuIsOpenMobile, plugins, tabGroups, tabsWithDots],\n );\n\n useEffect(() => {\n if (!plugins) return;\n\n plugins.forEach((plugin) => {\n plugin.initialize?.();\n });\n }, []);\n\n externalBetterCoreContextValue = betterCoreContext;\n externalBetterHtmlContextValue = readyConfig;\n\n return (\n <betterHtmlContext.Provider value={readyConfig}>\n <BetterHtmlProviderInternalContent>{children}</BetterHtmlProviderInternalContent>\n </betterHtmlContext.Provider>\n );\n}\n\nexport type BetterHtmlProviderConfig = BetterCoreProviderConfig & BetterHtmlProviderInternalConfig;\n\ntype BetterHtmlProviderProps = BetterProviderCommonProps & {\n config?: BetterHtmlProviderConfig;\n};\n\nfunction BetterHtmlProvider({ config, ...props }: BetterHtmlProviderProps) {\n const coreConfig = useMemo<BetterCoreProviderConfig>(\n () => ({\n theme: {\n ...theme,\n ...config?.theme,\n },\n colorTheme: config?.colorTheme ?? (localStorage.getItem(\"theme\") === \"dark\" ? \"dark\" : \"light\"),\n icons: {\n ...icons,\n ...config?.icons,\n },\n assets: {\n ...assets,\n ...config?.assets,\n },\n loaders: config?.loaders,\n }),\n [config],\n );\n\n const htmlConfig = useMemo<BetterHtmlProviderInternalConfig>(\n () => ({\n app: config?.app,\n sideMenuIsCollapsed: config?.sideMenuIsCollapsed,\n sideMenuIsOpenMobile: config?.sideMenuIsOpenMobile,\n components: config?.components,\n }),\n [config],\n );\n\n useEffect(() => {\n const html = document.querySelector(\"html\");\n\n if (!html) return;\n\n html.setAttribute(\"data-theme\", localStorage.getItem(\"theme\") === \"dark\" ? \"dark\" : \"light\");\n\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === \"attributes\") {\n const newColorTheme = html.getAttribute(\"data-theme\") === \"dark\" ? \"dark\" : \"light\";\n\n colorThemeControls.toggleTheme(newColorTheme);\n localStorage.setItem(\"theme\", newColorTheme);\n }\n });\n });\n\n observer.observe(html, {\n attributes: true,\n attributeFilter: [\"data-theme\"],\n });\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return (\n <BetterCoreProvider config={coreConfig}>\n <BetterHtmlProviderInternal config={htmlConfig} {...props} />\n </BetterCoreProvider>\n );\n}\n\nexport default memo(BetterHtmlProvider);\n","import { AppConfig } from \"../types/config\";\n\nexport const appConfig: AppConfig = {\n contentMaxWidth: 1100,\n};\n\nexport const defaultAlertDuration: number = 2.3 * 1000;\nexport const defaultSideMenuWidth: number = 300;\n","import { DeepPartialRecord, ThemeConfig } from \"react-better-core\";\n\nexport const theme: DeepPartialRecord<ThemeConfig> = {};\n","import { IconsConfig } from \"react-better-core\";\n\nexport const icons: Partial<IconsConfig> = {\n uploadCloud: {\n width: 640,\n height: 512,\n paths: [\n {\n d: \"M144 480C64.5 480 0 415.5 0 336c0-62.8 40.2-116.2 96.2-135.9c-.1-2.7-.2-5.4-.2-8.1c0-88.4 71.6-160 160-160c59.3 0 111 32.2 138.7 80.2C409.9 102 428.3 96 448 96c53 0 96 43 96 96c0 12.2-2.3 23.8-6.4 34.6C596 238.4 640 290.1 640 352c0 70.7-57.3 128-128 128l-368 0zm79-217c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39L296 392c0 13.3 10.7 24 24 24s24-10.7 24-24l0-134.1 39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0l-80 80z\",\n type: \"fill\",\n },\n ],\n },\n doubleChevronLeft: {\n width: 512,\n height: 512,\n paths: [\n {\n d: \"M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z\",\n type: \"fill\",\n },\n ],\n },\n doubleChevronRight: {\n width: 512,\n height: 512,\n paths: [\n {\n d: \"M470.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 256 265.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L210.7 256 73.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z\",\n type: \"fill\",\n },\n ],\n },\n eye: {\n width: 576,\n height: 512,\n paths: [\n {\n d: \"M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64c-7.1 0-13.9-1.2-20.3-3.3c-5.5-1.8-11.9 1.6-11.7 7.4c.3 6.9 1.3 13.8 3.2 20.7c13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3z\",\n type: \"fill\",\n },\n ],\n },\n eyeDashed: {\n width: 640,\n height: 512,\n paths: [\n {\n d: \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c8.4-19.3 10.6-41.4 4.8-63.3c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zM373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5L373 389.9z\",\n type: \"fill\",\n },\n ],\n },\n magnifyingGlass: {\n width: 512,\n height: 512,\n paths: [\n {\n d: \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z\",\n type: \"fill\",\n },\n ],\n },\n filter: {\n width: 512,\n height: 512,\n paths: [\n {\n d: \"M3.9 54.9C10.5 40.9 24.5 32 40 32l432 0c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L320 320.9 320 448c0 12.1-6.8 23.2-17.7 28.6s-23.8 4.3-33.5-3l-64-48c-8.1-6-12.8-15.5-12.8-25.6l0-79.1L9 97.3C-.7 85.4-2.8 68.8 3.9 54.9z\",\n type: \"fill\",\n },\n ],\n },\n};\n","import { AssetsConfig } from \"react-better-core\";\n\nexport const assets: Partial<AssetsConfig> = {};\n","import { memo } from \"react\";\nimport { useTheme } from \"react-better-core\";\n\nimport { AlertsPluginOptions } from \"../../plugins\";\n\nimport Div from \"../Div\";\nimport Alert from \"./Alert\";\nimport { useBetterHtmlContextInternal, usePlugin } from \"../BetterHtmlProvider\";\n\nfunction AlertsHolder() {\n const theme = useTheme();\n const alertsPlugin = usePlugin<AlertsPluginOptions>(\"alerts\");\n const { alerts } = useBetterHtmlContextInternal();\n\n const pluginConfig = alertsPlugin?.getConfig() ?? {};\n\n const top: React.CSSProperties[\"top\"] = pluginConfig.position === \"top\" ? theme.styles.gap : undefined;\n const bottom: React.CSSProperties[\"bottom\"] = pluginConfig.position === \"bottom\" ? theme.styles.gap : undefined;\n const left: React.CSSProperties[\"left\"] =\n pluginConfig.align === \"left\" ? theme.styles.space : pluginConfig.align === \"center\" ? \"50%\" : undefined;\n const right: React.CSSProperties[\"right\"] = pluginConfig.align === \"right\" ? theme.styles.space : undefined;\n\n return (\n <Div.column\n position=\"fixed\"\n top={top}\n bottom={bottom}\n left={left}\n right={right}\n gap={theme.styles.gap}\n alignItems={\n pluginConfig.align === \"center\" ? \"center\" : pluginConfig.align === \"right\" ? \"flex-end\" : undefined\n }\n transform={pluginConfig.align === \"center\" ? \"translateX(-50%)\" : undefined}\n zIndex={1000}\n >\n {alerts.map((alert) => (\n <Alert alert={alert} key={alert.id} />\n ))}\n </Div.column>\n );\n}\n\nexport default memo(AlertsHolder);\n","import { forwardRef, memo, useCallback } from \"react\";\nimport { OmitProps, useTheme } from \"react-better-core\";\nimport styled, { WebTarget } from \"styled-components\";\n\nimport { isMobileDevice } from \"../constants\";\n\nimport { ComponentHoverStyle, ComponentPropWithRef, ComponentStyle } from \"../types/components\";\n\nimport { useComponentPropsWithPrefix, useComponentPropsGrouper } from \"../utils/hooks\";\n\nimport Divider from \"./Divider\";\nimport PageHeader, { PageHeaderProps } from \"./PageHeader\";\n\nconst DivStyledComponent = styled.div.withConfig({\n shouldForwardProp: (prop) => ![\"style\", \"hoverStyle\"].includes(prop),\n})<{ style: ComponentStyle; hoverStyle: ComponentStyle }>`\n ${(props) => props.style as any}\n\n &:hover {\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nexport type DivProps<Value = unknown> = {\n value?: Value;\n /** @default \"div\" */\n as?: WebTarget;\n /** @default false */\n isTabAccessed?: boolean;\n htmlContentTranslate?: React.ComponentProps<\"div\">[\"translate\"];\n onClickWithValue?: (value: Value) => void;\n} & OmitProps<React.ComponentProps<\"div\">, \"style\" | \"defaultValue\" | \"translate\"> &\n ComponentStyle &\n ComponentHoverStyle;\n\ntype DivComponentType = {\n <Value>(props: ComponentPropWithRef<HTMLDivElement, DivProps<Value>>): React.ReactElement;\n row: <Value>(\n props: ComponentPropWithRef<\n HTMLDivElement,\n OmitProps<DivProps<Value>, \"display\" | \"flexDirection\"> & {\n flexReverse?: boolean;\n invertFlexDirection?: boolean;\n }\n >,\n ) => React.ReactElement;\n column: <Value>(\n props: ComponentPropWithRef<\n HTMLDivElement,\n OmitProps<DivProps<Value>, \"display\" | \"flexDirection\"> & {\n flexReverse?: boolean;\n invertFlexDirection?: boolean;\n }\n >,\n ) => React.ReactElement;\n grid: <Value>(\n props: ComponentPropWithRef<HTMLDivElement, OmitProps<DivProps<Value>, \"display\">>,\n ) => React.ReactElement;\n box: <Value>(\n props: ComponentPropWithRef<\n HTMLDivElement,\n DivProps<Value> &\n OmitProps<PageHeaderProps, \"marginBottom\"> & {\n headerBackgroundColor?: string;\n /** @default theme.colors.primary */\n activeColor?: string;\n isActive?: boolean;\n }\n >,\n ) => React.ReactElement;\n};\n\nconst DivComponent: DivComponentType = forwardRef(function Div<Value>(\n {\n as = \"div\",\n value,\n isTabAccessed,\n htmlContentTranslate,\n onClickWithValue,\n role,\n onClick,\n onKeyDown,\n children,\n ...props\n }: DivProps<Value>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const { style, hoverStyle, restProps } = useComponentPropsGrouper(props);\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n const onClickElement = useCallback(\n (event: React.MouseEvent<HTMLDivElement, globalThis.MouseEvent>) => {\n onClick?.(event);\n onClickWithValue?.(value as any);\n },\n [onClick, onClickWithValue, value],\n );\n const onKeyDownElement = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n\n if (!isTabAccessed) return;\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n },\n [onKeyDown, isTabAccessed],\n );\n\n return (\n <DivStyledComponent\n as={as}\n tabIndex={isTabAccessed && !isMobileDevice ? 0 : undefined}\n translate={htmlContentTranslate}\n role={role ?? (onClick ? \"button\" : undefined)}\n onClick={onClickElement}\n onKeyDown={onKeyDownElement}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n ref={ref}\n >\n {children}\n </DivStyledComponent>\n );\n}) as any;\n\nDivComponent.row = forwardRef(function Row({ flexReverse, invertFlexDirection, ...props }, ref) {\n const reverseSuffix = flexReverse ? \"-reverse\" : \"\";\n\n return (\n <DivComponent\n display=\"flex\"\n flexDirection={((invertFlexDirection ? \"column\" : \"row\") + reverseSuffix) as any}\n ref={ref}\n {...props}\n />\n );\n}) as DivComponentType[\"row\"];\n\nDivComponent.column = forwardRef(function Column({ flexReverse, invertFlexDirection, ...props }, ref) {\n const reverseSuffix = flexReverse ? \"-reverse\" : \"\";\n\n return (\n <DivComponent\n display=\"flex\"\n flexDirection={((invertFlexDirection ? \"row\" : \"column\") + reverseSuffix) as any}\n ref={ref}\n {...props}\n />\n );\n}) as DivComponentType[\"column\"];\n\nDivComponent.grid = forwardRef(function Grid(props, ref) {\n return <DivComponent display=\"grid\" ref={ref} {...props} />;\n}) as DivComponentType[\"grid\"];\n\nDivComponent.box = forwardRef(function Box(\n {\n icon,\n image,\n imageUrl,\n imageSize,\n imageAzProfileImage,\n title,\n titleAs,\n titleColor,\n titleRightElement,\n description,\n descriptionColor,\n textAlign,\n rightElement,\n lightMode,\n headerBackgroundColor,\n activeColor,\n isActive,\n children,\n ...props\n },\n ref,\n) {\n const theme = useTheme();\n\n const withClick = props.onClick || props.onClickWithValue;\n\n const readyActiveColor = activeColor ?? theme.colors.primary;\n\n return (\n <DivComponent\n color={isActive ? theme.colors.base : undefined}\n backgroundColor={isActive ? readyActiveColor : theme.colors.backgroundContent}\n border={`1px solid ${isActive ? readyActiveColor : theme.colors.border}`}\n borderRadius={theme.styles.borderRadius}\n borderColorHover={withClick && !isActive ? readyActiveColor : undefined}\n filterHover={withClick && isActive ? \"brightness(0.9)\" : undefined}\n cursor={withClick ? \"pointer\" : undefined}\n paddingBlock={title ? theme.styles.space : theme.styles.gap}\n paddingInline={theme.styles.space}\n ref={ref}\n {...props}\n >\n {title && (\n <Div\n backgroundColor={headerBackgroundColor}\n borderTopLeftRadius={props.borderTopLeftRadius ?? props.borderRadius ?? theme.styles.borderRadius - 1}\n borderTopRightRadius={props.borderTopRightRadius ?? props.borderRadius ?? theme.styles.borderRadius - 1}\n marginInline={-theme.styles.space}\n marginTop={-theme.styles.space}\n marginBottom={theme.styles.space}\n paddingInline={theme.styles.space}\n paddingTop={theme.styles.space}\n >\n <PageHeader\n icon={icon}\n image={image}\n imageUrl={imageUrl}\n imageSize={imageSize}\n imageAzProfileImage={imageAzProfileImage}\n title={title}\n titleAs={titleAs}\n titleColor={titleColor}\n titleRightElement={titleRightElement}\n description={description}\n descriptionColor={descriptionColor}\n textAlign={textAlign}\n rightElement={rightElement}\n lightMode={lightMode}\n marginBottom={theme.styles.space}\n />\n\n <Div width={`calc(100% + ${theme.styles.space * 2}px)`} marginLeft={-theme.styles.space}>\n <Divider.horizontal />\n </Div>\n </Div>\n )}\n\n {children}\n </DivComponent>\n );\n}) as DivComponentType[\"box\"];\n\nconst Div = memo(DivComponent) as any as typeof DivComponent & {\n row: typeof DivComponent.row;\n column: typeof DivComponent.column;\n grid: typeof DivComponent.grid;\n box: typeof DivComponent.box;\n};\n\nDiv.row = DivComponent.row;\nDiv.column = DivComponent.column;\nDiv.grid = DivComponent.grid;\nDiv.box = DivComponent.box;\n\nexport default Div;\n","export const isMobileDevice: boolean = /Mobi|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n);\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { OmitProps, PartialRecord, useBooleanState, useTheme } from \"react-better-core\";\n\nimport { cssProps, cssPropsToExclude } from \"../constants/css\";\n\nimport { ReactRouterDomPluginOptions } from \"../plugins\";\n\nimport { ComponentHoverStyle, ComponentPropWithRef, ComponentStyle } from \"../types/components\";\n\nimport { InputFieldProps, TextareaFieldProps } from \"../components/InputField\";\nimport { DropdownProps } from \"../components/Dropdown\";\nimport { ToggleInputProps, ToggleInputRef } from \"../components/ToggleInput\";\nimport { usePlugin } from \"../components/BetterHtmlProvider\";\n\nexport function useComponentPropsGrouper<Props extends object = {}>(\n props: ComponentStyle & ComponentHoverStyle,\n /** @default false */\n excludeStyleProps?: boolean,\n): {\n style: ComponentStyle;\n hoverStyle: ComponentStyle;\n excludeStyle: ComponentStyle;\n restProps: Props;\n} {\n const theme = useTheme();\n\n return useMemo(() => {\n const style: ComponentStyle = {};\n const hoverStyle: ComponentStyle = {};\n const excludeStyle: ComponentStyle = {};\n const restProps = {} as Props;\n\n let haveHover = false;\n\n for (const key in props) {\n const keyName = key as keyof ComponentStyle;\n\n if (excludeStyleProps && cssPropsToExclude.has(keyName.toLowerCase())) {\n if (cssProps.has(keyName.toLowerCase())) {\n (excludeStyle[keyName] as any) = props[keyName];\n }\n } else {\n if (cssProps.has(keyName.toLowerCase())) {\n (style[keyName] as any) = props[keyName];\n\n if (keyName === \"transition\") style.WebkitTransition = style.transition;\n } else if (keyName.endsWith(\"Hover\") && cssProps.has(keyName.slice(0, -5).toLowerCase())) {\n haveHover = true;\n\n (hoverStyle[keyName.slice(0, -5) as keyof ComponentStyle] as any) = props[keyName];\n\n if (keyName.slice(0, -5) === \"transition\") hoverStyle.WebkitTransition = hoverStyle.transition;\n } else {\n (restProps[keyName as keyof Props] as any) = props[keyName];\n }\n }\n }\n\n if (haveHover && !style.transition) {\n style.transition = theme.styles.transition;\n style.WebkitTransition = theme.styles.transition;\n }\n\n return {\n style,\n hoverStyle,\n excludeStyle,\n restProps,\n };\n }, [props]);\n}\n\nexport function useComponentPropsWithPrefix<Props extends Record<string, any>, Prefix extends string>(\n props: Props,\n prefix: Prefix,\n) {\n return useMemo<Record<`${Prefix}-${string}`, any>>(() => {\n const returnValue: any = {};\n\n for (const key in props) {\n if (key.startsWith(`${prefix}-`)) {\n returnValue[key] = props[key];\n }\n }\n\n return returnValue;\n }, [props, prefix]);\n}\n\nexport function useComponentInputFieldDateProps(\n props: InputFieldProps,\n holderRef?: React.RefObject<HTMLDivElement | null>,\n disabled?: boolean,\n): {\n internalValue: string;\n setInternalValue: React.Dispatch<React.SetStateAction<string>>;\n inputFieldProps: InputFieldProps;\n insideInputFieldComponentProps: ComponentStyle;\n isOpen: boolean;\n} {\n const theme = useTheme();\n\n const [isOpen, setIsOpen] = useBooleanState();\n const [isOpenLate, setIsOpenLate] = useBooleanState();\n const [isFocused, setIsFocused] = useBooleanState();\n\n const [internalValue, setInternalValue] = useState<string>(props.value?.toString() ?? \"\");\n\n const inputFieldProps = useMemo<InputFieldProps>(\n () => ({\n value: internalValue,\n className: `${isOpen && !disabled ? \"react-better-html-inputField-dateTime-opened\" : \"\"}${\n isOpenLate && !disabled ? \" react-better-html-inputField-dateTime-opened-late\" : \"\"\n }${props.className ? ` ${props.className}` : \"\"}`,\n onClick: (event: React.MouseEvent<HTMLInputElement>) => {\n if (props.disabled) return;\n\n setIsOpen.setTrue();\n props.onClick?.(event);\n },\n onFocus: (event: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused.setTrue();\n props.onFocus?.(event);\n },\n onBlur: (event: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused.setFalse();\n props.onBlur?.(event);\n },\n onChangeValue: (value) => {\n setInternalValue(value);\n props.onChangeValue?.(value);\n },\n }),\n [props, internalValue, isOpen, isOpenLate, disabled],\n );\n const insideInputFieldComponentProps = useMemo<ComponentStyle>(\n () => ({\n border: `1px solid ${isFocused ? theme.colors.primary : theme.colors.border}`,\n borderTop: \"none\",\n opacity: !isOpen ? 0 : undefined,\n pointerEvents: !isOpen ? \"none\" : undefined,\n transform: `translateY(${!isOpen ? -10 : 0}px)`,\n zIndex: 1000,\n transition: theme.styles.transition,\n }),\n [isOpen, isFocused],\n );\n\n useEffect(() => {\n if (props.value === undefined || props.value === null) return;\n\n setInternalValue(props.value.toString());\n }, [props.value]);\n useEffect(() => {\n if (isOpen) {\n setIsOpenLate.setTrue();\n } else {\n const timeout = setTimeout(setIsOpenLate.setFalse, 0.2 * 1000);\n\n return () => {\n clearTimeout(timeout);\n };\n }\n }, [isOpen]);\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (holderRef && holderRef.current && !holderRef.current.contains(event.target as Node)) {\n setIsOpen.setFalse();\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpen]);\n\n return {\n internalValue,\n setInternalValue,\n inputFieldProps,\n insideInputFieldComponentProps,\n isOpen,\n };\n}\n\nexport function usePageResize() {\n const [width, setWidth] = useState<number>(window.innerWidth);\n const [height, setHeight] = useState<number>(window.innerHeight);\n\n useEffect(() => {\n const onResize = () => {\n setWidth(window.innerWidth);\n setHeight(window.innerHeight);\n };\n\n window.addEventListener(\"resize\", onResize);\n\n return () => {\n window.removeEventListener(\"resize\", onResize);\n };\n }, []);\n\n return {\n width,\n height,\n };\n}\n\nexport function usePageScroll() {\n const [scrollX, setScrollX] = useState<number>(window.scrollX ?? 0);\n const [scrollY, setScrollY] = useState<number>(window.scrollY ?? 0);\n\n useEffect(() => {\n const onScroll = () => {\n setScrollX(window.scrollX);\n setScrollY(window.scrollY);\n };\n\n window.addEventListener(\"scroll\", onScroll);\n\n return () => {\n window.removeEventListener(\"scroll\", onScroll);\n };\n }, []);\n\n return {\n scrollX,\n scrollY,\n };\n}\n\nexport function useMediaQuery() {\n const { width } = usePageResize();\n\n return {\n screenWidth: width,\n size320: width <= 320,\n size400: width <= 400,\n size500: width <= 500,\n size600: width <= 600,\n size700: width <= 700,\n size800: width <= 800,\n size900: width <= 900,\n size1000: width <= 1000,\n size1100: width <= 1100,\n size1200: width <= 1200,\n size1300: width <= 1300,\n size1400: width <= 1400,\n size1500: width <= 1500,\n size1600: width <= 1600,\n };\n}\n\ntype FormFieldValue = string | number | boolean;\n\nexport function useForm<\n FormFields extends Record<string | number, FormFieldValue | FormFieldValue[] | undefined>,\n>(options: {\n defaultValues: FormFields;\n requiredFields?: (keyof FormFields)[];\n onSubmit?: (values: FormFields) => void | Promise<void>;\n validate?: (values: FormFields) => PartialRecord<keyof FormFields, string>;\n}) {\n const { defaultValues, requiredFields, onSubmit, validate } = options;\n\n const inputFieldRefs = useRef<Record<keyof FormFields, HTMLInputElement | undefined>>(\n {} as Record<keyof FormFields, HTMLInputElement | undefined>,\n );\n const textAreaRefs = useRef<Record<keyof FormFields, HTMLTextAreaElement | undefined>>(\n {} as Record<keyof FormFields, HTMLTextAreaElement | undefined>,\n );\n const dropdownRefs = useRef<Record<keyof FormFields, HTMLDivElement | undefined>>(\n {} as Record<keyof FormFields, HTMLDivElement | undefined>,\n );\n const toggleInputRefs = useRef<Record<keyof FormFields, ToggleInputRef | undefined>>(\n {} as Record<keyof FormFields, ToggleInputRef | undefined>,\n );\n const [inputTypes, setInputTypes] = useState<Record<keyof FormFields, React.HTMLInputTypeAttribute>>(\n {} as Record<keyof FormFields, React.HTMLInputTypeAttribute>,\n );\n\n const [values, setValues] = useState<FormFields>(defaultValues);\n const [errors, setErrors] = useState<PartialRecord<keyof FormFields, string>>({});\n const [isSubmitting, setIsSubmitting] = useBooleanState();\n\n const setFieldValue = useCallback(\n <FieldName extends keyof FormFields>(field: FieldName, value: FormFields[FieldName] | undefined) => {\n setValues((oldValue) => ({\n ...oldValue,\n [field]: value,\n }));\n\n setErrors((oldValue) => ({\n ...oldValue,\n [field]: undefined,\n }));\n },\n [],\n );\n const setFieldsValue = useCallback((values: Partial<FormFields>) => {\n setValues((oldValue) => ({\n ...oldValue,\n ...values,\n }));\n\n setErrors((oldValue) => {\n const newErrors: typeof oldValue = {};\n\n for (const key in values) newErrors[key] = undefined;\n\n return newErrors;\n });\n }, []);\n const getInputFieldProps = useCallback(\n <FieldName extends keyof FormFields>(\n field: FieldName,\n ): ComponentPropWithRef<HTMLInputElement, InputFieldProps> => {\n const type = inputTypes[field] ?? \"text\";\n\n return {\n required: requiredFields?.includes(field),\n value: values[field]?.toString() ?? \"\",\n name: field.toString(),\n onChangeValue: (newValue) => {\n const readyValue = type === \"number\" ? (newValue ? Number(newValue) : undefined) : newValue;\n\n setFieldValue(field, readyValue as FormFields[FieldName]);\n },\n ref: (element) => {\n if (!element) return;\n\n inputFieldRefs.current[field] = element;\n\n if (inputTypes[field] === undefined)\n setInputTypes((oldValue) => ({\n ...oldValue,\n [field]: element.getAttribute(\"type\"),\n }));\n },\n errorText: errors[field],\n };\n },\n [values, setFieldValue, inputTypes, errors, requiredFields],\n );\n const getTextAreaProps = useCallback(\n <FieldName extends keyof FormFields>(\n field: FieldName,\n ): ComponentPropWithRef<HTMLTextAreaElement, TextareaFieldProps> => {\n return {\n required: requiredFields?.includes(field),\n value: values[field]?.toString() ?? \"\",\n name: field.toString(),\n onChangeValue: (newValue) => {\n setFieldValue(field, newValue as FormFields[FieldName]);\n },\n ref: (element) => {\n if (!element) return;\n\n textAreaRefs.current[field] = element;\n },\n errorText: errors[field],\n };\n },\n [values, setFieldValue, inputTypes, errors, requiredFields],\n );\n const getDropdownFieldProps = useCallback(\n <FieldName extends keyof FormFields>(field: FieldName): any => {\n return {\n required: requiredFields?.includes(field),\n value: values[field],\n name: field.toString(),\n onChange: (value: any) => {\n setFieldValue(field, value);\n },\n ref: (element) => {\n if (!element) return;\n\n dropdownRefs.current[field] = element;\n },\n errorText: errors[field],\n } as OmitProps<ComponentPropWithRef<HTMLDivElement, DropdownProps<FormFields[FieldName]>>, \"options\">;\n },\n [values, errors, setFieldValue, requiredFields],\n );\n const getCheckboxProps = useCallback(\n <FieldName extends keyof FormFields>(\n field: FieldName,\n ): ComponentPropWithRef<ToggleInputRef, ToggleInputProps<FormFields[FieldName]>> => {\n return {\n required: requiredFields?.includes(field),\n checked: values[field] as boolean,\n name: field.toString(),\n onChange: (checked) => {\n setFieldValue(field, checked as FormFields[FieldName]);\n },\n ref: (element) => {\n if (!element) return;\n\n toggleInputRefs.current[field] = element;\n },\n errorText: errors[field],\n };\n },\n [values, errors, setFieldValue, requiredFields],\n );\n const getRadioButtonProps = useCallback(\n <FieldName extends keyof FormFields>(\n field: FieldName,\n value: FormFields[FieldName],\n ): ComponentPropWithRef<ToggleInputRef, ToggleInputProps<FormFields[FieldName]>> => {\n return {\n required: requiredFields?.includes(field),\n checked: values[field] === value,\n name: field.toString(),\n value,\n onChange: (checked, newValue) => {\n setFieldValue(field, checked ? newValue : undefined);\n },\n ref: (element) => {\n if (!element) return;\n\n toggleInputRefs.current[field] = element;\n },\n errorText: errors[field],\n };\n },\n [values, errors, setFieldValue, requiredFields],\n );\n const getSwitchProps = useCallback(\n <FieldName extends keyof FormFields>(\n field: FieldName,\n ): ComponentPropWithRef<ToggleInputRef, ToggleInputProps<FormFields[FieldName]>> => {\n return {\n required: requiredFields?.includes(field),\n checked: values[field] as boolean,\n name: field.toString(),\n onChange: (checked) => {\n setFieldValue(field, checked as FormFields[FieldName]);\n },\n ref: (element) => {\n if (!element) return;\n\n toggleInputRefs.current[field] = element;\n },\n errorText: errors[field],\n };\n },\n [values, errors, setFieldValue, requiredFields],\n );\n const focusField = useCallback((field: keyof FormFields) => {\n inputFieldRefs.current[field]?.focus();\n }, []);\n const validateForm = useCallback(() => {\n const validationErrors = validate?.(values) || {};\n setErrors(validationErrors);\n\n return validationErrors;\n }, [validate, values]);\n const onSubmitFunction = useCallback(\n async (event?: React.FormEvent<HTMLFormElement>) => {\n event?.preventDefault();\n setIsSubmitting.setTrue();\n\n try {\n const validationErrors = validateForm();\n\n if (Object.keys(validationErrors).length === 0) {\n await onSubmit?.(values);\n } else {\n const firstErrorField = Object.keys(validationErrors)[0] as keyof FormFields;\n focusField(firstErrorField);\n }\n } finally {\n setIsSubmitting.setFalse();\n }\n },\n [values, validateForm, onSubmit, focusField],\n );\n const reset = useCallback(() => {\n setValues(defaultValues);\n setErrors({});\n }, [defaultValues]);\n\n const isDirty = useMemo<boolean>(\n () => Object.keys(defaultValues).some((key) => defaultValues[key] !== values[key]),\n [defaultValues, values],\n );\n const isValid = useMemo<boolean>(() => {\n const validationErrors = validate?.(values) || {};\n\n return Object.keys(validationErrors).length === 0;\n }, [validate, values]);\n const canSubmit = useMemo<boolean>(() => {\n const requiredFieldsHaveValues =\n requiredFields?.every((field) => values[field] !== undefined && values[field] !== \"\") ?? true;\n\n return isValid && requiredFieldsHaveValues;\n }, [isValid, requiredFields]);\n\n return {\n values,\n errors,\n isSubmitting,\n setFieldValue,\n setFieldsValue,\n getInputFieldProps,\n getTextAreaProps,\n getDropdownFieldProps,\n getCheckboxProps,\n getRadioButtonProps,\n getSwitchProps,\n focusField,\n inputFieldRefs: inputFieldRefs.current,\n textAreaRefs: textAreaRefs.current,\n dropdownRefs: dropdownRefs.current,\n toggleInputRefs: toggleInputRefs.current,\n validate: validateForm,\n onSubmit: onSubmitFunction,\n reset,\n requiredFields,\n isDirty,\n isValid,\n canSubmit,\n };\n}\n\nexport function useUrlQuery() {\n const reactRouterDomPlugin = usePlugin<ReactRouterDomPluginOptions>(\"react-router-dom\");\n\n if (!reactRouterDomPlugin) {\n throw new Error(\n \"`useUrlQuery` hook requires the `react-router-dom` plugin to be added to the `plugins` prop in `<BetterHtmlProvider>`.\",\n );\n }\n\n const reactRouterDomPluginConfig = reactRouterDomPlugin.getConfig();\n\n const isInRouterContext = reactRouterDomPluginConfig.useInRouterContext();\n\n if (!isInRouterContext) {\n throw new Error(\n \"`useUrlQuery` hook must be used inside a React Router context. Make sure your component is wrapped in a `<BrowserRouter>`, or another Router component.\",\n );\n }\n\n const navigate = reactRouterDomPluginConfig.useNavigate();\n const [searchParams] = reactRouterDomPluginConfig.useSearchParams();\n const createSearchParams = reactRouterDomPluginConfig.createSearchParams;\n\n const setQuery = useCallback(\n (query: Record<string, string | number>, keepHistory = true) => {\n const currentSearchParams: Record<string, string> = {};\n searchParams.forEach((value, key) => {\n (currentSearchParams as any)[key] = value;\n });\n\n navigate(\n {\n search: createSearchParams({\n ...currentSearchParams,\n ...Object.fromEntries(Object.entries(query).map(([key, value]) => [key, value.toString()])),\n }).toString(),\n },\n {\n replace: !keepHistory,\n },\n );\n },\n [navigate, searchParams],\n );\n const getQuery = useCallback((name: string) => searchParams.get(name), [searchParams]);\n const removeQuery = useCallback(\n (name: string, keepHistory = true) => {\n searchParams.delete(name);\n\n navigate(\n {\n search: searchParams.toString(),\n },\n {\n replace: !keepHistory,\n },\n );\n },\n [navigate, searchParams],\n );\n\n return {\n setQuery,\n getQuery,\n removeQuery,\n };\n}\n","export const cssProps: Set<string> = new Set([\n \"accentcolor\",\n \"additivesymbols\",\n \"aligncontent\",\n \"alignitems\",\n \"alignself\",\n \"alignmentbaseline\",\n \"all\",\n \"anchorname\",\n \"anchorscope\",\n \"animation\",\n \"animationcomposition\",\n \"animationdelay\",\n \"animationdirection\",\n \"animationduration\",\n \"animationfillmode\",\n \"animationiterationcount\",\n \"animationname\",\n \"animationplaystate\",\n \"animationrange\",\n \"animationrangeend\",\n \"animationrangestart\",\n \"animationtimeline\",\n \"animationtimingfunction\",\n \"appregion\",\n \"appearance\",\n \"ascentoverride\",\n \"aspectratio\",\n \"backdropfilter\",\n \"backfacevisibility\",\n \"background\",\n \"backgroundattachment\",\n \"backgroundblendmode\",\n \"backgroundclip\",\n \"backgroundcolor\",\n \"backgroundimage\",\n \"backgroundorigin\",\n \"backgroundposition\",\n \"backgroundpositionx\",\n \"backgroundpositiony\",\n \"backgroundrepeat\",\n \"backgroundsize\",\n \"basepalette\",\n \"baselineshift\",\n \"baselinesource\",\n \"blocksize\",\n \"border\",\n \"borderblock\",\n \"borderblockcolor\",\n \"borderblockend\",\n \"borderblockendcolor\",\n \"borderblockendstyle\",\n \"borderblockendwidth\",\n \"borderblockstart\",\n \"borderblockstartcolor\",\n \"borderblockstartstyle\",\n \"borderblockstartwidth\",\n \"borderblockstyle\",\n \"borderblockwidth\",\n \"borderbottom\",\n \"borderbottomcolor\",\n \"borderbottomleftradius\",\n \"borderbottomrightradius\",\n \"borderbottomstyle\",\n \"borderbottomwidth\",\n \"bordercollapse\",\n \"bordercolor\",\n \"borderendendradius\",\n \"borderendstartradius\",\n \"borderimage\",\n \"borderimageoutset\",\n \"borderimagerepeat\",\n \"borderimageslice\",\n \"borderimagesource\",\n \"borderimagewidth\",\n \"borderinline\",\n \"borderinlinecolor\",\n \"borderinlineend\",\n \"borderinlineendcolor\",\n \"borderinlineendstyle\",\n \"borderinlineendwidth\",\n \"borderinlinestart\",\n \"borderinlinestartcolor\",\n \"borderinlinestartstyle\",\n \"borderinlinestartwidth\",\n \"borderinlinestyle\",\n \"borderinlinewidth\",\n \"borderleft\",\n \"borderleftcolor\",\n \"borderleftstyle\",\n \"borderleftwidth\",\n \"borderradius\",\n \"borderright\",\n \"borderrightcolor\",\n \"borderrightstyle\",\n \"borderrightwidth\",\n \"borderspacing\",\n \"borderstartendradius\",\n \"borderstartstartradius\",\n \"borderstyle\",\n \"bordertop\",\n \"bordertopcolor\",\n \"bordertopleftradius\",\n \"bordertoprightradius\",\n \"bordertopstyle\",\n \"bordertopwidth\",\n \"borderwidth\",\n \"bottom\",\n \"boxdecorationbreak\",\n \"boxshadow\",\n \"boxsizing\",\n \"breakafter\",\n \"breakbefore\",\n \"breakinside\",\n \"bufferedrendering\",\n \"captionside\",\n \"caretcolor\",\n \"clear\",\n \"clip\",\n \"clippath\",\n \"cliprule\",\n \"color\",\n \"colorinterpolation\",\n \"colorinterpolationfilters\",\n \"colorrendering\",\n \"colorscheme\",\n \"columncount\",\n \"columnfill\",\n \"columngap\",\n \"columnrule\",\n \"columnrulecolor\",\n \"columnrulestyle\",\n \"columnrulewidth\",\n \"columnspan\",\n \"columnwidth\",\n \"columns\",\n \"contain\",\n \"containintrinsicblocksize\",\n \"containintrinsicheight\",\n \"containintrinsicinlinesize\",\n \"containintrinsicsize\",\n \"containintrinsicwidth\",\n \"container\",\n \"containername\",\n \"containertype\",\n \"content\",\n \"contentvisibility\",\n \"counterincrement\",\n \"counterreset\",\n \"counterset\",\n \"cursor\",\n \"cx\",\n \"cy\",\n \"d\",\n \"descentoverride\",\n \"direction\",\n \"display\",\n \"dominantbaseline\",\n \"emptycells\",\n \"fallback\",\n \"fieldsizing\",\n \"fill\",\n \"fillopacity\",\n \"fillrule\",\n \"filter\",\n \"flex\",\n \"flexbasis\",\n \"flexdirection\",\n \"flexflow\",\n \"flexgrow\",\n \"flexshrink\",\n \"flexwrap\",\n \"float\",\n \"floodcolor\",\n \"floodopacity\",\n \"font\",\n \"fontdisplay\",\n \"fontfamily\",\n \"fontfeaturesettings\",\n \"fontkerning\",\n \"fontopticalsizing\",\n \"fontpalette\",\n \"fontsize\",\n \"fontsizeadjust\",\n \"fontstretch\",\n \"fontstyle\",\n \"fontsynthesis\",\n \"fontsynthesissmallcaps\",\n \"fontsynthesisstyle\",\n \"fontsynthesisweight\",\n \"fontvariant\",\n \"fontvariantalternates\",\n \"fontvariantcaps\",\n \"fontvarianteastasian\",\n \"fontvariantemoji\",\n \"fontvariantligatures\",\n \"fontvariantnumeric\",\n \"fontvariantposition\",\n \"fontvariationsettings\",\n \"fontweight\",\n \"forcedcoloradjust\",\n \"gap\",\n \"grid\",\n \"gridarea\",\n \"gridautocolumns\",\n \"gridautoflow\",\n \"gridautorows\",\n \"gridcolumn\",\n \"gridcolumnend\",\n \"gridcolumngap\",\n \"gridcolumnstart\",\n \"gridgap\",\n \"gridrow\",\n \"gridrowend\",\n \"gridrowgap\",\n \"gridrowstart\",\n \"gridtemplate\",\n \"gridtemplateareas\",\n \"gridtemplatecolumns\",\n \"gridtemplaterows\",\n \"height\",\n \"hyphenatecharacter\",\n \"hyphenatelimitchars\",\n \"hyphens\",\n \"imageorientation\",\n \"imagerendering\",\n \"inherits\",\n \"initialletter\",\n \"initialvalue\",\n \"inlinesize\",\n \"inset\",\n \"insetblock\",\n \"insetblockend\",\n \"insetblockstart\",\n \"insetinline\",\n \"insetinlineend\",\n \"insetinlinestart\",\n \"interpolatesize\",\n \"isolation\",\n \"justifycontent\",\n \"justifyitems\",\n \"justifyself\",\n \"left\",\n \"letterspacing\",\n \"lightingcolor\",\n \"linebreak\",\n \"linegapoverride\",\n \"lineheight\",\n \"liststyle\",\n \"liststyleimage\",\n \"liststyleposition\",\n \"liststyletype\",\n \"margin\",\n \"marginblock\",\n \"marginblockend\",\n \"marginblockstart\",\n \"marginbottom\",\n \"margininline\",\n \"margininlineend\",\n \"margininlinestart\",\n \"marginleft\",\n \"marginright\",\n \"margintop\",\n \"marker\",\n \"markerend\",\n \"markermid\",\n \"markerstart\",\n \"mask\",\n \"maskclip\",\n \"maskcomposite\",\n \"maskimage\",\n \"maskmode\",\n \"maskorigin\",\n \"maskposition\",\n \"maskrepeat\",\n \"masksize\",\n \"masktype\",\n \"mathdepth\",\n \"mathshift\",\n \"mathstyle\",\n \"maxblocksize\",\n \"maxheight\",\n \"maxinlinesize\",\n \"maxwidth\",\n \"minblocksize\",\n \"minheight\",\n \"mininlinesize\",\n \"minwidth\",\n \"mixblendmode\",\n \"navigation\",\n \"negative\",\n \"objectfit\",\n \"objectposition\",\n \"objectviewbox\",\n \"offset\",\n \"offsetanchor\",\n \"offsetdistance\",\n \"offsetpath\",\n \"offsetposition\",\n \"offsetrotate\",\n \"opacity\",\n \"order\",\n \"orphans\",\n \"outline\",\n \"outlinecolor\",\n \"outlineoffset\",\n \"outlinestyle\",\n \"outlinewidth\",\n \"overflow\",\n \"overflowanchor\",\n \"overflowclipmargin\",\n \"overflowwrap\",\n \"overflowx\",\n \"overflowy\",\n \"overlay\",\n \"overridecolors\",\n \"overscrollbehavior\",\n \"overscrollbehaviorblock\",\n \"overscrollbehaviorinline\",\n \"overscrollbehaviorx\",\n \"overscrollbehaviory\",\n \"pad\",\n \"padding\",\n \"paddingblock\",\n \"paddingblockend\",\n \"paddingblockstart\",\n \"paddingbottom\",\n \"paddinginline\",\n \"paddinginlineend\",\n \"paddinginlinestart\",\n \"paddingleft\",\n \"paddingright\",\n \"paddingtop\",\n \"page\",\n \"pagebreakafter\",\n \"pagebreakbefore\",\n \"pagebreakinside\",\n \"pageorientation\",\n \"paintorder\",\n \"perspective\",\n \"perspectiveorigin\",\n \"placecontent\",\n \"placeitems\",\n \"placeself\",\n \"pointerevents\",\n \"position\",\n \"positionanchor\",\n \"positionarea\",\n \"positiontry\",\n \"positiontryfallbacks\",\n \"positiontryorder\",\n \"positionvisibility\",\n \"quotes\",\n \"r\",\n \"range\",\n \"resize\",\n \"right\",\n \"rotate\",\n \"rowgap\",\n \"rubyalign\",\n \"rubyposition\",\n \"rx\",\n \"ry\",\n \"scale\",\n \"scrollbehavior\",\n \"scrollinitialtarget\",\n \"scrollmargin\",\n \"scrollmarginblock\",\n \"scrollmarginblockend\",\n \"scrollmarginblockstart\",\n \"scrollmarginbottom\",\n \"scrollmargininline\",\n \"scrollmargininlineend\",\n \"scrollmargininlinestart\",\n \"scrollmarginleft\",\n \"scrollmarginright\",\n \"scrollmargintop\",\n \"scrollpadding\",\n \"scrollpaddingblock\",\n \"scrollpaddingblockend\",\n \"scrollpaddingblockstart\",\n \"scrollpaddingbottom\",\n \"scrollpaddinginline\",\n \"scrollpaddinginlineend\",\n \"scrollpaddinginlinestart\",\n \"scrollpaddingleft\",\n \"scrollpaddingright\",\n \"scrollpaddingtop\",\n \"scrollsnapalign\",\n \"scrollsnapstop\",\n \"scrollsnaptype\",\n \"scrolltimeline\",\n \"scrolltimelineaxis\",\n \"scrolltimelinename\",\n \"scrollbarcolor\",\n \"scrollbargutter\",\n \"scrollbarwidth\",\n \"shapeimagethreshold\",\n \"shapemargin\",\n \"shapeoutside\",\n \"shaperendering\",\n \"sizeadjust\",\n \"speak\",\n \"speakas\",\n \"src\",\n \"stopcolor\",\n \"stopopacity\",\n \"stroke\",\n \"strokedasharray\",\n \"strokedashoffset\",\n \"strokelinecap\",\n \"strokelinejoin\",\n \"strokemiterlimit\",\n \"strokeopacity\",\n \"strokewidth\",\n \"suffix\",\n \"symbols\",\n \"syntax\",\n \"system\",\n \"tabsize\",\n \"tablelayout\",\n \"textalign\",\n \"textalignlast\",\n \"textanchor\",\n \"textbox\",\n \"textboxedge\",\n \"textboxtrim\",\n \"textcombineupright\",\n \"textdecoration\",\n \"textdecorationcolor\",\n \"textdecorationline\",\n \"textdecorationskipink\",\n \"textdecorationstyle\",\n \"textdecorationthickness\",\n \"textemphasis\",\n \"textemphasiscolor\",\n \"textemphasisposition\",\n \"textemphasisstyle\",\n \"textindent\",\n \"textorientation\",\n \"textoverflow\",\n \"textrendering\",\n \"textshadow\",\n \"textsizeadjust\",\n \"textspacingtrim\",\n \"texttransform\",\n \"textunderlineoffset\",\n \"textunderlineposition\",\n \"textwrap\",\n \"textwrapmode\",\n \"textwrapstyle\",\n \"timelinescope\",\n \"top\",\n \"touchaction\",\n \"transform\",\n \"transformbox\",\n \"transformorigin\",\n \"transformstyle\",\n \"transition\",\n \"transitionbehavior\",\n \"transitiondelay\",\n \"transitionduration\",\n \"transitionproperty\",\n \"transitiontimingfunction\",\n \"translate\",\n \"types\",\n \"unicodebidi\",\n \"unicoderange\",\n \"userselect\",\n \"vectoreffect\",\n \"verticalalign\",\n \"viewtimeline\",\n \"viewtimelineaxis\",\n \"viewtimelineinset\",\n \"viewtimelinename\",\n \"viewtransitionclass\",\n \"viewtransitionname\",\n \"visibility\",\n \"webkitaligncontent\",\n \"webkitalignitems\",\n \"webkitalignself\",\n \"webkitanimation\",\n \"webkitanimationdelay\",\n \"webkitanimationdirection\",\n \"webkitanimationduration\",\n \"webkitanimationfillmode\",\n \"webkitanimationiterationcount\",\n \"webkitanimationname\",\n \"webkitanimationplaystate\",\n \"webkitanimationtimingfunction\",\n \"webkitappregion\",\n \"webkitappearance\",\n \"webkitbackfacevisibility\",\n \"webkitbackgroundclip\",\n \"webkitbackgroundorigin\",\n \"webkitbackgroundsize\",\n \"webkitborderafter\",\n \"webkitborderaftercolor\",\n \"webkitborderafterstyle\",\n \"webkitborderafterwidth\",\n \"webkitborderbefore\",\n \"webkitborderbeforecolor\",\n \"webkitborderbeforestyle\",\n \"webkitborderbeforewidth\",\n \"webkitborderbottomleftradius\",\n \"webkitborderbottomrightradius\",\n \"webkitborderend\",\n \"webkitborderendcolor\",\n \"webkitborderendstyle\",\n \"webkitborderendwidth\",\n \"webkitborderhorizontalspacing\",\n \"webkitborderimage\",\n \"webkitborderradius\",\n \"webkitborderstart\",\n \"webkitborderstartcolor\",\n \"webkitborderstartstyle\",\n \"webkitborderstartwidth\",\n \"webkitbordertopleftradius\",\n \"webkitbordertoprightradius\",\n \"webkitborderverticalspacing\",\n \"webkitboxalign\",\n \"webkitboxdecorationbreak\",\n \"webkitboxdirection\",\n \"webkitboxflex\",\n \"webkitboxordinalgroup\",\n \"webkitboxorient\",\n \"webkitboxpack\",\n \"webkitboxreflect\",\n \"webkitboxshadow\",\n \"webkitboxsizing\",\n \"webkitclippath\",\n \"webkitcolumnbreakafter\",\n \"webkitcolumnbreakbefore\",\n \"webkitcolumnbreakinside\",\n \"webkitcolumncount\",\n \"webkitcolumngap\",\n \"webkitcolumnrule\",\n \"webkitcolumnrulecolor\",\n \"webkitcolumnrulestyle\",\n \"webkitcolumnrulewidth\",\n \"webkitcolumnspan\",\n \"webkitcolumnwidth\",\n \"webkitcolumns\",\n \"webkitfilter\",\n \"webkitflex\",\n \"webkitflexbasis\",\n \"webkitflexdirection\",\n \"webkitflexflow\",\n \"webkitflexgrow\",\n \"webkitflexshrink\",\n \"webkitflexwrap\",\n \"webkitfontfeaturesettings\",\n \"webkitfontsmoothing\",\n \"webkithyphenatecharacter\",\n \"webkitjustifycontent\",\n \"webkitlinebreak\",\n \"webkitlineclamp\",\n \"webkitlocale\",\n \"webkitlogicalheight\",\n \"webkitlogicalwidth\",\n \"webkitmarginafter\",\n \"webkitmarginbefore\",\n \"webkitmarginend\",\n \"webkitmarginstart\",\n \"webkitmask\",\n \"webkitmaskboximage\",\n \"webkitmaskboximageoutset\",\n \"webkitmaskboximagerepeat\",\n \"webkitmaskboximageslice\",\n \"webkitmaskboximagesource\",\n \"webkitmaskboximagewidth\",\n \"webkitmaskclip\",\n \"webkitmaskcomposite\",\n \"webkitmaskimage\",\n \"webkitmaskorigin\",\n \"webkitmaskposition\",\n \"webkitmaskpositionx\",\n \"webkitmaskpositiony\",\n \"webkitmaskrepeat\",\n \"webkitmasksize\",\n \"webkitmaxlogicalheight\",\n \"webkitmaxlogicalwidth\",\n \"webkitminlogicalheight\",\n \"webkitminlogicalwidth\",\n \"webkitopacity\",\n \"webkitorder\",\n \"webkitpaddingafter\",\n \"webkitpaddingbefore\",\n \"webkitpaddingend\",\n \"webkitpaddingstart\",\n \"webkitperspective\",\n \"webkitperspectiveorigin\",\n \"webkitperspectiveoriginx\",\n \"webkitperspectiveoriginy\",\n \"webkitprintcoloradjust\",\n \"webkitrtlordering\",\n \"webkitrubyposition\",\n \"webkitshapeimagethreshold\",\n \"webkitshapemargin\",\n \"webkitshapeoutside\",\n \"webkittaphighlightcolor\",\n \"webkittextcombine\",\n \"webkittextdecorationsineffect\",\n \"webkittextemphasis\",\n \"webkittextemphasiscolor\",\n \"webkittextemphasisposition\",\n \"webkittextemphasisstyle\",\n \"webkittextfillcolor\",\n \"webkittextorientation\",\n \"webkittextsecurity\",\n \"webkittextsizeadjust\",\n \"webkittextstroke\",\n \"webkittextstrokecolor\",\n \"webkittextstrokewidth\",\n \"webkittransform\",\n \"webkittransformorigin\",\n \"webkittransformoriginx\",\n \"webkittransformoriginy\",\n \"webkittransformoriginz\",\n \"webkittransformstyle\",\n \"webkittransition\",\n \"webkittransitiondelay\",\n \"webkittransitionduration\",\n \"webkittransitionproperty\",\n \"webkittransitiontimingfunction\",\n \"webkituserdrag\",\n \"webkitusermodify\",\n \"webkituserselect\",\n \"webkitwritingmode\",\n \"whitespace\",\n \"whitespacecollapse\",\n \"widows\",\n \"width\",\n \"willchange\",\n \"wordbreak\",\n \"wordspacing\",\n \"wordwrap\",\n \"writingmode\",\n \"zindex\",\n \"zoom\",\n]);\n\nexport const cssPropsToExclude: Set<string> = new Set([\n \"position\",\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"width\",\n \"height\",\n \"minwidth\",\n \"minheight\",\n \"maxwidth\",\n \"maxheight\",\n \"margin\",\n \"margintop\",\n \"marginbottom\",\n \"marginleft\",\n \"marginright\",\n \"marginblock\",\n \"margininline\",\n \"marginblockstart\",\n \"marginblockend\",\n \"margininlinestart\",\n \"margininlineend\",\n \"margintrim\",\n \"zindex\",\n]);\n","import { forwardRef, memo } from \"react\";\nimport { useTheme } from \"react-better-core\";\n\nimport { ComponentMarginProps, ComponentPropWithRef } from \"../types/components\";\n\nimport Div from \"./Div\";\nimport Text from \"./Text\";\n\ntype DividerProps = {\n /** @default 1 */\n width?: number;\n /** @default border */\n backgroundColor?: string;\n} & ComponentMarginProps;\n\nexport type VerticalDividerProps = DividerProps & {\n /** @default \"100%\" */\n height?: number;\n};\n\nexport type HorizontalDividerProps = DividerProps & {\n text?: string;\n textFontSize?: React.CSSProperties[\"fontSize\"];\n /** @default textSecondary */\n textColor?: React.CSSProperties[\"color\"];\n};\n\ntype DividerComponentType = {\n vertical: (props: ComponentPropWithRef<HTMLDivElement, VerticalDividerProps>) => React.ReactElement;\n horizontal: (props: ComponentPropWithRef<HTMLDivElement, HorizontalDividerProps>) => React.ReactElement;\n};\n\nexport default {\n vertical: memo(\n forwardRef(function Divider(\n { width = 1, backgroundColor, height, ...props }: VerticalDividerProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n ) {\n const theme = useTheme();\n\n return (\n <Div\n width={width}\n height={height ?? \"100%\"}\n flexShrink={0}\n backgroundColor={backgroundColor ?? theme.colors.border}\n {...props}\n ref={ref}\n />\n );\n }),\n ) as DividerComponentType[\"vertical\"],\n horizontal: memo(\n forwardRef(function Divider(\n { width = 1, backgroundColor, text, textFontSize, textColor, ...props }: HorizontalDividerProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n ) {\n const theme = useTheme();\n\n return (\n <Div.row width=\"100%\" alignItems=\"center\" gap={text ? theme.styles.space : undefined} {...props} ref={ref}>\n <Div flex={1} height={width} flexShrink={0} backgroundColor={backgroundColor ?? theme.colors.border} />\n\n {text && (\n <Text fontSize={textFontSize} color={textColor ?? theme.colors.textSecondary}>\n {text}\n </Text>\n )}\n\n <Div flex={1} height={width} flexShrink={0} backgroundColor={backgroundColor ?? theme.colors.border} />\n </Div.row>\n );\n }),\n ) as DividerComponentType[\"horizontal\"],\n};\n","import { ComponentProps, forwardRef, memo } from \"react\";\nimport { OmitProps, useTheme } from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport { ComponentHoverStyle, ComponentPropWithRef, ComponentStyle } from \"../types/components\";\n\nimport { useComponentPropsGrouper, useComponentPropsWithPrefix } from \"../utils/hooks\";\n\nconst TextStyledComponent = styled.p.withConfig({\n shouldForwardProp: (prop) => ![\"style\", \"hoverStyle\"].includes(prop),\n})<{ style: ComponentStyle; hoverStyle: ComponentStyle }>`\n ${(props) => props.style as any}\n\n &:hover {\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nexport type TextAs = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"span\" | \"label\";\n\nexport type TextProps<As extends TextAs = \"p\"> = {\n /** @default \"p\" */\n as?: As;\n htmlContentTranslate?: React.ComponentProps<\"div\">[\"translate\"];\n} & OmitProps<React.ComponentProps<As>, \"style\"> &\n ComponentStyle &\n ComponentHoverStyle;\n\ntype TextComponentType = {\n <As extends TextAs>(props: ComponentPropWithRef<HTMLParagraphElement, TextProps<As>>): React.ReactElement;\n unknown: <As extends TextAs>(props: ComponentPropWithRef<HTMLParagraphElement, TextProps<As>>) => React.ReactElement;\n oneLine: <As extends TextAs>(props: ComponentPropWithRef<HTMLParagraphElement, TextProps<As>>) => React.ReactElement;\n};\n\nconst TextComponent: TextComponentType = forwardRef(function Text<As extends TextAs>(\n { htmlContentTranslate, children, ...props }: TextProps<As>,\n ref: React.ForwardedRef<HTMLParagraphElement>,\n) {\n const { style, hoverStyle, restProps } = useComponentPropsGrouper(props);\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n return (\n <TextStyledComponent\n as={props.as as any}\n translate={htmlContentTranslate}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n ref={ref}\n >\n {children}\n </TextStyledComponent>\n );\n}) as any;\n\nTextComponent.unknown = forwardRef(function Unknown(\n props: ComponentProps<TextComponentType[\"unknown\"]>,\n ref: React.ForwardedRef<HTMLParagraphElement>,\n) {\n const theme = useTheme();\n\n return (\n <TextComponent fontStyle=\"italic\" textAlign=\"center\" color={theme.colors.textSecondary} ref={ref} {...props} />\n );\n}) as TextComponentType[\"unknown\"];\n\nTextComponent.oneLine = forwardRef(function OneLine(\n props: ComponentProps<TextComponentType[\"oneLine\"]>,\n ref: React.ForwardedRef<HTMLParagraphElement>,\n) {\n return <TextComponent textOverflow=\"ellipsis\" whiteSpace=\"nowrap\" overflow=\"hidden\" ref={ref} {...props} />;\n}) as TextComponentType[\"oneLine\"];\n\nconst Text = memo(TextComponent) as any as typeof TextComponent & {\n unknown: typeof TextComponent.unknown;\n oneLine: typeof TextComponent.oneLine;\n};\n\nText.unknown = TextComponent.unknown;\nText.oneLine = TextComponent.oneLine;\n\nexport default Text;\n","import { forwardRef, memo } from \"react\";\nimport { AnyOtherString, AssetName, IconName, useTheme } from \"react-better-core\";\n\nimport { ComponentMarginProps, ComponentPropWithRef } from \"../types/components\";\n\nimport { useMediaQuery } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport Text, { TextAs } from \"./Text\";\nimport Image from \"./Image\";\nimport Icon from \"./Icon\";\nimport { useBetterHtmlContextInternal } from \"./BetterHtmlProvider\";\n\n//* Used in DIV.box\n\nexport type PageHeaderProps = {\n icon?: IconName | AnyOtherString;\n image?: AssetName | AnyOtherString;\n imageUrl?: string;\n imageSize?: number;\n /** @default false */\n imageAzProfileImage?: boolean;\n title?: string | React.ReactNode;\n /** @default \"h1\" */\n titleAs?: TextAs;\n /** @default textPrimary */\n titleColor?: React.CSSProperties[\"color\"];\n titleRightElement?: React.ReactNode;\n description?: string | React.ReactNode;\n /** @default textSecondary */\n descriptionColor?: React.CSSProperties[\"color\"];\n textAlign?: React.CSSProperties[\"textAlign\"];\n rightElement?: React.ReactNode;\n /** @default false */\n lightMode?: boolean;\n} & Pick<ComponentMarginProps, \"marginBottom\">;\n\ntype PageHeaderComponentType = {\n (props: ComponentPropWithRef<HTMLDivElement, PageHeaderProps>): React.ReactElement;\n};\n\nconst PageHeaderComponent: PageHeaderComponentType = forwardRef(function PageHeader(\n {\n icon,\n image,\n imageUrl,\n imageSize = 60,\n imageAzProfileImage,\n title,\n titleAs = \"h1\",\n titleColor,\n titleRightElement,\n description,\n descriptionColor,\n textAlign,\n rightElement,\n lightMode,\n marginBottom,\n }: PageHeaderProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const theme = useTheme();\n const { app } = useBetterHtmlContextInternal();\n const mediaQuery = useMediaQuery();\n\n const ImageTag = imageAzProfileImage ? Image.profileImage : Image;\n const readyImageSize = imageSize ?? (mediaQuery.size600 ? 46 : 60);\n\n return (\n <Div.row\n alignItems=\"center\"\n gap={theme.styles.space}\n marginBottom={marginBottom ?? theme.styles.space * 2}\n ref={ref}\n >\n {icon && <Icon name={icon} size={20} flexShrink={0} />}\n {(image || imageUrl) && (\n <ImageTag\n name={image}\n src={imageUrl}\n width={readyImageSize}\n height={readyImageSize}\n size={readyImageSize}\n flexShrink={0}\n />\n )}\n\n <Div.column\n alignItems={textAlign === \"center\" ? \"center\" : textAlign === \"right\" ? \"flex-end\" : undefined}\n flex={1}\n gap={theme.styles.gap / 2}\n >\n <Div.row\n alignItems=\"center\"\n justifyContent={textAlign === \"center\" ? \"center\" : textAlign === \"right\" ? \"flex-end\" : undefined}\n gap={theme.styles.space}\n >\n {typeof title === \"string\" ? (\n <Text\n as={titleAs}\n textAlign={textAlign}\n color={titleColor ?? (lightMode ? theme.colors.base : theme.colors.textPrimary)}\n >\n {title}\n </Text>\n ) : (\n title\n )}\n\n {titleRightElement}\n </Div.row>\n\n {description &&\n (typeof description === \"string\" ? (\n <Text\n maxWidth={!mediaQuery.size600 ? app.contentMaxWidth * 0.6 : undefined}\n textAlign={textAlign}\n color={descriptionColor ?? (lightMode ? theme.colors.base : theme.colors.textSecondary)}\n opacity={lightMode ? 0.7 : undefined}\n >\n {description}\n </Text>\n ) : (\n description\n ))}\n </Div.column>\n\n {rightElement}\n </Div.row>\n );\n}) as any;\n\nconst PageHeader = memo(PageHeaderComponent) as any as typeof PageHeaderComponent & {};\n\nexport default PageHeader;\n","import { forwardRef, memo, useEffect } from \"react\";\nimport { AnyOtherString, AssetName, OmitProps, useBetterCoreContext, useTheme } from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport { ComponentHoverStyle, ComponentPropWithRef, ComponentStyle } from \"../types/components\";\n\nimport { useComponentPropsGrouper, useComponentPropsWithPrefix } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport Text from \"./Text\";\n\nconst ImageElement = styled.img.withConfig({\n shouldForwardProp: (prop) => ![\"style\", \"hoverStyle\"].includes(prop),\n})<{ style: ComponentStyle; hoverStyle: ComponentStyle }>`\n display: block;\n user-select: none;\n -webkit-user-drag: none;\n\n ${(props) => props.style as any}\n\n &:hover {\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nexport type ImageProps = {\n name?: AssetName | AnyOtherString;\n} & OmitProps<React.ComponentProps<\"img\">, \"style\"> &\n ComponentStyle &\n ComponentHoverStyle;\n\ntype ImageComponent = {\n (props: ComponentPropWithRef<HTMLImageElement, ImageProps>): React.ReactElement;\n profileImage: (\n props: ComponentPropWithRef<\n HTMLImageElement,\n OmitProps<ImageProps, \"width\" | \"height\"> & {\n /** @default 40 */\n size?: number;\n letters?: string;\n backgroundColor?: string;\n }\n >,\n ) => React.ReactElement;\n};\n\nconst Image: ImageComponent = forwardRef(function Image(\n { name, src, ...props }: ImageProps,\n ref: React.ForwardedRef<HTMLImageElement>,\n) {\n const { assets } = useBetterCoreContext();\n\n const { style, hoverStyle, restProps } = useComponentPropsGrouper(props);\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n useEffect(() => {\n if (!name) return;\n\n if (!assets[name.toString()])\n console.warn(\n `The asset \\`${name}\\` you are trying to use does not exist. Make sure to add it to the \\`assets\\` object in \\`<BetterHtmlProvider>\\` config value prop.`,\n );\n }, [assets, name]);\n\n return (\n <ImageElement\n src={name ? assets[name.toString()] : src}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n ref={ref}\n />\n );\n}) as any;\n\nImage.profileImage = forwardRef(function ProfileImage({ size = 40, letters, backgroundColor, ...props }, ref) {\n const theme = useTheme();\n\n return letters ? (\n <Div.row\n backgroundColor={backgroundColor ?? theme.colors.backgroundSecondary}\n border={`solid 1px ${theme.colors.border}`}\n borderRadius={999}\n alignItems=\"center\"\n justifyContent=\"center\"\n ref={ref}\n {...props}\n width={size}\n height={size}\n >\n <Text fontSize={size / 2.5} fontWeight={700}>\n {letters.toUpperCase().slice(0, 2)}\n </Text>\n </Div.row>\n ) : (\n <Image\n width={size}\n height={size}\n border={`solid 1px ${theme.colors.border}`}\n borderRadius={999}\n objectFit=\"cover\"\n ref={ref}\n {...props}\n />\n );\n}) as ImageComponent[\"profileImage\"];\n\nconst MemoizedImage = memo(Image) as any as typeof Image & {\n profileImage: typeof Image.profileImage;\n};\n\nMemoizedImage.profileImage = Image.profileImage;\n\nexport default { Image: MemoizedImage }.Image;\n","import { forwardRef, memo, useEffect } from \"react\";\nimport { AnyOtherString, IconName, OmitProps, Theme, useBetterCoreContext, useTheme } from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport { ComponentHoverStyle, ComponentPropWithRef, ComponentStyle } from \"../types/components\";\n\nimport { useComponentPropsGrouper, useComponentPropsWithPrefix } from \"../utils/hooks\";\n\nexport type IconProps = {\n name: IconName | AnyOtherString;\n /** @default 16 */\n size?: number;\n} & OmitProps<React.ComponentProps<\"svg\">, \"style\" | \"width\" | \"height\" | \"viewBox\" | \"fill\" | \"xmlns\" | \"name\"> &\n ComponentStyle &\n ComponentHoverStyle;\n\ntype IconComponent = {\n (props: ComponentPropWithRef<SVGSVGElement, IconProps>): React.ReactElement;\n};\n\nconst IconElement = styled.svg.withConfig({\n shouldForwardProp: (prop) => ![\"theme\", \"style\", \"hoverStyle\", \"hoverColor\"].includes(prop),\n})<{ theme: Theme; style: ComponentStyle; hoverStyle: ComponentStyle; hoverColor?: string }>`\n ${(props) => props.style as any}\n\n path {\n ${(props) => (props.hoverColor ? `transition: ${props.theme.styles.transition};` : \"\")}\n }\n\n &:hover {\n path.react-better-html-icon-path-with-fill {\n fill: ${(props) => props.hoverColor};\n }\n\n path.react-better-html-icon-path-with-stroke {\n stroke: ${(props) => props.hoverColor};\n }\n }\n\n &:hover {\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nconst Icon: IconComponent = forwardRef(function Icon(\n { name, size = 16, ...props }: IconProps,\n ref: React.ForwardedRef<SVGSVGElement>,\n) {\n const theme = useTheme();\n const { icons } = useBetterCoreContext();\n\n const { style, hoverStyle, restProps } = useComponentPropsGrouper(props);\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n const svgColor = props.color ?? theme.colors.textPrimary;\n const svgHoverColorColor = props.colorHover;\n\n useEffect(() => {\n if (!icons[name.toString()])\n console.warn(\n `The icon \\`${name}\\` you are trying to use does not exist. Make sure to add it to the \\`icons\\` object in \\`<BetterHtmlProvider>\\` config value prop.`,\n );\n }, [icons, name]);\n\n return (\n <IconElement\n width={size}\n height={size}\n viewBox={`0 0 ${icons[name.toString()]?.width ?? 0} ${icons[name.toString()]?.height ?? 0}`}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n theme={theme}\n hoverColor={svgHoverColorColor}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n ref={ref}\n >\n {icons[name.toString()]?.paths.map((path) => (\n <path\n {...path}\n className={\n path.type === \"fill\"\n ? \"react-better-html-icon-path-with-fill\"\n : \"react-better-html-icon-path-with-stroke\"\n }\n fill={path.type === \"fill\" ? svgColor : undefined}\n stroke={path.type === \"stroke\" ? svgColor : undefined}\n key={path.d}\n />\n ))}\n </IconElement>\n );\n}) as any;\n\nconst MemoizedIcon = memo(Icon) as any as typeof Icon & {};\n\nexport default { Icon: MemoizedIcon }.Icon;\n","import { memo, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { ThemeConfig, useTheme } from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport { defaultAlertDuration } from \"../../constants/app\";\n\nimport { AlertDisplay, AlertDuration, Alert as AlertT, AlertType } from \"../../types/alert\";\n\nimport { AlertsPluginOptions, defaultAlertsPluginOptions } from \"../../plugins\";\n\nimport Div from \"../Div\";\nimport Icon from \"../Icon\";\nimport Text from \"../Text\";\nimport Button from \"../Button\";\nimport Modal, { ModalRef } from \"../Modal\";\nimport { useAlertControls, usePlugin } from \"../BetterHtmlProvider\";\n\nconst StyledDiv = styled.div.withConfig({\n shouldForwardProp: (prop) => ![\"theme\"].includes(prop),\n})<{ theme: ThemeConfig }>`\n @keyframes fadeInFromLeft {\n from {\n opacity: 0;\n transform: translateX(-${(props) => props.theme.styles.space}px);\n }\n to {\n opacity: 1;\n transform: translateX(0px);\n }\n }\n\n @keyframes fadeInFromRight {\n from {\n opacity: 0;\n transform: translateX(${(props) => props.theme.styles.space}px);\n }\n to {\n opacity: 1;\n transform: translateX(0px);\n }\n }\n\n @keyframes fadeInFromTop {\n from {\n opacity: 0;\n transform: translateY(-${(props) => props.theme.styles.space}px);\n }\n to {\n opacity: 1;\n transform: translateX(0px);\n }\n }\n\n @keyframes fadeInFromBottom {\n from {\n opacity: 0;\n transform: translateY(${(props) => props.theme.styles.space}px);\n }\n to {\n opacity: 1;\n transform: translateY(0px);\n }\n }\n\n @keyframes fadeOutToLeft {\n from {\n opacity: 1;\n transform: translateX(0px);\n }\n to {\n opacity: 0;\n transform: translateX(-${(props) => props.theme.styles.space}px);\n }\n }\n\n @keyframes fadeOutToRight {\n from {\n opacity: 1;\n transform: translateX(0px);\n }\n to {\n opacity: 0;\n transform: translateX(${(props) => props.theme.styles.space}px);\n }\n }\n\n @keyframes fadeOutToTop {\n from {\n opacity: 1;\n transform: translateY(0px);\n }\n to {\n opacity: 0;\n transform: translateY(-${(props) => props.theme.styles.space}px);\n }\n }\n\n @keyframes fadeOutToBottom {\n from {\n opacity: 1;\n transform: translateY(0px);\n }\n to {\n opacity: 0;\n transform: translateY(${(props) => props.theme.styles.space}px);\n }\n }\n`;\n\nconst minWidth = 250;\nconst updateInterval = 20;\n\nconst getAnimationInName = (\n position: AlertsPluginOptions[\"position\"],\n): Record<NonNullable<AlertsPluginOptions[\"align\"]>, string> => ({\n left: \"fadeInFromLeft\",\n right: \"fadeInFromRight\",\n center: position === \"top\" ? \"fadeInFromTop\" : \"fadeInFromBottom\",\n});\n\nconst getAnimationOutName = (\n position: AlertsPluginOptions[\"position\"],\n): Record<NonNullable<AlertsPluginOptions[\"align\"]>, string> => ({\n left: \"fadeOutToLeft\",\n right: \"fadeOutToRight\",\n center: position === \"top\" ? \"fadeOutToTop\" : \"fadeOutToBottom\",\n});\n\nconst getAlertDurationFromAuto = (duration: AlertDuration, alert: AlertT): number => {\n if (duration === \"auto\") {\n const titleLength: number = alert.title?.length ?? 0;\n const messageLength: number = alert.message?.length ?? 0;\n\n return Math.max(defaultAlertDuration, (titleLength + messageLength) * 30);\n }\n\n return duration;\n};\n\ntype AlertData = {\n icon: string;\n iconColor?: string;\n backgroundColor: string;\n title: string;\n};\n\ntype AlertProps = {\n alert: AlertT;\n};\n\nfunction Alert({ alert }: AlertProps) {\n const theme = useTheme();\n const alertControls = useAlertControls();\n const alertsPlugin = usePlugin<AlertsPluginOptions>(\"alerts\");\n\n const pluginConfig = alertsPlugin?.getConfig() ?? {};\n\n const modalRef = useRef<ModalRef>(null);\n\n const defaultAlertDurationNumber: number = getAlertDurationFromAuto(\n alert.duration ?? pluginConfig.defaultDuration ?? defaultAlertsPluginOptions.defaultDuration,\n alert,\n );\n const defaultAlertDisplay: AlertDisplay =\n alert.display ??\n pluginConfig.defaultDisplay?.[alert.type] ??\n defaultAlertsPluginOptions.defaultDisplay[alert.type] ??\n \"default\";\n\n const intervalRef = useRef<number>(undefined);\n const startTimeRef = useRef<number>(Date.now());\n const remainingTimeRef = useRef<number>(defaultAlertDurationNumber);\n const calledOnCloseRef = useRef<boolean>(false);\n\n const [isPaused, setIsPaused] = useState<boolean>(false);\n const [progress, setProgress] = useState<number>(100);\n const [isRemoved, setIsRemoved] = useState<boolean>(false);\n\n const startProgressTimer = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n }\n\n const totalDuration = remainingTimeRef.current;\n\n const segmentStartTime = Date.now();\n\n intervalRef.current = setInterval(() => {\n const elapsedTime = Date.now() - segmentStartTime;\n const newProgress = Math.max(0, progress - (elapsedTime / totalDuration) * 100);\n\n setProgress(newProgress);\n\n if (newProgress <= 0) {\n if (intervalRef.current) clearInterval(intervalRef.current);\n\n if (defaultAlertDisplay === \"prominent\") return;\n\n setIsRemoved(true);\n\n setTimeout(() => {\n alertControls.removeAlert(alert.id);\n\n if (!calledOnCloseRef.current) {\n alert.onClose?.(alert);\n calledOnCloseRef.current = true;\n }\n }, 0.2 * 1000 - 10);\n }\n }, updateInterval);\n }, [alert, progress, defaultAlertDisplay]);\n const onClickCloseAlert = useCallback(() => {\n setIsRemoved(true);\n\n setTimeout(() => {\n alertControls.removeAlert(alert.id);\n\n if (!calledOnCloseRef.current) {\n alert.onClose?.(alert);\n calledOnCloseRef.current = true;\n }\n }, 0.2 * 1000 - 10);\n }, [alert]);\n const onMouseEnter = useCallback(() => {\n setIsPaused(true);\n\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = undefined;\n }\n\n remainingTimeRef.current = defaultAlertDurationNumber * (progress / 100);\n }, [defaultAlertDurationNumber, progress]);\n const onMouseLeave = useCallback(() => {\n setIsPaused(false);\n startProgressTimer();\n }, [startProgressTimer]);\n const onClickAlertModalDone = useCallback(() => {\n setIsRemoved(true);\n modalRef.current?.close();\n\n setTimeout(() => {\n alertControls.removeAlert(alert.id);\n\n if (!calledOnCloseRef.current) {\n alert.onClose?.(alert);\n calledOnCloseRef.current = true;\n }\n }, 0.2 * 1000 - 10);\n }, [alert]);\n\n const alertData = useMemo<Record<AlertType, AlertData>>(\n () => ({\n info: {\n icon: \"infoI\",\n backgroundColor: theme.colors.info,\n title: \"Info\",\n },\n success: {\n icon: \"check\",\n backgroundColor: theme.colors.success,\n title: \"Success\",\n },\n warning: {\n icon: \"warningTriangle\",\n backgroundColor: theme.colors.warn,\n title: \"Warning\",\n },\n error: {\n icon: \"XMark\",\n backgroundColor: theme.colors.error,\n title: \"Error\",\n },\n }),\n [theme],\n );\n\n useEffect(() => {\n startTimeRef.current = Date.now();\n remainingTimeRef.current = defaultAlertDurationNumber;\n startProgressTimer();\n\n return () => {\n if (intervalRef.current) clearInterval(intervalRef.current);\n };\n }, [defaultAlertDurationNumber, startProgressTimer]);\n\n const animation = `${\n isRemoved\n ? getAnimationOutName(pluginConfig.position ?? defaultAlertsPluginOptions.position)[\n pluginConfig.align ?? defaultAlertsPluginOptions.align\n ]\n : getAnimationInName(pluginConfig.position ?? defaultAlertsPluginOptions.position)[\n pluginConfig.align ?? defaultAlertsPluginOptions.align\n ]\n } ${theme.styles.transition}`;\n\n const alertTitle = alert.title ?? alertData[alert.type].title;\n\n return defaultAlertDisplay === \"prominent\" ? (\n <Modal\n defaultIsOpened\n icon={alertData[alert.type].icon}\n title={alertTitle}\n description={alert.message}\n titleColor={theme.colors.base}\n descriptionColor={theme.colors.base + \"a0\"}\n headerTextAlign=\"center\"\n headerBackgroundColor={alertData[alert.type].backgroundColor}\n withoutCloseButton\n ref={modalRef}\n >\n <Div.row width=\"100%\" alignItems=\"center\" justifyContent=\"center\">\n <Button\n text=\"Close\"\n backgroundColor={alertData[alert.type].backgroundColor}\n onClick={onClickAlertModalDone}\n />\n </Div.row>\n </Modal>\n ) : (\n <StyledDiv theme={theme}>\n <Div.box\n width=\"fit-content\"\n maxWidth={Math.max(minWidth, pluginConfig.maxWidth ?? defaultAlertsPluginOptions.maxWidth)}\n minWidth={minWidth}\n boxShadow=\"0px 10px 20px #00000020\"\n onMouseEnter={onMouseEnter}\n onMouseMove={onMouseEnter}\n onMouseLeave={onMouseLeave}\n animation={animation}\n >\n <Div.column gap={theme.styles.space}>\n <Div.row alignItems=\"center\" gap={theme.styles.gap}>\n <Div.row\n width={36}\n height={36}\n alignItems=\"center\"\n justifyContent=\"center\"\n backgroundColor={alertData[alert.type].backgroundColor}\n borderRadius={999}\n marginTop={theme.styles.gap / 2}\n >\n <Icon\n name={alertData[alert.type].icon}\n size={18}\n color={alertData[alert.type].iconColor ?? theme.colors.base}\n />\n </Div.row>\n\n <Div.column flex={1} gap={theme.styles.gap / 2}>\n <Text fontSize={18} fontWeight={700}>\n {alertTitle}\n </Text>\n\n <Text color={theme.colors.textSecondary}>{alert.message}</Text>\n </Div.column>\n\n {pluginConfig.withCloseButton && (\n <Button.icon icon=\"XMark\" alignSelf=\"flex-start\" onClick={onClickCloseAlert} />\n )}\n </Div.row>\n\n {pluginConfig.withLoaderBar && (\n <Div\n width=\"100%\"\n height={5}\n backgroundColor={theme.colors.backgroundBase}\n borderRadius={999}\n overflow=\"hidden\"\n >\n <Div\n width={`${progress}%`}\n height=\"100%\"\n backgroundColor={alertData[alert.type].backgroundColor}\n borderRadius={999}\n transition={isPaused ? \"none\" : \"width 0.02s linear\"}\n />\n </Div>\n )}\n </Div.column>\n </Div.box>\n </StyledDiv>\n );\n}\n\nexport default memo(Alert);\n","import { PartialRecord } from \"react-better-core\";\n\nimport { AlertDisplay, AlertDuration, AlertType } from \"../types/alert\";\nimport { BetterHtmlPluginConstructor } from \"../types/plugin\";\n\nexport type AlertsPluginOptions = {\n /** @default \"bottom\" */\n position?: \"top\" | \"bottom\";\n /** @default \"right\" */\n align?: \"left\" | \"center\" | \"right\";\n /** @default \"auto\" */\n defaultDuration?: AlertDuration;\n defaultDisplay?: PartialRecord<AlertType, AlertDisplay>;\n /** @default 460 */\n maxWidth?: number;\n /** @default true */\n withLoaderBar?: boolean;\n /** @default true */\n withCloseButton?: boolean;\n};\n\nexport const defaultAlertsPluginOptions: Required<AlertsPluginOptions> = {\n position: \"bottom\",\n align: \"right\",\n defaultDuration: \"auto\",\n defaultDisplay: {},\n maxWidth: 460,\n withLoaderBar: true,\n withCloseButton: true,\n};\n\nexport const alertsPlugin: BetterHtmlPluginConstructor<AlertsPluginOptions> = (options) => ({\n name: \"alerts\",\n initialize: () => {\n console.log(\"alerts plugin initialized\");\n },\n getConfig: () => ({\n ...defaultAlertsPluginOptions,\n ...options,\n }),\n});\n","import { createSearchParams, useInRouterContext, useLocation, useNavigate, useSearchParams } from \"react-router-dom\";\n\nimport { BetterHtmlPluginConstructor } from \"../types/plugin\";\n\nexport type ReactRouterDomPluginOptions = {\n useNavigate: typeof useNavigate;\n useLocation: typeof useLocation;\n useInRouterContext: typeof useInRouterContext;\n useSearchParams: typeof useSearchParams;\n createSearchParams: typeof createSearchParams;\n};\n\nexport const defaultReactRouterDomPluginOptions: Required<ReactRouterDomPluginOptions> = {\n useNavigate,\n useLocation,\n useInRouterContext,\n useSearchParams,\n createSearchParams,\n};\n\nexport const reactRouterDomPlugin: BetterHtmlPluginConstructor<ReactRouterDomPluginOptions> = (options) => ({\n name: \"react-router-dom\",\n initialize: () => {\n console.log(\"react-router-dom plugin initialized\");\n },\n getConfig: () => ({\n ...defaultReactRouterDomPluginOptions,\n ...options,\n }),\n});\n","import { BetterHtmlPluginConstructor } from \"../types/plugin\";\n\nexport type LocalStoragePluginOptions = {\n encryption?:\n | {\n /** @default false */\n enabled?: false;\n }\n | {\n /** @default false */\n enabled?: true;\n secretKey: string;\n iv: string;\n };\n};\n\nexport const defaultLocalStoragePluginOptions: Required<LocalStoragePluginOptions> = {\n encryption: {},\n};\n\nexport const localStoragePlugin: BetterHtmlPluginConstructor<LocalStoragePluginOptions> = (options) => ({\n name: \"localStorage\",\n initialize: () => {\n console.log(\"localStorage plugin initialized\");\n },\n getConfig: () => ({\n ...defaultLocalStoragePluginOptions,\n ...options,\n }),\n});\n","import { ComponentProps, memo, useCallback } from \"react\";\nimport {\n AnyOtherString,\n AssetName,\n Color,\n ColorTheme,\n IconName,\n LoaderName,\n OmitProps,\n Theme,\n useBetterCoreContext,\n useLoader,\n useTheme,\n} from \"react-better-core\";\nimport styled, { css } from \"styled-components\";\n\nimport { ComponentHoverStyle, ComponentStyle } from \"../types/components\";\n\nimport { useComponentPropsGrouper, useComponentPropsWithPrefix } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport Icon from \"./Icon\";\nimport Loader from \"./Loader\";\nimport Image from \"./Image\";\nimport { useBetterHtmlContextInternal } from \"./BetterHtmlProvider\";\n\nconst ButtonElement = styled.button.withConfig({\n shouldForwardProp: (prop) =>\n ![\"theme\", \"colorTheme\", \"style\", \"hoverStyle\", \"isSmall\", \"withText\", \"isLoading\"].includes(prop),\n})<{\n theme: Theme;\n colorTheme: ColorTheme;\n style: ComponentStyle;\n hoverStyle: ComponentStyle;\n isSmall?: boolean;\n withText?: boolean;\n disabled?: boolean;\n isLoading?: boolean;\n}>`\n display: block;\n position: relative;\n width: fit-content;\n min-width: max-content;\n font-family: ${(props) => props.theme.styles.fontFamily};\n font-size: 16px;\n line-height: 20px;\n text-decoration: none;\n color: ${(props) => props.theme.colors.base};\n background-color: ${(props) => props.theme.colors.primary};\n border: none;\n border-radius: ${(props) => props.theme.styles.borderRadius}px;\n padding: ${(props) =>\n props.isSmall\n ? `${props.theme.styles.gap + 1}px ${props.theme.styles.space}px`\n : `${(props.theme.styles.gap + props.theme.styles.space) / 2 + 1}px ${\n props.theme.styles.space + (props.withText ? props.theme.styles.gap : 0)\n }px`};\n user-select: none;\n flex-shrink: 0;\n transition: ${(props) => props.theme.styles.transition};\n\n ${(props) =>\n props.disabled\n ? css`\n opacity: 0.6;\n cursor: not-allowed;\n `\n : !props.isLoading\n ? css`\n cursor: pointer;\n\n &:not(.secondary):hover {\n filter: ${props.colorTheme === \"dark\" ? \"brightness(1.2)\" : \"brightness(0.9)\"};\n }\n\n &.secondary:hover {\n border-color: ${props.theme.colors.primary};\n }\n `\n : \"\"}\n\n &.secondary {\n padding-block: ${(props) =>\n props.isSmall ? props.theme.styles.gap : (props.theme.styles.space + props.theme.styles.gap) / 2}px;\n border: solid 1px ${(props) => props.theme.colors.border};\n background-color: ${(props) => props.theme.colors.backgroundContent};\n background-image: none;\n\n ${(props) => props.style as any}\n }\n\n ${(props) => props.style as any}\n\n &:hover {\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nexport type ButtonProps<Value> = {\n text?: string;\n value?: Value;\n\n href?: string;\n download?: string;\n target?: React.ComponentProps<\"a\">[\"target\"];\n\n icon?: IconName | AnyOtherString;\n /** @default \"left\" */\n iconPosition?: \"left\" | \"right\";\n /** @default Same as text color */\n iconColor?: string;\n /** @default 16 */\n iconSize?: number;\n\n image?: AssetName | AnyOtherString;\n /** @default \"left\" */\n imagePosition?: \"left\" | \"right\";\n /** @default 16 */\n imageWidth?: number;\n /** @default undefined */\n imageHeight?: number;\n\n loaderName?: LoaderName | AnyOtherString;\n /** @default 16 */\n loaderSize?: number;\n /** @default false */\n isLoading?: boolean;\n\n /** @default false */\n disabled?: boolean;\n /** @default false */\n isSmall?: boolean;\n /** @default false */\n isSubmit?: boolean;\n\n onClickWithValue?: (value: Value) => void;\n} & OmitProps<React.ComponentProps<\"button\">, \"style\" | \"defaultValue\" | \"translate\" | \"value\"> &\n ComponentStyle &\n ComponentHoverStyle;\n\ntype ButtonComponent = {\n <Value>(props: ButtonProps<Value>): React.ReactElement;\n secondary: <Value>(props: ButtonProps<Value>) => React.ReactElement;\n destructive: <Value>(props: ButtonProps<Value>) => React.ReactElement;\n icon: <Value>(\n props: OmitProps<ButtonProps<Value>, \"icon\" | \"width\" | \"height\" | \"isSmall\"> & {\n icon: IconName | AnyOtherString;\n /** @default 16 */\n size?: number;\n /** @default \"#000000\" */\n backgroundButtonColor?: string;\n },\n ) => React.ReactElement;\n upload: <Value>(\n props: OmitProps<ButtonProps<Value>, \"onClick\"> & {\n accept?: ComponentProps<\"input\">[\"accept\"];\n /** @default false */\n multiple?: boolean;\n onUpload?: (files: FileList | null) => void;\n },\n ) => React.ReactElement;\n};\n\nconst ButtonComponent: ButtonComponent = function Button<Value>({\n href,\n text,\n value,\n download,\n target,\n\n icon,\n iconPosition = \"left\",\n iconColor,\n iconSize,\n\n image,\n imagePosition = \"left\",\n imageWidth,\n imageHeight,\n\n loaderName,\n loaderSize,\n isLoading,\n\n disabled,\n isSmall,\n isSubmit,\n\n onClick,\n onClickWithValue,\n ...props\n}: ButtonProps<Value>) {\n const theme = useTheme();\n const isLoadingHook = useLoader(loaderName);\n const { components } = useBetterHtmlContextInternal();\n const { colorTheme } = useBetterCoreContext();\n\n const isLoadingElement = isLoading || isLoadingHook;\n\n const { style, hoverStyle, restProps } = useComponentPropsGrouper({\n ...components.button?.style?.default,\n ...props,\n });\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n const onClickElement = useCallback(\n (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n onClick?.(event);\n onClickWithValue?.(value as any);\n },\n [onClick, onClickWithValue, value],\n );\n\n const iconComponent = icon ? (\n <Div.row height={20} alignItems=\"center\" justifyContent=\"center\">\n <Icon\n name={icon}\n color={iconColor ?? props.color ?? theme.colors.base}\n size={iconSize ?? parseInt(style.fontSize?.toString() ?? \"16\")}\n />\n </Div.row>\n ) : undefined;\n const imageComponent = image ? (\n <Image\n name={image}\n color={iconColor ?? props.color ?? theme.colors.base}\n width={imageWidth ?? parseInt(style.fontSize?.toString() ?? \"16\")}\n height={imageHeight}\n />\n ) : undefined;\n\n const linkComponentTag = components.button?.tagReplacement?.linkComponent ?? \"a\";\n const buttonComponentTag = components.button?.tagReplacement?.buttonComponent ?? \"button\";\n\n return (\n <ButtonElement\n as={(href ? linkComponentTag : buttonComponentTag) as any}\n theme={theme}\n colorTheme={colorTheme}\n isSmall={isSmall}\n withText={text !== undefined}\n isLoading={isLoadingElement}\n disabled={disabled}\n to={href}\n href={href}\n download={download}\n target={target}\n type={isSubmit && !isLoadingElement ? \"submit\" : \"button\"}\n onClick={!disabled && !isLoadingElement ? onClickElement : undefined}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n >\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={10}\n pointerEvents=\"none\"\n opacity={isLoadingElement ? 0 : 1}\n transition={theme.styles.transition}\n >\n {iconPosition === \"left\" && iconComponent}\n {imagePosition === \"left\" && imageComponent}\n\n {text}\n\n {iconPosition === \"right\" && iconComponent}\n {imagePosition === \"right\" && imageComponent}\n </Div.row>\n\n <Div.row\n position=\"absolute\"\n width=\"100%\"\n height=\"100%\"\n top={0}\n left={0}\n pointerEvents=\"none\"\n alignItems=\"center\"\n justifyContent=\"center\"\n opacity={isLoadingElement ? 1 : 0}\n transition={theme.styles.transition}\n >\n <Loader\n color={(props.color as Color) ?? theme.colors.base}\n size={loaderSize}\n disabled={!isLoadingElement}\n />\n </Div.row>\n </ButtonElement>\n );\n} as any;\n\nButtonComponent.secondary = function Secondary({ className, ...props }) {\n const theme = useTheme();\n const betterHtmlContext = useBetterHtmlContextInternal();\n\n return (\n <ButtonComponent\n {...betterHtmlContext.components.button?.style?.secondary}\n className={`secondary${className ? ` ${className}` : \"\"}`}\n color={theme.colors.textPrimary}\n {...props}\n />\n );\n} as ButtonComponent[\"secondary\"];\n\nButtonComponent.destructive = function Destructive(props) {\n const theme = useTheme();\n const betterHtmlContext = useBetterHtmlContextInternal();\n\n return (\n <ButtonComponent\n {...betterHtmlContext.components.button?.style?.destructive}\n backgroundColor={theme.colors.error}\n color={theme.colors.base}\n {...props}\n />\n );\n} as ButtonComponent[\"destructive\"];\n\nButtonComponent.icon = function Icon({ size = 16, backgroundButtonColor, ...props }) {\n const theme = useTheme();\n const betterHtmlContext = useBetterHtmlContextInternal();\n\n const buttonSize = size + theme.styles.space;\n const backgroundButtonColorReady = backgroundButtonColor ?? theme.colors.textPrimary;\n\n return (\n <ButtonComponent\n {...betterHtmlContext.components.button?.style?.icon}\n width={buttonSize}\n height={buttonSize}\n color={theme.colors.textPrimary}\n backgroundColor={backgroundButtonColorReady + \"00\"}\n backgroundImage=\"none\"\n backgroundColorHover={backgroundButtonColorReady + \"20\"}\n borderRadius={999}\n iconSize={size}\n loaderSize={12}\n border=\"none\"\n padding={0}\n filterHover=\"none !important\"\n {...props}\n />\n );\n} as ButtonComponent[\"icon\"];\n\nButtonComponent.upload = function Upload({ accept, multiple, onUpload, ...props }) {\n const betterHtmlContext = useBetterHtmlContextInternal();\n\n const onClickElement = useCallback(() => {\n const input = document.createElement(\"input\");\n input.setAttribute(\"type\", \"file\");\n if (accept) input.setAttribute(\"accept\", accept);\n if (multiple) input.setAttribute(\"multiple\", \"true\");\n\n input.addEventListener(\"change\", () => {\n onUpload?.(input.files);\n });\n\n input.click();\n }, [accept]);\n\n return (\n <ButtonComponent\n {...betterHtmlContext.components.button?.style?.upload}\n text=\"Upload\"\n icon=\"uploadCloud\"\n onClick={onClickElement}\n {...props}\n />\n );\n} as ButtonComponent[\"upload\"];\n\nconst Button = memo(ButtonComponent) as any as typeof ButtonComponent & {\n secondary: typeof ButtonComponent.secondary;\n destructive: typeof ButtonComponent.destructive;\n icon: typeof ButtonComponent.icon;\n upload: typeof ButtonComponent.upload;\n};\n\nButton.secondary = ButtonComponent.secondary;\nButton.destructive = ButtonComponent.destructive;\nButton.icon = ButtonComponent.icon;\nButton.upload = ButtonComponent.upload;\n\nexport default Button;\n","import { memo } from \"react\";\nimport { Color, OmitProps, useTheme } from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport Div, { DivProps } from \"./Div\";\nimport Text from \"./Text\";\n\nconst StyledDiv = styled.div`\n @keyframes loaderAnimation {\n to {\n transform: rotate(360deg);\n }\n }\n\n @keyframes textLoaderAnimation {\n to {\n clip-path: inset(0 -1ch 0 0);\n }\n }\n`;\n\nexport type LoaderProps = {\n /** @default textPrimary */\n color?: Color;\n /** @default 16 */\n size?: number;\n /** @default 5 */\n width?: number;\n /** @default false */\n disabled?: boolean;\n} & OmitProps<\n DivProps,\n | \"children\"\n | \"width\"\n | \"height\"\n | \"color\"\n | \"background\"\n | \"borderRadius\"\n | \"mask\"\n | \"WebkitMask\"\n | \"padding\"\n | \"animation\"\n | \"animationName\"\n | \"transform\"\n | \"clipPath\"\n>;\n\ntype LoaderComponentType = {\n (props: LoaderProps): React.ReactElement;\n box: (\n props: OmitProps<LoaderProps, \"size\"> & {\n /** @default \"Loading...\" */\n text?: string;\n /** @default 20 */\n size?: number;\n },\n ) => React.ReactElement;\n text: (\n props: OmitProps<LoaderProps, \"size\"> & {\n /** @default \"Loading...\" */\n text?: string;\n /** @default 14 */\n size?: number;\n },\n ) => React.ReactElement;\n};\n\nconst LoaderComponent: LoaderComponentType = function Loader({\n color,\n size = 16,\n width,\n disabled,\n ...props\n}: LoaderProps) {\n const theme = useTheme();\n\n const readyColor: Color = color ?? theme.colors.textPrimary;\n const readyWidth: number = width ?? size / 3;\n const mask: React.CSSProperties[\"mask\"] = `radial-gradient(farthest-side, #0000 calc(100% - ${readyWidth}px), #000 0)`;\n\n return (\n <StyledDiv>\n <Div\n width={size + readyWidth * 2}\n height={size + readyWidth * 2}\n background={`radial-gradient(farthest-side, ${readyColor} 94%, #0000) top/${readyWidth}px ${readyWidth}px no-repeat, conic-gradient(#0000 30%, ${readyColor})`}\n borderRadius={999}\n mask={mask}\n WebkitMask={mask}\n padding={readyWidth}\n animation={!disabled ? \"loaderAnimation .6s infinite linear\" : undefined}\n {...props}\n />\n </StyledDiv>\n );\n} as any;\n\nLoaderComponent.box = function Box({ text = \"Loading...\", size = 20, ...props }) {\n const theme = useTheme();\n\n return (\n <Div.column width=\"100%\" alignItems=\"center\" gap={theme.styles.gap}>\n <Loader size={size} {...props} />\n\n {text && (\n <Text textAlign=\"center\" color={props.color ?? theme.colors.textSecondary}>\n {text}\n </Text>\n )}\n </Div.column>\n );\n} as LoaderComponentType[\"box\"];\n\nLoaderComponent.text = function LoaderText({ text = \"Loading...\", size = 14, ...props }) {\n const theme = useTheme();\n\n return (\n <Div.row alignItems=\"center\" gap={theme.styles.gap}>\n <Loader size={size} {...props} />\n\n {text && (\n <Text textAlign=\"center\" color={props.color ?? theme.colors.textSecondary}>\n {text}\n </Text>\n )}\n </Div.row>\n );\n} as LoaderComponentType[\"text\"];\n\nconst Loader = memo(LoaderComponent) as any as typeof LoaderComponent & {\n box: typeof LoaderComponent.box;\n text: typeof LoaderComponent.text;\n};\n\nLoader.box = LoaderComponent.box;\nLoader.text = LoaderComponent.text;\n\nexport default Loader;\n","import { memo, useCallback, forwardRef, useImperativeHandle, useRef, useState, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n AnyOtherString,\n ColorTheme,\n IconName,\n LoaderName,\n OmitProps,\n PickValue,\n Theme,\n useBetterCoreContext,\n useBooleanState,\n useTheme,\n} from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport { ComponentPropWithRef } from \"../types/components\";\n\nimport { useUrlQuery } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport Button from \"./Button\";\nimport Text from \"./Text\";\nimport Divider from \"./Divider\";\nimport Icon from \"./Icon\";\nimport { useBetterHtmlContextInternal, usePlugin } from \"./BetterHtmlProvider\";\n\nconst DialogStylesElement = styled.dialog.withConfig({\n shouldForwardProp: (prop) => ![\"theme\", \"colorTheme\", \"opacity\"].includes(prop),\n})<{ theme: Theme; colorTheme: ColorTheme; opacity?: number }>`\n width: 100%;\n max-width: none;\n height: 100%;\n max-height: none;\n color: ${(props) => props.theme.colors.textPrimary};\n border: none;\n outline: none;\n background-color: transparent;\n margin: auto auto;\n padding-inline: ${(props) => props.theme.styles.gap}px;\n opacity: ${(props) => props.opacity};\n transition: ${(props) => props.theme.styles.transition};\n\n &::backdrop {\n background-color: ${(props) => (props.colorTheme === \"light\" ? \"#000000a0\" : \"#222222e0\")};\n opacity: ${(props) => props.opacity};\n transition: ${(props) => props.theme.styles.transition};\n }\n\n @keyframes fadeInAnimation {\n from {\n transform: translateY(${(props) => props.theme.styles.space}px);\n }\n to {\n transform: translateY(0px);\n }\n }\n\n @keyframes fadeOutAnimation {\n from {\n transform: translateY(0px);\n }\n to {\n transform: translateY(${(props) => props.theme.styles.space}px);\n }\n }\n`;\n\nexport type ModalProps = {\n /**\n * If you want to have a small modal, you can use 660px as it looks good on most screens.\n *\n * @default 30% smaller than app.contentMaxWidth\n * */\n maxWidth?: number;\n icon?: IconName | AnyOtherString;\n title?: string;\n titleColor?: React.CSSProperties[\"color\"];\n description?: string;\n descriptionColor?: React.CSSProperties[\"color\"];\n headerTextAlign?: PickValue<NonNullable<React.CSSProperties[\"textAlign\"]>, \"left\" | \"center\">;\n headerBackgroundColor?: React.CSSProperties[\"backgroundColor\"];\n backgroundColor?: React.CSSProperties[\"backgroundColor\"];\n /** @requires ReactRouterDomPlugin */\n name?: string;\n overflow?: React.CSSProperties[\"overflow\"];\n withoutCloseButton?: boolean;\n /** @default false */\n defaultIsOpened?: boolean;\n onOpen?: () => void;\n onClose?: () => void;\n children?: React.ReactNode;\n};\n\nexport type ModalRef = {\n isOpened: boolean;\n open: () => void;\n close: () => void;\n};\n\ntype ModalComponent = {\n (props: ComponentPropWithRef<ModalRef, ModalProps>): React.ReactElement;\n confirmation: (\n props: ComponentPropWithRef<\n ModalRef,\n OmitProps<ModalProps, \"maxWidth\" | \"children\" | \"overflow\"> & {\n message?: string;\n /** @default \"Continue\" */\n continueButtonText?: string;\n continueButtonLoaderName?: LoaderName | AnyOtherString;\n onContinue?: () => void;\n onCancel?: () => void;\n }\n >,\n ) => React.ReactElement;\n destructive: (\n props: ComponentPropWithRef<\n ModalRef,\n OmitProps<ModalProps, \"maxWidth\" | \"children\" | \"overflow\"> & {\n message?: string;\n /** @default \"Delete\" */\n deleteButtonText?: string;\n /** @default \"trash\" */\n deleteButtonIconName?: IconName | AnyOtherString;\n deleteButtonLoaderName?: LoaderName | AnyOtherString;\n onDelete?: () => void;\n onCancel?: () => void;\n }\n >,\n ) => React.ReactElement;\n};\n\nconst ModalComponent: ModalComponent = forwardRef(function Modal(\n {\n maxWidth,\n icon,\n title,\n titleColor,\n description,\n descriptionColor,\n headerTextAlign,\n headerBackgroundColor,\n backgroundColor,\n name,\n overflow,\n withoutCloseButton,\n defaultIsOpened = false,\n onOpen,\n onClose,\n children,\n }: ModalProps,\n ref: React.ForwardedRef<ModalRef>,\n) {\n const reactRouterDomPlugin = usePlugin(\"react-router-dom\");\n const urlQuery = reactRouterDomPlugin ? useUrlQuery() : undefined;\n\n const theme = useTheme();\n const { app } = useBetterHtmlContextInternal();\n const { colorTheme } = useBetterCoreContext();\n\n const dialogRef = useRef<HTMLDialogElement>(null);\n\n const [isOpened, setIsOpened] = useBooleanState(false);\n const [isOpenedLate, setIsOpenedLate] = useBooleanState(false);\n\n const onClickOpen = useCallback(() => {\n dialogRef.current?.showModal();\n\n setIsOpened.setTrue();\n setIsOpenedLate.setTrue();\n\n if (urlQuery && name) {\n urlQuery.setQuery(\n {\n [`${name}-modal`]: \"opened\",\n },\n false,\n );\n }\n\n onOpen?.();\n }, [onOpen, urlQuery, name]);\n const onClickClose = useCallback(() => {\n setIsOpened.setFalse();\n onClose?.();\n\n if (urlQuery && name) urlQuery.removeQuery(`${name}-modal`, false);\n\n setTimeout(() => {\n dialogRef.current?.close();\n setIsOpenedLate.setFalse();\n }, 0.2 * 1000);\n }, [onClose, urlQuery, name]);\n const onKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDialogElement>) => {\n if (event.key === \"Escape\") {\n if (!withoutCloseButton) return;\n\n event.preventDefault();\n }\n },\n [withoutCloseButton],\n );\n\n useEffect(() => {\n if (!defaultIsOpened) return;\n\n onClickOpen();\n }, []);\n\n useImperativeHandle(\n ref,\n (): ModalRef => {\n return {\n open: onClickOpen,\n close: onClickClose,\n isOpened,\n };\n },\n [onClickOpen, onClickClose, isOpened],\n );\n\n const headerVertical = headerTextAlign === \"center\";\n\n return createPortal(\n <DialogStylesElement\n theme={theme}\n colorTheme={colorTheme}\n opacity={!isOpened ? 0 : 1}\n onClose={onClickClose}\n onKeyDown={onKeyDown}\n ref={dialogRef}\n >\n {isOpenedLate ? (\n <Div.column\n position=\"relative\"\n width=\"100%\"\n maxWidth={maxWidth ?? app.contentMaxWidth / 1.3}\n minHeight={`calc(100% - ${theme.styles.space * 2}px)`}\n alignItems=\"center\"\n justifyContent=\"center\"\n marginBlock={theme.styles.space}\n marginInline=\"auto\"\n transform={`translateY(${theme.styles.space}px)`}\n transition={theme.styles.transition}\n animation={isOpened ? \"fadeInAnimation 0.2s ease forwards\" : \"fadeOutAnimation 0.2s ease forwards\"}\n >\n <Div\n position=\"relative\"\n width=\"100%\"\n minHeight={32 + theme.styles.space * 2}\n backgroundColor={backgroundColor ?? theme.colors.backgroundBase}\n borderRadius={theme.styles.borderRadius * 2}\n padding={!title ? theme.styles.space : undefined}\n overflow={overflow}\n >\n {title ? (\n <>\n <Div.row\n alignItems=\"center\"\n gap={theme.styles.gap}\n backgroundColor={headerBackgroundColor}\n borderTopLeftRadius={theme.styles.borderRadius * 2 - 1}\n borderTopRightRadius={theme.styles.borderRadius * 2 - 1}\n paddingInline={theme.styles.space}\n paddingBlock={theme.styles.space}\n transition={theme.styles.transition}\n >\n <Div.row\n flex={1}\n alignItems=\"center\"\n gap={headerVertical ? theme.styles.space * 2 : theme.styles.space}\n invertFlexDirection={headerVertical}\n >\n {icon &&\n (headerVertical ? (\n <Div.row\n width={76}\n height={76}\n alignItems=\"center\"\n justifyContent=\"center\"\n backgroundColor={titleColor ?? theme.colors.textPrimary}\n borderRadius={999}\n >\n <Icon\n name={icon}\n size={36}\n color={headerBackgroundColor ?? theme.colors.backgroundBase}\n flexShrink={0}\n />\n </Div.row>\n ) : (\n <Icon\n name={icon}\n size={24}\n color={titleColor ?? theme.colors.textPrimary}\n flexShrink={0}\n />\n ))}\n\n <Div.column flex={1} gap={theme.styles.gap / 2}>\n <Text\n as=\"h1\"\n textAlign={headerTextAlign}\n color={titleColor ?? theme.colors.textPrimary}\n transition={theme.styles.transition}\n >\n {title}\n </Text>\n\n {description && (\n <Text\n textAlign={headerTextAlign}\n color={descriptionColor ?? theme.colors.textSecondary}\n transition={theme.styles.transition}\n >\n {description}\n </Text>\n )}\n </Div.column>\n </Div.row>\n\n {!withoutCloseButton && (\n <Button.icon\n icon=\"XMark\"\n marginTop={1}\n iconColor={titleColor}\n onClick={onClickClose}\n transition={theme.styles.transition}\n zIndex={10}\n />\n )}\n </Div.row>\n\n <Divider.horizontal />\n </>\n ) : (\n <>\n {!withoutCloseButton && (\n <Div position=\"absolute\" top={theme.styles.space} right={theme.styles.space} zIndex={10}>\n <Button.icon icon=\"XMark\" iconColor={titleColor} onClick={onClickClose} />\n </Div>\n )}\n </>\n )}\n\n <Div padding={title ? theme.styles.space : undefined}>{children}</Div>\n </Div>\n </Div.column>\n ) : undefined}\n </DialogStylesElement>,\n document.body,\n );\n}) as any;\n\nModalComponent.confirmation = forwardRef(function Confirmation(\n { message, continueButtonText = \"Continue\", continueButtonLoaderName, onContinue, onCancel, ...props },\n ref,\n) {\n const theme = useTheme();\n\n const modalRef = useRef<ModalRef>(null);\n\n const onCancelElement = useCallback(() => {\n onCancel?.();\n modalRef.current?.close();\n }, [onCancel]);\n const onContinueElement = useCallback(() => {\n onContinue?.();\n modalRef.current?.close();\n }, [onContinue]);\n\n useImperativeHandle(ref, (): ModalRef => modalRef.current as ModalRef, []);\n\n return (\n <ModalComponent title=\"Are you sure?\" maxWidth={660} {...props} ref={modalRef}>\n <Text color={theme.colors.textSecondary}>\n {message ?? \"Do you really want to continue? This action may be irreversible.\"}\n </Text>\n\n <Div.row\n alignItems=\"center\"\n justifyContent=\"flex-end\"\n gap={theme.styles.gap}\n marginTop={theme.styles.space * 2}\n >\n <Button.secondary text=\"Cancel\" onClick={onCancelElement} />\n <Button text={continueButtonText} loaderName={continueButtonLoaderName} onClick={onContinueElement} />\n </Div.row>\n </ModalComponent>\n );\n}) as ModalComponent[\"confirmation\"];\n\nModalComponent.destructive = forwardRef(function Destructive(\n {\n message,\n deleteButtonText = \"Delete\",\n deleteButtonIconName = \"trash\",\n deleteButtonLoaderName,\n onDelete,\n onCancel,\n ...props\n },\n ref,\n) {\n const theme = useTheme();\n\n const modalRef = useRef<ModalRef>(null);\n\n const onCancelElement = useCallback(() => {\n onCancel?.();\n modalRef.current?.close();\n }, [onCancel]);\n const onDeleteElement = useCallback(() => {\n onDelete?.();\n modalRef.current?.close();\n }, [onDelete]);\n\n useImperativeHandle(ref, (): ModalRef => modalRef.current as ModalRef, []);\n\n return (\n <ModalComponent title=\"Are you sure?\" maxWidth={660} {...props} ref={modalRef}>\n <Text color={theme.colors.textSecondary}>\n {message ??\n \"Do you really want to continue with the deleting of the item? This action may be irreversible.\"}\n </Text>\n\n <Div.row\n alignItems=\"center\"\n justifyContent=\"flex-end\"\n gap={theme.styles.gap}\n marginTop={theme.styles.space * 2}\n >\n <Button.secondary text=\"Cancel\" onClick={onCancelElement} />\n <Button.destructive\n icon={deleteButtonIconName}\n text={deleteButtonText}\n loaderName={deleteButtonLoaderName}\n onClick={onDeleteElement}\n />\n </Div.row>\n </ModalComponent>\n );\n}) as ModalComponent[\"destructive\"];\n\nconst Modal = memo(ModalComponent) as any as typeof ModalComponent & {\n confirmation: typeof ModalComponent.confirmation;\n destructive: typeof ModalComponent.destructive;\n};\n\nModal.confirmation = ModalComponent.confirmation;\nModal.destructive = ModalComponent.destructive;\n\nexport default Modal;\n","import { PartialRecord } from \"react-better-core\";\nimport CryptoJS from \"crypto-js\";\n\nimport { BrowserName } from \"../types/other\";\n\nimport { LocalStoragePluginOptions } from \"../plugins\";\nimport { checkBetterHtmlContextValue } from \"./variableFunctions\";\nimport { useForm } from \"./hooks\";\n\nimport { externalBetterHtmlContextValue } from \"../components/BetterHtmlProvider\";\n\nexport const getBrowser = (): BrowserName | undefined => {\n const userAgent = navigator.userAgent.toLowerCase();\n\n if (userAgent.includes(\"firefox\")) return \"firefox\";\n if (userAgent.includes(\"chrome\") && !userAgent.includes(\"edg\")) return \"chrome\";\n if (userAgent.includes(\"safari\") && !userAgent.includes(\"chrome\")) return \"safari\";\n if (userAgent.includes(\"edg\")) return \"edge\";\n if (userAgent.includes(\"opr\") || userAgent.includes(\"opera\")) return \"opera\";\n\n return;\n};\n\nexport const getFormErrorObject = <FormFields extends ReturnType<typeof useForm>[\"values\"]>(\n formValues: FormFields,\n): PartialRecord<keyof FormFields, string> => {\n return {};\n};\n\nexport const encryptString = (text: string): string => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"encryptString\")) return undefined as any;\n\n const localStoragePlugin = externalBetterHtmlContextValue.plugins.find((plugin) => plugin.name === \"localStorage\");\n\n if (!localStoragePlugin) {\n throw new Error(\n \"`encryptString` hook requires the `localStorage` plugin to be added to the `plugins` prop in `<BetterHtmlProvider>`.\",\n );\n }\n\n const pluginConfig: LocalStoragePluginOptions = localStoragePlugin.getConfig();\n\n if (!pluginConfig.encryption?.enabled) return text;\n\n const encrypted = CryptoJS.AES.encrypt(text, CryptoJS.enc.Hex.parse(pluginConfig.encryption.secretKey), {\n iv: CryptoJS.enc.Hex.parse(pluginConfig.encryption.iv),\n mode: CryptoJS.mode.CBC,\n padding: CryptoJS.pad.Pkcs7,\n }).toString();\n\n return encrypted;\n};\n\nexport const decryptString = <ReturnValue extends string>(text: string): ReturnValue => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"decryptString\")) return undefined as any;\n\n const localStoragePlugin = externalBetterHtmlContextValue.plugins.find((plugin) => plugin.name === \"localStorage\");\n\n if (!localStoragePlugin) {\n throw new Error(\n \"`decryptString` hook requires the `localStorage` plugin to be added to the `plugins` prop in `<BetterHtmlProvider>`.\",\n );\n }\n\n const pluginConfig: LocalStoragePluginOptions = localStoragePlugin.getConfig();\n\n if (!pluginConfig.encryption?.enabled) return text as ReturnValue;\n\n const decrypted = CryptoJS.AES.decrypt(text, CryptoJS.enc.Hex.parse(pluginConfig.encryption.secretKey), {\n iv: CryptoJS.enc.Hex.parse(pluginConfig.encryption.iv),\n mode: CryptoJS.mode.CBC,\n padding: CryptoJS.pad.Pkcs7,\n });\n\n return decrypted.toString(CryptoJS.enc.Utf8) as ReturnValue;\n};\n","import { BetterCoreConfig, OmitProps } from \"react-better-core\";\n\nimport { Alert } from \"../types/alert\";\n\nimport {\n BetterHtmlInternalConfig,\n externalBetterCoreContextValue,\n externalBetterHtmlContextValue,\n} from \"../components/BetterHtmlProvider\";\n\nexport const checkBetterCoreContextValue = (\n value: BetterCoreConfig | undefined,\n functionsName: string,\n): value is BetterCoreConfig => {\n if (value === undefined) {\n throw new Error(\n `\\`${functionsName}()\\` must be used within a \\`<BetterCoreProvider>\\`. Make sure to add one at the root of your component tree.`,\n );\n }\n\n return value !== undefined;\n};\nexport const checkBetterHtmlContextValue = (\n value: BetterHtmlInternalConfig | undefined,\n functionsName: string,\n): value is BetterHtmlInternalConfig => {\n if (value === undefined) {\n throw new Error(\n `\\`${functionsName}()\\` must be used within a \\`<BetterHtmlProvider>\\`. Make sure to add one at the root of your component tree.`,\n );\n }\n\n return value !== undefined;\n};\n\nexport const alertControls = {\n createAlert: (alert: OmitProps<Alert, \"id\">): Alert => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"alertControls.createAlert\"))\n return undefined as any;\n\n const readyAlert: Alert = {\n id: crypto.randomUUID(),\n ...alert,\n };\n externalBetterHtmlContextValue.setAlerts((oldValue) => [...oldValue, readyAlert]);\n\n return readyAlert;\n },\n removeAlert: (alertId: string) => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"alertControls.removeAlert\")) return;\n\n externalBetterHtmlContextValue.setAlerts((oldValue) => oldValue.filter((alert) => alert.id !== alertId));\n },\n};\n\nexport const sideMenuControls = {\n expand: () => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"sideMenuControls.expand\")) return;\n\n externalBetterHtmlContextValue.setSideMenuIsCollapsed.setFalse();\n },\n collapse: () => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"sideMenuControls.collapse\")) return;\n\n externalBetterHtmlContextValue.setSideMenuIsCollapsed.setTrue();\n },\n toggleExpanded: () => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"sideMenuControls.toggleExpanded\")) return;\n\n externalBetterHtmlContextValue.setSideMenuIsCollapsed.toggle();\n },\n open: () => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"sideMenuControls.open\")) return;\n\n externalBetterHtmlContextValue.setSideMenuIsOpenMobile.setTrue();\n },\n close: () => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"sideMenuControls.close\")) return;\n\n externalBetterHtmlContextValue.setSideMenuIsOpenMobile.setFalse();\n },\n toggleOpened: () => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"sideMenuControls.toggleOpened\")) return;\n\n externalBetterHtmlContextValue.setSideMenuIsOpenMobile.toggle();\n },\n};\n\nexport const filterHover = (): Record<\"z05\" | \"z1\" | \"z2\" | \"z3\", React.CSSProperties[\"filter\"]> => {\n if (!checkBetterCoreContextValue(externalBetterCoreContextValue, \"filterHover\")) return undefined as any;\n\n return {\n z05: externalBetterCoreContextValue.colorTheme === \"dark\" ? \"brightness(1.2)\" : \"brightness(0.95)\",\n z1: externalBetterCoreContextValue.colorTheme === \"dark\" ? \"brightness(1.3)\" : \"brightness(0.9)\",\n z2: externalBetterCoreContextValue.colorTheme === \"dark\" ? \"brightness(1.6)\" : \"brightness(0.8)\",\n z3: externalBetterCoreContextValue.colorTheme === \"dark\" ? \"brightness(1.9)\" : \"brightness(0.7)\",\n };\n};\n","import { LocalStoragePluginOptions } from \"../plugins\";\n\nimport { decryptString, encryptString } from \"./functions\";\nimport { checkBetterHtmlContextValue } from \"./variableFunctions\";\n\nimport { externalBetterHtmlContextValue } from \"../components/BetterHtmlProvider\";\n\nexport function generateLocalStorage<LocalStorage extends object>(): {\n setItem: <StorageName extends keyof LocalStorage>(name: StorageName, value: LocalStorage[StorageName]) => void;\n getItem: <StorageName extends keyof LocalStorage>(name: StorageName) => LocalStorage[StorageName] | undefined;\n removeItem: (name: keyof LocalStorage) => void;\n removeAllItems: () => void;\n} {\n return {\n setItem: (name, value) => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"generateLocalStorage.setItem\"))\n return undefined as any;\n\n const localStoragePlugin = externalBetterHtmlContextValue.plugins.find(\n (plugin) => plugin.name === \"localStorage\",\n );\n\n if (!localStoragePlugin) {\n throw new Error(\n \"`generateLocalStorage.setItem` function requires the `localStorage` plugin to be added to the `plugins` prop in `<BetterHtmlProvider>`.\",\n );\n }\n\n const pluginConfig: LocalStoragePluginOptions = localStoragePlugin.getConfig();\n\n const encryptionEnabled = pluginConfig.encryption?.enabled ?? false;\n\n const readyName = encryptionEnabled ? encryptString(name.toString()) : name;\n const readyValue = encryptionEnabled ? encryptString(JSON.stringify(value)) : JSON.stringify(value);\n\n if (value) localStorage.setItem(readyName.toString(), readyValue);\n else localStorage.removeItem(readyName.toString());\n },\n getItem: (name) => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"generateLocalStorage.getItem\"))\n return undefined as any;\n\n const localStoragePlugin = externalBetterHtmlContextValue.plugins.find(\n (plugin) => plugin.name === \"localStorage\",\n );\n\n if (!localStoragePlugin) {\n throw new Error(\n \"`generateLocalStorage.getItem` function requires the `localStorage` plugin to be added to the `plugins` prop in `<BetterHtmlProvider>`.\",\n );\n }\n\n const pluginConfig: LocalStoragePluginOptions = localStoragePlugin.getConfig();\n\n const encryptionEnabled = pluginConfig.encryption?.enabled ?? false;\n\n const readyName = encryptionEnabled ? encryptString(name.toString()) : name;\n const item = localStorage.getItem(readyName.toString());\n\n if (item === null) return undefined;\n\n try {\n return encryptionEnabled ? JSON.parse(decryptString(item)) : JSON.parse(item);\n } catch (error) {\n return undefined;\n }\n },\n removeItem: (name) => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"generateLocalStorage.removeItem\"))\n return undefined as any;\n\n const localStoragePlugin = externalBetterHtmlContextValue.plugins.find(\n (plugin) => plugin.name === \"localStorage\",\n );\n\n if (!localStoragePlugin) {\n throw new Error(\n \"`generateLocalStorage.removeItem` function requires the `localStorage` plugin to be added to the `plugins` prop in `<BetterHtmlProvider>`.\",\n );\n }\n\n const pluginConfig: LocalStoragePluginOptions = localStoragePlugin.getConfig();\n\n const encryptionEnabled = pluginConfig.encryption?.enabled ?? false;\n\n const readyName = encryptionEnabled ? encryptString(name.toString()) : name;\n\n localStorage.removeItem(readyName.toString());\n },\n removeAllItems: () => {\n localStorage.clear();\n },\n };\n}\n","import { forwardRef, memo } from \"react\";\nimport { useTheme } from \"react-better-core\";\n\nimport { ComponentPaddingProps, ComponentPropWithRef } from \"../types/components\";\n\nimport { useMediaQuery } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport { useBetterHtmlContextInternal } from \"./BetterHtmlProvider\";\n\nexport type PageHolderProps = {\n /** @default false */\n noMaxContentWidth?: boolean;\n backgroundColor?: React.CSSProperties[\"backgroundColor\"];\n backgroundImage?: React.CSSProperties[\"backgroundImage\"];\n children?: React.ReactNode;\n} & ComponentPaddingProps;\n\ntype PageHolderComponentType = {\n (props: ComponentPropWithRef<HTMLDivElement, PageHolderProps>): React.ReactElement;\n center: (\n props: ComponentPropWithRef<\n HTMLDivElement,\n PageHolderProps & {\n pageBackgroundColor?: React.CSSProperties[\"backgroundColor\"];\n pageBackgroundImage?: React.CSSProperties[\"backgroundImage\"];\n contentMaxWidth?: React.CSSProperties[\"maxWidth\"];\n /** @default true */\n contentInsideBox?: boolean;\n behindComponent?: React.ReactNode;\n sideComponent?: React.ReactNode;\n /** @default \"right\" */\n sideComponentPosition?: \"left\" | \"right\";\n }\n >,\n ) => React.ReactElement;\n};\n\nconst PageHolderComponent: PageHolderComponentType = forwardRef(function PageHolder(\n { noMaxContentWidth, children, ...props }: PageHolderProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const theme = useTheme();\n const { app } = useBetterHtmlContextInternal();\n\n return (\n <Div\n as=\"main\"\n width=\"100%\"\n maxWidth={!noMaxContentWidth ? app.contentMaxWidth : undefined}\n margin=\"0px auto\"\n padding={theme.styles.space}\n {...props}\n ref={ref}\n >\n {children}\n </Div>\n );\n}) as any;\n\nPageHolderComponent.center = forwardRef(function Center(\n {\n pageBackgroundColor,\n pageBackgroundImage,\n contentMaxWidth,\n contentInsideBox,\n behindComponent,\n sideComponent,\n sideComponentPosition = \"right\",\n noMaxContentWidth,\n children,\n ...props\n },\n ref,\n) {\n const theme = useTheme();\n const mediaQuery = useMediaQuery();\n const { app } = useBetterHtmlContextInternal();\n\n const breakingPoint = mediaQuery.size1000;\n\n const withSideComponent = sideComponent && !breakingPoint;\n\n const ContentTag = contentInsideBox !== false ? Div.box : Div;\n\n return (\n <Div.row\n position=\"relative\"\n width=\"100%\"\n minHeight=\"100svh\"\n alignItems=\"center\"\n justifyContent=\"center\"\n backgroundColor={pageBackgroundColor}\n backgroundImage={pageBackgroundImage}\n >\n {behindComponent && (\n <Div\n position=\"fixed\"\n width={`${withSideComponent ? 50 : 100}%`}\n height=\"100svh\"\n top={0}\n left={sideComponentPosition === \"right\" ? 0 : \"auto\"}\n right={sideComponentPosition === \"left\" ? 0 : \"auto\"}\n zIndex={1}\n >\n {behindComponent}\n </Div>\n )}\n\n {sideComponentPosition === \"left\" && withSideComponent && <Div width=\"50%\" />}\n\n <Div.column position=\"relative\" width={`${withSideComponent ? 50 : 100}%`} alignItems=\"center\" zIndex={2}>\n <ContentTag\n width={`calc(100% - ${theme.styles.space * 2}px)`}\n maxWidth={!noMaxContentWidth ? contentMaxWidth ?? app.contentMaxWidth / 2 : undefined}\n marginInline={theme.styles.space}\n marginBlock={theme.styles.space}\n {...props}\n ref={ref}\n >\n {children}\n </ContentTag>\n </Div.column>\n\n {sideComponentPosition === \"right\" && withSideComponent && <Div width=\"50%\" />}\n\n {withSideComponent && (\n <Div\n position=\"fixed\"\n width=\"50%\"\n height=\"100svh\"\n top={0}\n left={sideComponentPosition === \"left\" ? 0 : \"auto\"}\n right={sideComponentPosition === \"right\" ? 0 : \"auto\"}\n >\n {sideComponent}\n </Div>\n )}\n </Div.row>\n );\n}) as PageHolderComponentType[\"center\"];\n\nconst PageHolder = memo(PageHolderComponent) as any as typeof PageHolderComponent & {\n center: typeof PageHolderComponent.center;\n};\n\nPageHolder.center = PageHolderComponent.center;\n\nexport default PageHolder;\n","import { forwardRef, memo, useCallback } from \"react\";\nimport { darkenColor, lightenColor, OmitProps, useBetterCoreContext, useTheme } from \"react-better-core\";\n\nimport { ComponentPropWithRef } from \"../types/components\";\n\nimport { filterHover } from \"../utils/variableFunctions\";\n\nimport Div, { DivProps } from \"./Div\";\nimport Text, { TextProps } from \"./Text\";\n\nconst borderRadiusOffset = 1.3;\n\nexport type ChipProps<Value = unknown> = {\n text: string;\n /** @default theme.colors.textPrimary */\n color?: string;\n /** @default backgroundSecondary */\n backgroundColor?: string;\n /** @default theme.styles.borderRadius / 1.3 */\n borderRadius?: number;\n /** @default false */\n isCircle?: boolean;\n value?: Value;\n onClick?: (event: React.MouseEvent<HTMLDivElement, globalThis.MouseEvent>) => void;\n onClickWithValue?: (value: Value) => void;\n} & Pick<DivProps, \"border\" | \"borderColor\" | \"borderWidth\" | \"borderStyle\"> &\n Pick<TextProps, \"fontFamily\" | \"fontSize\" | \"fontWeight\" | \"fontStyle\">;\n\ntype ChipComponentType = {\n <Value>(props: ComponentPropWithRef<HTMLDivElement, ChipProps<Value>>): React.ReactElement;\n colored: <Value>(\n props: ComponentPropWithRef<\n HTMLDivElement,\n OmitProps<ChipProps<Value>, \"color\" | \"backgroundColor\"> & {\n color?: string;\n /** @default false */\n withWhiteBackground?: boolean;\n }\n >,\n ) => React.ReactElement;\n};\n\nconst ChipComponent: ChipComponentType = forwardRef(function Chip<Value>(\n {\n text,\n color,\n backgroundColor,\n borderRadius,\n isCircle,\n value,\n onClick,\n onClickWithValue,\n ...props\n }: ChipProps<Value>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const theme = useTheme();\n\n const onClickElement = useCallback(\n (event: React.MouseEvent<HTMLDivElement, globalThis.MouseEvent>) => {\n onClick?.(event);\n onClickWithValue?.(value as any);\n },\n [onClick, onClickWithValue, value],\n );\n\n return (\n <Div\n width=\"fit-content\"\n backgroundColor={backgroundColor ?? theme.colors.backgroundSecondary}\n borderRadius={isCircle ? 999 : borderRadius ?? theme.styles.borderRadius / borderRadiusOffset}\n paddingBlock={theme.styles.gap / 2}\n paddingInline={theme.styles.space / 1.5}\n filterHover={onClick || onClickWithValue ? filterHover().z1 : undefined}\n onClick={onClickElement}\n cursor={onClick || onClickWithValue ? \"pointer\" : undefined}\n {...props}\n ref={ref}\n >\n <Text color={color ?? theme.colors.textPrimary}>{text}</Text>\n </Div>\n );\n}) as any;\n\nChipComponent.colored = forwardRef(function Colored({ color, withWhiteBackground, ...props }, ref) {\n const theme = useTheme();\n const { colorTheme } = useBetterCoreContext();\n\n const readyColor = color ?? theme.colors.textSecondary;\n\n const chip = (\n <ChipComponent\n color={colorTheme === \"light\" ? darkenColor(readyColor, 0.7) : lightenColor(readyColor, 0.7)}\n backgroundColor={readyColor + \"40\"}\n border={`1px solid ${readyColor}`}\n ref={ref}\n {...props}\n />\n );\n\n return withWhiteBackground ? (\n <Div\n width=\"fit-content\"\n backgroundColor={withWhiteBackground ? (colorTheme === \"light\" ? \"#ffffff\" : \"#000000\") : undefined}\n borderRadius={\n withWhiteBackground ? props.borderRadius ?? theme.styles.borderRadius / borderRadiusOffset + 0.3 : undefined\n }\n >\n {chip}\n </Div>\n ) : (\n chip\n );\n}) as ChipComponentType[\"colored\"];\n\nconst Chip = memo(ChipComponent) as any as typeof ChipComponent & {\n colored: typeof ChipComponent.colored;\n};\n\nChip.colored = ChipComponent.colored;\n\nexport default Chip;\n","import { forwardRef, memo, useCallback, useState, useEffect, useMemo, useRef, useId } from \"react\";\nimport {\n AnyOtherString,\n Country,\n darkenColor,\n lightenColor,\n OmitProps,\n useBooleanState,\n useDebounceState,\n countries,\n IconName,\n Theme,\n useTheme,\n useBetterCoreContext,\n} from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport { isMobileDevice } from \"../constants\";\n\nimport { ComponentHoverStyle, ComponentPropWithRef, ComponentStyle } from \"../types/components\";\n\nimport { useComponentInputFieldDateProps, useComponentPropsGrouper, useComponentPropsWithPrefix } from \"../utils/hooks\";\nimport { getBrowser } from \"../utils/functions\";\n\nimport Text from \"./Text\";\nimport Div from \"./Div\";\nimport Icon from \"./Icon\";\nimport Button from \"./Button\";\nimport Label from \"./Label\";\nimport Dropdown, { DropdownOption } from \"./Dropdown\";\nimport Image from \"./Image\";\nimport Calendar from \"./Calendar\";\n\nconst buttonWidth = 50;\nconst colorPickerSpacing = 4;\nconst colorPickerColorWidth = 12 + 27 + colorPickerSpacing;\nconst colorPickerValueWidth = 12 + 74 + colorPickerSpacing;\n\nconst InputElement = styled.input.withConfig({\n shouldForwardProp: (prop) =>\n ![\"theme\", \"withLeftIcon\", \"withRightIcon\", \"withPrefix\", \"withSuffix\", \"style\", \"hoverStyle\"].includes(prop),\n})<{\n theme: Theme;\n withLeftIcon?: boolean;\n withRightIcon?: boolean;\n withPrefix?: boolean;\n withSuffix?: boolean;\n style: ComponentStyle;\n hoverStyle: ComponentStyle;\n}>`\n position: relative;\n width: 100%;\n font-family: ${(props) => props.theme.styles.fontFamily};\n font-size: 16px;\n line-height: 20px;\n color: ${(props) => props.theme.colors.textPrimary};\n background: ${(props) => props.theme.colors.backgroundContent};\n border: 1px solid ${(props) => props.theme.colors.border};\n border-radius: ${(props) => props.theme.styles.borderRadius}px;\n border-top-left-radius: ${(props) => (props.withPrefix ? 0 : undefined)};\n border-bottom-left-radius: ${(props) => (props.withPrefix ? 0 : undefined)};\n border-top-right-radius: ${(props) => (props.withSuffix ? 0 : undefined)};\n border-bottom-right-radius: ${(props) => (props.withSuffix ? 0 : undefined)};\n outline: none;\n padding: ${(props) => `${(props.theme.styles.space + props.theme.styles.gap) / 2}px ${props.theme.styles.space}px`};\n padding-left: ${(props) =>\n props.withLeftIcon\n ? `${props.theme.styles.space + 16 + props.theme.styles.space - 1}px`\n : props.withPrefix\n ? `${props.theme.styles.space}px`\n : undefined};\n padding-right: ${(props) =>\n props.withRightIcon\n ? `${props.theme.styles.space + 16 + props.theme.styles.space - 1}px`\n : props.withSuffix\n ? `${props.theme.styles.space}px`\n : undefined};\n transition: ${(props) => props.theme.styles.transition};\n\n &::placeholder {\n color: ${(props) => props.theme.colors.textSecondary}80;\n }\n\n &:focus {\n border-color: ${(props) => props.theme.colors.primary};\n }\n\n &:disabled {\n filter: brightness(0.9);\n cursor: not-allowed;\n }\n\n &:read-only {\n caret-color: transparent;\n }\n\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n &[type=\"number\"] {\n -moz-appearance: textfield;\n }\n\n &[type=\"date\"],\n &[type=\"datetime-local\"],\n &[type=\"time\"] {\n min-height: 48px;\n -webkit-appearance: none;\n -moz-appearance: textfield;\n\n &::-webkit-calendar-picker-indicator {\n display: none;\n -webkit-appearance: none;\n }\n\n &::-webkit-date-and-time-value {\n text-align: left !important;\n }\n }\n\n &[type=\"color\"] {\n --color-spacing: ${(props) => (props.theme.styles.space + props.theme.styles.gap) / 2}px;\n\n width: calc(var(--color-spacing) + 27px + ${colorPickerValueWidth}px);\n height: 48px;\n padding: 0px;\n padding-block: calc(var(--color-spacing) - 3px);\n padding-left: var(--color-spacing);\n padding-right: ${colorPickerValueWidth}px;\n }\n\n &.react-better-html-phone-number-holder {\n border-right: none;\n border-top-right-radius: 0px;\n border-bottom-right-radius: 0px;\n }\n\n &.react-better-html-phone-number {\n border-top-left-radius: 0px;\n border-bottom-left-radius: 0px;\n }\n\n &.react-better-html-dropdown {\n padding-right: ${(props) => props.theme.styles.space + 16 + props.theme.styles.space - 1}px;\n\n &.react-better-html-dropdown-multiselect {\n border-top: none;\n border-top-left-radius: 0px;\n border-top-right-radius: 0px;\n }\n\n &.react-better-html-dropdown-open {\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n }\n\n &.react-better-html-dropdown-open-late {\n z-index: 1001;\n }\n }\n\n &.react-better-html-inputField-dateTime-opened {\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n }\n\n &.react-better-html-inputField-dateTime-opened-late {\n z-index: 1001;\n }\n\n ${(props) => props.style as any}\n\n &:hover {\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nconst TextareaElement = styled.textarea.withConfig({\n shouldForwardProp: (prop) => ![\"theme\", \"withLeftIcon\", \"withRightIcon\", \"style\", \"hoverStyle\"].includes(prop),\n})<{\n theme: Theme;\n withLeftIcon?: boolean;\n withRightIcon?: boolean;\n style: ComponentStyle;\n hoverStyle: ComponentStyle;\n}>`\n width: 100%;\n min-height: 3lh;\n max-height: 8lh;\n font-family: ${(props) => props.theme.styles.fontFamily};\n font-size: 16px;\n line-height: 20px;\n color: ${(props) => props.theme.colors.textPrimary};\n background: ${(props) => props.theme.colors.backgroundContent};\n border: 1px solid ${(props) => props.theme.colors.border};\n border-radius: ${(props) => props.theme.styles.borderRadius}px;\n outline: none;\n padding: ${(props) => `${(props.theme.styles.gap + props.theme.styles.space) / 2}px ${props.theme.styles.space}px`};\n padding-left: ${(props) =>\n props.withLeftIcon ? `${props.theme.styles.space + 16 + props.theme.styles.space - 1}px` : undefined};\n padding-right: ${(props) =>\n props.withRightIcon ? `${props.theme.styles.space + 16 + props.theme.styles.space - 1}px` : undefined};\n resize: vertical;\n transition: border-color ${(props) => props.theme.styles.transition};\n\n &::placeholder {\n color: ${(props) => props.theme.colors.textSecondary}80;\n }\n\n &:focus {\n border-color: ${(props) => props.theme.colors.primary};\n }\n\n ${(props) => props.style as any}\n\n &:hover {\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nconst hours = Array.from({ length: 24 }, (_, index) => index);\nconst minutes = Array.from({ length: 60 }, (_, index) => index);\n\nexport type InputFieldProps = {\n label?: string;\n labelColor?: string;\n errorText?: string;\n infoText?: string;\n leftIcon?: IconName | AnyOtherString;\n rightIcon?: IconName | AnyOtherString;\n prefix?: React.ReactNode;\n prefixBackgroundColor?: string;\n suffix?: React.ReactNode;\n suffixBackgroundColor?: string;\n insideInputFieldBeforeComponent?: React.ReactNode;\n insideInputFieldAfterComponent?: React.ReactNode;\n /** @default false */\n withDebounce?: boolean;\n /** @default 0.5s */\n debounceDelay?: number;\n onChangeValue?: (value: string) => void;\n onClickRightIcon?: () => void;\n holderRef?: React.ForwardedRef<HTMLDivElement>;\n} & OmitProps<React.ComponentProps<\"input\">, \"style\" | \"ref\" | \"prefix\"> &\n ComponentStyle &\n ComponentHoverStyle;\n\nexport type TextareaFieldProps = OmitProps<InputFieldProps, \"type\"> &\n OmitProps<React.ComponentProps<\"textarea\">, \"style\" | \"ref\">;\n\ntype InputFieldComponentType = {\n (props: ComponentPropWithRef<HTMLInputElement, InputFieldProps>): React.ReactElement;\n multiline: (props: ComponentPropWithRef<HTMLTextAreaElement, TextareaFieldProps>) => React.ReactElement;\n email: (props: ComponentPropWithRef<HTMLInputElement, InputFieldProps>) => React.ReactElement;\n password: (\n props: ComponentPropWithRef<\n HTMLInputElement,\n OmitProps<InputFieldProps, \"autoComplete\"> & {\n /** @default \"current-password\" */\n autoComplete?: React.ComponentProps<\"input\">[\"autoComplete\"];\n }\n >,\n ) => React.ReactElement;\n search: (props: ComponentPropWithRef<HTMLInputElement, InputFieldProps>) => React.ReactElement;\n phoneNumber: (\n props: ComponentPropWithRef<HTMLInputElement, OmitProps<InputFieldProps, \"type\" | \"prefix\">>,\n ) => React.ReactElement;\n date: (\n props: ComponentPropWithRef<\n HTMLInputElement,\n InputFieldProps & {\n minDate?: Date;\n maxDate?: Date;\n }\n >,\n ) => React.ReactElement;\n dateTime: (\n props: ComponentPropWithRef<\n HTMLInputElement,\n InputFieldProps & {\n minDate?: Date;\n maxDate?: Date;\n /** @default today */\n defaultDateAfterTimePick?: `${number}-${number}-${number}`;\n /** @default \"00:00\" */\n defaultTimeAfterDatePick?: `${number}:${number}`;\n }\n >,\n ) => React.ReactElement;\n time: (props: ComponentPropWithRef<HTMLInputElement, InputFieldProps>) => React.ReactElement;\n color: (props: ComponentPropWithRef<HTMLInputElement, InputFieldProps>) => React.ReactElement;\n};\n\nconst InputFieldComponent: InputFieldComponentType = forwardRef(function InputField(\n {\n label,\n labelColor,\n errorText,\n infoText,\n leftIcon,\n rightIcon,\n prefix,\n prefixBackgroundColor,\n suffix,\n suffixBackgroundColor,\n insideInputFieldBeforeComponent,\n insideInputFieldAfterComponent,\n withDebounce,\n debounceDelay = 0.5,\n onChange,\n onChangeValue,\n onClickRightIcon,\n holderRef,\n required,\n placeholder,\n id,\n ...props\n }: InputFieldProps,\n ref: React.ForwardedRef<HTMLInputElement>,\n) {\n const theme = useTheme();\n const internalId = useId();\n const { colorTheme } = useBetterCoreContext();\n const [_, debouncedValue, setDebouncedValue] = useDebounceState<string>(\n props.value?.toString() ?? \"\",\n debounceDelay,\n );\n\n const { style, hoverStyle, excludeStyle, restProps } = useComponentPropsGrouper(props, true);\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n const onChangeElement = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = event.target.value;\n\n if (withDebounce) {\n onChange?.(event);\n setDebouncedValue(newValue);\n } else {\n onChange?.(event);\n onChangeValue?.(newValue);\n }\n },\n [onChange, onChangeValue, withDebounce],\n );\n\n const leftIconZIndex = useMemo(\n () =>\n [\"react-better-html-dropdown-open-late\", \"react-better-html-inputField-dateTime-opened-late\"].some(\n (classNameItem) => props.className?.includes(classNameItem),\n )\n ? 1002\n : 1,\n [props.className],\n );\n\n useEffect(() => {\n if (!withDebounce) return;\n\n onChangeValue?.(debouncedValue);\n }, [withDebounce, onChangeValue, debouncedValue]);\n\n const readyId = id ?? internalId;\n\n return (\n <Div.column width=\"100%\" gap={theme.styles.gap / 2} {...excludeStyle}>\n {label && (\n <Label text={label} color={labelColor} required={required} isError={!!errorText} htmlFor={readyId} />\n )}\n\n <Div.row alignItems=\"stretch\" width=\"100%\">\n {prefix && (\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n border={`1px solid ${theme.colors.border}`}\n borderRight=\"none\"\n backgroundColor={\n prefixBackgroundColor ??\n (colorTheme === \"light\"\n ? darkenColor(theme.colors.backgroundContent, 0.03)\n : lightenColor(theme.colors.backgroundContent, 0.1))\n }\n borderTopLeftRadius={theme.styles.borderRadius}\n borderBottomLeftRadius={theme.styles.borderRadius}\n paddingInline={theme.styles.space}\n >\n {prefix}\n </Div.row>\n )}\n\n <Div position=\"relative\" width=\"100%\" height=\"fit-content\" ref={holderRef}>\n {insideInputFieldBeforeComponent}\n\n <Div position=\"relative\" width=\"100%\" height=\"fit-content\">\n {leftIcon && (\n <Icon\n name={leftIcon}\n position=\"absolute\"\n top={\n (props.type === \"date\" || props.type === \"time\" || props.type === \"datetime-local\"\n ? 48\n : 46) / 2\n }\n left={theme.styles.space + 1}\n transform=\"translateY(-50%)\"\n pointerEvents=\"none\"\n zIndex={leftIconZIndex}\n />\n )}\n\n <InputElement\n theme={theme}\n withLeftIcon={leftIcon !== undefined}\n withRightIcon={rightIcon !== undefined}\n withPrefix={prefix !== undefined}\n withSuffix={suffix !== undefined}\n required={required}\n placeholder={placeholder ?? label}\n id={readyId}\n onChange={onChangeElement}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n ref={ref}\n />\n\n {rightIcon ? (\n onClickRightIcon ? (\n <Button.icon\n icon={rightIcon}\n position=\"absolute\"\n top={46 / 2}\n right={theme.styles.space + 1 - theme.styles.space / 2}\n transform=\"translateY(-50%)\"\n onClick={onClickRightIcon}\n />\n ) : (\n <Icon\n name={rightIcon}\n position=\"absolute\"\n top={46 / 2}\n right={theme.styles.space + 1}\n transform=\"translateY(-50%)\"\n pointerEvents=\"none\"\n />\n )\n ) : undefined}\n\n {insideInputFieldAfterComponent}\n </Div>\n </Div>\n\n {suffix && (\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n border={`1px solid ${theme.colors.border}`}\n borderLeft=\"none\"\n backgroundColor={\n suffixBackgroundColor ??\n (colorTheme === \"light\"\n ? darkenColor(theme.colors.backgroundContent, 0.03)\n : lightenColor(theme.colors.backgroundContent, 0.1))\n }\n borderTopRightRadius={theme.styles.borderRadius}\n borderBottomRightRadius={theme.styles.borderRadius}\n paddingInline={theme.styles.space}\n >\n {suffix}\n </Div.row>\n )}\n </Div.row>\n\n {(errorText || infoText) && (\n <Text\n as=\"span\"\n display=\"block\"\n fontSize={14}\n color={errorText ? theme.colors.error : labelColor ?? theme.colors.textSecondary}\n >\n {errorText || infoText}\n </Text>\n )}\n </Div.column>\n );\n}) as any;\n\nInputFieldComponent.multiline = forwardRef(function Multiline(\n {\n label,\n placeholder,\n errorText,\n infoText,\n leftIcon,\n rightIcon,\n onChange,\n onChangeValue,\n onClickRightIcon,\n required,\n id,\n ...props\n },\n ref,\n) {\n const theme = useTheme();\n const internalId = useId();\n\n const { style, hoverStyle, restProps } = useComponentPropsGrouper(props);\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n const onChangeElement = useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange?.(event);\n onChangeValue?.(event.target.value);\n },\n [onChange, onChangeValue],\n );\n\n const readyId = id ?? internalId;\n\n return (\n <Div.column gap={theme.styles.gap / 2}>\n {label && <Label text={label} required={required} isError={!!errorText} htmlFor={readyId} />}\n\n <Div position=\"relative\" width=\"100%\">\n {leftIcon && (\n <Icon\n name={leftIcon}\n position=\"absolute\"\n top={46 / 2}\n left={theme.styles.space + 1}\n transform=\"translateY(-50%)\"\n pointerEvents=\"none\"\n />\n )}\n\n <TextareaElement\n theme={theme}\n withLeftIcon={leftIcon !== undefined}\n withRightIcon={rightIcon !== undefined}\n required={required}\n placeholder={placeholder ?? label}\n onChange={onChangeElement}\n id={readyId}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n ref={ref}\n />\n\n {rightIcon ? (\n onClickRightIcon ? (\n <Button.icon\n icon={rightIcon}\n position=\"absolute\"\n top={46 / 2}\n right={theme.styles.space + 1 - theme.styles.space / 2}\n transform=\"translateY(-50%)\"\n onClick={onClickRightIcon}\n />\n ) : (\n <Icon\n name={rightIcon}\n position=\"absolute\"\n top={46 / 2}\n right={theme.styles.space + 1}\n transform=\"translateY(-50%)\"\n pointerEvents=\"none\"\n />\n )\n ) : undefined}\n </Div>\n\n {(errorText || infoText) && (\n <Text\n as=\"span\"\n display=\"block\"\n marginTop={theme.styles.gap / 2}\n color={errorText ? theme.colors.error : props.labelColor ?? theme.colors.textSecondary}\n fontSize={14}\n >\n {errorText || infoText}\n </Text>\n )}\n </Div.column>\n );\n}) as InputFieldComponentType[\"multiline\"];\n\nInputFieldComponent.email = forwardRef(function Email({ ...props }, ref) {\n return (\n <InputFieldComponent\n type=\"email\"\n placeholder=\"your@email.here\"\n autoComplete=\"email\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n ref={ref}\n {...props}\n />\n );\n}) as InputFieldComponentType[\"email\"];\n\nInputFieldComponent.password = forwardRef(function Password({ ...props }, ref) {\n const [isPassword, setIsPassword] = useBooleanState(true);\n\n return (\n <InputFieldComponent\n type={isPassword ? \"password\" : \"text\"}\n placeholder=\"******\"\n rightIcon={isPassword ? \"eye\" : \"eyeDashed\"}\n onClickRightIcon={setIsPassword.toggle}\n autoComplete=\"current-password\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n ref={ref}\n {...props}\n />\n );\n}) as InputFieldComponentType[\"password\"];\n\nInputFieldComponent.search = forwardRef(function Search({ value, onChangeValue, onFocus, onBlur, ...props }, ref) {\n const [inputFieldValue, setInputFieldValue] = useState<string>(value?.toString() ?? \"\");\n const [inputFieldFocused, setInputFieldFocused] = useBooleanState();\n\n const onChangeValueElement = useCallback(\n (value: string) => {\n setInputFieldValue(value);\n onChangeValue?.(value);\n },\n [onChangeValue],\n );\n const onFocusElement = useCallback(\n (event: React.FocusEvent<HTMLInputElement, Element>) => {\n setInputFieldFocused.setTrue();\n onFocus?.(event);\n },\n [onFocus],\n );\n const onBlurElement = useCallback(\n (event: React.FocusEvent<HTMLInputElement, Element>) => {\n setTimeout(() => setInputFieldFocused.setFalse(), 0.1 * 1000);\n onBlur?.(event);\n },\n [onBlur],\n );\n const onClickRightIcon = useCallback(() => {\n onChangeValueElement(\"\");\n }, [onChangeValueElement]);\n\n return (\n <InputFieldComponent\n leftIcon=\"magnifyingGlass\"\n placeholder=\"Search...\"\n rightIcon={inputFieldValue.length > 0 && inputFieldFocused ? \"XMark\" : undefined}\n onClickRightIcon={onClickRightIcon}\n value={inputFieldValue}\n onChangeValue={onChangeValueElement}\n onFocus={onFocusElement}\n onBlur={onBlurElement}\n ref={ref}\n {...props}\n />\n );\n}) as InputFieldComponentType[\"search\"];\n\nInputFieldComponent.phoneNumber = forwardRef(function PhoneNumber(\n { label, value, onChangeValue, labelColor, id, ...props },\n ref,\n) {\n const theme = useTheme();\n const internalId = useId();\n\n const [dropdownValue, setDropdownValue] = useState<string>();\n const [inputFieldValue, setInputFieldValue] = useState<string>(value?.toString() ?? \"\");\n\n const renderOption = useCallback(\n (option: DropdownOption<string, Country>, index: number, isSelected: boolean): React.ReactNode => (\n <Div.row alignItems=\"center\" gap={theme.styles.gap}>\n <Image src={`https://flagcdn.com/w80/${option.data?.code.toString().toLowerCase()}.webp`} width={20} />\n <Text>{option.label}</Text>\n </Div.row>\n ),\n [],\n );\n const onChangeDropdown = useCallback(\n (value: string | undefined) => {\n setDropdownValue(value);\n onChangeValue?.(value ? `+${value}${inputFieldValue}` : inputFieldValue); //? Same line as onChangeValueElement\n },\n [onChangeValue, inputFieldValue],\n );\n const onChangeValueElement = useCallback(\n (value: string) => {\n const readyValue = value.replace(/\\D/g, \"\");\n\n setInputFieldValue(readyValue);\n onChangeValue?.(dropdownValue ? `+${dropdownValue}${readyValue}` : readyValue); //? Same line as onChangeDropdown\n },\n [onChangeValue, dropdownValue],\n );\n\n const options = useMemo<DropdownOption<string, Country>[]>(\n () =>\n countries.map((country) => ({\n value: country.phoneNumberExtension,\n label: `+${country.phoneNumberExtension}`,\n data: country,\n })),\n [],\n );\n const defaultValue = useMemo<string>(() => {\n const thisTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n const initialDefaultValue = options.find((option) => option.data?.timeZone === thisTimeZone)?.value ?? \"\";\n setDropdownValue(initialDefaultValue);\n\n return initialDefaultValue;\n }, [options]);\n\n useEffect(() => {\n if (value === undefined || value === null) return;\n\n const newValue = value.toString();\n\n const country = countries.find(\n (country) =>\n country.phoneNumberExtension ===\n newValue.slice(\n newValue.startsWith(\"+\") ? 1 : 0,\n country.phoneNumberExtension.length + (newValue.startsWith(\"+\") ? 1 : 0),\n ),\n );\n\n if (!country) {\n setInputFieldValue(newValue);\n return;\n }\n\n setDropdownValue(country.phoneNumberExtension);\n setInputFieldValue(newValue.slice(country?.phoneNumberExtension.length + 1));\n }, [value]);\n\n const readyId = id ?? internalId;\n\n return (\n <Div.column width=\"100%\" gap={theme.styles.gap / 2}>\n {label && (\n <Label\n text={label}\n color={labelColor}\n required={props.required}\n isError={!!props.errorText}\n htmlFor={readyId}\n />\n )}\n\n <Div.row>\n <Dropdown\n options={options}\n renderOption={renderOption}\n width={130}\n minWidth={116}\n withSearch\n placeholder=\"+00\"\n inputFieldClassName=\"react-better-html-phone-number-holder\"\n defaultValue={defaultValue}\n value={dropdownValue}\n disabled={props.disabled}\n onChange={onChangeDropdown}\n withoutClearButton\n withoutRenderingOptionsWhenClosed\n />\n <InputFieldComponent\n placeholder={label ?? \"Phone number\"}\n className=\"react-better-html-phone-number\"\n value={inputFieldValue}\n onChangeValue={onChangeValueElement}\n ref={ref}\n id={readyId}\n {...props}\n />\n </Div.row>\n </Div.column>\n );\n}) as InputFieldComponentType[\"phoneNumber\"];\n\nInputFieldComponent.date = forwardRef(function Date({ minDate, maxDate, ...props }, ref) {\n const theme = useTheme();\n\n const holderRef = useRef<HTMLDivElement>(null);\n\n const isMobileIOS = isMobileDevice && getBrowser() === \"safari\";\n\n const { internalValue, setInternalValue, inputFieldProps, insideInputFieldComponentProps } =\n useComponentInputFieldDateProps(props, holderRef, isMobileIOS);\n\n const onChange = useCallback(\n (date?: string) => {\n inputFieldProps.onChangeValue?.(date ?? \"\");\n setInternalValue(date ?? \"\");\n },\n [inputFieldProps.onChangeValue],\n );\n\n return (\n <InputFieldComponent\n type=\"date\"\n insideInputFieldAfterComponent={\n !isMobileIOS ? (\n <Div\n position=\"absolute\"\n top=\"100%\"\n left={0}\n width=\"fit-content\"\n backgroundColor={theme.colors.backgroundContent}\n borderBottomLeftRadius={theme.styles.borderRadius}\n borderBottomRightRadius={theme.styles.borderRadius}\n boxShadow=\"0px 10px 20px #00000020\"\n userSelect=\"none\"\n {...insideInputFieldComponentProps}\n >\n <Calendar value={internalValue} minDate={minDate} maxDate={maxDate} onChange={onChange} />\n </Div>\n ) : undefined\n }\n holderRef={holderRef}\n ref={ref}\n {...props}\n {...inputFieldProps}\n />\n );\n}) as InputFieldComponentType[\"date\"];\n\nInputFieldComponent.dateTime = forwardRef(function DateTime(\n { minDate, maxDate, defaultDateAfterTimePick, defaultTimeAfterDatePick = \"00:00\", ...props },\n ref,\n) {\n const theme = useTheme();\n\n const holderRef = useRef<HTMLDivElement>(null);\n const selectedHourRef = useRef<HTMLDivElement>(null);\n const selectedMinuteRef = useRef<HTMLDivElement>(null);\n\n const isMobileIOS = isMobileDevice && getBrowser() === \"safari\";\n\n const { internalValue, setInternalValue, inputFieldProps, insideInputFieldComponentProps, isOpen } =\n useComponentInputFieldDateProps(props, holderRef, isMobileIOS);\n\n const onChange = useCallback(\n (date?: string) => {\n const newValue = date ? `${date}T${internalValue?.toString().split(\"T\")[1] ?? defaultTimeAfterDatePick}` : \"\";\n\n inputFieldProps.onChangeValue?.(newValue);\n setInternalValue(newValue);\n },\n [internalValue, defaultTimeAfterDatePick, inputFieldProps.onChangeValue],\n );\n const onClickHour = useCallback(\n (hour: number) => {\n const newTime = `${hour.toString().padStart(2, \"0\")}:${internalValue?.toString().split(\":\")[1] || \"00\"}`;\n\n const today =\n defaultDateAfterTimePick ??\n `${new Date().getFullYear()}-${(new Date().getMonth() + 1).toString().padStart(2, \"0\")}-${new Date()\n .getDate()\n .toString()\n .padStart(2, \"0\")}`;\n\n const newValue = `${(internalValue.trim() || today)?.toString().split(\"T\")[0]}T${newTime}`;\n inputFieldProps.onChangeValue?.(newValue);\n setInternalValue(newValue);\n },\n [defaultDateAfterTimePick, internalValue, inputFieldProps.onChangeValue],\n );\n const onClickMinute = useCallback(\n (minute: number) => {\n const newTime = `${internalValue?.toString().split(\"T\")?.[1]?.split(\":\")[0] || \"00\"}:${minute\n .toString()\n .padStart(2, \"0\")}`;\n\n const today =\n defaultDateAfterTimePick ??\n `${new Date().getFullYear()}-${(new Date().getMonth() + 1).toString().padStart(2, \"0\")}-${new Date()\n .getDate()\n .toString()\n .padStart(2, \"0\")}`;\n\n const newValue = `${(internalValue.trim() || today)?.toString().split(\"T\")[0]}T${newTime}`;\n\n inputFieldProps.onChangeValue?.(newValue);\n setInternalValue(newValue);\n },\n [defaultDateAfterTimePick, internalValue, inputFieldProps.onChangeValue],\n );\n\n useEffect(() => {\n if (isOpen && selectedHourRef.current)\n selectedHourRef.current.scrollIntoView({ block: \"nearest\", behavior: \"instant\" });\n\n if (isOpen && selectedMinuteRef.current)\n selectedMinuteRef.current.scrollIntoView({ block: \"nearest\", behavior: \"instant\" });\n }, [isOpen]);\n\n const valueHour = parseInt(internalValue?.toString().split(\"T\")?.[1]?.split(\":\")?.[0]).toString();\n const valueMinute = parseInt(internalValue?.toString().split(\"T\")?.[1]?.split(\":\")?.[1]).toString();\n\n const topSpacing = 32 + theme.styles.space / 2 + theme.styles.gap;\n\n return (\n <InputFieldComponent\n type=\"datetime-local\"\n insideInputFieldAfterComponent={\n !isMobileIOS ? (\n <Div\n position=\"absolute\"\n top=\"100%\"\n left={0}\n width=\"fit-content\"\n backgroundColor={theme.colors.backgroundContent}\n borderBottomLeftRadius={theme.styles.borderRadius}\n borderBottomRightRadius={theme.styles.borderRadius}\n boxShadow=\"0px 10px 20px #00000020\"\n overflow=\"hidden\"\n userSelect=\"none\"\n {...insideInputFieldComponentProps}\n >\n <Div.row gap={theme.styles.space}>\n <Calendar value={internalValue} minDate={minDate} maxDate={maxDate} onChange={onChange} />\n\n <Div.row\n height={276}\n gap={theme.styles.gap / 2}\n paddingTop={topSpacing}\n paddingBottom={theme.styles.space / 2}\n paddingRight={theme.styles.space / 2}\n >\n <Div height=\"100%\">\n <Text fontSize={14} fontWeight={700} textAlign=\"center\" marginBottom={theme.styles.gap / 2}>\n H\n </Text>\n\n <Div\n className=\"react-better-html-no-scrollbar\"\n width={buttonWidth}\n height={`calc(100% - ${16 + theme.styles.gap / 2}px)`}\n overflowY=\"auto\"\n tabIndex={-1}\n >\n {hours.map((hour) => {\n const isSelected = hour.toString() === valueHour;\n\n return (\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n color={isSelected ? theme.colors.base : theme.colors.textPrimary}\n backgroundColor={\n isSelected ? theme.colors.primary : theme.colors.backgroundContent\n }\n borderRadius={theme.styles.borderRadius / 2}\n filterHover=\"brightness(0.9)\"\n cursor=\"pointer\"\n padding={`${theme.styles.space / 2}px ${\n theme.styles.space + theme.styles.gap\n }px`}\n value={hour}\n onClickWithValue={onClickHour}\n ref={isSelected ? selectedHourRef : undefined}\n key={hour}\n >\n <Text textAlign=\"center\">{hour.toString().padStart(2, \"0\")}</Text>\n </Div.row>\n );\n })}\n </Div>\n </Div>\n\n <Div height=\"100%\">\n <Text fontSize={14} fontWeight={700} textAlign=\"center\" marginBottom={theme.styles.gap / 2}>\n M\n </Text>\n\n <Div\n className=\"react-better-html-no-scrollbar\"\n width={buttonWidth}\n height={`calc(100% - ${16 + theme.styles.gap / 2}px)`}\n overflowY=\"auto\"\n tabIndex={-1}\n >\n {minutes.map((minute) => {\n const isSelected = minute.toString() === valueMinute;\n\n return (\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n color={isSelected ? theme.colors.base : theme.colors.textPrimary}\n backgroundColor={\n isSelected ? theme.colors.primary : theme.colors.backgroundContent\n }\n borderRadius={theme.styles.borderRadius / 2}\n filterHover=\"brightness(0.9)\"\n cursor=\"pointer\"\n padding={`${theme.styles.space / 2}px ${\n theme.styles.space + theme.styles.gap\n }px`}\n value={minute}\n onClickWithValue={onClickMinute}\n ref={isSelected ? selectedMinuteRef : undefined}\n key={minute}\n >\n <Text textAlign=\"center\">{minute.toString().padStart(2, \"0\")}</Text>\n </Div.row>\n );\n })}\n </Div>\n </Div>\n </Div.row>\n </Div.row>\n </Div>\n ) : undefined\n }\n holderRef={holderRef}\n ref={ref}\n {...props}\n {...inputFieldProps}\n />\n );\n}) as InputFieldComponentType[\"dateTime\"];\n\nInputFieldComponent.time = forwardRef(function Time({ ...props }, ref) {\n const theme = useTheme();\n\n const holderRef = useRef<HTMLDivElement>(null);\n const selectedHourRef = useRef<HTMLDivElement>(null);\n const selectedMinuteRef = useRef<HTMLDivElement>(null);\n\n const isMobileIOS = isMobileDevice && getBrowser() === \"safari\";\n\n const { internalValue, setInternalValue, inputFieldProps, insideInputFieldComponentProps, isOpen } =\n useComponentInputFieldDateProps(props, holderRef, isMobileIOS);\n\n const onClickHour = useCallback(\n (hour: number) => {\n const value = `${hour.toString().padStart(2, \"0\")}:${internalValue?.toString().split(\":\")[1] || \"00\"}`;\n\n inputFieldProps.onChangeValue?.(value);\n setInternalValue(value);\n },\n [internalValue, inputFieldProps.onChangeValue],\n );\n const onClickMinute = useCallback(\n (minute: number) => {\n const value = `${internalValue?.toString().split(\":\")[0] || \"00\"}:${minute.toString().padStart(2, \"0\")}`;\n\n inputFieldProps.onChangeValue?.(value);\n setInternalValue(value);\n },\n [internalValue, inputFieldProps.onChangeValue],\n );\n\n useEffect(() => {\n if (isOpen && selectedHourRef.current)\n selectedHourRef.current.scrollIntoView({ block: \"nearest\", behavior: \"instant\" });\n\n if (isOpen && selectedMinuteRef.current)\n selectedMinuteRef.current.scrollIntoView({ block: \"nearest\", behavior: \"instant\" });\n }, [isOpen]);\n\n const valueHour = parseInt(internalValue?.toString().split(\":\")?.[0]).toString();\n const valueMinute = parseInt(internalValue?.toString().split(\":\")?.[1]).toString();\n\n return (\n <InputFieldComponent\n type=\"time\"\n insideInputFieldAfterComponent={\n !isMobileIOS ? (\n <Div\n position=\"absolute\"\n top=\"100%\"\n left={0}\n width={buttonWidth * 2 + 2}\n height={300}\n backgroundColor={theme.colors.backgroundContent}\n borderBottomLeftRadius={theme.styles.borderRadius}\n borderBottomRightRadius={theme.styles.borderRadius}\n boxShadow=\"0px 10px 20px #00000020\"\n overflowY=\"auto\"\n userSelect=\"none\"\n {...insideInputFieldComponentProps}\n >\n <Div.row height=\"100%\">\n <Div\n className=\"react-better-html-no-scrollbar\"\n width={buttonWidth}\n height=\"100%\"\n overflowY=\"auto\"\n tabIndex={-1}\n >\n {hours.map((hour) => {\n const isSelected = hour.toString() === valueHour;\n\n return (\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n color={isSelected ? theme.colors.base : theme.colors.textPrimary}\n backgroundColor={isSelected ? theme.colors.primary : theme.colors.backgroundContent}\n filterHover=\"brightness(0.9)\"\n cursor=\"pointer\"\n padding={`${theme.styles.space / 2}px ${theme.styles.space + theme.styles.gap}px`}\n value={hour}\n onClickWithValue={onClickHour}\n ref={isSelected ? selectedHourRef : undefined}\n key={hour}\n >\n <Text textAlign=\"center\">{hour.toString().padStart(2, \"0\")}</Text>\n </Div.row>\n );\n })}\n </Div>\n\n <Div\n className=\"react-better-html-no-scrollbar\"\n width={buttonWidth}\n height=\"100%\"\n overflowY=\"auto\"\n tabIndex={-1}\n >\n {minutes.map((minute) => {\n const isSelected = minute.toString() === valueMinute;\n\n return (\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n color={isSelected ? theme.colors.base : theme.colors.textPrimary}\n backgroundColor={isSelected ? theme.colors.primary : theme.colors.backgroundContent}\n filterHover=\"brightness(0.9)\"\n cursor=\"pointer\"\n padding={`${theme.styles.space / 2}px ${theme.styles.space + theme.styles.gap}px`}\n value={minute}\n onClickWithValue={onClickMinute}\n ref={isSelected ? selectedMinuteRef : undefined}\n key={minute}\n >\n <Text textAlign=\"center\">{minute.toString().padStart(2, \"0\")}</Text>\n </Div.row>\n );\n })}\n </Div>\n </Div.row>\n </Div>\n ) : undefined\n }\n holderRef={holderRef}\n ref={ref}\n {...props}\n {...inputFieldProps}\n minWidth={buttonWidth * 2 + 2}\n />\n );\n}) as InputFieldComponentType[\"time\"];\n\nInputFieldComponent.color = forwardRef(function Color({ value, onChangeValue, ...props }, ref) {\n const [inputFieldValue, setInputFieldValue] = useState<typeof value>(value ?? \"#000000\");\n\n const onChangeValueElement = useCallback(\n (value: string) => {\n setInputFieldValue(value);\n onChangeValue?.(value);\n },\n [onChangeValue],\n );\n\n useEffect(() => {\n if (value === undefined) return;\n\n setInputFieldValue(value);\n }, [value]);\n\n return (\n <InputFieldComponent\n type=\"color\"\n insideInputFieldAfterComponent={\n <Div.row\n position=\"absolute\"\n width=\"100%\"\n height=\"100%\"\n top={0}\n left={colorPickerSpacing}\n alignItems=\"center\"\n pointerEvents=\"none\"\n userSelect=\"none\"\n paddingLeft={colorPickerColorWidth}\n >\n <Text>{inputFieldValue}</Text>\n </Div.row>\n }\n value={inputFieldValue}\n onChangeValue={onChangeValueElement}\n ref={ref}\n {...props}\n />\n );\n}) as InputFieldComponentType[\"color\"];\n\nconst InputField = memo(InputFieldComponent) as any as typeof InputFieldComponent & {\n multiline: typeof InputFieldComponent.multiline;\n email: typeof InputFieldComponent.email;\n password: typeof InputFieldComponent.password;\n search: typeof InputFieldComponent.search;\n phoneNumber: typeof InputFieldComponent.phoneNumber;\n date: typeof InputFieldComponent.date;\n dateTime: typeof InputFieldComponent.dateTime;\n time: typeof InputFieldComponent.time;\n color: typeof InputFieldComponent.color;\n};\n\nInputField.multiline = InputFieldComponent.multiline;\nInputField.email = InputFieldComponent.email;\nInputField.password = InputFieldComponent.password;\nInputField.search = InputFieldComponent.search;\nInputField.phoneNumber = InputFieldComponent.phoneNumber;\nInputField.date = InputFieldComponent.date;\nInputField.dateTime = InputFieldComponent.dateTime;\nInputField.time = InputFieldComponent.time;\nInputField.color = InputFieldComponent.color;\n\nexport default InputField;\n","import { memo } from \"react\";\nimport { useTheme } from \"react-better-core\";\n\nimport Text from \"./Text\";\n\nexport type LabelProps = {\n text?: string;\n /** @default false */\n required?: boolean;\n /** @default false */\n isError?: boolean;\n color?: string;\n htmlFor?: string;\n};\n\nfunction Label({ text, required, isError, color, htmlFor }: LabelProps) {\n const theme = useTheme();\n\n return (\n <Text\n as=\"label\"\n width=\"fit-content\"\n height={16}\n fontSize={14}\n color={isError ? theme.colors.error : color ?? theme.colors.textSecondary}\n htmlFor={htmlFor}\n aria-required={required}\n >\n {text}\n\n {required && (\n <Text as=\"span\" fontSize={16} color={theme.colors.error}>\n {\" \"}\n *\n </Text>\n )}\n </Text>\n );\n}\n\nexport default memo(Label);\n","import { forwardRef, Fragment, memo, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n getPluralWord,\n OmitProps,\n useBooleanState,\n useDebounceState,\n AnyOtherString,\n Country,\n countries,\n IconName,\n useTheme,\n} from \"react-better-core\";\n\nimport { ComponentPropWithRef } from \"../types/components\";\n\nimport Text from \"./Text\";\nimport Div, { DivProps } from \"./Div\";\nimport InputField from \"./InputField\";\nimport Icon from \"./Icon\";\nimport Button from \"./Button\";\nimport Loader from \"./Loader\";\nimport Image from \"./Image\";\nimport Chip from \"./Chip\";\n\nexport type DropdownOption<Value, Data = unknown> = {\n value: Value;\n label: string;\n /** @default false */\n disabled?: boolean;\n searchValues?: string[];\n data?: Data;\n} & (\n | {\n renderType?: \"default\";\n }\n | {\n renderType?: \"chip\";\n chipProps?: OmitProps<\n React.ComponentProps<typeof Chip>,\n \"text\" | \"value\" | \"onClick\" | \"onClickWithValue\" | \"ref\"\n >;\n }\n | {\n renderType?: \"chip.colored\";\n chipProps?: OmitProps<\n React.ComponentProps<typeof Chip.colored>,\n \"text\" | \"value\" | \"onClick\" | \"onClickWithValue\" | \"ref\"\n >;\n }\n);\n\nexport type DropdownProps<Value, Data = unknown> = {\n label?: string;\n labelColor?: string;\n errorText?: string;\n infoText?: string;\n /** @default false */\n required?: boolean;\n name?: string;\n /** @default false */\n disabled?: boolean;\n options: DropdownOption<Value, Data>[];\n placeholder?: string;\n leftIcon?: IconName | AnyOtherString;\n inputFieldClassName?: string;\n /** @default false */\n withSearch?: boolean;\n /** @default false */\n withDebounce?: boolean;\n /** @default 0.5s */\n debounceDelay?: number;\n /** @default false */\n debounceIsLoading?: boolean;\n debounceMinimumSymbolsRequired?: number;\n /** @default false */\n withoutClearButton?: boolean;\n /** @default false */\n withoutRenderingOptionsWhenClosed?: boolean;\n onChangeSearch?: (query: string) => void;\n renderOption?: (option: DropdownOption<Value, Data>, index: number, isSelected: boolean) => React.ReactNode;\n renderOptionDivider?: (\n previousOption: DropdownOption<Value, Data> | undefined,\n nextOption: DropdownOption<Value, Data> | undefined,\n previousOptionIndex: number,\n nextOptionIndex: number,\n ) => React.ReactNode;\n} & OmitProps<DivProps, \"onChange\" | \"defaultChecked\"> &\n (\n | {\n withMultiselect?: false;\n value?: Value;\n defaultValue?: Value;\n onChange?: (value: Value | undefined) => void;\n }\n | {\n withMultiselect: true;\n value?: Value[];\n defaultValue?: Value[];\n onChange?: (value: Value[] | undefined) => void;\n }\n );\n\ntype DropdownComponentType = {\n <Value, Data>(props: ComponentPropWithRef<HTMLDivElement, DropdownProps<Value, Data>>): React.ReactElement;\n countries: (\n props: ComponentPropWithRef<HTMLDivElement, OmitProps<DropdownProps<string, Country>, \"options\">>,\n ) => React.ReactElement;\n};\n\nconst DropdownComponent: DropdownComponentType = forwardRef(function Dropdown<Value, Data>(\n {\n label,\n labelColor,\n errorText,\n infoText,\n required,\n name,\n disabled,\n options,\n value: controlledValue,\n defaultValue,\n placeholder,\n leftIcon,\n inputFieldClassName,\n withSearch,\n withDebounce,\n debounceDelay = 0.5,\n debounceIsLoading,\n debounceMinimumSymbolsRequired,\n withoutClearButton,\n withoutRenderingOptionsWhenClosed,\n onChange,\n onChangeSearch,\n renderOption,\n renderOptionDivider,\n withMultiselect,\n id,\n ...props\n }: DropdownProps<Value, Data>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const theme = useTheme();\n\n const inputFieldHolderRef = useRef<HTMLDivElement>(null);\n const buttonsRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const [isOpen, setIsOpen] = useBooleanState();\n const [isOpenLate, setIsOpenLate] = useBooleanState();\n const [isFocused, setIsFocused] = useBooleanState();\n\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [_, debouncedSearchQuery, setDebouncedSearchQuery, isLoadingDebouncedSearchQuery] = useDebounceState<string>(\n \"\",\n debounceDelay,\n );\n const [focusedOptionIndex, setFocusedOptionIndex] = useState<number | undefined>();\n\n const [internalValue, setInternalValue] = useState<Value | Value[] | undefined>(defaultValue);\n\n const value = controlledValue ?? internalValue;\n\n const filteredOptions = useMemo(() => {\n if (!searchQuery) return options;\n\n const query = searchQuery.toLowerCase();\n\n return options.filter(\n (option) =>\n option.label.toLowerCase().includes(query) ||\n option.searchValues?.some((value) => value.toLowerCase().includes(query)),\n );\n }, [options, searchQuery]);\n\n const onKeyDownInputField = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\" || (!withSearch && event.key === \" \")) {\n event.preventDefault();\n\n if (!disabled) {\n if (withMultiselect) setIsOpen.setTrue();\n else setIsOpen.toggle();\n\n if (isOpen && filteredOptions.length > 0 && focusedOptionIndex !== undefined) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (!option.disabled) {\n const clickedValue = option.value;\n const newValue = withMultiselect\n ? Array.isArray(internalValue)\n ? internalValue?.includes(clickedValue)\n ? internalValue.filter((value) => value !== clickedValue)\n : [...internalValue, clickedValue]\n : [clickedValue]\n : clickedValue;\n\n if (controlledValue === undefined) setInternalValue(newValue);\n\n onChange?.(newValue as any);\n\n if (!withMultiselect) {\n setIsOpen.setFalse();\n inputRef.current?.blur();\n setSearchQuery(\"\");\n setFocusedOptionIndex(undefined);\n }\n }\n }\n }\n } else if (event.key === \"Escape\") {\n setIsOpen.setFalse();\n setFocusedOptionIndex(undefined);\n } else if (event.key === \"ArrowDown\") {\n event.preventDefault();\n\n if (!isOpen) setIsOpen.setTrue();\n\n if (filteredOptions.length > 0) {\n setFocusedOptionIndex((oldValue) =>\n oldValue === undefined ? 0 : (oldValue + 1) % filteredOptions.length,\n );\n }\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n\n if (!isOpen) setIsOpen.setTrue();\n\n if (filteredOptions.length > 0) {\n setFocusedOptionIndex((oldValue) =>\n oldValue === undefined\n ? filteredOptions.length - 1\n : (oldValue - 1 + filteredOptions.length) % filteredOptions.length,\n );\n }\n }\n },\n [\n disabled,\n withSearch,\n isOpen,\n filteredOptions,\n focusedOptionIndex,\n internalValue,\n controlledValue,\n onChange,\n withMultiselect,\n ],\n );\n const onClickOption = useCallback(\n (option: DropdownOption<Value, Data>) => {\n if (!option.disabled) {\n const clickedValue = option.value;\n const newValue = withMultiselect\n ? Array.isArray(internalValue)\n ? internalValue?.includes(clickedValue)\n ? internalValue.filter((value) => value !== clickedValue)\n : [...internalValue, clickedValue]\n : [clickedValue]\n : clickedValue;\n\n if (controlledValue === undefined) setInternalValue(newValue);\n\n onChange?.(newValue as any);\n\n if (!withMultiselect) {\n setIsOpen.setFalse();\n inputRef.current?.blur();\n setSearchQuery(\"\");\n setFocusedOptionIndex(undefined);\n }\n }\n },\n [onChange, internalValue, controlledValue, withMultiselect],\n );\n const onClickClearButton = useCallback(\n (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n event.stopPropagation();\n\n setInternalValue(undefined);\n onChange?.(undefined);\n\n setIsOpen.setFalse();\n inputRef.current?.blur();\n setSearchQuery(\"\");\n setFocusedOptionIndex(undefined);\n },\n [onChange],\n );\n const onChangeValue = useCallback(\n (newValue: string) => {\n setSearchQuery(newValue);\n\n if (withDebounce) setDebouncedSearchQuery(newValue);\n else onChangeSearch?.(newValue);\n },\n [withDebounce, onChangeSearch],\n );\n\n const selectedOption = useMemo(\n () =>\n withMultiselect\n ? options.filter((option) => (Array.isArray(value) ? value.includes(option.value) : false))\n : options.find((option) => option.value === value),\n [options, value],\n );\n const renderedOptions = useMemo(\n (): React.ReactNode => (\n <>\n {renderOptionDivider ? renderOptionDivider(undefined, filteredOptions[0], -1, 0) : undefined}\n\n {filteredOptions.map((option, index) => {\n const isSelected = withMultiselect\n ? Array.isArray(value)\n ? value.includes(option.value)\n : false\n : option.value === value;\n const isDisabled = option.disabled;\n const isFocused = index === focusedOptionIndex;\n\n return (\n <Fragment key={JSON.stringify(option)}>\n <Div\n color={\n isDisabled\n ? theme.colors.textSecondary + \"80\"\n : isSelected\n ? theme.colors.base\n : theme.colors.textPrimary\n }\n backgroundColor={isSelected ? theme.colors.primary : theme.colors.backgroundContent}\n filter={isFocused ? (isDisabled ? \"brightness(0.95)\" : \"brightness(0.9)\") : undefined}\n filterHover={focusedOptionIndex === undefined && !isDisabled ? \"brightness(0.9)\" : undefined}\n cursor={isDisabled ? \"not-allowed\" : \"pointer\"}\n padding={`${theme.styles.gap}px ${theme.styles.space}px`}\n value={option}\n onClickWithValue={onClickOption}\n onMouseMove={() => setFocusedOptionIndex(undefined)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={isDisabled}\n >\n {renderOption ? (\n renderOption(option, index, isSelected)\n ) : (\n <>\n {!option.renderType || option.renderType === \"default\" ? (\n <Text>{option.label}</Text>\n ) : option.renderType === \"chip\" ? (\n <Chip text={option.label} {...option.chipProps} />\n ) : option.renderType === \"chip.colored\" ? (\n <Chip.colored text={option.label} withWhiteBackground {...option.chipProps} />\n ) : undefined}\n </>\n )}\n </Div>\n\n {renderOptionDivider\n ? renderOptionDivider(\n option,\n filteredOptions[index + 1],\n index,\n filteredOptions[index + 1] ? index + 1 : -1,\n )\n : undefined}\n </Fragment>\n );\n })}\n </>\n ),\n [\n withMultiselect,\n filteredOptions,\n value,\n focusedOptionIndex,\n theme.colors,\n onClickOption,\n renderOption,\n renderOptionDivider,\n ],\n );\n\n useEffect(() => {\n setInternalValue(controlledValue);\n }, [controlledValue]);\n useEffect(() => {\n if (isOpen) {\n setIsOpenLate.setTrue();\n\n if (withSearch && inputRef.current) inputRef.current.focus();\n } else {\n const timeout = setTimeout(setIsOpenLate.setFalse, 0.2 * 1000);\n\n return () => {\n clearTimeout(timeout);\n };\n }\n }, [isOpen, withSearch]);\n useEffect(() => {\n setFocusedOptionIndex(undefined);\n }, [filteredOptions]);\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n inputFieldHolderRef.current &&\n buttonsRef.current &&\n !inputFieldHolderRef.current.contains(event.target as Node) &&\n !buttonsRef.current.contains(event.target as Node)\n ) {\n setIsOpen.setFalse();\n setSearchQuery(\"\");\n setFocusedOptionIndex(undefined);\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpen]);\n useEffect(() => {\n if (!withDebounce) return;\n\n onChangeSearch?.(debouncedSearchQuery);\n }, [withDebounce, onChangeSearch, debouncedSearchQuery]);\n\n const displayValue =\n (withSearch && isFocused && searchQuery.length > 0\n ? searchQuery\n : !Array.isArray(selectedOption)\n ? selectedOption?.label\n : undefined) ?? \"\";\n const withClearButton = isOpen && (Array.isArray(selectedOption) ? selectedOption.length > 0 : selectedOption);\n const readyPlaceholder =\n placeholder ??\n `Select ${!withMultiselect ? \"an \" : \"\"}${\n label?.toLowerCase() ?? getPluralWord(\"option\", withMultiselect ? 2 : 1)\n }`;\n\n return (\n <Div.column width=\"100%\" position=\"relative\" userSelect=\"none\" {...props}>\n <InputField\n label={label}\n labelColor={labelColor}\n errorText={errorText}\n infoText={infoText}\n required={\n withMultiselect\n ? (Array.isArray(value) ? value.length > 0 : value !== undefined)\n ? false\n : required\n : required\n }\n name={name}\n disabled={disabled}\n readOnly={!withSearch}\n value={displayValue}\n id={id}\n cursor={!withSearch ? \"pointer\" : undefined}\n placeholder={\n withSearch\n ? selectedOption && !Array.isArray(selectedOption)\n ? selectedOption.label\n : readyPlaceholder\n : readyPlaceholder\n }\n leftIcon={leftIcon}\n autoComplete=\"off\"\n className={`react-better-html-dropdown${\n Array.isArray(selectedOption) && selectedOption.length > 0\n ? \" react-better-html-dropdown-multiselect\"\n : \"\"\n }${isOpen ? \" react-better-html-dropdown-open\" : \"\"}${\n isOpenLate ? \" react-better-html-dropdown-open-late\" : \"\"\n }${inputFieldClassName ? ` ${inputFieldClassName}` : \"\"}`}\n onClick={!disabled ? setIsOpen.toggle : undefined}\n onFocus={setIsFocused.setTrue}\n onBlur={setIsFocused.setFalse}\n onKeyDown={onKeyDownInputField}\n onChangeValue={withSearch ? onChangeValue : undefined}\n insideInputFieldBeforeComponent={\n Array.isArray(selectedOption) && selectedOption.length > 0 ? (\n <Div\n width=\"100%\"\n backgroundColor={theme.colors.backgroundContent}\n border={`solid 1px ${theme.colors.border}`}\n borderColor={isFocused ? theme.colors.primary : undefined}\n borderBottom=\"none\"\n borderTopLeftRadius={theme.styles.borderRadius}\n borderTopRightRadius={theme.styles.borderRadius}\n paddingBlock={theme.styles.gap}\n paddingInline={(theme.styles.space + theme.styles.gap) / 2}\n transition={theme.styles.transition}\n >\n <Div.row width=\"100%\" flexWrap=\"wrap\" gap={theme.styles.gap}>\n {selectedOption.map((option) => {\n const ChipComponentTag =\n !option.renderType || option.renderType === \"default\" || option.renderType === \"chip\"\n ? Chip\n : option.renderType === \"chip.colored\"\n ? Chip.colored\n : Chip;\n\n return (\n <ChipComponentTag\n text={option.label}\n {...(option.renderType === \"chip\" || option.renderType === \"chip.colored\"\n ? option.chipProps\n : [])}\n withWhiteBackground={option.renderType === \"chip.colored\"}\n key={JSON.stringify(option)}\n />\n );\n })}\n </Div.row>\n </Div>\n ) : undefined\n }\n insideInputFieldAfterComponent={\n <>\n <Div\n position=\"absolute\"\n top=\"100%\"\n left={0}\n width=\"100%\"\n maxHeight={300}\n backgroundColor={theme.colors.backgroundContent}\n border={`1px solid ${isFocused ? theme.colors.primary : theme.colors.border}`}\n borderTop=\"none\"\n borderBottomLeftRadius={theme.styles.borderRadius}\n borderBottomRightRadius={theme.styles.borderRadius}\n boxShadow=\"0px 10px 20px #00000020\"\n zIndex={1000}\n overflowY=\"auto\"\n opacity={!isOpen ? 0 : undefined}\n pointerEvents={!isOpen ? \"none\" : undefined}\n transform={`translateY(${!isOpen ? -10 : 0}px)`}\n transition={theme.styles.transition}\n role=\"listbox\"\n aria-label={label}\n >\n {isLoadingDebouncedSearchQuery || debounceIsLoading ? (\n <Div padding={`${theme.styles.space / 2}px ${theme.styles.space + theme.styles.gap}px`}>\n <Loader.text />\n </Div>\n ) : filteredOptions.length ? (\n <>\n {(withoutRenderingOptionsWhenClosed ? isOpen || isOpenLate : true)\n ? renderedOptions\n : undefined}\n </>\n ) : (\n <Div padding={`${theme.styles.space / 2}px ${theme.styles.space + theme.styles.gap}px`}>\n <Text.unknown textAlign=\"left\">\n {debounceMinimumSymbolsRequired !== undefined &&\n searchQuery.length < debounceMinimumSymbolsRequired\n ? `Enter at least ${debounceMinimumSymbolsRequired} characters`\n : \"No options\"}\n </Text.unknown>\n </Div>\n )}\n </Div>\n\n <Div.row\n position=\"absolute\"\n top={46 / 2}\n right={theme.styles.space + 1}\n alignItems=\"center\"\n gap={theme.styles.gap}\n transform=\"translateY(-50%)\"\n pointerEvents=\"none\"\n filter={disabled ? \"brightness(0.9)\" : undefined}\n opacity={disabled ? 0.6 : undefined}\n zIndex={isOpen || isOpenLate ? 1001 : undefined}\n ref={buttonsRef}\n >\n {!withoutClearButton && (\n <Button.icon\n icon=\"XMark\"\n position=\"relative\"\n size={10}\n iconSize={14}\n opacity={!withClearButton ? 0 : undefined}\n pointerEvents={withClearButton ? \"all\" : undefined}\n onClick={onClickClearButton}\n disabled={!withClearButton}\n />\n )}\n\n <Icon\n name=\"chevronDown\"\n position=\"relative\"\n size={16}\n color={theme.colors.textSecondary}\n transform={`rotate(${isOpen ? 180 : 0}deg)`}\n transition={theme.styles.transition}\n pointerEvents=\"none\"\n aria-hidden\n />\n </Div.row>\n </>\n }\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-controls=\"dropdown-list\"\n aria-multiselectable={withMultiselect ? \"true\" : \"false\"}\n aria-haspopup=\"listbox\"\n aria-label={label}\n holderRef={inputFieldHolderRef}\n ref={inputRef}\n />\n </Div.column>\n );\n}) as any;\n\nDropdownComponent.countries = forwardRef(function Countries({ ...props }, ref) {\n const theme = useTheme();\n\n const renderOption = useCallback(\n (option: DropdownOption<string, Country>, index: number, isSelected: boolean): React.ReactNode => (\n <Div.row alignItems=\"center\" gap={theme.styles.gap}>\n <Image src={`https://flagcdn.com/w80/${option.data?.code.toString().toLowerCase()}.webp`} width={20} />\n <Text>{option.label}</Text>\n </Div.row>\n ),\n [],\n );\n\n const options = useMemo(\n () =>\n countries.map(\n (country): DropdownOption<string, Country> => ({\n value: country.code,\n label: country.name,\n data: country,\n searchValues: [country.code],\n }),\n ),\n [],\n );\n\n return (\n <DropdownComponent\n placeholder=\"Select a country\"\n options={options}\n renderOption={renderOption}\n withoutRenderingOptionsWhenClosed\n ref={ref}\n {...(props as any)}\n />\n );\n}) as DropdownComponentType[\"countries\"];\n\nconst Dropdown = memo(DropdownComponent) as any as typeof DropdownComponent & {\n countries: typeof DropdownComponent.countries;\n};\n\nDropdown.countries = DropdownComponent.countries;\n\nexport default Dropdown;\n","import { useCallback, useMemo, useState, memo, useEffect, useId } from \"react\";\nimport { Theme, useTheme } from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport Div from \"./Div\";\nimport Text from \"./Text\";\nimport Button from \"./Button\";\nimport Icon from \"./Icon\";\n\nconst getMonthName = (month: number, short = false) => {\n return [\n short ? \"Jan\" : \"January\",\n short ? \"Feb\" : \"February\",\n short ? \"Mar\" : \"March\",\n short ? \"Apr\" : \"April\",\n short ? \"May\" : \"May\",\n short ? \"Jun\" : \"June\",\n short ? \"Jul\" : \"July\",\n short ? \"Aug\" : \"August\",\n short ? \"Sep\" : \"September\",\n short ? \"Oct\" : \"October\",\n short ? \"Nov\" : \"November\",\n short ? \"Dec\" : \"December\",\n ][month];\n};\nconst getWeekDayName = (day: number, short = false) => {\n return [\n short ? \"Sun\" : \"Sunday\",\n short ? \"Mon\" : \"Monday\",\n short ? \"Tue\" : \"Tuesday\",\n short ? \"Wed\" : \"Wednesday\",\n short ? \"Thu\" : \"Thursday\",\n short ? \"Fri\" : \"Friday\",\n short ? \"Sat\" : \"Saturday\",\n ][day];\n};\n\nconst weekDaysIndex = [1, 2, 3, 4, 5, 6, 0];\nconst yearsRange = Array.from({ length: 100 + 1 + 50 }, (_, index) => index + new Date().getFullYear() - 100);\n\nconst SelectWrapperComponent = styled.div.withConfig({\n shouldForwardProp: (prop) => ![\"theme\"].includes(prop),\n})<{ theme: Theme }>`\n &:has(select:focus) {\n outline: auto;\n outline-color: -webkit-focus-ring-color;\n outline-style: auto;\n outline-offset: 2px;\n }\n`;\n\nconst SelectComponent = styled.select.withConfig({\n shouldForwardProp: (prop) => ![\"theme\"].includes(prop),\n})<{ theme: Theme }>`\n position: absolute;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n opacity: 0;\n`;\n\ntype CalendarProps = {\n value?: string;\n minDate?: Date;\n maxDate?: Date;\n onChange?: (date?: string) => void;\n};\n\nfunction Calendar({ value, minDate, maxDate, onChange }: CalendarProps) {\n const theme = useTheme();\n const internalYearSelectId = useId();\n\n const [currentDate, setCurrentDate] = useState(value ? new Date(value) : undefined);\n const [currentMonth, setCurrentMonth] = useState(currentDate?.getMonth() ?? new Date().getMonth());\n const [currentYear, setCurrentYear] = useState(currentDate?.getFullYear() ?? new Date().getFullYear());\n\n const daysInMonth = useMemo(() => new Date(currentYear, currentMonth + 1, 0).getDate(), [currentMonth, currentYear]);\n\n const onClickPreviousMonthButton = useCallback(() => {\n const newMonth = currentMonth === 0 ? 11 : currentMonth - 1;\n const newYear = currentMonth === 0 ? currentYear - 1 : currentYear;\n\n setCurrentMonth(newMonth);\n setCurrentYear(newYear);\n }, [currentMonth, currentYear]);\n const onClickNextMonthButton = useCallback(() => {\n const newMonth = currentMonth === 11 ? 0 : currentMonth + 1;\n const newYear = currentMonth === 11 ? currentYear + 1 : currentYear;\n\n setCurrentMonth(newMonth);\n setCurrentYear(newYear);\n }, [currentMonth, currentYear]);\n const onClickDay = useCallback(\n (day: number | undefined) => {\n if (!day) return;\n\n const newDate = new Date(currentYear, currentMonth, day);\n\n setCurrentDate(newDate);\n onChange?.(\n `${newDate.getFullYear()}-${(newDate.getMonth() + 1).toString().padStart(2, \"0\")}-${newDate\n .getDate()\n .toString()\n .padStart(2, \"0\")}`,\n );\n },\n [currentMonth, currentYear, onChange],\n );\n const onClickClear = useCallback(() => {\n setCurrentDate(undefined);\n onChange?.(undefined);\n }, []);\n const onClickToday = useCallback(() => {\n const today = new Date();\n\n setCurrentDate(today);\n onChange?.(\n `${today.getFullYear()}-${(today.getMonth() + 1).toString().padStart(2, \"0\")}-${today\n .getDate()\n .toString()\n .padStart(2, \"0\")}`,\n );\n }, [onChange]);\n const onChangeYearSelect = useCallback((event: React.ChangeEvent<HTMLSelectElement>) => {\n setCurrentYear(parseInt(event.target.value));\n }, []);\n\n const firstDayOfMonth = useMemo(() => {\n const day = new Date(currentYear, currentMonth, 1).getDay();\n\n return day === 0 ? 6 : day - 1;\n }, [currentMonth, currentYear]);\n const days = useMemo(() => {\n const result = [];\n\n for (let index = 0; index < firstDayOfMonth; index++) {\n result.push(undefined);\n }\n for (let index = 1; index <= daysInMonth; index++) {\n result.push(index);\n }\n\n return result;\n }, [daysInMonth, firstDayOfMonth]);\n\n useEffect(() => {\n if (!value) return;\n\n const date = new Date(value);\n\n setCurrentDate(date);\n setCurrentMonth(date.getMonth());\n setCurrentYear(date.getFullYear());\n }, [value]);\n\n return (\n <Div.column width=\"100%\" maxWidth={320} gap={theme.styles.gap} padding={theme.styles.space / 2} userSelect=\"none\">\n <Div.row width=\"100%\" justifyContent=\"space-between\" alignItems=\"center\">\n <Button.icon icon=\"chevronLeft\" onClick={onClickPreviousMonthButton} />\n\n <Div.row alignItems=\"center\" gap={4}>\n <Text fontWeight={700}>{getMonthName(currentMonth)}</Text>\n\n <SelectWrapperComponent>\n <Div.row position=\"relative\" alignItems=\"center\" gap={2}>\n <Text fontWeight={700}>{currentYear}</Text>\n <Icon name=\"chevronDown\" size={12} />\n\n <SelectComponent\n theme={theme}\n value={currentYear}\n onChange={onChangeYearSelect}\n id={internalYearSelectId}\n >\n {yearsRange.map((year) => (\n <option value={year} key={year}>\n {year}\n </option>\n ))}\n </SelectComponent>\n </Div.row>\n </SelectWrapperComponent>\n </Div.row>\n\n <Button.icon icon=\"chevronRight\" onClick={onClickNextMonthButton} />\n </Div.row>\n\n <Div.grid width=\"100%\" gridTemplateColumns=\"repeat(7, 1fr)\" gap={theme.styles.gap / 2}>\n {weekDaysIndex.map((day) => (\n <Div.row alignItems=\"center\" justifyContent=\"center\" key={day}>\n <Text fontSize={14} fontWeight={700} textAlign=\"center\">\n {getWeekDayName(day, true)}\n </Text>\n </Div.row>\n ))}\n\n {days.map((day, index) => {\n const thisDayDate = new Date(currentYear, currentMonth, day);\n\n const isSelected =\n day !== undefined &&\n day === currentDate?.getDate() &&\n currentMonth === currentDate.getMonth() &&\n currentYear === currentDate.getFullYear();\n\n const isToday =\n thisDayDate.getDate() === new Date().getDate() &&\n thisDayDate.getMonth() === new Date().getMonth() &&\n thisDayDate.getFullYear() === new Date().getFullYear();\n const isWeekend = thisDayDate.getDay() === 6 || thisDayDate.getDay() === 0;\n\n const isDisabled =\n (minDate && thisDayDate.getTime() < minDate.getTime()) ||\n (maxDate && thisDayDate.getTime() > maxDate.getTime());\n\n return (\n <Div.row\n position=\"relative\"\n width=\"100%\"\n aspectRatio=\"1\"\n alignItems=\"center\"\n justifyContent=\"center\"\n backgroundColor={isSelected ? theme.colors.primary : theme.colors.backgroundContent}\n filterHover={day && !isDisabled ? \"brightness(0.9)\" : undefined}\n border={`1px solid ${isToday ? theme.colors.primary : theme.colors.primary + \"00\"}`}\n borderRadius={theme.styles.borderRadius / 2}\n padding={theme.styles.space / 2}\n cursor={day ? (!isDisabled ? \"pointer\" : \"not-allowed\") : undefined}\n value={day}\n onClickWithValue={!isDisabled ? onClickDay : undefined}\n key={index}\n >\n {day && (\n <Text\n fontSize={14}\n textAlign=\"center\"\n color={\n isDisabled\n ? theme.colors.textSecondary + \"80\"\n : isSelected\n ? theme.colors.base\n : isWeekend\n ? theme.colors.textSecondary\n : undefined\n }\n >\n {day}\n </Text>\n )}\n\n {isDisabled && (\n <Div\n position=\"absolute\"\n width=\"60%\"\n height={1}\n top=\"50%\"\n left=\"50%\"\n backgroundColor={theme.colors.textSecondary}\n borderRadius={999}\n transform=\"translate(-50%, -50%) rotate(45deg)\"\n />\n )}\n </Div.row>\n );\n })}\n </Div.grid>\n\n <Div.row width=\"100%\" justifyContent=\"space-between\" alignItems=\"center\">\n <Div isTabAccessed cursor=\"pointer\" onClick={onClickClear}>\n <Text\n fontSize={14}\n textDecorationHover=\"underline\"\n color={theme.colors.textSecondary}\n colorHover={theme.colors.textPrimary}\n >\n Clear\n </Text>\n </Div>\n\n <Div isTabAccessed cursor=\"pointer\" onClick={onClickToday}>\n <Text\n fontSize={14}\n textDecorationHover=\"underline\"\n color={theme.colors.textSecondary}\n colorHover={theme.colors.textPrimary}\n >\n Today\n </Text>\n </Div>\n </Div.row>\n </Div.column>\n );\n}\n\nexport default memo(Calendar);\n","import { forwardRef, useCallback, useId, useState } from \"react\";\nimport { OmitProps, Theme, useBooleanState, useTheme } from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport { ComponentHoverStyle, ComponentPropWithRef, ComponentStyle } from \"../types/components\";\n\nimport { useComponentPropsGrouper, useComponentPropsWithPrefix } from \"../utils/hooks\";\n\nimport Text from \"./Text\";\nimport Div from \"./Div\";\nimport Icon from \"./Icon\";\nimport Label from \"./Label\";\n\nconst componentSize = 26;\nconst switchComponentBallGap = 3;\nconst switchComponentMouseDownDifference = 4;\n\nconst InputElement = styled.input.withConfig({\n shouldForwardProp: (prop) => ![\"theme\", \"style\", \"hoverStyle\"].includes(prop),\n})<{ theme: Theme; style: ComponentStyle; hoverStyle: ComponentStyle }>`\n position: relative;\n appearance: none;\n width: ${componentSize}px;\n height: ${componentSize}px;\n background-color: ${(props) => props.theme.colors.backgroundContent};\n border: 1px solid ${(props) => props.theme.colors.border};\n border-radius: ${(props) => props.theme.styles.borderRadius / 2}px;\n cursor: pointer;\n transition: ${(props) => props.theme.styles.transition};\n flex-shrink: 0;\n\n &[type=\"radio\"] {\n border-radius: 999px;\n }\n\n &:checked {\n background-color: ${(props) => props.theme.colors.primary};\n border-color: ${(props) => props.theme.colors.primary};\n }\n\n &:disabled {\n filter: brightness(0.9);\n cursor: not-allowed;\n }\n\n ${(props) => props.style as any}\n\n &:hover {\n border-color: ${(props) => props.theme.colors.primary};\n\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nconst SwitchElement = styled.div.withConfig({\n shouldForwardProp: (prop) => ![\"theme\", \"checked\", \"disabled\", \"isMouseDown\", \"style\", \"hoverStyle\"].includes(prop),\n})<{\n theme: Theme;\n checked: boolean;\n disabled: boolean;\n isMouseDown: boolean;\n style: ComponentStyle;\n hoverStyle: ComponentStyle;\n}>`\n --width: ${(props) => componentSize * 2 - props.theme.styles.gap / 2}px;\n --ball-size: ${componentSize - switchComponentBallGap * 2}px;\n\n position: relative;\n width: var(--width);\n height: ${componentSize}px;\n background-color: ${(props) => (props.checked ? props.theme.colors.primary : props.theme.colors.border)};\n border-radius: 999px;\n cursor: ${(props) => (props.disabled ? \"not-allowed\" : \"pointer\")};\n opacity: ${(props) => (props.disabled ? 0.5 : 1)};\n transition: ${(props) => props.theme.styles.transition};\n\n &::before {\n content: \"\";\n position: absolute;\n width: ${(props) =>\n componentSize - switchComponentBallGap * 2 + (props.isMouseDown ? switchComponentMouseDownDifference : 0)}px;\n height: ${componentSize - switchComponentBallGap * 2}px;\n background-color: ${(props) => props.theme.colors.base};\n border-radius: 999px;\n top: ${switchComponentBallGap}px;\n left: ${switchComponentBallGap}px;\n transform: translateX(\n ${(props) =>\n props.checked\n ? `calc(var(--width) - ${\n componentSize + (props.isMouseDown ? switchComponentMouseDownDifference : 0)\n }px)`\n : \"0px\"}\n );\n transition: ${(props) => props.theme.styles.transition};\n }\n\n &.react-better-html-color-theme-switch-with-moon {\n &::after {\n content: \"\";\n position: absolute;\n width: ${(props) =>\n componentSize -\n switchComponentBallGap * 2 +\n (props.isMouseDown ? switchComponentMouseDownDifference : 0)}px;\n height: ${componentSize - switchComponentBallGap * 2}px;\n background-color: ${(props) => (props.checked ? props.theme.colors.primary : \"transparent\")};\n border-radius: 999px;\n top: ${switchComponentBallGap}px;\n left: ${switchComponentBallGap}px;\n transform: translateX(\n ${(props) =>\n props.checked\n ? `calc(var(--width) - ${\n componentSize + (props.isMouseDown ? switchComponentMouseDownDifference * 2 : 0)\n }px - calc(var(--ball-size) / 3))`\n : \"0px\"}\n );\n transition: ${(props) => props.theme.styles.transition};\n }\n }\n\n ${(props) => props.style as any}\n\n &:hover {\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nexport type ToggleInputRef = {};\n\ntype InternalToggleInputProps<Value> = {\n label?: string;\n labelColor?: string;\n text?: string;\n textAdvanced?: React.ReactNode;\n errorText?: string;\n infoText?: string;\n value?: Value;\n onChange?: (checked: boolean, value?: Value) => void;\n} & OmitProps<React.ComponentProps<\"input\">, \"style\" | \"value\" | \"ref\" | \"onChange\"> &\n ComponentStyle &\n ComponentHoverStyle;\n\nexport type ToggleInputProps<Value> = ComponentPropWithRef<\n ToggleInputRef,\n OmitProps<InternalToggleInputProps<Value>, \"type\">\n>;\ntype ToggleInputComponentType = <Value>(props: ToggleInputProps<Value>) => React.ReactElement;\n\nconst ToggleInputComponent = forwardRef(function ToggleInput<Value>(\n {\n label,\n labelColor,\n text,\n textAdvanced,\n errorText,\n infoText,\n value,\n onChange,\n checked: controlledChecked,\n color,\n required,\n id,\n ...props\n }: InternalToggleInputProps<Value>,\n ref: React.ForwardedRef<ToggleInputRef>,\n) {\n const theme = useTheme();\n const internalId = useId();\n\n const { style, hoverStyle, excludeStyle, restProps } = useComponentPropsGrouper(props, true);\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n const [internalChecked, setInternalChecked] = useState(false);\n\n const onChangeElement = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const newIsChecked = event.target.checked;\n\n if (controlledChecked === undefined) setInternalChecked(newIsChecked);\n onChange?.(newIsChecked, value);\n },\n [onChange, controlledChecked, value],\n );\n\n const checked = controlledChecked ?? internalChecked;\n\n const onClickText = useCallback(() => {\n const newIsChecked = !checked;\n\n if (controlledChecked === undefined) setInternalChecked(newIsChecked);\n onChange?.(newIsChecked, value);\n }, [checked, controlledChecked, onChange, value]);\n\n const readyId = id ?? internalId;\n\n return (\n <Div.column gap={theme.styles.gap} {...excludeStyle}>\n {label && (\n <Label text={label} color={labelColor} required={required} isError={!!errorText} htmlFor={readyId} />\n )}\n\n <Div.row alignItems=\"center\" gap={theme.styles.gap}>\n <Div.row position=\"relative\" alignItems=\"center\">\n <InputElement\n theme={theme}\n type={props.type ?? \"checkbox\"}\n checked={checked}\n onChange={onChangeElement}\n id={readyId}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n />\n\n {props.type === \"checkbox\" ? (\n <Icon\n name=\"check\"\n position=\"absolute\"\n top=\"50%\"\n left=\"50%\"\n color={theme.colors.base}\n size={14}\n transform={`translate(-50%, -50%)${checked ? \"\" : \" scale(0.4)\"}`}\n opacity={checked ? 1 : 0}\n pointerEvents=\"none\"\n transition={theme.styles.transition}\n />\n ) : props.type === \"radio\" ? (\n <Div\n position=\"absolute\"\n width={10}\n height={10}\n top=\"50%\"\n left=\"50%\"\n backgroundColor={theme.colors.base}\n borderRadius={999}\n transform={`translate(-50%, -50%)${checked ? \"\" : \" scale(0.4)\"}`}\n opacity={checked ? 1 : 0}\n pointerEvents=\"none\"\n />\n ) : undefined}\n </Div.row>\n\n {text ? (\n <Text color={color} userSelect=\"none\" cursor=\"pointer\" onClick={onClickText}>\n {text}\n {required && !label && (\n <Text as=\"span\" fontSize={16} color={theme.colors.error}>\n {\" \"}\n *\n </Text>\n )}\n </Text>\n ) : textAdvanced ? (\n <Div.row userSelect=\"none\" cursor=\"pointer\" onClick={onClickText}>\n {textAdvanced}\n\n {required && !label && (\n <Text as=\"span\" fontSize={16} color={theme.colors.error} marginLeft={4}>\n {\" \"}\n *\n </Text>\n )}\n </Div.row>\n ) : undefined}\n </Div.row>\n\n {(errorText || infoText) && (\n <Text\n as=\"span\"\n display=\"block\"\n fontSize={14}\n color={errorText ? theme.colors.error : labelColor ?? theme.colors.textSecondary}\n >\n {errorText || infoText}\n </Text>\n )}\n </Div.column>\n );\n}) as <Value>(props: ComponentPropWithRef<ToggleInputRef, InternalToggleInputProps<Value>>) => React.ReactElement;\n\nexport default {\n checkbox: forwardRef(function Checkbox<Value>(\n props: ToggleInputProps<Value>,\n ref: React.ForwardedRef<ToggleInputRef>,\n ) {\n return <ToggleInputComponent type=\"checkbox\" ref={ref} {...props} />;\n }) as ToggleInputComponentType,\n radiobutton: forwardRef(function RadioButton<Value>(\n props: ToggleInputProps<Value>,\n ref: React.ForwardedRef<ToggleInputRef>,\n ) {\n return <ToggleInputComponent type=\"radio\" ref={ref} {...props} />;\n }) as ToggleInputComponentType,\n switch: forwardRef(function Switch<Value>(\n {\n label,\n labelColor,\n errorText,\n infoText,\n disabled,\n value,\n onChange,\n checked: controlledChecked,\n required,\n id,\n ...props\n }: InternalToggleInputProps<Value>,\n ref: React.ForwardedRef<ToggleInputRef>,\n ) {\n const theme = useTheme();\n const internalId = useId();\n\n const { style, hoverStyle, excludeStyle, restProps } = useComponentPropsGrouper(props, true);\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n const [internalChecked, setInternalChecked] = useBooleanState();\n const [isMouseDown, setIsMouseDown] = useBooleanState();\n\n const checked = controlledChecked ?? internalChecked;\n\n const onClickElement = useCallback(() => {\n if (disabled) return;\n\n const newIsChecked = !checked;\n\n if (controlledChecked === undefined) setInternalChecked.setState(newIsChecked);\n onChange?.(newIsChecked, value);\n }, [disabled, checked, onChange, controlledChecked, value]);\n\n const readyId = id ?? internalId;\n\n return (\n <Div.column width=\"fit-content\" gap={theme.styles.gap} {...excludeStyle}>\n {label && (\n <Label text={label} color={labelColor} required={required} isError={!!errorText} htmlFor={readyId} />\n )}\n\n <Div.row\n alignItems=\"center\"\n gap={theme.styles.gap}\n borderRadius={999}\n isTabAccessed\n onClick={onClickElement}\n onMouseDown={setIsMouseDown.setTrue}\n onMouseUp={setIsMouseDown.setFalse}\n onMouseOut={setIsMouseDown.setFalse}\n onTouchStart={setIsMouseDown.setTrue}\n onTouchEnd={setIsMouseDown.setFalse}\n onTouchCancel={setIsMouseDown.setFalse}\n >\n <SwitchElement\n theme={theme}\n checked={checked}\n disabled={disabled ?? false}\n isMouseDown={isMouseDown}\n id={readyId}\n role=\"switch\"\n aria-checked={checked}\n aria-disabled={disabled ?? false}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n />\n </Div.row>\n\n {(errorText || infoText) && (\n <Text\n as=\"span\"\n display=\"block\"\n fontSize={14}\n color={errorText ? theme.colors.error : labelColor ?? theme.colors.textSecondary}\n >\n {errorText || infoText}\n </Text>\n )}\n </Div.column>\n );\n }) as ToggleInputComponentType,\n};\n","import { Children, forwardRef, Fragment, memo, useMemo } from \"react\";\nimport { AnyOtherString, LoaderName, OmitProps, useTheme } from \"react-better-core\";\n\nimport { ComponentMarginProps, ComponentPropWithRef } from \"../types/components\";\n\nimport { useForm } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport Button from \"./Button\";\nimport Divider from \"./Divider\";\n\nexport type FormProps = {\n form?: OmitProps<ReturnType<typeof useForm>, \"focusField\">;\n name?: string;\n submitButtonText?: string;\n submitButtonLoaderName?: LoaderName | AnyOtherString;\n submitButtonIsLoading?: boolean;\n submitButtonId?: string;\n /** @default false */\n submitButtonIsDisabled?: boolean;\n cancelButtonText?: string;\n cancelButtonLoaderName?: LoaderName | AnyOtherString;\n cancelButtonIsLoading?: boolean;\n cancelButtonId?: string;\n /** @default false */\n cancelButtonIsDisabled?: boolean;\n /** @default \"right\" */\n actionButtonsLocation?: \"left\" | \"center\" | \"right\";\n gap?: React.CSSProperties[\"gap\"];\n /** @default false */\n isDestructive?: boolean;\n /** @default false */\n withDividers?: boolean;\n renderActionButtons?: React.ReactNode;\n onClickCancel?: () => void;\n onSubmit?: (event: React.FormEvent<HTMLFormElement>) => void;\n children?: React.ReactNode;\n} & ComponentMarginProps;\n\ntype FormComponentType = {\n (props: ComponentPropWithRef<HTMLFormElement, FormProps>): React.ReactElement;\n};\n\nconst FormComponent: FormComponentType = forwardRef(function Form(\n {\n form,\n name,\n submitButtonText,\n submitButtonLoaderName,\n submitButtonIsLoading,\n submitButtonId,\n submitButtonIsDisabled,\n cancelButtonText,\n cancelButtonLoaderName,\n cancelButtonIsLoading,\n cancelButtonId,\n cancelButtonIsDisabled,\n actionButtonsLocation = \"right\",\n gap,\n isDestructive,\n withDividers,\n renderActionButtons,\n onClickCancel,\n onSubmit,\n children,\n ...props\n }: FormProps,\n ref: React.ForwardedRef<HTMLFormElement>,\n) {\n const theme = useTheme();\n\n const submitButtonIsDisabledInternal = useMemo<boolean>(() => {\n if (!form || !form.requiredFields) return false;\n\n return Object.entries(form.values).some(\n ([key, value]) =>\n form.requiredFields?.includes(key) &&\n (value === undefined || value === null || value?.toString().trim() === \"\"),\n );\n }, [form]);\n\n const SubmitButtonTag = isDestructive ? Button.destructive : Button;\n const submitButtonIsDisabledFinal = submitButtonIsDisabled || submitButtonIsDisabledInternal;\n\n return (\n <Div width=\"100%\" {...props}>\n <form name={name} onSubmit={onSubmit ?? form?.onSubmit} ref={ref}>\n {gap !== undefined || withDividers ? (\n <Div.column gap={gap ?? (withDividers ? theme.styles.space : theme.styles.gap)}>\n {withDividers\n ? Children.toArray(children).map((child, index) => (\n <Fragment key={index}>\n {child}\n\n {index < Children.toArray(children).length - 1 && <Divider.horizontal />}\n </Fragment>\n ))\n : children}\n </Div.column>\n ) : (\n children\n )}\n\n {submitButtonText && (\n <Div.row\n alignItems=\"center\"\n justifyContent={\n actionButtonsLocation === \"left\"\n ? \"flex-start\"\n : actionButtonsLocation === \"center\"\n ? \"center\"\n : \"flex-end\"\n }\n gap={theme.styles.gap}\n marginTop={theme.styles.space}\n >\n {renderActionButtons}\n\n {onClickCancel && (\n <Button.secondary\n text={cancelButtonText ?? \"Cancel\"}\n isLoading={cancelButtonIsLoading}\n loaderName={cancelButtonLoaderName}\n disabled={cancelButtonIsDisabled}\n id={cancelButtonId}\n onClick={onClickCancel}\n />\n )}\n\n <SubmitButtonTag\n text={submitButtonText}\n isLoading={submitButtonIsLoading || form?.isSubmitting}\n loaderName={submitButtonLoaderName}\n disabled={submitButtonIsDisabledFinal}\n id={submitButtonId}\n isSubmit\n />\n </Div.row>\n )}\n </form>\n </Div>\n );\n}) as any;\n\nconst Form = memo(FormComponent) as any as typeof FormComponent & {};\n\nexport default Form;\n","import { forwardRef, memo } from \"react\";\nimport { AnyOtherString, IconName, LoaderName, useTheme } from \"react-better-core\";\n\nimport { ComponentMarginProps, ComponentPropWithRef } from \"../types/components\";\n\nimport { useMediaQuery } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport Icon from \"./Icon\";\nimport Text, { TextAs } from \"./Text\";\nimport Button from \"./Button\";\nimport Loader from \"./Loader\";\n\nexport type FormRowProps = {\n oneItemOnly?: boolean;\n /**\n * @description Weather to break the two items into two separate lines on mobile or not\n * @default false\n */\n noBreakingPoint?: boolean;\n /**\n * @description Weather to render the children as a column or not\n * @default false\n */\n asColumn?: boolean;\n gap?: React.CSSProperties[\"gap\"];\n children?: React.ReactNode;\n} & ComponentMarginProps;\n\ntype FormRowComponentType = {\n (props: ComponentPropWithRef<HTMLDivElement, FormRowProps>): React.ReactElement;\n withTitle: (\n props: ComponentPropWithRef<\n HTMLDivElement,\n FormRowProps & {\n icon?: IconName | AnyOtherString;\n title?: string;\n /** @default \"h3\" */\n titleAs?: TextAs;\n titleFontSize?: React.CSSProperties[\"fontSize\"];\n description?: string;\n descriptionFontSize?: React.CSSProperties[\"fontSize\"];\n required?: boolean;\n alignChildren?: React.CSSProperties[\"justifyContent\"];\n isLoading?: boolean;\n withActions?: boolean;\n saveButtonLoaderName?: LoaderName | AnyOtherString;\n resetButtonLoaderName?: LoaderName | AnyOtherString;\n onClickSave?: () => void;\n onClickReset?: () => void;\n }\n >,\n ) => React.ReactElement;\n};\n\nconst FormRowComponent: FormRowComponentType = forwardRef(function FormRow(\n { oneItemOnly, noBreakingPoint, asColumn, gap, children, ...props }: FormRowProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const theme = useTheme();\n const mediaQuery = useMediaQuery();\n\n const breakingPoint = asColumn ?? (!noBreakingPoint ? mediaQuery.size900 : false);\n const readyGap =\n breakingPoint || (noBreakingPoint && mediaQuery.size900) ? theme.styles.gap : theme.styles.space * 2;\n\n return (\n <Div.row alignItems=\"center\" gap={gap ?? readyGap} invertFlexDirection={breakingPoint} {...props} ref={ref}>\n {children}\n\n {oneItemOnly && <Div width=\"100%\" />}\n </Div.row>\n );\n}) as any;\n\nFormRowComponent.withTitle = forwardRef(function WithTitle(\n {\n icon,\n title,\n titleAs = \"h3\",\n titleFontSize,\n description,\n descriptionFontSize,\n required,\n alignChildren = \"flex-start\",\n isLoading,\n withActions,\n saveButtonLoaderName,\n resetButtonLoaderName,\n onClickSave,\n onClickReset,\n children,\n ...props\n },\n ref,\n) {\n const theme = useTheme();\n const mediaQuery = useMediaQuery();\n\n const titleGap = theme.styles.space;\n\n return (\n <FormRowComponent {...props} ref={ref}>\n <Div.row width=\"100%\" alignItems=\"center\" gap={titleGap}>\n {icon && <Icon name={icon} />}\n\n <Div.column flex={1} gap={theme.styles.gap / 2}>\n <Text as={titleAs} fontSize={titleFontSize}>\n {title}\n\n {required && (\n <Text as=\"span\" fontSize={16} color={theme.colors.error}>\n {\" \"}\n *\n </Text>\n )}\n </Text>\n\n {description && (\n <Text fontSize={descriptionFontSize} color={theme.colors.textSecondary}>\n {description}\n </Text>\n )}\n </Div.column>\n\n {isLoading && <Div width={26 - titleGap} />}\n </Div.row>\n\n <Div.row\n position=\"relative\"\n width={props.noBreakingPoint && mediaQuery.size900 ? undefined : \"100%\"}\n alignItems=\"center\"\n justifyContent={alignChildren}\n gap={theme.styles.gap}\n >\n <Div\n position=\"absolute\"\n top=\"50%\"\n right={`calc(100% + ${theme.styles.space}px)`}\n transform=\"translateY(-50%)\"\n opacity={!isLoading ? 0 : undefined}\n pointerEvents={!isLoading ? \"none\" : undefined}\n >\n <Loader />\n </Div>\n\n {children}\n\n {withActions && (\n <Div.row alignItems=\"center\" gap={theme.styles.gap}>\n {onClickReset && (\n <Button.icon icon=\"XMark\" loaderName={resetButtonLoaderName} onClick={onClickReset} />\n )}\n <Button.icon icon=\"check\" loaderName={saveButtonLoaderName} onClick={onClickSave} />\n </Div.row>\n )}\n </Div.row>\n </FormRowComponent>\n );\n}) as FormRowComponentType[\"withTitle\"];\n\nconst FormRow = memo(FormRowComponent) as any as typeof FormRowComponent & {\n withTitle: typeof FormRowComponent.withTitle;\n};\n\nFormRow.withTitle = FormRowComponent.withTitle;\n\nexport default FormRow;\n","import { memo, useCallback, useEffect, useState } from \"react\";\nimport { useTheme } from \"react-better-core\";\n\nimport { ComponentMarginProps } from \"../types/components\";\n\nimport Div from \"./Div\";\nimport Text from \"./Text\";\nimport ToggleInput from \"./ToggleInput\";\n\nexport type ColorThemeSwitchProps = {\n /** @default false */\n withMoon?: boolean;\n className?: string;\n} & ComponentMarginProps;\n\ntype ColorThemeSwitchComponentType = {\n (props: ColorThemeSwitchProps): React.ReactElement;\n withText: (props: ColorThemeSwitchProps) => React.ReactElement;\n};\n\nconst ColorThemeSwitchComponent: ColorThemeSwitchComponentType = function ColorThemeSwitch({\n withMoon,\n className,\n ...props\n}: ColorThemeSwitchProps) {\n const [value, setValue] = useState(localStorage.getItem(\"theme\") === \"dark\");\n\n const onChangeSwitch = useCallback((checked: boolean) => {\n setValue(checked);\n\n document.querySelector(\"html\")?.setAttribute(\"data-theme\", checked ? \"dark\" : \"light\");\n }, []);\n\n useEffect(() => {\n const html = document.querySelector(\"html\");\n\n if (!html) return;\n\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === \"attributes\") {\n setValue(html.getAttribute(\"data-theme\") === \"dark\");\n }\n });\n });\n\n observer.observe(html, {\n attributes: true,\n attributeFilter: [\"data-theme\"],\n });\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return (\n <ToggleInput.switch\n className={`react-better-html-color-theme-switch ${\n withMoon ? ` react-better-html-color-theme-switch-with-moon` : \"\"\n }${className ? ` ${className}` : \"\"}`}\n checked={value}\n onChange={onChangeSwitch}\n {...props}\n />\n );\n} as any;\n\nColorThemeSwitchComponent.withText = function WithText({ withMoon, className, ...props }) {\n const theme = useTheme();\n\n return (\n <Div.row width=\"fit-content\" alignItems=\"center\" gap={theme.styles.gap} userSelect=\"none\" {...props}>\n <Text>Light</Text>\n <ColorThemeSwitchComponent withMoon={withMoon} className={className} />\n <Text>Dark</Text>\n </Div.row>\n );\n} as ColorThemeSwitchComponentType[\"withText\"];\n\nconst ColorThemeSwitch = memo(ColorThemeSwitchComponent) as any as typeof ColorThemeSwitchComponent & {\n withText: typeof ColorThemeSwitchComponent.withText;\n};\n\nColorThemeSwitch.withText = ColorThemeSwitchComponent.withText;\n\nexport default ColorThemeSwitch;\n","import {\n forwardRef,\n memo,\n useCallback,\n ReactNode,\n useMemo,\n useState,\n useImperativeHandle,\n useRef,\n useEffect,\n Fragment,\n} from \"react\";\nimport { ColorTheme, darkenColor, OmitProps, Theme, useBetterCoreContext, useTheme } from \"react-better-core\";\nimport styled, { css } from \"styled-components\";\n\nimport { ComponentMarginProps, ComponentPropWithRef, ComponentStyle } from \"../types/components\";\n\nimport { useForm, useMediaQuery } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport ToggleInput, { ToggleInputProps } from \"./ToggleInput\";\nimport Image, { ImageProps } from \"./Image\";\nimport Text, { TextProps } from \"./Text\";\nimport Loader from \"./Loader\";\nimport Button from \"./Button\";\nimport Modal, { ModalRef } from \"./Modal\";\nimport FormRow from \"./FormRow\";\nimport InputField from \"./InputField\";\nimport Form from \"./Form\";\nimport Label from \"./Label\";\nimport Icon from \"./Icon\";\nimport Pagination from \"./Pagination\";\n\nconst defaultImageWidth = 160;\nconst maximumVisiblePages = 11;\n\nconst TableStyledComponent = styled.table.withConfig({\n shouldForwardProp: (prop) =>\n ![\n \"isStriped\",\n \"withHover\",\n \"withStickyHeader\",\n \"colorTheme\",\n \"theme\",\n \"containsOverflowComponents\",\n \"withFooter\",\n ].includes(prop),\n})<{\n isStriped?: boolean;\n withHover?: boolean;\n withStickyHeader?: boolean;\n colorTheme?: ColorTheme;\n theme: Theme;\n containsOverflowComponents?: boolean;\n withFooter?: boolean;\n}>`\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n\n thead {\n tr:first-child {\n border-top-left-radius: ${(props) =>\n props.containsOverflowComponents ? `${props.theme.styles.borderRadius * 2 - 1}px` : undefined};\n border-top-right-radius: ${(props) =>\n props.containsOverflowComponents ? `${props.theme.styles.borderRadius * 2 - 1}px` : undefined};\n\n th:first-child {\n border-top-left-radius: ${(props) =>\n props.containsOverflowComponents ? `${props.theme.styles.borderRadius * 2 - 1}px` : undefined};\n }\n\n th:last-child {\n border-top-right-radius: ${(props) =>\n props.containsOverflowComponents ? `${props.theme.styles.borderRadius * 2 - 1}px` : undefined};\n }\n }\n }\n\n tbody {\n tr:last-child {\n border-bottom-left-radius: ${(props) =>\n props.containsOverflowComponents && !props.withFooter\n ? `${props.theme.styles.borderRadius * 2 - 1}px`\n : undefined};\n border-bottom-right-radius: ${(props) =>\n props.containsOverflowComponents && !props.withFooter\n ? `${props.theme.styles.borderRadius * 2 - 1}px`\n : undefined};\n\n td:first-child {\n border-bottom-left-radius: ${(props) =>\n props.containsOverflowComponents && !props.withFooter\n ? `${props.theme.styles.borderRadius * 2 - 1}px`\n : undefined};\n }\n\n td:last-child {\n border-bottom-right-radius: ${(props) =>\n props.containsOverflowComponents && !props.withFooter\n ? `${props.theme.styles.borderRadius * 2 - 1}px`\n : undefined};\n }\n }\n }\n\n tfoot {\n tr:last-child {\n border-bottom-left-radius: ${(props) =>\n props.containsOverflowComponents ? `${props.theme.styles.borderRadius * 2 - 1}px` : undefined};\n border-bottom-right-radius: ${(props) =>\n props.containsOverflowComponents ? `${props.theme.styles.borderRadius * 2 - 1}px` : undefined};\n\n td:first-child {\n border-bottom-left-radius: ${(props) =>\n props.containsOverflowComponents ? `${props.theme.styles.borderRadius * 2 - 1}px` : undefined};\n }\n\n td:last-child {\n border-bottom-right-radius: ${(props) =>\n props.containsOverflowComponents ? `${props.theme.styles.borderRadius * 2 - 1}px` : undefined};\n }\n }\n }\n\n tr {\n background-color: ${(props) => props.theme.colors.backgroundContent};\n\n &.isHeader {\n background-color: ${(props) => props.theme.colors.backgroundSecondary};\n font-weight: 700;\n }\n\n &.isFooter {\n background-color: ${(props) => props.theme.colors.backgroundSecondary};\n }\n\n &.isExpandRow {\n height: 0px;\n\n td {\n border-top: none;\n }\n }\n\n ${(props) =>\n props.isStriped\n ? css`\n &:nth-child(even) {\n background-color: ${props.theme.colors.backgroundSecondary};\n }\n `\n : \"\"}\n\n ${(props) =>\n props.withHover\n ? css`\n transition: ${props.theme.styles.transition};\n\n &:not(.isHeader):not(.isFooter):not(.withoutHover):hover {\n background-color: ${darkenColor(\n props.theme.colors.backgroundContent,\n props.colorTheme === \"light\" ? 0.05 : 0.15,\n )};\n cursor: pointer;\n }\n `\n : \"\"}\n\n th {\n font-size: 18px;\n text-align: left;\n padding: ${(props) => props.theme.styles.space}px;\n }\n\n td {\n border-top: 1px solid ${(props) => props.theme.colors.border + (props.colorTheme === \"light\" ? \"60\" : \"40\")};\n padding: ${(props) => props.theme.styles.gap}px ${(props) => props.theme.styles.space}px;\n\n &.noData {\n text-align: center;\n padding: ${(props) => props.theme.styles.space}px;\n }\n }\n }\n`;\n\nconst ThStyledComponent = styled.th.withConfig({\n shouldForwardProp: (prop) => ![\"width\", \"minWidth\", \"maxWidth\", \"textAlign\"].includes(prop),\n})<{\n width?: React.CSSProperties[\"width\"];\n minWidth?: React.CSSProperties[\"minWidth\"];\n maxWidth?: React.CSSProperties[\"maxWidth\"];\n textAlign?: React.CSSProperties[\"textAlign\"];\n}>`\n ${(props) => (props.width ? `width: ${props.width}px;` : \"\")}\n ${(props) => (props.minWidth ? `min-width: ${props.minWidth}px;` : \"\")}\n ${(props) => (props.maxWidth ? `max-width: ${props.maxWidth}px;` : \"\")}\n ${(props) => (props.textAlign ? `text-align: ${props.textAlign} !important;` : \"\")}\n`;\n\nconst TdStyledComponent = styled.td.withConfig({\n shouldForwardProp: (prop) => ![\"width\", \"textAlign\"].includes(prop),\n})<{\n textAlign?: React.CSSProperties[\"textAlign\"];\n}>`\n ${(props) => (props.textAlign ? `text-align: ${props.textAlign} !important;` : \"\")}\n`;\n\nconst filterPresetsText: Record<FilterPreset, string> = {\n today: \"Today\",\n yesterday: \"Yesterday\",\n tomorrow: \"Tomorrow\",\n thisWeek: \"This week\",\n thisMonth: \"This month\",\n thisYear: \"This year\",\n lastWeek: \"Last week\",\n lastMonth: \"Last month\",\n lastYear: \"Last year\",\n nextWeek: \"Next week\",\n nextMonth: \"Next month\",\n nextYear: \"Next year\",\n};\n\ntype FilterPreset =\n | \"today\"\n | \"yesterday\"\n | \"tomorrow\"\n | \"thisWeek\"\n | \"thisMonth\"\n | \"thisYear\"\n | \"lastWeek\"\n | \"lastMonth\"\n | \"lastYear\"\n | \"nextWeek\"\n | \"nextMonth\"\n | \"nextYear\";\n\ntype ListFilterValue = {\n value: number | string | boolean;\n label?: string;\n count: number;\n};\n\nexport type TableListFilterListItem = OmitProps<ListFilterValue, \"count\">;\n\nexport type TableFilterData =\n | {\n type: \"number\";\n min?: number;\n max?: number;\n }\n | {\n type: \"date\" | \"date-time\";\n min?: string;\n max?: string;\n }\n | {\n type: \"list\";\n list: ListFilterValue[\"value\"][];\n };\n\n//? Column types\ntype TextColumn<DataItem> = {\n type: \"text\";\n keyName?: keyof DataItem;\n getTextProps?: ((item: DataItem, index: number) => TextProps) | TextProps;\n format?: (item: DataItem, index: number) => string;\n};\n\ntype ElementColumn<DataItem> = {\n type: \"element\";\n render?: (item: DataItem, index: number) => ReactNode;\n};\n\ntype ImageColumn<DataItem> = {\n type: \"image\";\n getImageProps?: ((item: DataItem, index: number) => ImageProps) | ImageProps;\n};\n\ntype CheckboxColumn<DataItem> = {\n type: \"checkbox\";\n getToggleInputProps?: ((item: DataItem, index: number) => ToggleInputProps<DataItem>) | ToggleInputProps<DataItem>;\n};\n\ntype ExpandColumn<DataItem> = {\n type: \"expand\";\n onlyOneExpanded?: boolean;\n render?: (item: DataItem, index: number) => ReactNode;\n onExpand?: (item: DataItem, index: number) => void;\n onCollapse?: (item: DataItem, index: number) => void;\n};\n\n//? Filter types\ntype NumberFilter<DataItem> = {\n filter?: \"number\";\n getValue?: (item: DataItem) => number;\n};\n\ntype DateFilter<DataItem> = {\n filter?: \"date\" | \"date-time\";\n presets?: FilterPreset[];\n getValue?: (item: DataItem) => Date;\n};\n\ntype ListFilter<DataItem> = {\n filter?: \"list\";\n withTotalNumber?: boolean;\n withSearch?: boolean;\n list: (TableListFilterListItem | undefined)[];\n getItemValue?: (item: DataItem) => ListFilterValue[\"value\"];\n};\n\nexport type TableColumn<DataItem> = {\n hidden?: boolean;\n label?: string;\n /** @requires label */\n renderLabel?: (label: string) => React.ReactNode;\n width?: string | number;\n minWidth?: string | number;\n maxWidth?: string | number;\n align?: \"left\" | \"center\" | \"right\";\n clickStopPropagation?: boolean;\n} & (\n | TextColumn<DataItem>\n | ElementColumn<DataItem>\n | ImageColumn<DataItem>\n | CheckboxColumn<DataItem>\n | ExpandColumn<DataItem>\n) &\n (NumberFilter<DataItem> | DateFilter<DataItem> | ListFilter<DataItem>);\n\nexport type TableProps<DataItem> = {\n name?: string;\n columns: TableColumn<DataItem>[];\n data: DataItem[];\n /** @default false */\n isStriped?: boolean;\n /** @default false */\n isLoading?: boolean;\n /** @default false */\n withStickyHeader?: boolean;\n /** @default \"No data available\" */\n noDataItemsMessage?: string;\n pageSize?: number;\n pageCount?: number;\n isInsideTableExpandRow?: boolean;\n containsOverflowComponents?: boolean;\n wrapperComponentRef?: React.Ref<HTMLDivElement>;\n defaultFilterData?: Record<number, TableFilterData | undefined>;\n /**\n * @default false\n * @requires name\n */\n memoizeFilters?: boolean;\n /**\n * The lifespan of the memoized filters in milliseconds. The time will reset if the user changes the filters or reloads the page.\n * @default 7200000 (2 hours)\n */\n memoizeFiltersLifespan?: number;\n getRowStyle?: (item: DataItem, index: number) => ComponentStyle;\n onClickRow?: (item: DataItem, index: number) => void;\n onClickAllCheckboxes?: (checked: boolean) => void;\n onChangePage?: (page: number) => void;\n onChangeFilter?: (filterData: Record<number, TableFilterData | undefined>) => void;\n onChangeFilterDataValue?: (data: DataItem[]) => void;\n} & ComponentMarginProps;\n\nexport type TableRef = {\n currentPage: number;\n setCurrentPage: React.Dispatch<React.SetStateAction<number>>;\n pagesCount: number;\n setCheckedItems: React.Dispatch<React.SetStateAction<boolean[]>>;\n};\n\ntype TableComponentType = {\n <DataItem>(props: ComponentPropWithRef<TableRef, TableProps<DataItem>>): React.ReactElement;\n};\n\nconst TableComponent: TableComponentType = forwardRef(function Table<DataItem>(\n {\n name,\n columns,\n data,\n isStriped,\n isLoading,\n withStickyHeader,\n noDataItemsMessage = \"No data available\",\n pageSize,\n pageCount,\n isInsideTableExpandRow,\n containsOverflowComponents,\n wrapperComponentRef,\n defaultFilterData,\n memoizeFilters,\n memoizeFiltersLifespan = 7200000,\n getRowStyle,\n onClickRow,\n onClickAllCheckboxes,\n onChangePage,\n onChangeFilter,\n onChangeFilterDataValue,\n ...props\n }: TableProps<DataItem>,\n ref: React.ForwardedRef<TableRef>,\n) {\n const theme = useTheme();\n const mediaQuery = useMediaQuery();\n const { colorTheme } = useBetterCoreContext();\n\n const filterModalRef = useRef<ModalRef>(null);\n\n const readyColumns = useMemo(() => columns.filter((column) => !column.hidden), [columns]);\n\n const columnsRef = useRef(readyColumns);\n columnsRef.current = readyColumns;\n\n const [checkedItems, setCheckedItems] = useState<boolean[]>([]);\n const [expandedRows, setExpandedRows] = useState<boolean[]>([]);\n const [currentPage, setCurrentPage] = useState<number>(1);\n\n const [filterData, setFilterData] = useState<Record<number, TableFilterData | undefined>>(() => {\n if (!memoizeFilters || !name) return defaultFilterData ?? {};\n\n const localStorageData = JSON.parse(localStorage.getItem(`react-better-html-table-filters-${name}`) || \"{}\");\n\n const timestamp = localStorageData.timestamp;\n const data = localStorageData.data ?? defaultFilterData ?? {};\n\n const timeDiff = Date.now() - timestamp;\n if (timeDiff > memoizeFiltersLifespan) return defaultFilterData ?? {};\n\n return data;\n });\n const [openedFilterColumnIndex, setOpenedFilterColumnIndex] = useState<number>();\n\n const [filterListSelectedItems, setFilterListSelectedItems] = useState<ListFilterValue[\"value\"][]>();\n\n const openedFilterData = openedFilterColumnIndex !== undefined ? filterData[openedFilterColumnIndex] : undefined;\n const openedFilterColumn = openedFilterColumnIndex !== undefined ? readyColumns[openedFilterColumnIndex] : undefined;\n\n const filterForm = useForm({\n defaultValues: {\n min: undefined as number | string | undefined,\n max: undefined as number | string | undefined,\n search: \"\",\n },\n onSubmit: (values) => {\n if (!openedFilterColumn?.filter) return;\n if (openedFilterColumnIndex === undefined) return;\n\n setFilterData((oldValue) => ({\n ...oldValue,\n [openedFilterColumnIndex]:\n openedFilterColumn.filter === \"number\"\n ? {\n type: openedFilterColumn.filter,\n min: values.min as number | undefined,\n max: values.max as number | undefined,\n }\n : openedFilterColumn.filter === \"date\" || openedFilterColumn.filter === \"date-time\"\n ? {\n type: openedFilterColumn.filter,\n min: values.min as string | undefined,\n max: values.max as string | undefined,\n }\n : openedFilterColumn.filter === \"list\"\n ? filterListSelectedItems && filterListSelectedItems.length > 0\n ? {\n type: openedFilterColumn.filter,\n list: filterListSelectedItems,\n }\n : undefined\n : undefined,\n }));\n\n filterModalRef.current?.close();\n },\n });\n\n const expandColumn = useMemo(() => readyColumns.find((column) => column.type === \"expand\"), [readyColumns]);\n\n const renderCellContent = useCallback(\n (column: (typeof readyColumns)[number], item: DataItem, itemIndex: number) => {\n switch (column.type) {\n case \"text\": {\n const value = column.keyName ? item[column.keyName] : undefined;\n const textProps =\n (typeof column.getTextProps === \"function\"\n ? column.getTextProps?.(item, itemIndex)\n : column.getTextProps) ?? {};\n\n return <Text {...textProps}>{column.format?.(item, itemIndex) ?? String(value ?? \"\")}</Text>;\n }\n\n case \"element\": {\n return column.render?.(item, itemIndex) ?? <></>;\n }\n\n case \"image\": {\n const imageProps =\n (typeof column.getImageProps === \"function\"\n ? column.getImageProps?.(item, itemIndex)\n : column.getImageProps) ?? {};\n\n return <Image width=\"100%\" borderRadius={theme.styles.borderRadius / 2} {...imageProps} />;\n }\n\n case \"checkbox\": {\n const { onChange, ...toggleInputProps } =\n (typeof column.getToggleInputProps === \"function\"\n ? column.getToggleInputProps?.(item, itemIndex)\n : column.getToggleInputProps) ?? {};\n\n const checkedValue = checkedItems[itemIndex];\n\n return (\n <ToggleInput.checkbox\n checked={checkedValue}\n value={item}\n onClick={(event) => {\n event.stopPropagation();\n }}\n onChange={(checked, value) => {\n setCheckedItems((oldValue) =>\n oldValue.map((isChecked, internalIndex) =>\n internalIndex === itemIndex ? checked : isChecked,\n ),\n );\n\n onChange?.(checked, value);\n }}\n {...toggleInputProps}\n />\n );\n }\n\n case \"expand\": {\n return (\n <Div isTabAccessed>\n <Icon\n name=\"chevronDown\"\n transform={`rotate(${expandedRows[itemIndex] ? 180 : 0}deg)`}\n transition={theme.styles.transition}\n />\n </Div>\n );\n }\n\n default: {\n return <></>;\n }\n }\n },\n [theme, checkedItems, expandedRows],\n );\n const onClickRowElement = useCallback(\n (item: DataItem, index: number) => {\n if (expandColumn) {\n setExpandedRows((oldValue) => {\n if (oldValue[index] === undefined) {\n const newValue = expandColumn.onlyOneExpanded ? [] : [...oldValue];\n newValue[index] = true;\n\n expandColumn.onExpand?.(item, index);\n\n return newValue;\n }\n\n expandColumn.onCollapse?.(item, index);\n\n return oldValue.map((isExpanded, internalIndex) => (internalIndex === index ? !isExpanded : isExpanded));\n });\n } else onClickRow?.(item, index);\n },\n [onClickRow, expandColumn],\n );\n const onClickAllCheckboxesElement = useCallback(\n (checked: boolean) => {\n onClickAllCheckboxes?.(checked);\n setCheckedItems(data.map(() => checked));\n },\n [onClickAllCheckboxes, data],\n );\n const onClickFilterButton = useCallback(\n (columnIndex: number) => {\n const thisFilterData = filterData[columnIndex];\n\n if (\n thisFilterData?.type === \"number\" ||\n thisFilterData?.type === \"date\" ||\n thisFilterData?.type === \"date-time\"\n ) {\n filterForm.setFieldsValue({\n min: thisFilterData.min ?? undefined,\n max: thisFilterData.max ?? undefined,\n });\n } else if (thisFilterData?.type === \"list\") {\n setFilterListSelectedItems(thisFilterData.list);\n }\n\n setOpenedFilterColumnIndex(columnIndex);\n filterModalRef.current?.open();\n },\n [filterData],\n );\n const onCloseFilterModal = useCallback(() => {\n setTimeout(() => setOpenedFilterColumnIndex(undefined), 0.2 * 1000);\n setFilterListSelectedItems(undefined);\n filterForm.reset();\n }, []);\n const onClickCancelFormFilter = useCallback(() => {\n if (openedFilterColumnIndex === undefined) return;\n\n setFilterData((oldValue) =>\n Object.entries({\n ...oldValue,\n [openedFilterColumnIndex]: undefined,\n }).reduce<typeof oldValue>((previousValue, [key, value]) => {\n if (value !== undefined) previousValue[parseInt(key)] = value;\n\n return previousValue;\n }, {}),\n );\n\n filterModalRef.current?.close();\n }, [openedFilterColumnIndex]);\n const onClickFilterListItem = useCallback(\n (value: ListFilterValue[\"value\"]) =>\n setFilterListSelectedItems((oldValue) => {\n if (!oldValue) return [value];\n if (oldValue.includes(value)) return oldValue.filter((item) => item !== value);\n return [...oldValue, value];\n }),\n [],\n );\n const onClickFilterPreset = useCallback(\n (preset: FilterPreset) => {\n const getValueForDate = (date: Date) => {\n if (openedFilterColumn?.filter === \"date\") return date.toISOString().split(\"T\")[0];\n return date.toISOString();\n };\n\n switch (preset) {\n case \"today\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date()),\n max: getValueForDate(new Date()),\n });\n break;\n\n case \"yesterday\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setDate(new Date().getDate() - 1))),\n max: getValueForDate(new Date(new Date().setDate(new Date().getDate() - 1))),\n });\n break;\n\n case \"tomorrow\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setDate(new Date().getDate() + 1))),\n max: getValueForDate(new Date(new Date().setDate(new Date().getDate() + 1))),\n });\n break;\n\n case \"thisWeek\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setDate(new Date().getDate() - 7))),\n max: getValueForDate(new Date()),\n });\n break;\n\n case \"thisMonth\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setMonth(new Date().getMonth() - 1))),\n max: getValueForDate(new Date()),\n });\n break;\n\n case \"thisYear\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setFullYear(new Date().getFullYear() - 1))),\n max: getValueForDate(new Date()),\n });\n break;\n\n case \"lastWeek\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setDate(new Date().getDate() - 7))),\n max: getValueForDate(new Date(new Date().setDate(new Date().getDate() - 1))),\n });\n break;\n\n case \"lastMonth\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setMonth(new Date().getMonth() - 1))),\n max: getValueForDate(new Date(new Date().setDate(new Date().getDate() - 1))),\n });\n break;\n\n case \"lastYear\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setFullYear(new Date().getFullYear() - 1))),\n max: getValueForDate(new Date(new Date().setDate(new Date().getDate() - 1))),\n });\n break;\n\n case \"nextWeek\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setDate(new Date().getDate() + 7))),\n max: getValueForDate(new Date(new Date().setDate(new Date().getDate() + 7))),\n });\n break;\n\n case \"nextMonth\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setMonth(new Date().getMonth() + 1))),\n max: getValueForDate(new Date(new Date().setMonth(new Date().getMonth() + 1))),\n });\n break;\n\n case \"nextYear\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setFullYear(new Date().getFullYear() + 1))),\n max: getValueForDate(new Date(new Date().setFullYear(new Date().getFullYear() + 1))),\n });\n break;\n\n default:\n break;\n }\n },\n [openedFilterColumn],\n );\n const renderExpandedRow = useCallback(\n (...props: Parameters<NonNullable<ExpandColumn<DataItem>[\"render\"]>>) => {\n const expandColumn = readyColumns.find((column) => column.type === \"expand\");\n if (!expandColumn) return;\n\n return expandColumn.render?.(...props);\n },\n [readyColumns],\n );\n\n const dataAfterFilter = useMemo(\n () =>\n data.filter((item) =>\n Object.entries(filterData).every(([columnIndex, filter]) => {\n if (!filter) return true;\n\n const column = columnsRef.current[parseInt(columnIndex)];\n if (!column) return true;\n\n if (column.filter === \"number\" && filter.type === \"number\") {\n const itemValue: number =\n column.getValue?.(item) ??\n (column.type === \"text\" && column.keyName ? Number(item[column.keyName]) : 0);\n\n if (filter.min !== undefined && itemValue < filter.min) return false;\n if (filter.max !== undefined && itemValue > filter.max) return false;\n } else if (\n (column.filter === \"date\" && filter.type === \"date\") ||\n (column.filter === \"date-time\" && filter.type === \"date-time\")\n ) {\n const minDate = filter.min ? new Date(filter.min) : undefined;\n const maxDate = filter.max ? new Date(filter.max) : undefined;\n\n if (column.filter === \"date\") {\n minDate?.setHours(0, 0, 0, 0);\n maxDate?.setHours(23, 59, 59, 999);\n }\n\n const itemValue: Date =\n column.getValue?.(item) ??\n new Date(column.type === \"text\" && column.keyName ? String(item[column.keyName]) : \"\");\n\n if (filter.min !== undefined && minDate && itemValue < minDate) return false;\n if (filter.max !== undefined && maxDate && itemValue > maxDate) return false;\n } else if (column.filter === \"list\" && filter.type === \"list\") {\n const itemValue: ListFilterValue[\"value\"] =\n column.getItemValue?.(item) ??\n (column.type === \"text\" && column.keyName ? String(item[column.keyName]) : \"\");\n\n if (!filter.list?.includes(itemValue)) return false;\n }\n\n return true;\n }),\n ),\n [data, filterData],\n );\n const dataAfterPagination = useMemo(() => {\n if (pageSize === undefined) return dataAfterFilter;\n if (pageCount !== undefined) return dataAfterFilter;\n\n const pageStartItemIndex = (currentPage - 1) * (pageSize ?? 0);\n const pageEndItemIndex = pageStartItemIndex + (pageSize ?? 0);\n\n return dataAfterFilter.slice(pageStartItemIndex, pageEndItemIndex);\n }, [dataAfterFilter, pageSize, currentPage, pageCount]);\n const everythingIsChecked = useMemo<boolean>(() => {\n return data.length > 0 && checkedItems.every((checked) => checked) && checkedItems.length === data.length;\n }, [data, checkedItems]);\n const possibleFilterListValues = useMemo<ListFilterValue[]>(() => {\n if (!openedFilterColumn || openedFilterColumn.filter !== \"list\") return [];\n\n return openedFilterColumn.list\n .filter((item) => item !== undefined)\n .map<ListFilterValue>((item) => ({\n ...item,\n count: data.reduce<number>((previousValue, currentValue) => {\n const value: ListFilterValue[\"value\"] =\n openedFilterColumn.getItemValue?.(currentValue) ??\n (openedFilterColumn.type === \"text\" && openedFilterColumn.keyName\n ? String(currentValue[openedFilterColumn.keyName])\n : \"\");\n\n return previousValue + (item.value === value ? 1 : 0);\n }, 0),\n }))\n .reduce<ListFilterValue[]>(\n (previousValue, currentValue) =>\n !previousValue.some((item) => item.value === currentValue.value)\n ? [...previousValue, currentValue]\n : previousValue,\n [],\n );\n }, [data, openedFilterColumn, filterForm.values.search]);\n\n const pageCountInternal = pageCount ?? (pageSize !== undefined ? Math.ceil(dataAfterFilter.length / pageSize) : 1);\n\n const onClickSelectAllFilterListItems = useCallback(\n () => setFilterListSelectedItems(possibleFilterListValues.map((item) => item.value)),\n [possibleFilterListValues],\n );\n const onClickDeselectAllFilterListItems = useCallback(() => setFilterListSelectedItems([]), []);\n\n useEffect(() => {\n onChangePage?.(currentPage);\n }, [onChangePage, currentPage]);\n useEffect(() => {\n onChangeFilter?.(filterData);\n }, [onChangeFilter, filterData]);\n useEffect(() => {\n if (!memoizeFilters) return;\n if (!name) return;\n\n localStorage.setItem(\n `react-better-html-table-filters-${name}`,\n JSON.stringify({\n timestamp: Date.now(),\n data: filterData,\n }),\n );\n }, [memoizeFilters, name, filterData]);\n useEffect(() => {\n onChangeFilterDataValue?.(dataAfterFilter);\n }, [onChangeFilterDataValue, dataAfterFilter]);\n\n useImperativeHandle(\n ref,\n (): TableRef => {\n return {\n currentPage,\n setCurrentPage,\n pagesCount: pageCountInternal,\n setCheckedItems,\n };\n },\n [currentPage, setCurrentPage, pageCountInternal, setCheckedItems],\n );\n\n const withFooter = pageSize !== undefined && pageCountInternal > 1;\n const mobileFooterBreakingPoint = mediaQuery.size700 && pageCountInternal > maximumVisiblePages / 1.4;\n\n return (\n <>\n <Div\n border={`1px solid ${theme.colors.border}`}\n borderRadius={theme.styles.borderRadius * 2}\n overflow={!containsOverflowComponents ? \"auto\" : undefined}\n {...props}\n ref={wrapperComponentRef}\n >\n <TableStyledComponent\n isStriped={isStriped}\n withHover={onClickRow !== undefined || expandColumn !== undefined}\n withStickyHeader={withStickyHeader}\n colorTheme={colorTheme}\n theme={theme}\n containsOverflowComponents={containsOverflowComponents}\n withFooter={withFooter}\n >\n <thead>\n <tr className=\"isHeader\">\n {readyColumns.map((column, index) => (\n <ThStyledComponent\n width={\n column.width ??\n (column.type === \"image\"\n ? defaultImageWidth\n : column.type === \"checkbox\"\n ? 26\n : column.type === \"expand\"\n ? 16\n : undefined)\n }\n minWidth={column.minWidth}\n maxWidth={column.maxWidth}\n textAlign={column.align}\n key={column.type + column.label + index}\n >\n <Div.row\n width=\"100%\"\n alignItems=\"center\"\n justifyContent={\n column.filter\n ? \"space-between\"\n : column.align === \"center\"\n ? \"center\"\n : column.align === \"right\"\n ? \"flex-end\"\n : \"flex-start\"\n }\n gap={theme.styles.gap}\n >\n {column.type === \"checkbox\" && onClickAllCheckboxes ? (\n <ToggleInput.checkbox\n checked={everythingIsChecked}\n disabled={data.length === 0}\n onChange={onClickAllCheckboxesElement}\n />\n ) : column.label ? (\n column.renderLabel ? (\n column.renderLabel(column.label)\n ) : (\n <Text>{column.label}</Text>\n )\n ) : undefined}\n\n {column.filter && (\n <Button.icon\n icon=\"filter\"\n color={filterData[index] ? theme.colors.primary : theme.colors.textSecondary}\n value={index}\n onClickWithValue={onClickFilterButton}\n />\n )}\n </Div.row>\n </ThStyledComponent>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {isLoading ? (\n <tr className=\"withoutHover\">\n <td className=\"noData\" colSpan={readyColumns.length}>\n <Loader.box />\n </td>\n </tr>\n ) : dataAfterPagination.length > 0 ? (\n dataAfterPagination.map((item, rowIndex) => {\n const realRowIndex = rowIndex + (pageSize ? (currentPage - 1) * pageSize : 0);\n\n return (\n <Fragment key={JSON.stringify(item) + realRowIndex}>\n <tr\n className={\n isInsideTableExpandRow && onClickRow === undefined && expandColumn === undefined\n ? \"withoutHover\"\n : undefined\n }\n style={getRowStyle?.(item, realRowIndex)}\n onClick={() => onClickRowElement(item, realRowIndex)}\n >\n {readyColumns.map((column, colIndex) => (\n <TdStyledComponent\n textAlign={column.align}\n onClick={(event) => {\n if (column.clickStopPropagation) event.stopPropagation();\n }}\n key={column.type + column.label + colIndex}\n >\n {renderCellContent(column, item, realRowIndex)}\n </TdStyledComponent>\n ))}\n </tr>\n\n {expandedRows[realRowIndex] && (\n <tr className=\"withoutHover isExpandRow\">\n <td colSpan={readyColumns.length}>{renderExpandedRow(item, realRowIndex)}</td>\n </tr>\n )}\n </Fragment>\n );\n })\n ) : (\n <tr className=\"withoutHover\">\n <td className=\"noData\" colSpan={readyColumns.length}>\n <Text.unknown>{noDataItemsMessage}</Text.unknown>\n </td>\n </tr>\n )}\n </tbody>\n\n {withFooter && (\n <tfoot>\n <tr className=\"isFooter\">\n <td colSpan={readyColumns.length}>\n <Div.column\n position=\"relative\"\n width=\"100%\"\n justifyContent=\"center\"\n flexReverse\n gap={theme.styles.gap / 2}\n >\n <Text\n position={mobileFooterBreakingPoint ? \"relative\" : \"absolute\"}\n top={!mobileFooterBreakingPoint ? \"50%\" : undefined}\n color={theme.colors.textSecondary}\n transform={!mobileFooterBreakingPoint ? \"translateY(-50%)\" : undefined}\n userSelect=\"none\"\n >\n {currentPage} / {pageCountInternal}\n </Text>\n\n <Pagination\n currentPage={currentPage}\n itemsLength={dataAfterFilter.length}\n itemsPerPage={pageSize}\n pageCount={pageCount}\n maximumVisiblePages={maximumVisiblePages}\n onChangePage={setCurrentPage}\n />\n </Div.column>\n </td>\n </tr>\n </tfoot>\n )}\n </TableStyledComponent>\n </Div>\n\n <Modal\n title={`Filter ${openedFilterColumn?.label ?? \"\"}`}\n description={\n openedFilterColumn?.filter === \"number\"\n ? \"Enter minimum and maximum values to filter\"\n : openedFilterColumn?.filter === \"date\" || openedFilterColumn?.filter === \"date-time\"\n ? \"Enter minimum and maximum dates to filter\"\n : openedFilterColumn?.filter === \"list\"\n ? \"Select values to filter from the list bellow\"\n : \"\"\n }\n onClose={onCloseFilterModal}\n ref={filterModalRef}\n >\n {openedFilterColumn ? (\n openedFilterColumn.filter === \"number\" ? (\n <Form\n form={filterForm}\n submitButtonText=\"Filter\"\n cancelButtonText=\"Clear\"\n onClickCancel={openedFilterData ? onClickCancelFormFilter : undefined}\n >\n <FormRow>\n <InputField type=\"number\" label=\"Min\" {...filterForm.getInputFieldProps(\"min\")} />\n <InputField type=\"number\" label=\"Max\" {...filterForm.getInputFieldProps(\"max\")} />\n </FormRow>\n </Form>\n ) : openedFilterColumn.filter === \"date\" || openedFilterColumn.filter === \"date-time\" ? (\n <Form\n form={filterForm}\n gap={theme.styles.gap}\n submitButtonText=\"Filter\"\n cancelButtonText=\"Clear\"\n onClickCancel={openedFilterData ? onClickCancelFormFilter : undefined}\n >\n <FormRow>\n {openedFilterColumn.filter === \"date\" ? (\n <>\n <InputField.date label=\"Min\" {...filterForm.getInputFieldProps(\"min\")} />\n <InputField.date label=\"Max\" {...filterForm.getInputFieldProps(\"max\")} />\n </>\n ) : (\n <>\n <InputField.dateTime label=\"Min\" {...filterForm.getInputFieldProps(\"min\")} />\n <InputField.dateTime label=\"Max\" {...filterForm.getInputFieldProps(\"max\")} />\n </>\n )}\n </FormRow>\n\n {openedFilterColumn.presets && (\n <Div.column gap={theme.styles.gap / 2}>\n <Label text=\"Presets\" />\n\n <Div.row alignItems=\"center\" flexWrap=\"wrap\" gap={theme.styles.gap}>\n {openedFilterColumn.presets.map((preset) => (\n <Button.secondary\n text={filterPresetsText[preset]}\n isSmall={mediaQuery.size600}\n value={preset}\n onClickWithValue={onClickFilterPreset}\n key={preset}\n />\n ))}\n </Div.row>\n </Div.column>\n )}\n </Form>\n ) : openedFilterColumn.filter === \"list\" ? (\n <Form\n gap={theme.styles.space}\n submitButtonText=\"Filter\"\n cancelButtonText=\"Clear\"\n renderActionButtons={\n <Div.row marginRight=\"auto\" alignItems=\"center\" gap={theme.styles.gap}>\n <Button.secondary\n text=\"Select All\"\n isSmall\n disabled={possibleFilterListValues.length === filterListSelectedItems?.length}\n onClick={onClickSelectAllFilterListItems}\n />\n <Button.secondary\n text=\"Deselect All\"\n isSmall\n disabled={!filterListSelectedItems?.length}\n onClick={onClickDeselectAllFilterListItems}\n />\n </Div.row>\n }\n onClickCancel={openedFilterData ? onClickCancelFormFilter : undefined}\n onSubmit={filterForm.onSubmit}\n >\n {openedFilterColumn?.withSearch && (\n <FormRow oneItemOnly>\n <InputField.search\n label=\"Search\"\n autoComplete=\"off\"\n {...filterForm.getInputFieldProps(\"search\")}\n />\n </FormRow>\n )}\n\n <Div.column gap={theme.styles.gap / 2}>\n <Label text=\"Possible values\" />\n\n <Div.row flexWrap=\"wrap\" gap={theme.styles.gap}>\n {possibleFilterListValues.length > 0 ? (\n possibleFilterListValues.map((value) => {\n const isActive = filterListSelectedItems?.includes(value.value);\n\n return (\n <Div.box\n isActive={isActive}\n value={value.value}\n onClickWithValue={onClickFilterListItem}\n key={value.value.toString()}\n >\n <Div.row alignItems=\"center\" gap={theme.styles.gap / 2}>\n <Text>{value.label || value.value}</Text>\n\n {openedFilterColumn.withTotalNumber && (\n <Text\n fontSize={14}\n color={isActive ? theme.colors.base + \"c0\" : theme.colors.textSecondary}\n >\n ({value.count})\n </Text>\n )}\n </Div.row>\n </Div.box>\n );\n })\n ) : (\n <Text.unknown>No values</Text.unknown>\n )}\n </Div.row>\n </Div.column>\n\n <Div />\n </Form>\n ) : (\n <Text.unknown>Unknown filter</Text.unknown>\n )\n ) : (\n <Loader.box />\n )}\n </Modal>\n </>\n );\n}) as any;\n\nconst Table = memo(TableComponent) as any as typeof TableComponent;\n\nexport default Table;\n","import { memo, useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useTheme } from \"react-better-core\";\n\nimport { useMediaQuery } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport Button from \"./Button\";\nimport Text from \"./Text\";\n\ntype PaginationProps = {\n currentPage?: number;\n itemsLength?: number;\n itemsPerPage?: number;\n pageCount?: number;\n /** @default 11 */\n maximumVisiblePages?: number;\n onClickPreviousPage?: (newPage: number) => void;\n onClickNextPage?: (newPage: number) => void;\n onChangePage?: (page: number) => void;\n};\n\ntype PaginationComponentType = {\n (props: PaginationProps): React.ReactElement;\n};\n\nconst PaginationComponent: PaginationComponentType = function Pagination({\n currentPage = 1,\n itemsLength = 0,\n itemsPerPage,\n pageCount,\n maximumVisiblePages = 11,\n onClickPreviousPage,\n onClickNextPage,\n onChangePage,\n}: PaginationProps) {\n const theme = useTheme();\n const mediaQuery = useMediaQuery();\n\n const [currentPageInternal, setCurrentPage] = useState<number>(currentPage);\n\n const pageCountInternal = pageCount ?? (itemsPerPage !== undefined ? Math.ceil(itemsLength / itemsPerPage) : 1);\n\n const onClickPreviousPageElement = useCallback(() => {\n const newPage = currentPageInternal <= 1 ? 1 : currentPageInternal - 1;\n\n setCurrentPage(newPage);\n onClickPreviousPage?.(newPage);\n }, [currentPageInternal, onClickPreviousPage]);\n const onClickNextPageElement = useCallback(() => {\n const newPage = currentPageInternal >= pageCountInternal ? pageCountInternal : currentPageInternal + 1;\n\n setCurrentPage(newPage);\n onClickNextPage?.(newPage);\n }, [currentPageInternal, pageCountInternal, onClickNextPage]);\n\n const paginationItems = useMemo(() => {\n const halfRange = Math.floor(maximumVisiblePages / 2);\n\n let startPage = Math.max(1, currentPageInternal - halfRange);\n let endPage = Math.min(pageCountInternal, currentPageInternal + halfRange);\n\n if (endPage - startPage + 1 < maximumVisiblePages) {\n startPage = Math.max(1, endPage - maximumVisiblePages + 1);\n endPage = Math.min(pageCountInternal, startPage + maximumVisiblePages - 1);\n }\n\n return Array.from(\n {\n length: endPage - startPage + 1,\n },\n (_, index) => startPage + index,\n );\n }, [pageCountInternal, currentPageInternal]);\n\n useEffect(() => {\n onChangePage?.(currentPageInternal);\n }, [currentPageInternal, onChangePage]);\n useEffect(() => {\n setCurrentPage(currentPage);\n }, [currentPage]);\n\n const mobileFooterBreakingPoint = mediaQuery.size700 && pageCountInternal > maximumVisiblePages / 1.4;\n\n return (\n <Div.row alignItems=\"center\" justifyContent=\"center\" gap={theme.styles.gap * 2}>\n {pageCountInternal > maximumVisiblePages && (\n <Button.icon\n icon=\"doubleChevronLeft\"\n disabled={currentPageInternal === 1}\n value={1}\n onClickWithValue={setCurrentPage}\n />\n )}\n <Button.icon icon=\"chevronLeft\" disabled={currentPageInternal === 1} onClick={onClickPreviousPageElement} />\n\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n flexWrap={mobileFooterBreakingPoint ? \"wrap\" : undefined}\n gap={theme.styles.gap}\n >\n {paginationItems.map((pageIndex) => {\n const isActive = currentPageInternal === pageIndex;\n\n return (\n <Div\n cursor=\"pointer\"\n userSelect=\"none\"\n value={pageIndex}\n onClickWithValue={setCurrentPage}\n key={pageIndex}\n >\n <Text\n fontWeight={isActive ? 700 : 400}\n color={isActive ? theme.colors.primary : theme.colors.textSecondary}\n transition={theme.styles.transition}\n >\n {pageIndex}\n </Text>\n </Div>\n );\n })}\n </Div.row>\n\n <Button.icon\n icon=\"chevronRight\"\n disabled={currentPageInternal === pageCountInternal}\n onClick={onClickNextPageElement}\n />\n {pageCountInternal > maximumVisiblePages && (\n <Button.icon\n icon=\"doubleChevronRight\"\n disabled={currentPageInternal === pageCountInternal}\n onClickWithValue={setCurrentPage}\n value={pageCountInternal}\n />\n )}\n </Div.row>\n );\n};\n\nconst Pagination = memo(PaginationComponent) as any as typeof PaginationComponent & {};\n\nexport default Pagination;\n","import { memo, useCallback, useRef, useState, useEffect, forwardRef, useImperativeHandle, useMemo } from \"react\";\nimport { AnyOtherString, IconName, OmitProps, Theme, useTheme } from \"react-better-core\";\nimport styled, { css, RuleSet } from \"styled-components\";\n\nimport { ComponentPropWithRef } from \"../types/components\";\n\nimport Div, { DivProps } from \"./Div\";\nimport Text, { TextProps } from \"./Text\";\nimport Divider, { HorizontalDividerProps } from \"./Divider\";\nimport Icon from \"./Icon\";\n\ntype TooltipContainerProps = {\n theme: Theme;\n position: TooltipPosition;\n align?: TooltipAlign;\n pointerEvents?: React.CSSProperties[\"pointerEvents\"];\n withArrow?: boolean;\n arrowSize?: number;\n isOpen: boolean;\n gap: number;\n};\n\nconst tooltipContainerStyle = (props: TooltipContainerProps): Record<TooltipPosition, RuleSet<object>> => ({\n top: css`\n bottom: calc(100% + ${props.gap}px + ${props.arrowSize}px);\n ${props.align === \"center\" ? \"left: 50%;\" : props.align === \"left\" ? \"left: 0;\" : \"right: 0;\"}\n `,\n bottom: css`\n top: calc(100% + ${props.gap}px + ${props.arrowSize}px);\n ${props.align === \"center\" ? \"left: 50%;\" : props.align === \"left\" ? \"left: 0;\" : \"right: 0;\"};\n `,\n left: css`\n ${props.align === \"center\" ? \"top: 50%;\" : props.align === \"top\" ? \"top: 0;\" : \"bottom: 0;\"};\n right: calc(100% + ${props.gap}px + ${props.arrowSize}px);\n `,\n right: css`\n ${props.align === \"center\" ? \"top: 50%;\" : props.align === \"top\" ? \"top: 0;\" : \"bottom: 0;\"};\n left: calc(100% + ${props.gap}px + ${props.arrowSize}px);\n `,\n});\n\nconst tooltipPositionStyle = (\n props: TooltipContainerProps,\n): Record<\n TooltipPosition,\n {\n opened: RuleSet<object>;\n closed: RuleSet<object>;\n }\n> => ({\n top: {\n opened: css`\n transform: translateX(${props.align === \"center\" ? \"-50%\" : \"0\"});\n `,\n closed: css`\n transform: translateX(${props.align === \"center\" ? \"-50%\" : \"0\"}) translateY(${props.theme.styles.gap}px);\n `,\n },\n bottom: {\n opened: css`\n transform: translateX(${props.align === \"center\" ? \"-50%\" : \"0\"});\n `,\n closed: css`\n transform: translateX(${props.align === \"center\" ? \"-50%\" : \"0\"}) translateY(-${props.theme.styles.gap}px);\n `,\n },\n left: {\n opened: css`\n transform: translateY(${props.align === \"center\" ? \"-50%\" : \"0\"});\n `,\n closed: css`\n transform: translateX(${props.theme.styles.gap}px) translateY(${props.align === \"center\" ? \"-50%\" : \"0\"});\n `,\n },\n right: {\n opened: css`\n transform: translateY(${props.align === \"center\" ? \"-50%\" : \"0\"});\n `,\n closed: css`\n transform: translateX(-${props.theme.styles.gap}px) translateY(${props.align === \"center\" ? \"-50%\" : \"0\"});\n `,\n },\n});\n\nconst TooltipContainer = styled.div.withConfig({\n shouldForwardProp: (prop) =>\n ![\"theme\", \"position\", \"align\", \"pointerEvents\", \"withArrow\", \"arrowSize\", \"isOpen\", \"gap\"].includes(prop),\n})<TooltipContainerProps>`\n position: absolute;\n opacity: ${(props) => (props.isOpen ? 1 : 0)};\n pointer-events: ${(props) => (props.isOpen ? props.pointerEvents : \"none\")};\n transition: ${(props) => props.theme.styles.transition};\n z-index: 1000;\n\n ${(props) => tooltipContainerStyle(props)[props.position]}\n\n ${(props) =>\n props.isOpen\n ? tooltipPositionStyle(props)[props.position].opened\n : tooltipPositionStyle(props)[props.position].closed}\n`;\n\ntype TooltipPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\ntype TooltipAlign = \"left\" | \"center\" | \"right\" | \"top\" | \"bottom\";\n\ntype ArrowProps = {\n position: TooltipPosition;\n align: TooltipAlign;\n sideSpace: number;\n size: number;\n color: string;\n isOpen: boolean;\n};\n\nconst arrowStyle = (props: ArrowProps, borderWidth?: number): Record<TooltipPosition, DivProps> => ({\n top: {\n borderTopColor: props.color,\n borderBottom: 0,\n top: borderWidth ? -props.size : undefined,\n left: borderWidth\n ? -props.size + borderWidth * 2\n : props.align === \"center\"\n ? \"50%\"\n : props.align === \"left\"\n ? props.sideSpace\n : undefined,\n right: !borderWidth && props.align === \"right\" ? props.sideSpace : undefined,\n bottom: -props.size + 1,\n transform: !borderWidth && props.align === \"center\" ? \"translateX(-50%)\" : undefined,\n },\n bottom: {\n borderBottomColor: props.color,\n borderTop: 0,\n top: borderWidth ? borderWidth * 2 : -props.size + 1,\n left: borderWidth\n ? -props.size + borderWidth * 2\n : props.align === \"center\"\n ? \"50%\"\n : props.align === \"left\"\n ? props.sideSpace\n : undefined,\n right: !borderWidth && props.align === \"right\" ? props.sideSpace : undefined,\n transform: !borderWidth && props.align === \"center\" ? \"translateX(-50%);\" : undefined,\n },\n left: {\n borderLeftColor: props.color,\n borderRight: 0,\n top: borderWidth\n ? -props.size + borderWidth * 2\n : props.align === \"center\"\n ? \"50%\"\n : props.align === \"top\"\n ? props.sideSpace\n : undefined,\n bottom: !borderWidth && props.align === \"bottom\" ? props.sideSpace : undefined,\n left: borderWidth ? -props.size : undefined,\n right: -props.size + 1,\n transform: !borderWidth && props.align === \"center\" ? \"translateY(-50%)\" : undefined,\n },\n right: {\n borderRightColor: props.color,\n borderLeft: 0,\n top: borderWidth\n ? -props.size + borderWidth * 2\n : props.align === \"center\"\n ? \"50%\"\n : props.align === \"top\"\n ? props.sideSpace\n : undefined,\n bottom: !borderWidth && props.align === \"bottom\" ? props.sideSpace : undefined,\n left: borderWidth ? borderWidth * 2 : -props.size + 1,\n transform: !borderWidth && props.align === \"center\" ? \"translateY(-50%);\" : undefined,\n },\n});\n\nconst Arrow = memo(function Arrow(props: ArrowProps) {\n const theme = useTheme();\n\n const { position, size } = props;\n\n const outerProps = useMemo<ArrowProps>(\n () => ({\n ...props,\n color: theme.colors.border,\n }),\n [props, theme],\n );\n\n const borderWidth = 1;\n\n return (\n <Div\n position=\"absolute\"\n width={0}\n height={0}\n border={`${size}px solid transparent`}\n {...arrowStyle(outerProps)[position]}\n >\n <Div\n position=\"absolute\"\n width={0}\n height={0}\n border={`${size - borderWidth * 2}px solid transparent`}\n {...arrowStyle(props, borderWidth)[position]}\n />\n </Div>\n );\n});\n\nexport type TooltipProps = {\n /** @default \"bottom\" */\n position?: TooltipPosition;\n /** @default \"hover\" */\n trigger?: \"hover\" | \"click\";\n /** @default \"center\" */\n align?: TooltipAlign;\n content: React.ReactNode;\n contentWidth?: React.CSSProperties[\"width\"];\n contentMinWidth?: React.CSSProperties[\"minWidth\"];\n contentPointerEvents?: React.CSSProperties[\"pointerEvents\"];\n /** @default \"fit-content\" */\n childrenWrapperWidth?: React.CSSProperties[\"width\"];\n childrenWrapperHeight?: React.CSSProperties[\"height\"];\n disabled?: boolean;\n withArrow?: boolean;\n isSmall?: boolean;\n backgroundColor?: string;\n asContextMenu?: boolean;\n isTabAccessed?: boolean;\n onOpen?: () => void;\n onClose?: () => void;\n children: React.ReactNode;\n};\n\nexport type TooltipRef = {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n};\n\ntype TooltipComponent = {\n (props: ComponentPropWithRef<TooltipRef, TooltipProps>): React.ReactElement;\n item: <Value>(props: ComponentPropWithRef<HTMLDivElement, TooltipItemProps<Value>>) => React.ReactElement;\n divider: (props: ComponentPropWithRef<HTMLDivElement, HorizontalDividerProps>) => React.ReactElement;\n sectionTitle: (props: ComponentPropWithRef<HTMLParagraphElement, TooltipSectionTitleProps>) => React.ReactElement;\n};\n\nconst TooltipComponent: TooltipComponent = forwardRef(function Tooltip(\n {\n position = \"bottom\",\n trigger = \"hover\",\n align = \"center\",\n content,\n contentWidth,\n contentMinWidth,\n contentPointerEvents = \"auto\",\n childrenWrapperWidth = \"fit-content\",\n childrenWrapperHeight,\n disabled,\n withArrow,\n isSmall,\n backgroundColor,\n asContextMenu,\n isTabAccessed,\n onOpen,\n onClose,\n children,\n }: TooltipProps,\n ref: React.ForwardedRef<TooltipRef>,\n) {\n const theme = useTheme();\n\n const triggerHolderRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const tooltipContainerRef = useRef<HTMLDivElement>(null);\n\n const closeTimerRef = useRef<number>(undefined);\n\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [isOpenLate, setIsOpenLate] = useState<boolean>(false);\n\n const arrowSize = withArrow ? theme.styles.gap : 0;\n const gap = theme.styles.gap / 2;\n\n const outsideScreenGap = theme.styles.gap / 2;\n const totalGap = arrowSize + gap;\n\n const openTooltip = useCallback(() => {\n if (disabled) return;\n if (closeTimerRef.current) clearTimeout(closeTimerRef.current);\n\n setIsOpen(true);\n setIsOpenLate(true);\n\n setTimeout(() => {\n if (!tooltipContainerRef.current) return;\n if (!contentRef.current) return;\n\n const clientRects = tooltipContainerRef.current.getBoundingClientRect();\n\n if (clientRects) {\n const { width, height, x, y } = clientRects;\n\n const topOutside = y < 0;\n const bottomOutside = y + height > window.innerHeight;\n const leftOutside = x < 0;\n const rightOutside = x + width > window.innerWidth;\n\n if (topOutside) contentRef.current.style.transform = `translateY(${y * -1 + outsideScreenGap}px)`;\n if (bottomOutside)\n contentRef.current.style.transform = `translateY(${window.innerHeight - (y + height) - totalGap}px)`;\n if (leftOutside) contentRef.current.style.transform = `translateX(${x * -1 + outsideScreenGap}px)`;\n if (rightOutside)\n contentRef.current.style.transform = `translateX(${window.innerWidth - (x + width) - totalGap}px)`;\n }\n }, 1);\n\n onOpen?.();\n }, [disabled, onOpen, outsideScreenGap, totalGap]);\n const closeTooltip = useCallback(() => {\n setIsOpen(false);\n closeTimerRef.current = setTimeout(() => setIsOpenLate(false), 300);\n\n onClose?.();\n }, [onClose]);\n const onMouseEnter = useCallback(() => {\n if (trigger === \"hover\") openTooltip();\n }, [trigger, openTooltip]);\n const onMouseLeave = useCallback(() => {\n if (trigger === \"hover\") closeTooltip();\n }, [trigger, closeTooltip]);\n const onClickHolder = useCallback(\n (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (trigger === \"click\") {\n if (!isOpen) openTooltip();\n else if (triggerHolderRef.current?.contains(event.target as Node)) closeTooltip();\n }\n },\n [trigger, openTooltip, isOpen, closeTooltip],\n );\n const onClickOutside = useCallback(\n (event: MouseEvent) => {\n if (!isOpen) return;\n if (trigger !== \"click\") return;\n\n if (\n !contentRef.current?.contains(event.target as Node) &&\n !triggerHolderRef.current?.contains(event.target as Node)\n ) {\n closeTooltip();\n }\n },\n [trigger, isOpen, closeTooltip],\n );\n\n useEffect(() => {\n if (trigger === \"click\") {\n document.addEventListener(\"mousedown\", onClickOutside);\n\n return () => {\n document.removeEventListener(\"mousedown\", onClickOutside);\n };\n }\n }, [trigger, onClickOutside]);\n useEffect(() => {\n if (!disabled) return;\n\n closeTooltip();\n }, [disabled]);\n\n useImperativeHandle(\n ref,\n (): TooltipRef => {\n return {\n isOpen,\n open: openTooltip,\n close: closeTooltip,\n };\n },\n [isOpen, openTooltip, closeTooltip],\n );\n\n return (\n <Div\n position=\"relative\"\n width={childrenWrapperWidth}\n height={childrenWrapperHeight}\n onClick={onClickHolder}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <Div\n width={childrenWrapperWidth}\n height={childrenWrapperHeight}\n isTabAccessed={isTabAccessed}\n ref={triggerHolderRef}\n >\n {children}\n </Div>\n\n <TooltipContainer\n theme={theme}\n position={position}\n align={align}\n pointerEvents={contentPointerEvents}\n withArrow={withArrow}\n arrowSize={arrowSize}\n gap={gap}\n isOpen={isOpen}\n role=\"tooltip\"\n ref={tooltipContainerRef}\n >\n {(isOpen || isOpenLate) && (\n <Div position=\"relative\" ref={contentRef}>\n <Div.box\n position=\"relative\"\n width={contentWidth}\n minWidth={contentMinWidth}\n backgroundColor={backgroundColor ?? theme.colors.backgroundContent}\n boxShadow=\"0px 10px 20px #00000020\"\n paddingBlock={isSmall ? theme.styles.gap / 2 : theme.styles.gap}\n paddingInline={asContextMenu ? 0 : isSmall ? theme.styles.space / 2 : theme.styles.space}\n overflow={asContextMenu ? \"hidden\" : undefined}\n >\n {content}\n </Div.box>\n\n <Div\n position=\"absolute\"\n width={position === \"left\" || position === \"right\" ? totalGap : \"100%\"}\n height={position === \"top\" || position === \"bottom\" ? totalGap : \"100%\"}\n top={position === \"top\" ? \"100%\" : position === \"bottom\" ? undefined : 0}\n bottom={position === \"bottom\" ? \"100%\" : position === \"top\" ? undefined : 0}\n left={position === \"left\" ? \"100%\" : position === \"right\" ? undefined : 0}\n right={position === \"right\" ? \"100%\" : position === \"left\" ? undefined : 0}\n borderTopLeftRadius={999}\n borderTopRightRadius={999}\n />\n\n {withArrow && (\n <Arrow\n position={position}\n align={align}\n sideSpace={theme.styles.borderRadius}\n size={arrowSize}\n color={backgroundColor ?? theme.colors.backgroundContent}\n isOpen={isOpen}\n />\n )}\n </Div>\n )}\n </TooltipContainer>\n </Div>\n );\n}) as any;\n\ntype TooltipItemProps<Value = unknown> = {\n icon?: IconName | AnyOtherString;\n iconColor?: string;\n text?: string;\n textColor?: string;\n description?: string;\n isActive?: boolean;\n value?: Value;\n id?: string;\n disabled?: boolean;\n onClick?: () => void;\n onClickWithValue?: (value: Value) => void;\n};\n\nTooltipComponent.item = forwardRef(function Item<Value>(\n {\n icon,\n iconColor,\n text,\n textColor,\n description,\n isActive,\n value,\n id,\n disabled,\n onClick,\n onClickWithValue,\n }: TooltipItemProps<Value>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const theme = useTheme();\n\n return (\n <Div.row\n alignItems=\"center\"\n gap={theme.styles.space}\n backgroundColor={theme.colors.backgroundContent}\n filterHover={!disabled ? \"brightness(0.9)\" : \"brightness(0.94)\"}\n paddingBlock={theme.styles.gap}\n paddingInline={theme.styles.space}\n cursor={disabled ? \"not-allowed\" : \"pointer\"}\n isTabAccessed\n id={id}\n opacity={disabled ? 0.4 : undefined}\n value={value}\n onClick={!disabled ? onClick : undefined}\n onClickWithValue={!disabled ? onClickWithValue : undefined}\n ref={ref}\n >\n {icon && <Icon name={icon} color={iconColor ?? (!isActive ? theme.colors.textSecondary : undefined)} />}\n\n <Div.column flex={1} gap={theme.styles.gap / 2}>\n <Text fontWeight={isActive ? 700 : undefined} color={textColor ?? theme.colors.textPrimary}>\n {text}\n </Text>\n {description && (\n <Text fontSize={14} color={theme.colors.textSecondary}>\n {description}\n </Text>\n )}\n </Div.column>\n </Div.row>\n );\n}) as TooltipComponent[\"item\"];\n\nTooltipComponent.divider = forwardRef(function DividerComponent(props, ref) {\n const theme = useTheme();\n\n return <Divider.horizontal marginBlock={theme.styles.gap} {...props} ref={ref} />;\n}) as TooltipComponent[\"divider\"];\n\ntype TooltipSectionTitleProps = OmitProps<TextProps, \"children\"> & {\n text?: string;\n};\n\nTooltipComponent.sectionTitle = forwardRef(function SectionTitle({ text, ...props }, ref) {\n const theme = useTheme();\n\n return (\n <Text\n fontSize={12}\n fontWeight={700}\n textTransform=\"uppercase\"\n marginBlock={theme.styles.gap / 2}\n marginInline={theme.styles.space}\n {...props}\n ref={ref}\n >\n {text}\n </Text>\n );\n}) as TooltipComponent[\"sectionTitle\"];\n\nconst Tooltip = memo(TooltipComponent) as any as typeof TooltipComponent & {\n item: typeof TooltipComponent.item;\n divider: typeof TooltipComponent.divider;\n sectionTitle: typeof TooltipComponent.sectionTitle;\n};\n\nTooltip.item = TooltipComponent.item;\nTooltip.divider = TooltipComponent.divider;\nTooltip.sectionTitle = TooltipComponent.sectionTitle;\n\nexport default Tooltip;\n","import { forwardRef, memo, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { Color, useBetterCoreContext, useTheme } from \"react-better-core\";\n\nimport { ComponentMarginProps, ComponentPropWithRef } from \"../types/components\";\n\nimport { useUrlQuery } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport Text from \"./Text\";\nimport { useBetterHtmlContextInternal, usePlugin } from \"./BetterHtmlProvider\";\n\nconst tabBottomLineWidth = 2;\nconst tabDotSize = 6;\nconst defaultTabName = \"tab\";\n\nexport type TabGroup = {\n name: string;\n selectedTab: string;\n};\n\nexport type TabsComponentState = {\n tabGroups: TabGroup[];\n setTabGroups: React.Dispatch<React.SetStateAction<TabGroup[]>>;\n tabsWithDots: string[];\n setTabsWithDots: React.Dispatch<React.SetStateAction<string[]>>;\n};\n\nexport type TabsProps = {\n tabs: string[];\n name?: string;\n accentColor?: Color;\n style?: \"default\" | \"borderRadiusTop\" | \"box\";\n onChange?: (tab: string) => void;\n children?: React.ReactNode;\n} & ComponentMarginProps;\n\nexport type TabsRef = {\n selectedTab: string;\n selectTab: (tab: string) => void;\n};\n\ntype TabsComponent = {\n (props: ComponentPropWithRef<TabsRef, TabsProps>): React.ReactElement;\n content: (props: TabsContentProps) => React.ReactElement;\n};\n\nconst TabsComponent: TabsComponent = forwardRef(function Tabs(\n { tabs, name, accentColor, style = \"default\", onChange, children, ...props }: TabsProps,\n ref: React.ForwardedRef<TabsRef>,\n) {\n const reactRouterDomPlugin = usePlugin(\"react-router-dom\");\n\n const theme = useTheme();\n const urlQuery = reactRouterDomPlugin ? useUrlQuery() : undefined;\n const { componentsState } = useBetterHtmlContextInternal();\n const { colorTheme } = useBetterCoreContext();\n\n const firstRenderPassedRef = useRef<boolean>(false);\n const tabsRef = useRef<Record<string, HTMLDivElement | null>>({});\n\n const [selectedTab, setSelectedTab] = useState<string>(() => {\n const selectedTabValue = tabs[0] ?? \"\";\n\n if (urlQuery) {\n const tabQueryValue = urlQuery.getQuery(name ?? defaultTabName);\n\n if (!tabQueryValue) return selectedTabValue;\n\n if (tabs.includes(tabQueryValue)) return tabQueryValue;\n }\n\n return selectedTabValue;\n });\n const [rerenderState, setRerenderState] = useState<number>(0);\n\n const tabsGap = style === \"box\" ? theme.styles.gap / 2 : 0;\n\n const onClickTab = useCallback(\n (tab: string) => {\n setSelectedTab(tab);\n onChange?.(tab);\n\n if (urlQuery) {\n urlQuery.setQuery({\n [name ?? defaultTabName]: tab,\n });\n }\n },\n [onChange, name, urlQuery],\n );\n\n const width = useMemo<number>(\n () => tabsRef.current[selectedTab]?.getBoundingClientRect().width ?? 0,\n [rerenderState, selectedTab],\n );\n const leftSpacing = useMemo<number>(() => {\n const selectedTabIndex = tabs.findIndex((tab) => tab === selectedTab);\n\n let spacing = 0;\n Object.values(tabsRef.current).forEach((tab, index) => {\n if (index < selectedTabIndex) spacing += (tab?.getBoundingClientRect().width ?? 0) + tabsGap;\n });\n\n return spacing;\n }, [selectedTab, tabs, tabsGap]);\n\n useEffect(() => {\n const timeout = setTimeout(() => {\n setRerenderState(Math.random());\n firstRenderPassedRef.current = true;\n }, 0.01 * 1000);\n\n return () => {\n clearTimeout(timeout);\n };\n }, []);\n useEffect(() => {\n componentsState.tabs.setTabGroups((oldValue) => {\n const thisTabGroup = oldValue.find((item) => item.name === (name ?? defaultTabName));\n\n if (thisTabGroup) {\n return oldValue.map((item) =>\n item.name === (name ?? defaultTabName)\n ? {\n ...item,\n selectedTab,\n }\n : item,\n );\n } else {\n return [\n ...oldValue,\n {\n name: name ?? defaultTabName,\n selectedTab,\n },\n ];\n }\n });\n }, [selectedTab, name]);\n useEffect(() => {\n tabsRef.current[selectedTab]?.scrollIntoView({\n behavior: firstRenderPassedRef.current ? \"smooth\" : undefined,\n block: \"nearest\",\n });\n }, [selectedTab]);\n useEffect(() => {\n return () => {\n componentsState.tabs.setTabGroups((oldValue) =>\n oldValue.filter((item) => item.name !== (name ?? defaultTabName)),\n );\n };\n }, []);\n\n useImperativeHandle(\n ref,\n (): TabsRef => {\n return {\n selectedTab,\n selectTab: onClickTab,\n };\n },\n [selectedTab, onClickTab],\n );\n\n return (\n <Div.column width=\"100%\" gap={theme.styles.space} {...props}>\n <Div position=\"relative\" className=\"react-better-html-no-scrollbar\" overflowY=\"auto\">\n <Div.row position=\"relative\" width=\"fit-content\" gap={tabsGap} userSelect=\"none\">\n {tabs.map((tab) => {\n const selected = tab === selectedTab;\n\n return (\n <Div\n position=\"relative\"\n width=\"fit-content\"\n backgroundColor={\n style === \"box\"\n ? selected\n ? theme.colors.primary\n : theme.colors.backgroundContent\n : theme.colors.backgroundBase\n }\n borderRadius={style === \"box\" ? theme.styles.borderRadius : undefined}\n borderTopLeftRadius={style === \"borderRadiusTop\" ? theme.styles.borderRadius : undefined}\n borderTopRightRadius={style === \"borderRadiusTop\" ? theme.styles.borderRadius : undefined}\n border={\n style === \"box\" ? `1px solid ${selected ? \"transparent\" : theme.colors.border}` : undefined\n }\n filterHover={\n colorTheme === \"dark\"\n ? style === \"box\"\n ? \"brightness(1.2)\"\n : \"brightness(2)\"\n : \"brightness(0.9)\"\n }\n paddingInline={theme.styles.space}\n paddingBlock={theme.styles.gap}\n value={tab}\n cursor=\"pointer\"\n isTabAccessed\n onClickWithValue={onClickTab}\n ref={(ref) => {\n tabsRef.current[tab] = ref;\n }}\n key={tab}\n >\n {componentsState.tabs.tabsWithDots.includes(tab) && (\n <Div\n position=\"absolute\"\n top={(theme.styles.space - tabDotSize) / 2}\n right={(theme.styles.space - tabDotSize) / 2}\n width={tabDotSize}\n height={tabDotSize}\n backgroundColor={style === \"box\" && selected ? theme.colors.base : theme.colors.primary}\n borderRadius={999}\n transition={theme.styles.transition}\n />\n )}\n\n <Text\n fontWeight={700}\n color={\n !selected ? theme.colors.textSecondary : style === \"box\" ? theme.colors.base : undefined\n }\n transition={theme.styles.transition}\n whiteSpace=\"nowrap\"\n >\n {tab}\n </Text>\n </Div>\n );\n })}\n </Div.row>\n\n {style !== \"box\" && (\n <Div\n position=\"absolute\"\n width={width}\n height={tabBottomLineWidth}\n bottom={0}\n left={leftSpacing}\n backgroundColor={accentColor ?? theme.colors.primary}\n transition={firstRenderPassedRef.current ? theme.styles.transition : \"none\"}\n />\n )}\n </Div>\n\n {children && <Div width=\"100%\">{children}</Div>}\n </Div.column>\n );\n}) as any;\n\ntype TabsContentProps = {\n tab: string;\n tabWithDot?: boolean;\n tabsGroupName?: string;\n isInitialTab?: boolean;\n children?: React.ReactNode;\n};\n\nTabsComponent.content = function Content({ tab, tabWithDot, tabsGroupName, isInitialTab, children }) {\n const { componentsState } = useBetterHtmlContextInternal();\n\n const thisTabGroupData = useMemo<TabGroup | undefined>(\n () => componentsState.tabs.tabGroups.find((item) => item.name === (tabsGroupName ?? defaultTabName)),\n [componentsState.tabs, tabsGroupName],\n );\n\n useEffect(() => {\n if (tabWithDot) {\n componentsState.tabs.setTabsWithDots?.((oldValue) => (oldValue.includes(tab) ? oldValue : [...oldValue, tab]));\n } else {\n componentsState.tabs.setTabsWithDots?.((oldValue) =>\n oldValue.includes(tab) ? oldValue.filter((tab) => tab !== tab) : oldValue,\n );\n }\n }, [tabWithDot]);\n\n return (thisTabGroupData ? thisTabGroupData.selectedTab === tab : isInitialTab) ? (\n <Div width=\"100%\">{children}</Div>\n ) : undefined;\n} as TabsComponent[\"content\"];\n\nconst Tabs = memo(TabsComponent) as any as typeof TabsComponent & {\n content: typeof TabsComponent.content;\n};\n\nTabs.content = TabsComponent.content;\n\nexport default Tabs;\n","import { forwardRef, memo, useCallback, useEffect, useImperativeHandle, useRef, useState } from \"react\";\nimport { AnyOtherString, AssetName, IconName, OmitProps, useBooleanState, useTheme } from \"react-better-core\";\n\nimport { ComponentPropWithRef } from \"../types/components\";\n\nimport Div, { DivProps } from \"./Div\";\nimport Icon from \"./Icon\";\nimport Text, { TextAs } from \"./Text\";\nimport Image from \"./Image\";\nimport Divider from \"./Divider\";\n\nconst animationDurationClose = 0.15;\nconst animationDurationOpen = animationDurationClose * 2;\n\nexport type FoldableProps = {\n isOpen?: boolean;\n defaultOpen?: boolean;\n title?: string;\n /** @default \"h3\" */\n titleAs?: TextAs;\n /** @default textPrimary */\n titleColor?: React.CSSProperties[\"color\"];\n titleRightElement?: React.ReactNode;\n description?: string;\n /** @default textSecondary */\n descriptionColor?: React.CSSProperties[\"color\"];\n rightElement?: React.ReactNode;\n icon?: IconName | AnyOtherString;\n image?: AssetName | AnyOtherString;\n headerPaddingBlock?: React.CSSProperties[\"paddingBlock\"];\n headerPaddingInline?: React.CSSProperties[\"paddingInline\"];\n renderHeader?: (isOpen: boolean, toggleOpen: () => void) => React.ReactNode;\n onOpenChange?: (isOpen: boolean) => void;\n children?: React.ReactNode;\n} & OmitProps<DivProps, \"ref\">;\n\nexport type FoldableRef = {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n};\n\ntype FoldableComponentType = {\n (props: ComponentPropWithRef<FoldableRef, FoldableProps>): React.ReactElement;\n box: (props: ComponentPropWithRef<FoldableRef, FoldableProps>) => React.ReactElement;\n};\n\nconst FoldableComponent: FoldableComponentType = forwardRef<FoldableRef, FoldableProps>(function Foldable(\n {\n isOpen: controlledIsOpen,\n defaultOpen = false,\n title,\n titleAs = \"h3\",\n titleColor,\n titleRightElement,\n description,\n descriptionColor,\n rightElement,\n icon,\n image,\n headerPaddingBlock,\n headerPaddingInline,\n renderHeader,\n onOpenChange,\n children,\n ...props\n },\n ref,\n) {\n const theme = useTheme();\n\n const bodyRef = useRef<HTMLDivElement>(null);\n\n const [internalIsOpen, setInternalIsOpen] = useBooleanState(defaultOpen);\n const [bodyVirtualHeight, setBodyVirtualHeight] = useState<number>();\n\n const isOpen = controlledIsOpen !== undefined ? controlledIsOpen : internalIsOpen;\n\n const open = useCallback(() => {\n if (controlledIsOpen === undefined) setInternalIsOpen.setTrue();\n onOpenChange?.(true);\n }, [controlledIsOpen, onOpenChange]);\n const close = useCallback(() => {\n if (controlledIsOpen === undefined) setInternalIsOpen.setFalse();\n onOpenChange?.(false);\n }, [controlledIsOpen, onOpenChange]);\n const toggleOpen = useCallback(() => {\n if (controlledIsOpen === undefined) setInternalIsOpen.toggle();\n onOpenChange?.(!isOpen);\n }, [controlledIsOpen, isOpen, onOpenChange]);\n\n useEffect(() => {\n if (!bodyRef.current) return;\n\n const body = bodyRef.current;\n\n setBodyVirtualHeight(body.scrollHeight * 2);\n\n const timeout = setTimeout(() => {\n setBodyVirtualHeight(body.scrollHeight * 2);\n }, 0.2 * 1000);\n\n return () => {\n clearTimeout(timeout);\n };\n }, [isOpen]);\n useEffect(() => {\n if (!isOpen) return;\n if (!bodyRef.current) return;\n\n const observer = new ResizeObserver(() => {\n if (!bodyRef.current) return;\n\n setBodyVirtualHeight(bodyRef.current.scrollHeight * 2);\n });\n\n observer.observe(bodyRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, [isOpen]);\n\n useImperativeHandle(ref, (): FoldableRef => {\n return {\n open,\n close,\n toggle: toggleOpen,\n isOpen,\n };\n }, [open, close, toggleOpen, isOpen]);\n\n return (\n <Div.column width=\"100%\" {...props}>\n {renderHeader ? (\n renderHeader(isOpen, toggleOpen)\n ) : (\n <Div.row\n width=\"100%\"\n alignItems=\"center\"\n gap={theme.styles.space}\n paddingBlock={headerPaddingBlock ?? theme.styles.gap}\n paddingInline={headerPaddingInline}\n cursor=\"pointer\"\n onClick={toggleOpen}\n userSelect=\"none\"\n >\n <Div.row flex={1} alignItems=\"center\" gap={theme.styles.space}>\n {icon && <Icon name={icon} size={20} flexShrink={0} />}\n {image && <Image.profileImage name={image} size={24} flexShrink={0} />}\n\n <Div.column gap={theme.styles.gap / 2}>\n {title && (\n <Div.row alignItems=\"center\" gap={theme.styles.space}>\n <Text\n as={titleAs}\n fontWeight={700}\n lineHeight=\"20px\"\n color={titleColor ?? theme.colors.textPrimary}\n >\n {title}\n </Text>\n\n {titleRightElement}\n </Div.row>\n )}\n\n {description && <Text color={descriptionColor ?? theme.colors.textSecondary}>{description}</Text>}\n </Div.column>\n </Div.row>\n\n {rightElement}\n\n <Icon\n name=\"chevronDown\"\n transform={`rotate(${isOpen ? 180 : 0}deg)`}\n transition={theme.styles.transition}\n />\n </Div.row>\n )}\n\n <Div height={isOpen ? 1 : 0} opacity={isOpen ? 1 : 0} transition={theme.styles.transition}>\n <Divider.horizontal />\n </Div>\n\n <Div\n maxHeight={isOpen ? bodyVirtualHeight : 0}\n opacity={!isOpen ? 0 : undefined}\n transition={`max-height ${isOpen ? animationDurationOpen : animationDurationClose}s ease, opacity ${\n theme.styles.transition\n }`}\n overflow={!isOpen ? \"hidden\" : undefined}\n pointerEvents={!isOpen ? \"none\" : undefined}\n ref={bodyRef}\n >\n <Div paddingBlock={theme.styles.gap} paddingInline={headerPaddingInline}>\n {children}\n </Div>\n </Div>\n </Div.column>\n );\n}) as any;\n\nFoldableComponent.box = forwardRef(function Box({ ...props }, ref) {\n const theme = useTheme();\n\n return (\n <FoldableComponent\n backgroundColor={theme.colors.backgroundContent}\n border={`1px solid ${theme.colors.border}`}\n borderRadius={theme.styles.borderRadius}\n headerPaddingBlock={(theme.styles.gap + theme.styles.space) / 2}\n headerPaddingInline={theme.styles.space}\n {...props}\n ref={ref}\n />\n );\n}) as FoldableComponentType[\"box\"];\n\nconst Foldable = memo(FoldableComponent) as any as typeof FoldableComponent & {\n box: typeof FoldableComponent.box;\n};\n\nFoldable.box = FoldableComponent.box;\n\nexport default Foldable;\n","import { createContext, memo, useCallback, useContext, useEffect, useMemo, useState } from \"react\";\nimport {\n AnyOtherString,\n AssetName,\n IconName,\n lightenColor,\n useBetterCoreContext,\n useBooleanState,\n useTheme,\n} from \"react-better-core\";\n\nimport { defaultSideMenuWidth } from \"../constants/app\";\n\nimport { useMediaQuery } from \"../utils/hooks\";\nimport { filterHover } from \"../utils/variableFunctions\";\n\nimport { ReactRouterDomPluginOptions } from \"../plugins\";\n\nimport Div from \"./Div\";\nimport Icon from \"./Icon\";\nimport Button from \"./Button\";\nimport Text from \"./Text\";\nimport Image from \"./Image\";\nimport PageHolder, { PageHolderProps } from \"./PageHolder\";\nimport Loader from \"./Loader\";\nimport Tooltip from \"./Tooltip\";\nimport { useBetterHtmlContextInternal, usePlugin } from \"./BetterHtmlProvider\";\n\nconst tabDotSize = 6;\n\ntype SideMenuActiveItem = {\n href: string;\n length: number;\n};\n\ntype SideMenuContext = {\n activeItem: SideMenuActiveItem | undefined;\n setActiveItem: React.Dispatch<React.SetStateAction<SideMenuActiveItem | undefined>>;\n};\n\nconst sideMenuContext = createContext<SideMenuContext | undefined>(undefined);\n\nconst SideMenuContextProvider = sideMenuContext.Provider;\nconst useSideMenuContext = () => {\n const context = useContext(sideMenuContext);\n\n if (!context) {\n throw new Error(\"`useSideMenuContext` must be used within a `<SideMenuContextProvider>` component\");\n }\n\n return context;\n};\n\nexport type SideMenuItem = {\n text: string;\n iconName: IconName | AnyOtherString;\n href?: string;\n disabled?: boolean;\n hidden?: boolean;\n withDot?: boolean;\n children?: SideMenuItem[];\n /** @default true */\n onClickCloseSideMenu?: boolean;\n onClick?: (item: SideMenuItem) => void;\n};\n\ntype MenuItemComponentProps = {\n item: SideMenuItem;\n backgroundColor?: React.CSSProperties[\"backgroundColor\"];\n onClick?: () => void;\n};\n\nconst MenuItemComponent = memo(function MenuItemComponent({ item, backgroundColor, onClick }: MenuItemComponentProps) {\n const reactRouterDomPlugin = usePlugin<ReactRouterDomPluginOptions>(\"react-router-dom\");\n\n if (!reactRouterDomPlugin) {\n throw new Error(\n \"`SideMenu` component requires the `react-router-dom` plugin to be added to the `plugins` prop in `<BetterHtmlProvider>`.\",\n );\n }\n\n const reactRouterDomPluginConfig = reactRouterDomPlugin.getConfig();\n\n const theme = useTheme();\n const mediaQuery = useMediaQuery();\n const location = reactRouterDomPluginConfig.useLocation();\n const { components, sideMenuIsCollapsed, setSideMenuIsCollapsed } = useBetterHtmlContextInternal();\n const { colorTheme } = useBetterCoreContext();\n\n const { activeItem, setActiveItem } = useSideMenuContext();\n\n const [isOpened, setIsOpened] = useBooleanState();\n\n const isCollapsed = sideMenuIsCollapsed && !mediaQuery.size1000;\n\n const onClickElement = useCallback(() => {\n if (item.disabled) return;\n\n if (!item.children) setActiveItem((oldValue) => (oldValue?.href === item.href ? oldValue : undefined));\n\n if (item.children) {\n setSideMenuIsCollapsed.setFalse();\n if (isCollapsed) setTimeout(setIsOpened.setTrue, 0.1 * 1000);\n else setIsOpened.toggle();\n } else {\n if (item.onClickCloseSideMenu !== false) onClick?.();\n item.onClick?.(item);\n }\n }, [onClick, item, isCollapsed]);\n\n const childrenHaveDot = useMemo<boolean>(\n () => item.children?.some((child) => child.withDot) ?? false,\n [item.children],\n );\n\n const isActive = activeItem && item.href && activeItem.href === item.href;\n\n const readyBackgroundColor = backgroundColor ?? theme.colors.backgroundContent;\n\n const iconSize = 16;\n const paddingBlock = theme.styles.gap;\n const paddingLeft = theme.styles.gap + 2;\n const iconGap = theme.styles.gap;\n const lineHeight = 20;\n\n const lineWidth = 2;\n const lineEndRadius = iconSize / 2 + iconGap * 2;\n\n const content = (\n <Tooltip\n content={\n <Div.row alignItems=\"center\" gap={theme.styles.gap}>\n <Text whiteSpace=\"nowrap\">{item.text}</Text>\n\n {item.children && <Icon name=\"chevronDown\" color={theme.colors.textSecondary} size={14} />}\n </Div.row>\n }\n contentPointerEvents=\"none\"\n withArrow\n childrenWrapperWidth=\"100%\"\n disabled={!isCollapsed}\n position=\"right\"\n >\n <Div.row\n alignItems=\"center\"\n gap={iconGap}\n whiteSpace=\"nowrap\"\n backgroundColor={\n isActive\n ? colorTheme === \"dark\"\n ? lightenColor(theme.colors.primary, 0.7)\n : lightenColor(theme.colors.primary, 0.85)\n : readyBackgroundColor\n }\n borderRadius={theme.styles.borderRadius}\n paddingBlock={paddingBlock}\n paddingLeft={isCollapsed ? theme.styles.space : paddingLeft}\n paddingRight={theme.styles.space}\n filterHover={`brightness(${colorTheme === \"dark\" ? (isActive ? 0.8 : 1.3) : isActive ? 0.8 : 0.95})`}\n overflow={isCollapsed ? \"hidden\" : undefined}\n cursor={item.disabled ? \"not-allowed\" : \"pointer\"}\n opacity={item.disabled ? 0.6 : undefined}\n onClick={onClickElement}\n >\n <Icon name={item.iconName} color={theme.colors.primary} size={iconSize} flexShrink={0} />\n\n <Text\n flex={1}\n lineHeight={`${lineHeight}px`}\n color={isActive ? theme.colors.primary : theme.colors.textPrimary}\n opacity={isCollapsed ? 0 : undefined}\n transition={theme.styles.transition}\n >\n {item.text}\n </Text>\n\n {item.children && (\n <Icon\n name=\"chevronDown\"\n color={theme.colors.textSecondary}\n size={14}\n transform={isOpened ? \"rotate(180deg)\" : undefined}\n transition={theme.styles.transition}\n />\n )}\n\n <Div\n position=\"absolute\"\n top={(theme.styles.space - tabDotSize) / 2}\n right={(theme.styles.space - tabDotSize) / 2}\n width={tabDotSize}\n height={tabDotSize}\n backgroundColor={theme.colors.primary}\n borderRadius={999}\n opacity={item.withDot || (childrenHaveDot && !isOpened) ? 1 : 0}\n transition={theme.styles.transition}\n />\n </Div.row>\n </Tooltip>\n );\n\n useEffect(() => {\n if (!item.href) return;\n\n const isActive =\n location.pathname === \"/\"\n ? location.pathname === item.href\n : location.pathname.startsWith(item.href) && item.href !== \"/\";\n\n if (!isActive) return;\n\n setActiveItem((oldValue) =>\n item.href\n ? oldValue && oldValue.length > item.href.length\n ? oldValue\n : {\n href: item.href,\n length: item.href.length,\n }\n : undefined,\n );\n }, [location.pathname]);\n useEffect(() => {\n if (!item.children) return;\n\n const toBeOpened = item.children.some((child) =>\n child.href\n ? location.pathname === \"/\"\n ? location.pathname === child.href\n : location.pathname.startsWith(child.href) && child.href !== \"/\"\n : false,\n );\n\n setIsOpened.setState(toBeOpened);\n }, [item]);\n useEffect(() => {\n if (!isCollapsed) return;\n\n setIsOpened.setFalse();\n }, [isCollapsed]);\n\n const LinkComponentTag = components.button?.tagReplacement?.linkComponent ?? \"a\";\n\n return (\n <Div width=\"100%\">\n {item.href ? (\n <LinkComponentTag to={item.href} href={item.href} onClick={onClickElement}>\n {content}\n </LinkComponentTag>\n ) : (\n content\n )}\n\n {item.children && (\n <Div.column\n position=\"relative\"\n maxHeight={isOpened ? 1000 : 0}\n gap={theme.styles.gap / 2}\n marginTop={isOpened ? theme.styles.gap / 2 : undefined}\n paddingLeft={paddingLeft + iconSize + iconGap}\n overflow=\"hidden\"\n transition={`max-height ${theme.styles.transition}, margin-top ${theme.styles.transition}`}\n >\n {item.children.map((child) => (\n <MenuItemComponent\n item={child}\n backgroundColor={readyBackgroundColor}\n onClick={onClick}\n key={child.text}\n />\n ))}\n\n <Div\n position=\"absolute\"\n height={`calc(100% - ${paddingBlock + lineHeight / 2 + lineEndRadius / 2}px)`}\n top={0}\n left={paddingLeft + iconSize / 2}\n zIndex={-1}\n >\n <Div\n position=\"relative\"\n width={lineWidth}\n height=\"100%\"\n backgroundColor={theme.colors.border}\n zIndex={1}\n />\n <Div\n position=\"absolute\"\n width={lineEndRadius}\n height={lineEndRadius}\n top={`calc(100% - ${lineEndRadius / 2}px)`}\n left={0}\n border={`${lineWidth}px solid ${theme.colors.border}`}\n borderRadius={999}\n borderTopColor={readyBackgroundColor}\n borderLeftColor={readyBackgroundColor}\n borderRightColor={readyBackgroundColor}\n transform=\"rotate(45deg)\"\n />\n </Div>\n </Div.column>\n )}\n </Div>\n );\n});\n\nexport type SideMenuProps = {\n items: SideMenuItem[];\n bottomItems?: SideMenuItem[];\n topSpace?: number;\n logoAssetName?: AssetName | AnyOtherString;\n logoUrl?: string;\n logoText?: string;\n logoFontFamily?: string;\n collapsable?: boolean;\n withCloseButton?: boolean;\n widthMobileHandle?: boolean;\n absoluteComponent?: React.ReactNode;\n additionalComponent?: React.ReactNode;\n isLoading?: boolean;\n /** @default backgroundContent */\n backgroundColor?: React.CSSProperties[\"backgroundColor\"];\n paddingTop?: React.CSSProperties[\"paddingTop\"];\n};\n\ntype SideMenuComponentType = {\n (props: SideMenuProps): React.ReactElement;\n pageHolder: (props: SideMenuPageHolderProps) => React.ReactElement;\n burgerButton: () => React.ReactElement;\n};\n\nconst SideMenuComponent: SideMenuComponentType = function SideMenu({\n items,\n bottomItems,\n topSpace = 0,\n logoAssetName,\n logoUrl,\n logoText,\n logoFontFamily,\n collapsable,\n withCloseButton,\n widthMobileHandle,\n absoluteComponent,\n additionalComponent,\n isLoading,\n backgroundColor,\n paddingTop,\n}: SideMenuProps) {\n const theme = useTheme();\n const mediaQuery = useMediaQuery();\n const { components, sideMenuIsCollapsed, setSideMenuIsCollapsed, sideMenuIsOpenMobile, setSideMenuIsOpenMobile } =\n useBetterHtmlContextInternal();\n\n const [activeItem, setActiveItem] = useState<SideMenuActiveItem>();\n\n const onClickXButton = useCallback(() => {\n setSideMenuIsOpenMobile.setFalse();\n }, []);\n\n const readyItems = useMemo(() => items.filter((item) => !item.hidden), [items]);\n const readyBottomItems = useMemo(() => bottomItems?.filter((item) => !item.hidden), [bottomItems]);\n\n const contextValue = useMemo<SideMenuContext>(\n () => ({\n activeItem,\n setActiveItem,\n }),\n [activeItem],\n );\n\n const isCollapsable = collapsable && !mediaQuery.size1000;\n const isCollapsed = sideMenuIsCollapsed && !mediaQuery.size1000;\n\n const LinkComponentTag = components.button?.tagReplacement?.linkComponent ?? \"a\";\n const sideMenuWidth = components.sideMenu?.width ?? defaultSideMenuWidth;\n const sideMenuCollapsedWidth = theme.styles.space + theme.styles.space * 2 + 16 + theme.styles.space;\n\n const readyBackgroundColor = backgroundColor ?? theme.colors.backgroundContent;\n const logoSize = sideMenuCollapsedWidth - theme.styles.space * 2;\n\n return (\n <SideMenuContextProvider value={contextValue}>\n <Div.column\n position=\"fixed\"\n width={mediaQuery.size1000 ? \"100%\" : isCollapsed ? sideMenuCollapsedWidth : sideMenuWidth}\n height={`calc(100svh - ${topSpace}px)`}\n top={topSpace}\n left={0}\n backgroundColor={readyBackgroundColor}\n borderRight={`solid 1px ${theme.colors.border}`}\n transform={!mediaQuery.size1000 || sideMenuIsOpenMobile ? \"translateX(0)\" : \"translateX(-100%)\"}\n paddingTop={paddingTop ?? (logoAssetName || logoUrl ? theme.styles.gap : theme.styles.space)}\n transition={\n mediaQuery.size1000\n ? !isCollapsed\n ? `transform ${theme.styles.transition}`\n : \"none\"\n : theme.styles.transition\n }\n userSelect=\"none\"\n zIndex={10}\n >\n <Div.column width=\"100%\" height=\"100%\" gap={theme.styles.space}>\n {(logoAssetName || logoUrl || (withCloseButton && mediaQuery.size1000)) && (\n <Div.row alignItems=\"center\" paddingInline={theme.styles.space}>\n {(logoAssetName || logoUrl) && (\n <LinkComponentTag to=\"/\" href=\"/\" onClick={onClickXButton}>\n <Div.row\n alignItems=\"center\"\n width={sideMenuCollapsedWidth ? logoSize : undefined}\n height={logoSize}\n whiteSpace=\"nowrap\"\n gap={theme.styles.gap}\n >\n <Image\n name={logoAssetName}\n src={logoUrl}\n width={logoSize}\n height={logoSize}\n objectFit=\"contain\"\n />\n\n {logoText && (\n <Text\n fontFamily={logoFontFamily}\n fontSize={22}\n fontWeight={800}\n opacity={!isCollapsed ? 1 : 0}\n transition={theme.styles.transition}\n userSelect=\"none\"\n >\n {logoText}\n </Text>\n )}\n </Div.row>\n </LinkComponentTag>\n )}\n\n {withCloseButton && mediaQuery.size1000 && (\n <Button.icon icon=\"XMark\" marginLeft=\"auto\" onClick={onClickXButton} />\n )}\n </Div.row>\n )}\n\n {!isLoading ? (\n <>\n <Div.column\n width=\"100%\"\n height=\"100%\"\n overflowY={!isCollapsed ? \"auto\" : undefined}\n paddingInline={theme.styles.space}\n paddingBottom={!isCollapsable && !readyBottomItems ? theme.styles.space : undefined}\n >\n <Div.column gap={theme.styles.gap / 2}>\n {readyItems.map((item) => (\n <MenuItemComponent\n item={item}\n backgroundColor={readyBackgroundColor}\n onClick={onClickXButton}\n key={item.text}\n />\n ))}\n </Div.column>\n </Div.column>\n\n {readyBottomItems && (\n <Div.column\n borderTop={mediaQuery.size1000 ? `solid 1px ${theme.colors.border}` : undefined}\n gap={theme.styles.gap / 2}\n marginTop=\"auto\"\n paddingTop={mediaQuery.size1000 ? theme.styles.space : undefined}\n paddingInline={theme.styles.space}\n paddingBottom={!isCollapsable ? theme.styles.space : undefined}\n >\n {readyBottomItems.map((item) => (\n <MenuItemComponent\n item={item}\n backgroundColor={readyBackgroundColor}\n onClick={onClickXButton}\n key={item.text}\n />\n ))}\n </Div.column>\n )}\n </>\n ) : (\n <Div flex={1}>\n <Loader.box text={isCollapsed ? \"\" : undefined} />\n </Div>\n )}\n\n {additionalComponent}\n\n {isCollapsable && (\n <Div\n borderTop={`solid 1px ${theme.colors.border}`}\n marginTop={!readyBottomItems ? \"auto\" : undefined}\n paddingInline={theme.styles.space}\n paddingBlock={theme.styles.space}\n >\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n backgroundColor={readyBackgroundColor}\n borderRadius={theme.styles.borderRadius}\n cursor=\"pointer\"\n filterHover={filterHover().z1}\n isTabAccessed\n paddingBlock={theme.styles.gap}\n onClick={setSideMenuIsCollapsed.toggle}\n >\n <Icon\n name=\"chevronRight\"\n size={20}\n color={theme.colors.textSecondary}\n transform={`rotate(${isCollapsed ? 0 : 180}deg)`}\n transition={theme.styles.transition}\n />\n </Div.row>\n </Div>\n )}\n </Div.column>\n\n {widthMobileHandle && (\n <Div.row\n position=\"absolute\"\n top={theme.styles.space}\n left=\"100%\"\n backgroundColor={readyBackgroundColor}\n border={`solid 1px ${theme.colors.border}`}\n borderLeft=\"none\"\n borderTopRightRadius={theme.styles.borderRadius}\n borderBottomRightRadius={theme.styles.borderRadius}\n alignItems=\"center\"\n cursor=\"pointer\"\n opacity={!mediaQuery.size1000 ? 0 : undefined}\n pointerEvents={!mediaQuery.size1000 ? \"none\" : undefined}\n padding={theme.styles.gap}\n paddingRight={(theme.styles.space + theme.styles.gap) / 2}\n transform={!mediaQuery.size1000 ? \"translateX(-100%)\" : undefined}\n transition={theme.styles.transition}\n onClick={setSideMenuIsOpenMobile.toggle}\n >\n <Icon\n name=\"chevronRight\"\n size={20}\n color={theme.colors.textSecondary}\n transform={sideMenuIsOpenMobile ? \"rotate(180deg)\" : undefined}\n transition={theme.styles.transition}\n />\n </Div.row>\n )}\n\n {absoluteComponent && (\n <Div position=\"absolute\" top={0} left={0} pointerEvents=\"none\" zIndex={2}>\n <Div pointerEvents=\"all\">{absoluteComponent}</Div>\n </Div>\n )}\n </Div.column>\n </SideMenuContextProvider>\n );\n};\n\ntype SideMenuPageHolderProps = PageHolderProps & {\n outsideComponent?: React.ReactNode;\n};\n\nSideMenuComponent.pageHolder = function SideMenuPageHolder({ outsideComponent, ...props }) {\n const theme = useTheme();\n const mediaQuery = useMediaQuery();\n const { components, sideMenuIsCollapsed } = useBetterHtmlContextInternal();\n\n const sideMenuWidth = components.sideMenu?.width ?? defaultSideMenuWidth;\n const sideMenuCollapsedWidth = theme.styles.space + theme.styles.space * 2 + 16 + theme.styles.space;\n\n return (\n <Div\n position=\"relative\"\n width=\"100%\"\n paddingLeft={\n !mediaQuery.size1000 ? (!sideMenuIsCollapsed ? sideMenuWidth : sideMenuCollapsedWidth) : undefined\n }\n transition={theme.styles.transition}\n >\n {outsideComponent}\n\n <PageHolder {...props} />\n </Div>\n );\n} as SideMenuComponentType[\"pageHolder\"];\n\nSideMenuComponent.burgerButton = function BurgerButton() {\n const theme = useTheme();\n const { sideMenuIsOpenMobile, setSideMenuIsOpenMobile } = useBetterHtmlContextInternal();\n\n const [isHovered, setIsHovered] = useBooleanState();\n\n const width = 2;\n\n return (\n <Div\n position=\"relative\"\n width={32}\n height={20}\n cursor=\"pointer\"\n onMouseOver={setIsHovered.setTrue}\n onMouseLeave={setIsHovered.setFalse}\n onMouseOut={setIsHovered.setFalse}\n onClick={setSideMenuIsOpenMobile.toggle}\n >\n <Div\n position=\"absolute\"\n width={isHovered || sideMenuIsOpenMobile ? \"100%\" : \"50%\"}\n height={width}\n top={sideMenuIsOpenMobile ? `calc(50% - ${width / 2}px)` : 0}\n left={0}\n backgroundColor={theme.colors.border}\n borderRadius={999}\n transform={sideMenuIsOpenMobile ? \"rotate(45deg)\" : undefined}\n transition={theme.styles.transition}\n />\n <Div\n position=\"absolute\"\n width={isHovered ? \"100%\" : \"100%\"}\n height={width}\n top=\"50%\"\n left={0}\n backgroundColor={theme.colors.border}\n borderRadius={999}\n transform=\"translateY(-50%)\"\n opacity={sideMenuIsOpenMobile ? 0 : undefined}\n transition={theme.styles.transition}\n />\n <Div\n position=\"absolute\"\n width={isHovered || sideMenuIsOpenMobile ? \"100%\" : \"75%\"}\n height={width}\n bottom={sideMenuIsOpenMobile ? `calc(50% - ${width / 2}px)` : 0}\n left={0}\n backgroundColor={theme.colors.border}\n borderRadius={999}\n transform={sideMenuIsOpenMobile ? \"rotate(-45deg)\" : undefined}\n transition={theme.styles.transition}\n />\n </Div>\n );\n} as SideMenuComponentType[\"burgerButton\"];\n\nconst SideMenu = memo(SideMenuComponent) as any as typeof SideMenuComponent & {\n pageHolder: typeof SideMenuComponent.pageHolder;\n burgerButton: typeof SideMenuComponent.burgerButton;\n};\n\nSideMenu.pageHolder = SideMenuComponent.pageHolder;\nSideMenu.burgerButton = SideMenuComponent.burgerButton;\n\nexport default SideMenu;\n"],"mappings":"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AAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACH,CAAC;AAEM,IAAM,oBAAiC,oBAAI,IAAI;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACH,CAAC;;;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","names":["import_react_better_core","import_react","import_react_better_core","import_styled_components","import_react","import_react_better_core","import_react","import_react_better_core","import_styled_components","theme","values","reactRouterDomPlugin","createSearchParams","import_react","import_react_better_core","import_react","import_react_better_core","styled","theme","Text","import_jsx_runtime","theme","Divider","import_react","import_react_better_core","import_react","import_react_better_core","import_styled_components","import_jsx_runtime","styled","Image","assets","theme","import_react","import_react_better_core","import_styled_components","import_jsx_runtime","import_react","styled","Icon","theme","icons","import_jsx_runtime","theme","PageHeader","import_jsx_runtime","styled","theme","Div","import_react","import_react_better_core","import_styled_components","import_react","import_react_better_core","import_styled_components","import_react","import_react_better_core","import_styled_components","import_jsx_runtime","styled","theme","Box","Loader","import_jsx_runtime","styled","theme","betterHtmlContext","Icon","Button","import_react","import_react_better_core","import_styled_components","import_jsx_runtime","styled","reactRouterDomPlugin","theme","Destructive","Modal","import_jsx_runtime","StyledDiv","styled","Alert","theme","alertControls","alertsPlugin","import_jsx_runtime","theme","alertsPlugin","import_jsx_runtime","theme","alertsPlugin","localStoragePlugin","CryptoJS","localStoragePlugin","import_react","import_react_better_core","import_jsx_runtime","theme","PageHolder","import_react","import_react_better_core","import_jsx_runtime","theme","Chip","import_react","import_react_better_core","import_styled_components","import_react","import_react_better_core","import_jsx_runtime","theme","import_react","import_react_better_core","import_jsx_runtime","import_react","theme","value","isFocused","Dropdown","import_react","import_react_better_core","import_styled_components","import_jsx_runtime","styled","theme","import_jsx_runtime","styled","theme","value","country","Date","Color","InputField","import_react","import_react_better_core","import_styled_components","import_jsx_runtime","InputElement","styled","theme","import_react","import_react_better_core","import_jsx_runtime","theme","Form","import_react","import_react_better_core","import_jsx_runtime","theme","FormRow","import_react","import_react_better_core","import_jsx_runtime","theme","ColorThemeSwitch","import_react","import_react_better_core","import_styled_components","import_react","import_react_better_core","import_jsx_runtime","maximumVisiblePages","theme","Pagination","import_jsx_runtime","styled","theme","data","props","expandColumn","Table","import_react","import_react_better_core","import_styled_components","import_jsx_runtime","styled","Arrow","theme","Tooltip","import_react","import_react_better_core","import_jsx_runtime","reactRouterDomPlugin","theme","ref","tab","Tabs","import_react","import_react_better_core","import_jsx_runtime","theme","Box","Foldable","import_react","import_react_better_core","import_jsx_runtime","tabDotSize","MenuItemComponent","reactRouterDomPlugin","theme","isActive","SideMenu"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/BetterHtmlProvider.tsx","../src/constants/app.ts","../src/constants/theme.ts","../src/constants/icons.ts","../src/constants/assets.ts","../src/components/alerts/AlertsHolder.tsx","../src/components/Div.tsx","../src/constants.ts","../src/utils/hooks.ts","../src/constants/css.ts","../src/components/Divider.tsx","../src/components/Text.tsx","../src/components/PageHeader.tsx","../src/components/Image.tsx","../src/components/Icon.tsx","../src/components/alerts/Alert.tsx","../src/plugins/alerts.ts","../src/plugins/reactRouterDom.ts","../src/plugins/localStorage.ts","../src/components/Button.tsx","../src/components/Loader.tsx","../src/components/Modal.tsx","../src/utils/functions.ts","../src/utils/variableFunctions.ts","../src/utils/localStorage.ts","../src/components/PageHolder.tsx","../src/components/Chip.tsx","../src/components/InputField.tsx","../src/components/Label.tsx","../src/components/Dropdown.tsx","../src/components/Calendar.tsx","../src/components/ToggleInput.tsx","../src/components/Form.tsx","../src/components/FormRow.tsx","../src/components/ColorThemeSwitch.tsx","../src/components/Table.tsx","../src/components/Pagination.tsx","../src/components/Tooltip.tsx","../src/components/Tabs.tsx","../src/components/Foldable.tsx","../src/components/SideMenu.tsx"],"sourcesContent":["export {\n useTheme,\n useLoader,\n useLoaderControls,\n countries,\n type OmitProps,\n type ExcludeOptions,\n type PickValue,\n type PartialRecord,\n type DeepPartialRecord,\n type PickAllRequired,\n type AnyOtherString,\n type AssetName,\n type AssetsConfig,\n type Country,\n type IconName,\n type IconsConfig,\n type LoaderName,\n type LoaderConfig,\n type Color,\n type ColorName,\n type ColorTheme,\n type Colors,\n type Styles,\n type Theme,\n type ThemeConfig,\n lightenColor,\n darkenColor,\n saturateColor,\n desaturateColor,\n generateRandomString,\n formatPhoneNumber,\n eventPreventDefault,\n eventStopPropagation,\n eventPreventStop,\n getPluralWord,\n useBooleanState,\n useDebounceState,\n loaderControls,\n colorThemeControls,\n} from \"react-better-core\";\n\nimport BetterHtmlProvider, {\n useBetterHtmlContext,\n useAlertControls,\n type BetterHtmlProviderConfig,\n} from \"./components/BetterHtmlProvider\";\n\nimport { isMobileDevice } from \"./constants\";\n\nimport { type AppConfig, type BetterHtmlConfig } from \"./types/config\";\nimport { type ComponentMarginProps, type ComponentPaddingProps, type ComponentHoverStyle } from \"./types/components\";\nimport { type AlertType, type AlertDuration, type AlertDisplay, type Alert } from \"./types/alert\";\nimport { type PluginName, type BetterHtmlPlugin } from \"./types/plugin\";\nimport { type BrowserName } from \"./types/other\";\n\nimport { usePageResize, usePageScroll, useMediaQuery, useForm, useUrlQuery } from \"./utils/hooks\";\nimport { getBrowser, getFormErrorObject } from \"./utils/functions\";\nimport { alertControls, sideMenuControls, filterHover } from \"./utils/variableFunctions\";\nimport { generateLocalStorage } from \"./utils/localStorage\";\n\nimport Div, { type DivProps } from \"./components/Div\";\nimport Text, { type TextProps, type TextAs } from \"./components/Text\";\nimport Loader, { type LoaderProps } from \"./components/Loader\";\nimport Icon, { type IconProps } from \"./components/Icon\";\nimport Image, { type ImageProps } from \"./components/Image\";\nimport Button, { type ButtonProps } from \"./components/Button\";\nimport Divider, { type HorizontalDividerProps, type VerticalDividerProps } from \"./components/Divider\";\nimport Modal, { type ModalRef, type ModalProps } from \"./components/Modal\";\nimport PageHolder, { type PageHolderProps } from \"./components/PageHolder\";\nimport PageHeader, { type PageHeaderProps } from \"./components/PageHeader\";\nimport Chip, { type ChipProps } from \"./components/Chip\";\nimport InputField, { type InputFieldProps, type TextareaFieldProps } from \"./components/InputField\";\nimport Dropdown, { type DropdownOption, type DropdownProps } from \"./components/Dropdown\";\nimport ToggleInput, { type ToggleInputRef, type ToggleInputProps } from \"./components/ToggleInput\";\nimport Form, { type FormProps } from \"./components/Form\";\nimport Label, { type LabelProps } from \"./components/Label\";\nimport FormRow, { type FormRowProps } from \"./components/FormRow\";\nimport ColorThemeSwitch, { type ColorThemeSwitchProps } from \"./components/ColorThemeSwitch\";\nimport Table, {\n type TableColumn,\n type TableFilterData,\n type TableListFilterListItem,\n type TableProps,\n type TableRef,\n} from \"./components/Table\";\nimport Tooltip, { type TooltipProps, type TooltipRef } from \"./components/Tooltip\";\nimport Tabs, { type TabGroup, type TabsProps, type TabsRef } from \"./components/Tabs\";\nimport Foldable, { type FoldableProps, type FoldableRef } from \"./components/Foldable\";\nimport SideMenu, { type SideMenuProps, type SideMenuItem } from \"./components/SideMenu\";\nimport Pagination from \"./components/Pagination\";\n\nexport * from \"./plugins\";\n\nexport {\n BetterHtmlProvider,\n useBetterHtmlContext,\n useAlertControls,\n BetterHtmlProviderConfig,\n\n // Constants\n isMobileDevice,\n\n // Types\n AppConfig,\n BetterHtmlConfig,\n ComponentMarginProps,\n ComponentPaddingProps,\n ComponentHoverStyle,\n AlertType,\n AlertDuration,\n AlertDisplay,\n Alert,\n PluginName,\n BetterHtmlPlugin,\n BrowserName,\n\n // Hooks\n usePageResize,\n usePageScroll,\n useMediaQuery,\n useForm,\n useUrlQuery,\n\n // Functions\n getBrowser,\n getFormErrorObject,\n\n // Variable Functions\n alertControls,\n sideMenuControls,\n filterHover,\n\n // LocalStorage\n generateLocalStorage,\n\n // Components\n Div,\n DivProps,\n Text,\n TextProps,\n TextAs,\n Loader,\n LoaderProps,\n Icon,\n IconProps,\n Image,\n ImageProps,\n Button,\n ButtonProps,\n Divider,\n HorizontalDividerProps,\n VerticalDividerProps,\n Modal,\n ModalProps,\n ModalRef,\n PageHolder,\n PageHolderProps,\n PageHeader,\n PageHeaderProps,\n Chip,\n ChipProps,\n InputField,\n InputFieldProps,\n TextareaFieldProps,\n Dropdown,\n DropdownOption,\n DropdownProps,\n ToggleInput,\n ToggleInputRef,\n ToggleInputProps,\n Form,\n FormProps,\n Label,\n LabelProps,\n FormRow,\n FormRowProps,\n ColorThemeSwitch,\n ColorThemeSwitchProps,\n Table,\n TableColumn,\n TableFilterData,\n TableListFilterListItem,\n TableProps,\n TableRef,\n Tooltip,\n TooltipProps,\n TooltipRef,\n Tabs,\n TabGroup,\n TabsProps,\n TabsRef,\n Foldable,\n FoldableProps,\n FoldableRef,\n SideMenu,\n SideMenuProps,\n SideMenuItem,\n Pagination,\n};\n","import { createContext, memo, useCallback, useContext, useEffect, useMemo, useState } from \"react\";\nimport {\n useBooleanState,\n OmitProps,\n DeepPartialRecord,\n colorThemeControls,\n useTheme,\n Color,\n BetterCoreProvider,\n BetterCoreProviderConfig,\n BetterCoreConfig,\n useBetterCoreContext,\n} from \"react-better-core\";\nimport { createGlobalStyle } from \"styled-components\";\n\nimport { appConfig } from \"../constants/app\";\nimport { theme } from \"../constants/theme\";\nimport { icons } from \"../constants/icons\";\nimport { assets } from \"../constants/assets\";\n\nimport { BetterHtmlConfig } from \"../types/config\";\nimport { Alert } from \"../types/alert\";\nimport { BetterHtmlPlugin, PluginName } from \"../types/plugin\";\n\nimport { TabGroup, TabsComponentState } from \"./Tabs\";\nimport AlertsHolder from \"./alerts/AlertsHolder\";\n\nconst GlobalStyle = createGlobalStyle<{ fontFamily: string; color: Color; backgroundColor: Color }>`\n html {\n background-color: ${(props) => props.backgroundColor};\n }\n\n body {\n font-family: ${(props) => props.fontFamily};\n color: ${(props) => props.color};\n background-color: ${(props) => props.backgroundColor};\n }\n\n * {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n -webkit-tap-highlight-color: transparent;\n }\n\n a {\n text-decoration: none;\n color: inherit;\n }\n\n .react-better-html-no-scrollbar::-webkit-scrollbar {\n display: none;\n }\n`;\n\nexport type BetterHtmlInternalConfig = BetterHtmlConfig & {\n alerts: Alert[];\n setAlerts: React.Dispatch<React.SetStateAction<Alert[]>>;\n setSideMenuIsCollapsed: ReturnType<typeof useBooleanState>[1];\n setSideMenuIsOpenMobile: ReturnType<typeof useBooleanState>[1];\n plugins: BetterHtmlPlugin[];\n componentsState: {\n tabs: TabsComponentState;\n };\n};\n\nconst betterHtmlContext = createContext<BetterHtmlInternalConfig | undefined>(undefined);\nexport let externalBetterCoreContextValue: BetterCoreConfig | undefined;\nexport let externalBetterHtmlContextValue: BetterHtmlInternalConfig | undefined;\n\nexport const useBetterHtmlContext = (): BetterHtmlConfig & BetterCoreConfig => {\n const coreContext = useBetterCoreContext();\n const context = useContext(betterHtmlContext);\n\n if (context === undefined)\n throw new Error(\n \"`useBetterHtmlContext()` must be used within a `<BetterHtmlProvider>`. Make sure to add one at the root of your component tree.\",\n );\n\n const { alerts, setAlerts, setSideMenuIsCollapsed, setSideMenuIsOpenMobile, plugins, componentsState, ...rest } =\n context;\n\n return {\n ...coreContext,\n ...rest,\n };\n};\n\nexport const useBetterHtmlContextInternal = (): BetterHtmlInternalConfig => {\n const context = useContext(betterHtmlContext);\n\n if (context === undefined)\n throw new Error(\n \"`useBetterHtmlContextInternal()` must be used within a `<BetterHtmlProvider>`. Make sure to add one at the root of your component tree.\",\n );\n\n return context;\n};\n\nexport const useAlertControls = () => {\n const context = useContext(betterHtmlContext);\n\n if (context === undefined)\n throw new Error(\n \"`useAlertControls()` must be used within a `<BetterHtmlProvider>`. Make sure to add one at the root of your component tree.\",\n );\n\n const createAlert = useCallback((alert: OmitProps<Alert, \"id\">): Alert => {\n const readyAlert: Alert = {\n id: crypto.randomUUID(),\n ...alert,\n };\n context.setAlerts((oldValue) => [...oldValue, readyAlert]);\n\n return readyAlert;\n }, []);\n const removeAlert = useCallback((alertId: string) => {\n context.setAlerts((oldValue) => oldValue.filter((alert) => alert.id !== alertId));\n }, []);\n\n return {\n createAlert,\n removeAlert,\n };\n};\n\nexport const usePlugin = <T extends object>(pluginName: PluginName): BetterHtmlPlugin<T> | undefined => {\n const context = useContext(betterHtmlContext);\n\n if (context === undefined) {\n throw new Error(\n \"`usePlugin()` must be used within a `<BetterHtmlProvider>`. Make sure to add one at the root of your component tree.\",\n );\n }\n\n return useMemo(\n () => context.plugins.find((plugin: BetterHtmlPlugin) => plugin.name === pluginName),\n [context.plugins, pluginName],\n ) as any;\n};\n\ntype BetterHtmlProviderInternalContentProps = {\n children?: React.ReactNode;\n};\n\nfunction BetterHtmlProviderInternalContent({ children }: BetterHtmlProviderInternalContentProps) {\n const theme = useTheme();\n const alertsPlugin = usePlugin(\"alerts\");\n\n return (\n <>\n <GlobalStyle\n fontFamily={theme.styles.fontFamily}\n color={theme.colors.textPrimary}\n backgroundColor={theme.colors.backgroundBase}\n />\n\n {children}\n\n {alertsPlugin && <AlertsHolder />}\n </>\n );\n}\n\ntype BetterHtmlProviderInternalConfig = DeepPartialRecord<BetterHtmlConfig>;\n\ntype BetterProviderCommonProps = {\n plugins?: BetterHtmlPlugin[];\n children?: React.ReactNode;\n};\n\ntype BetterHtmlProviderInternalProps = BetterProviderCommonProps & {\n config?: BetterHtmlProviderInternalConfig;\n};\n\nfunction BetterHtmlProviderInternal({ config, plugins, children }: BetterHtmlProviderInternalProps) {\n const betterCoreContext = useBetterCoreContext();\n\n const [alerts, setAlerts] = useState<Alert[]>([]);\n const [sideMenuIsCollapsed, setSideMenuIsCollapsed] = useBooleanState();\n const [sideMenuIsOpenMobile, setSideMenuIsOpenMobile] = useBooleanState();\n const [tabGroups, setTabGroups] = useState<TabGroup[]>([]);\n const [tabsWithDots, setTabsWithDots] = useState<string[]>([]);\n\n const readyConfig = useMemo<BetterHtmlInternalConfig>(\n () => ({\n app: {\n ...appConfig,\n ...config?.app,\n },\n alerts,\n setAlerts,\n sideMenuIsCollapsed,\n setSideMenuIsCollapsed,\n sideMenuIsOpenMobile,\n setSideMenuIsOpenMobile,\n components: {\n ...config?.components,\n },\n plugins: plugins ?? [],\n componentsState: {\n tabs: {\n tabGroups,\n setTabGroups,\n tabsWithDots,\n setTabsWithDots,\n },\n },\n }),\n [config, alerts, sideMenuIsCollapsed, sideMenuIsOpenMobile, plugins, tabGroups, tabsWithDots],\n );\n\n useEffect(() => {\n if (!plugins) return;\n\n plugins.forEach((plugin) => {\n plugin.initialize?.();\n });\n }, []);\n\n externalBetterCoreContextValue = betterCoreContext;\n externalBetterHtmlContextValue = readyConfig;\n\n return (\n <betterHtmlContext.Provider value={readyConfig}>\n <BetterHtmlProviderInternalContent>{children}</BetterHtmlProviderInternalContent>\n </betterHtmlContext.Provider>\n );\n}\n\nexport type BetterHtmlProviderConfig = BetterCoreProviderConfig & BetterHtmlProviderInternalConfig;\n\ntype BetterHtmlProviderProps = BetterProviderCommonProps & {\n config?: BetterHtmlProviderConfig;\n};\n\nfunction BetterHtmlProvider({ config, ...props }: BetterHtmlProviderProps) {\n const coreConfig = useMemo<BetterCoreProviderConfig>(\n () => ({\n theme: {\n ...theme,\n ...config?.theme,\n },\n colorTheme: config?.colorTheme ?? (localStorage.getItem(\"theme\") === \"dark\" ? \"dark\" : \"light\"),\n icons: {\n ...icons,\n ...config?.icons,\n },\n assets: {\n ...assets,\n ...config?.assets,\n },\n loaders: config?.loaders,\n }),\n [config],\n );\n\n const htmlConfig = useMemo<BetterHtmlProviderInternalConfig>(\n () => ({\n app: config?.app,\n sideMenuIsCollapsed: config?.sideMenuIsCollapsed,\n sideMenuIsOpenMobile: config?.sideMenuIsOpenMobile,\n components: config?.components,\n }),\n [config],\n );\n\n useEffect(() => {\n const html = document.querySelector(\"html\");\n\n if (!html) return;\n\n html.setAttribute(\"data-theme\", localStorage.getItem(\"theme\") === \"dark\" ? \"dark\" : \"light\");\n\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === \"attributes\") {\n const newColorTheme = html.getAttribute(\"data-theme\") === \"dark\" ? \"dark\" : \"light\";\n\n colorThemeControls.toggleTheme(newColorTheme);\n localStorage.setItem(\"theme\", newColorTheme);\n }\n });\n });\n\n observer.observe(html, {\n attributes: true,\n attributeFilter: [\"data-theme\"],\n });\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return (\n <BetterCoreProvider config={coreConfig}>\n <BetterHtmlProviderInternal config={htmlConfig} {...props} />\n </BetterCoreProvider>\n );\n}\n\nexport default memo(BetterHtmlProvider);\n","import { AppConfig } from \"../types/config\";\n\nexport const appConfig: AppConfig = {\n contentMaxWidth: 1100,\n};\n\nexport const defaultAlertDuration: number = 2.3 * 1000;\nexport const defaultSideMenuWidth: number = 300;\n","import { DeepPartialRecord, ThemeConfig } from \"react-better-core\";\n\nexport const theme: DeepPartialRecord<ThemeConfig> = {};\n","import { IconsConfig } from \"react-better-core\";\n\nexport const icons: Partial<IconsConfig> = {\n uploadCloud: {\n width: 640,\n height: 512,\n paths: [\n {\n d: \"M144 480C64.5 480 0 415.5 0 336c0-62.8 40.2-116.2 96.2-135.9c-.1-2.7-.2-5.4-.2-8.1c0-88.4 71.6-160 160-160c59.3 0 111 32.2 138.7 80.2C409.9 102 428.3 96 448 96c53 0 96 43 96 96c0 12.2-2.3 23.8-6.4 34.6C596 238.4 640 290.1 640 352c0 70.7-57.3 128-128 128l-368 0zm79-217c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39L296 392c0 13.3 10.7 24 24 24s24-10.7 24-24l0-134.1 39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0l-80 80z\",\n type: \"fill\",\n },\n ],\n },\n doubleChevronLeft: {\n width: 512,\n height: 512,\n paths: [\n {\n d: \"M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z\",\n type: \"fill\",\n },\n ],\n },\n doubleChevronRight: {\n width: 512,\n height: 512,\n paths: [\n {\n d: \"M470.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 256 265.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L210.7 256 73.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z\",\n type: \"fill\",\n },\n ],\n },\n eye: {\n width: 576,\n height: 512,\n paths: [\n {\n d: \"M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64c-7.1 0-13.9-1.2-20.3-3.3c-5.5-1.8-11.9 1.6-11.7 7.4c.3 6.9 1.3 13.8 3.2 20.7c13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3z\",\n type: \"fill\",\n },\n ],\n },\n eyeDashed: {\n width: 640,\n height: 512,\n paths: [\n {\n d: \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c8.4-19.3 10.6-41.4 4.8-63.3c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zM373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5L373 389.9z\",\n type: \"fill\",\n },\n ],\n },\n magnifyingGlass: {\n width: 512,\n height: 512,\n paths: [\n {\n d: \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z\",\n type: \"fill\",\n },\n ],\n },\n filter: {\n width: 512,\n height: 512,\n paths: [\n {\n d: \"M3.9 54.9C10.5 40.9 24.5 32 40 32l432 0c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L320 320.9 320 448c0 12.1-6.8 23.2-17.7 28.6s-23.8 4.3-33.5-3l-64-48c-8.1-6-12.8-15.5-12.8-25.6l0-79.1L9 97.3C-.7 85.4-2.8 68.8 3.9 54.9z\",\n type: \"fill\",\n },\n ],\n },\n};\n","import { AssetsConfig } from \"react-better-core\";\n\nexport const assets: Partial<AssetsConfig> = {};\n","import { memo } from \"react\";\nimport { useTheme } from \"react-better-core\";\n\nimport { AlertsPluginOptions } from \"../../plugins\";\n\nimport Div from \"../Div\";\nimport Alert from \"./Alert\";\nimport { useBetterHtmlContextInternal, usePlugin } from \"../BetterHtmlProvider\";\n\nfunction AlertsHolder() {\n const theme = useTheme();\n const alertsPlugin = usePlugin<AlertsPluginOptions>(\"alerts\");\n const { alerts } = useBetterHtmlContextInternal();\n\n const pluginConfig = alertsPlugin?.getConfig() ?? {};\n\n const top: React.CSSProperties[\"top\"] = pluginConfig.position === \"top\" ? theme.styles.gap : undefined;\n const bottom: React.CSSProperties[\"bottom\"] = pluginConfig.position === \"bottom\" ? theme.styles.gap : undefined;\n const left: React.CSSProperties[\"left\"] =\n pluginConfig.align === \"left\" ? theme.styles.space : pluginConfig.align === \"center\" ? \"50%\" : undefined;\n const right: React.CSSProperties[\"right\"] = pluginConfig.align === \"right\" ? theme.styles.space : undefined;\n\n return (\n <Div.column\n position=\"fixed\"\n top={top}\n bottom={bottom}\n left={left}\n right={right}\n gap={theme.styles.gap}\n alignItems={\n pluginConfig.align === \"center\" ? \"center\" : pluginConfig.align === \"right\" ? \"flex-end\" : undefined\n }\n transform={pluginConfig.align === \"center\" ? \"translateX(-50%)\" : undefined}\n zIndex={1000}\n >\n {alerts.map((alert) => (\n <Alert alert={alert} key={alert.id} />\n ))}\n </Div.column>\n );\n}\n\nexport default memo(AlertsHolder);\n","import { forwardRef, memo, useCallback } from \"react\";\nimport { OmitProps, useTheme } from \"react-better-core\";\nimport styled, { WebTarget } from \"styled-components\";\n\nimport { isMobileDevice } from \"../constants\";\n\nimport { ComponentHoverStyle, ComponentPropWithRef, ComponentStyle } from \"../types/components\";\n\nimport { useComponentPropsWithPrefix, useComponentPropsGrouper } from \"../utils/hooks\";\n\nimport Divider from \"./Divider\";\nimport PageHeader, { PageHeaderProps } from \"./PageHeader\";\n\nconst DivStyledComponent = styled.div.withConfig({\n shouldForwardProp: (prop) => ![\"style\", \"hoverStyle\"].includes(prop),\n})<{ style: ComponentStyle; hoverStyle: ComponentStyle }>`\n ${(props) => props.style as any}\n\n &:hover {\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nexport type DivProps<Value = unknown> = {\n value?: Value;\n /** @default \"div\" */\n as?: WebTarget;\n /** @default false */\n isTabAccessed?: boolean;\n htmlContentTranslate?: React.ComponentProps<\"div\">[\"translate\"];\n onClickWithValue?: (value: Value) => void;\n} & OmitProps<React.ComponentProps<\"div\">, \"style\" | \"defaultValue\" | \"translate\"> &\n ComponentStyle &\n ComponentHoverStyle;\n\ntype DivComponentType = {\n <Value>(props: ComponentPropWithRef<HTMLDivElement, DivProps<Value>>): React.ReactElement;\n row: <Value>(\n props: ComponentPropWithRef<\n HTMLDivElement,\n OmitProps<DivProps<Value>, \"display\" | \"flexDirection\"> & {\n flexReverse?: boolean;\n invertFlexDirection?: boolean;\n }\n >,\n ) => React.ReactElement;\n column: <Value>(\n props: ComponentPropWithRef<\n HTMLDivElement,\n OmitProps<DivProps<Value>, \"display\" | \"flexDirection\"> & {\n flexReverse?: boolean;\n invertFlexDirection?: boolean;\n }\n >,\n ) => React.ReactElement;\n grid: <Value>(\n props: ComponentPropWithRef<HTMLDivElement, OmitProps<DivProps<Value>, \"display\">>,\n ) => React.ReactElement;\n box: <Value>(\n props: ComponentPropWithRef<\n HTMLDivElement,\n DivProps<Value> &\n OmitProps<PageHeaderProps, \"marginBottom\"> & {\n headerBackgroundColor?: string;\n /** @default theme.colors.primary */\n activeColor?: string;\n isActive?: boolean;\n }\n >,\n ) => React.ReactElement;\n};\n\nconst DivComponent: DivComponentType = forwardRef(function Div<Value>(\n {\n as = \"div\",\n value,\n isTabAccessed,\n htmlContentTranslate,\n onClickWithValue,\n role,\n onClick,\n onKeyDown,\n children,\n ...props\n }: DivProps<Value>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const { style, hoverStyle, restProps } = useComponentPropsGrouper(props);\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n const onClickElement = useCallback(\n (event: React.MouseEvent<HTMLDivElement, globalThis.MouseEvent>) => {\n onClick?.(event);\n onClickWithValue?.(value as any);\n },\n [onClick, onClickWithValue, value],\n );\n const onKeyDownElement = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n\n if (!isTabAccessed) return;\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n },\n [onKeyDown, isTabAccessed],\n );\n\n return (\n <DivStyledComponent\n as={as}\n tabIndex={isTabAccessed && !isMobileDevice ? 0 : undefined}\n translate={htmlContentTranslate}\n role={role ?? (onClick ? \"button\" : undefined)}\n onClick={onClickElement}\n onKeyDown={onKeyDownElement}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n ref={ref}\n >\n {children}\n </DivStyledComponent>\n );\n}) as any;\n\nDivComponent.row = forwardRef(function Row({ flexReverse, invertFlexDirection, ...props }, ref) {\n const reverseSuffix = flexReverse ? \"-reverse\" : \"\";\n\n return (\n <DivComponent\n display=\"flex\"\n flexDirection={((invertFlexDirection ? \"column\" : \"row\") + reverseSuffix) as any}\n ref={ref}\n {...props}\n />\n );\n}) as DivComponentType[\"row\"];\n\nDivComponent.column = forwardRef(function Column({ flexReverse, invertFlexDirection, ...props }, ref) {\n const reverseSuffix = flexReverse ? \"-reverse\" : \"\";\n\n return (\n <DivComponent\n display=\"flex\"\n flexDirection={((invertFlexDirection ? \"row\" : \"column\") + reverseSuffix) as any}\n ref={ref}\n {...props}\n />\n );\n}) as DivComponentType[\"column\"];\n\nDivComponent.grid = forwardRef(function Grid(props, ref) {\n return <DivComponent display=\"grid\" ref={ref} {...props} />;\n}) as DivComponentType[\"grid\"];\n\nDivComponent.box = forwardRef(function Box(\n {\n icon,\n image,\n imageUrl,\n imageSize,\n imageAzProfileImage,\n title,\n titleAs,\n titleColor,\n titleRightElement,\n description,\n descriptionColor,\n textAlign,\n rightElement,\n lightMode,\n headerBackgroundColor,\n activeColor,\n isActive,\n children,\n ...props\n },\n ref,\n) {\n const theme = useTheme();\n\n const withClick = props.onClick || props.onClickWithValue;\n\n const readyActiveColor = activeColor ?? theme.colors.primary;\n\n return (\n <DivComponent\n color={isActive ? theme.colors.base : undefined}\n backgroundColor={isActive ? readyActiveColor : theme.colors.backgroundContent}\n border={`1px solid ${isActive ? readyActiveColor : theme.colors.border}`}\n borderRadius={theme.styles.borderRadius}\n borderColorHover={withClick && !isActive ? readyActiveColor : undefined}\n filterHover={withClick && isActive ? \"brightness(0.9)\" : undefined}\n cursor={withClick ? \"pointer\" : undefined}\n paddingBlock={title ? theme.styles.space : theme.styles.gap}\n paddingInline={theme.styles.space}\n ref={ref}\n {...props}\n >\n {title && (\n <Div\n backgroundColor={headerBackgroundColor}\n borderTopLeftRadius={props.borderTopLeftRadius ?? props.borderRadius ?? theme.styles.borderRadius - 1}\n borderTopRightRadius={props.borderTopRightRadius ?? props.borderRadius ?? theme.styles.borderRadius - 1}\n marginInline={-theme.styles.space}\n marginTop={-theme.styles.space}\n marginBottom={theme.styles.space}\n paddingInline={theme.styles.space}\n paddingTop={theme.styles.space}\n >\n <PageHeader\n icon={icon}\n image={image}\n imageUrl={imageUrl}\n imageSize={imageSize}\n imageAzProfileImage={imageAzProfileImage}\n title={title}\n titleAs={titleAs}\n titleColor={titleColor}\n titleRightElement={titleRightElement}\n description={description}\n descriptionColor={descriptionColor}\n textAlign={textAlign}\n rightElement={rightElement}\n lightMode={lightMode}\n marginBottom={theme.styles.space}\n />\n\n <Div width={`calc(100% + ${theme.styles.space * 2}px)`} marginLeft={-theme.styles.space}>\n <Divider.horizontal />\n </Div>\n </Div>\n )}\n\n {children}\n </DivComponent>\n );\n}) as DivComponentType[\"box\"];\n\nconst Div = memo(DivComponent) as any as typeof DivComponent & {\n row: typeof DivComponent.row;\n column: typeof DivComponent.column;\n grid: typeof DivComponent.grid;\n box: typeof DivComponent.box;\n};\n\nDiv.row = DivComponent.row;\nDiv.column = DivComponent.column;\nDiv.grid = DivComponent.grid;\nDiv.box = DivComponent.box;\n\nexport default Div;\n","export const isMobileDevice: boolean = /Mobi|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n);\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { OmitProps, PartialRecord, useBooleanState, useTheme } from \"react-better-core\";\n\nimport { cssProps, cssPropsToExclude } from \"../constants/css\";\n\nimport { ReactRouterDomPluginOptions } from \"../plugins\";\n\nimport { ComponentHoverStyle, ComponentPropWithRef, ComponentStyle } from \"../types/components\";\n\nimport { InputFieldProps, TextareaFieldProps } from \"../components/InputField\";\nimport { DropdownProps } from \"../components/Dropdown\";\nimport { ToggleInputProps, ToggleInputRef } from \"../components/ToggleInput\";\nimport { usePlugin } from \"../components/BetterHtmlProvider\";\n\nexport function useComponentPropsGrouper<Props extends object = {}>(\n props: ComponentStyle & ComponentHoverStyle,\n /** @default false */\n excludeStyleProps?: boolean,\n): {\n style: ComponentStyle;\n hoverStyle: ComponentStyle;\n excludeStyle: ComponentStyle;\n restProps: Props;\n} {\n const theme = useTheme();\n\n return useMemo(() => {\n const style: ComponentStyle = {};\n const hoverStyle: ComponentStyle = {};\n const excludeStyle: ComponentStyle = {};\n const restProps = {} as Props;\n\n let haveHover = false;\n\n for (const key in props) {\n const keyName = key as keyof ComponentStyle;\n\n if (excludeStyleProps && cssPropsToExclude.has(keyName.toLowerCase())) {\n if (cssProps.has(keyName.toLowerCase())) {\n (excludeStyle[keyName] as any) = props[keyName];\n }\n } else {\n if (cssProps.has(keyName.toLowerCase())) {\n (style[keyName] as any) = props[keyName];\n\n if (keyName === \"transition\") style.WebkitTransition = style.transition;\n } else if (keyName.endsWith(\"Hover\") && cssProps.has(keyName.slice(0, -5).toLowerCase())) {\n haveHover = true;\n\n (hoverStyle[keyName.slice(0, -5) as keyof ComponentStyle] as any) = props[keyName];\n\n if (keyName.slice(0, -5) === \"transition\") hoverStyle.WebkitTransition = hoverStyle.transition;\n } else {\n (restProps[keyName as keyof Props] as any) = props[keyName];\n }\n }\n }\n\n if (haveHover && !style.transition) {\n style.transition = theme.styles.transition;\n style.WebkitTransition = theme.styles.transition;\n }\n\n return {\n style,\n hoverStyle,\n excludeStyle,\n restProps,\n };\n }, [props]);\n}\n\nexport function useComponentPropsWithPrefix<Props extends Record<string, any>, Prefix extends string>(\n props: Props,\n prefix: Prefix,\n) {\n return useMemo<Record<`${Prefix}-${string}`, any>>(() => {\n const returnValue: any = {};\n\n for (const key in props) {\n if (key.startsWith(`${prefix}-`)) {\n returnValue[key] = props[key];\n }\n }\n\n return returnValue;\n }, [props, prefix]);\n}\n\nexport function useComponentInputFieldDateProps(\n props: InputFieldProps,\n holderRef?: React.RefObject<HTMLDivElement | null>,\n disabled?: boolean,\n): {\n internalValue: string;\n setInternalValue: React.Dispatch<React.SetStateAction<string>>;\n inputFieldProps: InputFieldProps;\n insideInputFieldComponentProps: ComponentStyle;\n isOpen: boolean;\n} {\n const theme = useTheme();\n\n const [isOpen, setIsOpen] = useBooleanState();\n const [isOpenLate, setIsOpenLate] = useBooleanState();\n const [isFocused, setIsFocused] = useBooleanState();\n\n const [internalValue, setInternalValue] = useState<string>(props.value?.toString() ?? \"\");\n\n const inputFieldProps = useMemo<InputFieldProps>(\n () => ({\n value: internalValue,\n className: `${isOpen && !disabled ? \"react-better-html-inputField-dateTime-opened\" : \"\"}${\n isOpenLate && !disabled ? \" react-better-html-inputField-dateTime-opened-late\" : \"\"\n }${props.className ? ` ${props.className}` : \"\"}`,\n onClick: (event: React.MouseEvent<HTMLInputElement>) => {\n if (props.disabled) return;\n\n setIsOpen.setTrue();\n props.onClick?.(event);\n },\n onFocus: (event: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused.setTrue();\n props.onFocus?.(event);\n },\n onBlur: (event: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused.setFalse();\n props.onBlur?.(event);\n },\n onChangeValue: (value) => {\n setInternalValue(value);\n props.onChangeValue?.(value);\n },\n }),\n [props, internalValue, isOpen, isOpenLate, disabled],\n );\n const insideInputFieldComponentProps = useMemo<ComponentStyle>(\n () => ({\n border: `1px solid ${isFocused ? theme.colors.primary : theme.colors.border}`,\n borderTop: \"none\",\n opacity: !isOpen ? 0 : undefined,\n pointerEvents: !isOpen ? \"none\" : undefined,\n transform: `translateY(${!isOpen ? -10 : 0}px)`,\n zIndex: 1000,\n transition: theme.styles.transition,\n }),\n [isOpen, isFocused],\n );\n\n useEffect(() => {\n if (props.value === undefined || props.value === null) return;\n\n setInternalValue(props.value.toString());\n }, [props.value]);\n useEffect(() => {\n if (isOpen) {\n setIsOpenLate.setTrue();\n } else {\n const timeout = setTimeout(setIsOpenLate.setFalse, 0.2 * 1000);\n\n return () => {\n clearTimeout(timeout);\n };\n }\n }, [isOpen]);\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (holderRef && holderRef.current && !holderRef.current.contains(event.target as Node)) {\n setIsOpen.setFalse();\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpen]);\n\n return {\n internalValue,\n setInternalValue,\n inputFieldProps,\n insideInputFieldComponentProps,\n isOpen,\n };\n}\n\nexport function usePageResize() {\n const [width, setWidth] = useState<number>(window.innerWidth);\n const [height, setHeight] = useState<number>(window.innerHeight);\n\n useEffect(() => {\n const onResize = () => {\n setWidth(window.innerWidth);\n setHeight(window.innerHeight);\n };\n\n window.addEventListener(\"resize\", onResize);\n\n return () => {\n window.removeEventListener(\"resize\", onResize);\n };\n }, []);\n\n return {\n width,\n height,\n };\n}\n\nexport function usePageScroll() {\n const [scrollX, setScrollX] = useState<number>(window.scrollX ?? 0);\n const [scrollY, setScrollY] = useState<number>(window.scrollY ?? 0);\n\n useEffect(() => {\n const onScroll = () => {\n setScrollX(window.scrollX);\n setScrollY(window.scrollY);\n };\n\n window.addEventListener(\"scroll\", onScroll);\n\n return () => {\n window.removeEventListener(\"scroll\", onScroll);\n };\n }, []);\n\n return {\n scrollX,\n scrollY,\n };\n}\n\nexport function useMediaQuery() {\n const { width } = usePageResize();\n\n return {\n screenWidth: width,\n size320: width <= 320,\n size400: width <= 400,\n size500: width <= 500,\n size600: width <= 600,\n size700: width <= 700,\n size800: width <= 800,\n size900: width <= 900,\n size1000: width <= 1000,\n size1100: width <= 1100,\n size1200: width <= 1200,\n size1300: width <= 1300,\n size1400: width <= 1400,\n size1500: width <= 1500,\n size1600: width <= 1600,\n };\n}\n\ntype FormFieldValue = string | number | boolean;\n\nexport function useForm<\n FormFields extends Record<string | number, FormFieldValue | FormFieldValue[] | undefined>,\n>(options: {\n defaultValues: FormFields;\n requiredFields?: (keyof FormFields)[];\n onSubmit?: (values: FormFields) => void | Promise<void>;\n validate?: (values: FormFields) => PartialRecord<keyof FormFields, string>;\n}) {\n const { defaultValues, requiredFields, onSubmit, validate } = options;\n\n const inputFieldRefs = useRef<Record<keyof FormFields, HTMLInputElement | undefined>>(\n {} as Record<keyof FormFields, HTMLInputElement | undefined>,\n );\n const textAreaRefs = useRef<Record<keyof FormFields, HTMLTextAreaElement | undefined>>(\n {} as Record<keyof FormFields, HTMLTextAreaElement | undefined>,\n );\n const dropdownRefs = useRef<Record<keyof FormFields, HTMLDivElement | undefined>>(\n {} as Record<keyof FormFields, HTMLDivElement | undefined>,\n );\n const toggleInputRefs = useRef<Record<keyof FormFields, ToggleInputRef | undefined>>(\n {} as Record<keyof FormFields, ToggleInputRef | undefined>,\n );\n const [inputTypes, setInputTypes] = useState<Record<keyof FormFields, React.HTMLInputTypeAttribute>>(\n {} as Record<keyof FormFields, React.HTMLInputTypeAttribute>,\n );\n\n const [values, setValues] = useState<FormFields>(defaultValues);\n const [errors, setErrors] = useState<PartialRecord<keyof FormFields, string>>({});\n const [isSubmitting, setIsSubmitting] = useBooleanState();\n\n const setFieldValue = useCallback(\n <FieldName extends keyof FormFields>(field: FieldName, value: FormFields[FieldName] | undefined) => {\n setValues((oldValue) => ({\n ...oldValue,\n [field]: value,\n }));\n\n setErrors((oldValue) => ({\n ...oldValue,\n [field]: undefined,\n }));\n },\n [],\n );\n const setFieldsValue = useCallback((values: Partial<FormFields>) => {\n setValues((oldValue) => ({\n ...oldValue,\n ...values,\n }));\n\n setErrors((oldValue) => {\n const newErrors: typeof oldValue = {};\n\n for (const key in values) newErrors[key] = undefined;\n\n return newErrors;\n });\n }, []);\n const getInputFieldProps = useCallback(\n <FieldName extends keyof FormFields>(\n field: FieldName,\n ): ComponentPropWithRef<HTMLInputElement, InputFieldProps> => {\n const type = inputTypes[field] ?? \"text\";\n\n return {\n required: requiredFields?.includes(field),\n value: values[field]?.toString() ?? \"\",\n name: field.toString(),\n onChangeValue: (newValue) => {\n const readyValue = type === \"number\" ? (newValue ? Number(newValue) : undefined) : newValue;\n\n setFieldValue(field, readyValue as FormFields[FieldName]);\n },\n ref: (element) => {\n if (!element) return;\n\n inputFieldRefs.current[field] = element;\n\n if (inputTypes[field] === undefined)\n setInputTypes((oldValue) => ({\n ...oldValue,\n [field]: element.getAttribute(\"type\"),\n }));\n },\n errorText: errors[field],\n };\n },\n [values, setFieldValue, inputTypes, errors, requiredFields],\n );\n const getTextAreaProps = useCallback(\n <FieldName extends keyof FormFields>(\n field: FieldName,\n ): ComponentPropWithRef<HTMLTextAreaElement, TextareaFieldProps> => {\n return {\n required: requiredFields?.includes(field),\n value: values[field]?.toString() ?? \"\",\n name: field.toString(),\n onChangeValue: (newValue) => {\n setFieldValue(field, newValue as FormFields[FieldName]);\n },\n ref: (element) => {\n if (!element) return;\n\n textAreaRefs.current[field] = element;\n },\n errorText: errors[field],\n };\n },\n [values, setFieldValue, inputTypes, errors, requiredFields],\n );\n const getDropdownFieldProps = useCallback(\n <FieldName extends keyof FormFields>(field: FieldName): any => {\n return {\n required: requiredFields?.includes(field),\n value: values[field],\n name: field.toString(),\n onChange: (value: any) => {\n setFieldValue(field, value);\n },\n ref: (element) => {\n if (!element) return;\n\n dropdownRefs.current[field] = element;\n },\n errorText: errors[field],\n } as OmitProps<ComponentPropWithRef<HTMLDivElement, DropdownProps<FormFields[FieldName]>>, \"options\">;\n },\n [values, errors, setFieldValue, requiredFields],\n );\n const getCheckboxProps = useCallback(\n <FieldName extends keyof FormFields>(\n field: FieldName,\n ): ComponentPropWithRef<ToggleInputRef, ToggleInputProps<FormFields[FieldName]>> => {\n return {\n required: requiredFields?.includes(field),\n checked: values[field] as boolean,\n name: field.toString(),\n onChange: (checked) => {\n setFieldValue(field, checked as FormFields[FieldName]);\n },\n ref: (element) => {\n if (!element) return;\n\n toggleInputRefs.current[field] = element;\n },\n errorText: errors[field],\n };\n },\n [values, errors, setFieldValue, requiredFields],\n );\n const getRadioButtonProps = useCallback(\n <FieldName extends keyof FormFields>(\n field: FieldName,\n value: FormFields[FieldName],\n ): ComponentPropWithRef<ToggleInputRef, ToggleInputProps<FormFields[FieldName]>> => {\n return {\n required: requiredFields?.includes(field),\n checked: values[field] === value,\n name: field.toString(),\n value,\n onChange: (checked, newValue) => {\n setFieldValue(field, checked ? newValue : undefined);\n },\n ref: (element) => {\n if (!element) return;\n\n toggleInputRefs.current[field] = element;\n },\n errorText: errors[field],\n };\n },\n [values, errors, setFieldValue, requiredFields],\n );\n const getSwitchProps = useCallback(\n <FieldName extends keyof FormFields>(\n field: FieldName,\n ): ComponentPropWithRef<ToggleInputRef, ToggleInputProps<FormFields[FieldName]>> => {\n return {\n required: requiredFields?.includes(field),\n checked: values[field] as boolean,\n name: field.toString(),\n onChange: (checked) => {\n setFieldValue(field, checked as FormFields[FieldName]);\n },\n ref: (element) => {\n if (!element) return;\n\n toggleInputRefs.current[field] = element;\n },\n errorText: errors[field],\n };\n },\n [values, errors, setFieldValue, requiredFields],\n );\n const focusField = useCallback((field: keyof FormFields) => {\n inputFieldRefs.current[field]?.focus();\n }, []);\n const validateForm = useCallback(() => {\n const validationErrors = validate?.(values) || {};\n setErrors(validationErrors);\n\n return validationErrors;\n }, [validate, values]);\n const onSubmitFunction = useCallback(\n async (event?: React.FormEvent<HTMLFormElement>) => {\n event?.preventDefault();\n setIsSubmitting.setTrue();\n\n try {\n const validationErrors = validateForm();\n\n if (Object.keys(validationErrors).length === 0) {\n await onSubmit?.(values);\n } else {\n const firstErrorField = Object.keys(validationErrors)[0] as keyof FormFields;\n focusField(firstErrorField);\n }\n } finally {\n setIsSubmitting.setFalse();\n }\n },\n [values, validateForm, onSubmit, focusField],\n );\n const reset = useCallback(() => {\n setValues(defaultValues);\n setErrors({});\n }, [defaultValues]);\n\n const isDirty = useMemo<boolean>(\n () => Object.keys(defaultValues).some((key) => defaultValues[key] !== values[key]),\n [defaultValues, values],\n );\n const isValid = useMemo<boolean>(() => {\n const validationErrors = validate?.(values) || {};\n\n return Object.keys(validationErrors).length === 0;\n }, [validate, values]);\n const canSubmit = useMemo<boolean>(() => {\n const requiredFieldsHaveValues =\n requiredFields?.every((field) => values[field] !== undefined && values[field] !== \"\") ?? true;\n\n return isValid && requiredFieldsHaveValues;\n }, [isValid, requiredFields]);\n\n return {\n values,\n errors,\n isSubmitting,\n setFieldValue,\n setFieldsValue,\n getInputFieldProps,\n getTextAreaProps,\n getDropdownFieldProps,\n getCheckboxProps,\n getRadioButtonProps,\n getSwitchProps,\n focusField,\n inputFieldRefs: inputFieldRefs.current,\n textAreaRefs: textAreaRefs.current,\n dropdownRefs: dropdownRefs.current,\n toggleInputRefs: toggleInputRefs.current,\n validate: validateForm,\n onSubmit: onSubmitFunction,\n reset,\n requiredFields,\n isDirty,\n isValid,\n canSubmit,\n };\n}\n\nexport function useUrlQuery() {\n const reactRouterDomPlugin = usePlugin<ReactRouterDomPluginOptions>(\"react-router-dom\");\n\n if (!reactRouterDomPlugin) {\n throw new Error(\n \"`useUrlQuery` hook requires the `react-router-dom` plugin to be added to the `plugins` prop in `<BetterHtmlProvider>`.\",\n );\n }\n\n const reactRouterDomPluginConfig = reactRouterDomPlugin.getConfig();\n\n const isInRouterContext = reactRouterDomPluginConfig.useInRouterContext();\n\n if (!isInRouterContext) {\n throw new Error(\n \"`useUrlQuery` hook must be used inside a React Router context. Make sure your component is wrapped in a `<BrowserRouter>`, or another Router component.\",\n );\n }\n\n const navigate = reactRouterDomPluginConfig.useNavigate();\n const [searchParams] = reactRouterDomPluginConfig.useSearchParams();\n const createSearchParams = reactRouterDomPluginConfig.createSearchParams;\n\n const setQuery = useCallback(\n (query: Record<string, string | number>, keepHistory = true) => {\n const currentSearchParams: Record<string, string> = {};\n searchParams.forEach((value, key) => {\n (currentSearchParams as any)[key] = value;\n });\n\n navigate(\n {\n search: createSearchParams({\n ...currentSearchParams,\n ...Object.fromEntries(Object.entries(query).map(([key, value]) => [key, value.toString()])),\n }).toString(),\n },\n {\n replace: !keepHistory,\n },\n );\n },\n [navigate, searchParams],\n );\n const getQuery = useCallback((name: string) => searchParams.get(name), [searchParams]);\n const removeQuery = useCallback(\n (name: string, keepHistory = true) => {\n searchParams.delete(name);\n\n navigate(\n {\n search: searchParams.toString(),\n },\n {\n replace: !keepHistory,\n },\n );\n },\n [navigate, searchParams],\n );\n\n return {\n setQuery,\n getQuery,\n removeQuery,\n };\n}\n","export const cssProps: Set<string> = new Set([\n \"accentcolor\",\n \"additivesymbols\",\n \"aligncontent\",\n \"alignitems\",\n \"alignself\",\n \"alignmentbaseline\",\n \"all\",\n \"anchorname\",\n \"anchorscope\",\n \"animation\",\n \"animationcomposition\",\n \"animationdelay\",\n \"animationdirection\",\n \"animationduration\",\n \"animationfillmode\",\n \"animationiterationcount\",\n \"animationname\",\n \"animationplaystate\",\n \"animationrange\",\n \"animationrangeend\",\n \"animationrangestart\",\n \"animationtimeline\",\n \"animationtimingfunction\",\n \"appregion\",\n \"appearance\",\n \"ascentoverride\",\n \"aspectratio\",\n \"backdropfilter\",\n \"backfacevisibility\",\n \"background\",\n \"backgroundattachment\",\n \"backgroundblendmode\",\n \"backgroundclip\",\n \"backgroundcolor\",\n \"backgroundimage\",\n \"backgroundorigin\",\n \"backgroundposition\",\n \"backgroundpositionx\",\n \"backgroundpositiony\",\n \"backgroundrepeat\",\n \"backgroundsize\",\n \"basepalette\",\n \"baselineshift\",\n \"baselinesource\",\n \"blocksize\",\n \"border\",\n \"borderblock\",\n \"borderblockcolor\",\n \"borderblockend\",\n \"borderblockendcolor\",\n \"borderblockendstyle\",\n \"borderblockendwidth\",\n \"borderblockstart\",\n \"borderblockstartcolor\",\n \"borderblockstartstyle\",\n \"borderblockstartwidth\",\n \"borderblockstyle\",\n \"borderblockwidth\",\n \"borderbottom\",\n \"borderbottomcolor\",\n \"borderbottomleftradius\",\n \"borderbottomrightradius\",\n \"borderbottomstyle\",\n \"borderbottomwidth\",\n \"bordercollapse\",\n \"bordercolor\",\n \"borderendendradius\",\n \"borderendstartradius\",\n \"borderimage\",\n \"borderimageoutset\",\n \"borderimagerepeat\",\n \"borderimageslice\",\n \"borderimagesource\",\n \"borderimagewidth\",\n \"borderinline\",\n \"borderinlinecolor\",\n \"borderinlineend\",\n \"borderinlineendcolor\",\n \"borderinlineendstyle\",\n \"borderinlineendwidth\",\n \"borderinlinestart\",\n \"borderinlinestartcolor\",\n \"borderinlinestartstyle\",\n \"borderinlinestartwidth\",\n \"borderinlinestyle\",\n \"borderinlinewidth\",\n \"borderleft\",\n \"borderleftcolor\",\n \"borderleftstyle\",\n \"borderleftwidth\",\n \"borderradius\",\n \"borderright\",\n \"borderrightcolor\",\n \"borderrightstyle\",\n \"borderrightwidth\",\n \"borderspacing\",\n \"borderstartendradius\",\n \"borderstartstartradius\",\n \"borderstyle\",\n \"bordertop\",\n \"bordertopcolor\",\n \"bordertopleftradius\",\n \"bordertoprightradius\",\n \"bordertopstyle\",\n \"bordertopwidth\",\n \"borderwidth\",\n \"bottom\",\n \"boxdecorationbreak\",\n \"boxshadow\",\n \"boxsizing\",\n \"breakafter\",\n \"breakbefore\",\n \"breakinside\",\n \"bufferedrendering\",\n \"captionside\",\n \"caretcolor\",\n \"clear\",\n \"clip\",\n \"clippath\",\n \"cliprule\",\n \"color\",\n \"colorinterpolation\",\n \"colorinterpolationfilters\",\n \"colorrendering\",\n \"colorscheme\",\n \"columncount\",\n \"columnfill\",\n \"columngap\",\n \"columnrule\",\n \"columnrulecolor\",\n \"columnrulestyle\",\n \"columnrulewidth\",\n \"columnspan\",\n \"columnwidth\",\n \"columns\",\n \"contain\",\n \"containintrinsicblocksize\",\n \"containintrinsicheight\",\n \"containintrinsicinlinesize\",\n \"containintrinsicsize\",\n \"containintrinsicwidth\",\n \"container\",\n \"containername\",\n \"containertype\",\n \"content\",\n \"contentvisibility\",\n \"counterincrement\",\n \"counterreset\",\n \"counterset\",\n \"cursor\",\n \"cx\",\n \"cy\",\n \"d\",\n \"descentoverride\",\n \"direction\",\n \"display\",\n \"dominantbaseline\",\n \"emptycells\",\n \"fallback\",\n \"fieldsizing\",\n \"fill\",\n \"fillopacity\",\n \"fillrule\",\n \"filter\",\n \"flex\",\n \"flexbasis\",\n \"flexdirection\",\n \"flexflow\",\n \"flexgrow\",\n \"flexshrink\",\n \"flexwrap\",\n \"float\",\n \"floodcolor\",\n \"floodopacity\",\n \"font\",\n \"fontdisplay\",\n \"fontfamily\",\n \"fontfeaturesettings\",\n \"fontkerning\",\n \"fontopticalsizing\",\n \"fontpalette\",\n \"fontsize\",\n \"fontsizeadjust\",\n \"fontstretch\",\n \"fontstyle\",\n \"fontsynthesis\",\n \"fontsynthesissmallcaps\",\n \"fontsynthesisstyle\",\n \"fontsynthesisweight\",\n \"fontvariant\",\n \"fontvariantalternates\",\n \"fontvariantcaps\",\n \"fontvarianteastasian\",\n \"fontvariantemoji\",\n \"fontvariantligatures\",\n \"fontvariantnumeric\",\n \"fontvariantposition\",\n \"fontvariationsettings\",\n \"fontweight\",\n \"forcedcoloradjust\",\n \"gap\",\n \"grid\",\n \"gridarea\",\n \"gridautocolumns\",\n \"gridautoflow\",\n \"gridautorows\",\n \"gridcolumn\",\n \"gridcolumnend\",\n \"gridcolumngap\",\n \"gridcolumnstart\",\n \"gridgap\",\n \"gridrow\",\n \"gridrowend\",\n \"gridrowgap\",\n \"gridrowstart\",\n \"gridtemplate\",\n \"gridtemplateareas\",\n \"gridtemplatecolumns\",\n \"gridtemplaterows\",\n \"height\",\n \"hyphenatecharacter\",\n \"hyphenatelimitchars\",\n \"hyphens\",\n \"imageorientation\",\n \"imagerendering\",\n \"inherits\",\n \"initialletter\",\n \"initialvalue\",\n \"inlinesize\",\n \"inset\",\n \"insetblock\",\n \"insetblockend\",\n \"insetblockstart\",\n \"insetinline\",\n \"insetinlineend\",\n \"insetinlinestart\",\n \"interpolatesize\",\n \"isolation\",\n \"justifycontent\",\n \"justifyitems\",\n \"justifyself\",\n \"left\",\n \"letterspacing\",\n \"lightingcolor\",\n \"linebreak\",\n \"linegapoverride\",\n \"lineheight\",\n \"liststyle\",\n \"liststyleimage\",\n \"liststyleposition\",\n \"liststyletype\",\n \"margin\",\n \"marginblock\",\n \"marginblockend\",\n \"marginblockstart\",\n \"marginbottom\",\n \"margininline\",\n \"margininlineend\",\n \"margininlinestart\",\n \"marginleft\",\n \"marginright\",\n \"margintop\",\n \"marker\",\n \"markerend\",\n \"markermid\",\n \"markerstart\",\n \"mask\",\n \"maskclip\",\n \"maskcomposite\",\n \"maskimage\",\n \"maskmode\",\n \"maskorigin\",\n \"maskposition\",\n \"maskrepeat\",\n \"masksize\",\n \"masktype\",\n \"mathdepth\",\n \"mathshift\",\n \"mathstyle\",\n \"maxblocksize\",\n \"maxheight\",\n \"maxinlinesize\",\n \"maxwidth\",\n \"minblocksize\",\n \"minheight\",\n \"mininlinesize\",\n \"minwidth\",\n \"mixblendmode\",\n \"navigation\",\n \"negative\",\n \"objectfit\",\n \"objectposition\",\n \"objectviewbox\",\n \"offset\",\n \"offsetanchor\",\n \"offsetdistance\",\n \"offsetpath\",\n \"offsetposition\",\n \"offsetrotate\",\n \"opacity\",\n \"order\",\n \"orphans\",\n \"outline\",\n \"outlinecolor\",\n \"outlineoffset\",\n \"outlinestyle\",\n \"outlinewidth\",\n \"overflow\",\n \"overflowanchor\",\n \"overflowclipmargin\",\n \"overflowwrap\",\n \"overflowx\",\n \"overflowy\",\n \"overlay\",\n \"overridecolors\",\n \"overscrollbehavior\",\n \"overscrollbehaviorblock\",\n \"overscrollbehaviorinline\",\n \"overscrollbehaviorx\",\n \"overscrollbehaviory\",\n \"pad\",\n \"padding\",\n \"paddingblock\",\n \"paddingblockend\",\n \"paddingblockstart\",\n \"paddingbottom\",\n \"paddinginline\",\n \"paddinginlineend\",\n \"paddinginlinestart\",\n \"paddingleft\",\n \"paddingright\",\n \"paddingtop\",\n \"page\",\n \"pagebreakafter\",\n \"pagebreakbefore\",\n \"pagebreakinside\",\n \"pageorientation\",\n \"paintorder\",\n \"perspective\",\n \"perspectiveorigin\",\n \"placecontent\",\n \"placeitems\",\n \"placeself\",\n \"pointerevents\",\n \"position\",\n \"positionanchor\",\n \"positionarea\",\n \"positiontry\",\n \"positiontryfallbacks\",\n \"positiontryorder\",\n \"positionvisibility\",\n \"quotes\",\n \"r\",\n \"range\",\n \"resize\",\n \"right\",\n \"rotate\",\n \"rowgap\",\n \"rubyalign\",\n \"rubyposition\",\n \"rx\",\n \"ry\",\n \"scale\",\n \"scrollbehavior\",\n \"scrollinitialtarget\",\n \"scrollmargin\",\n \"scrollmarginblock\",\n \"scrollmarginblockend\",\n \"scrollmarginblockstart\",\n \"scrollmarginbottom\",\n \"scrollmargininline\",\n \"scrollmargininlineend\",\n \"scrollmargininlinestart\",\n \"scrollmarginleft\",\n \"scrollmarginright\",\n \"scrollmargintop\",\n \"scrollpadding\",\n \"scrollpaddingblock\",\n \"scrollpaddingblockend\",\n \"scrollpaddingblockstart\",\n \"scrollpaddingbottom\",\n \"scrollpaddinginline\",\n \"scrollpaddinginlineend\",\n \"scrollpaddinginlinestart\",\n \"scrollpaddingleft\",\n \"scrollpaddingright\",\n \"scrollpaddingtop\",\n \"scrollsnapalign\",\n \"scrollsnapstop\",\n \"scrollsnaptype\",\n \"scrolltimeline\",\n \"scrolltimelineaxis\",\n \"scrolltimelinename\",\n \"scrollbarcolor\",\n \"scrollbargutter\",\n \"scrollbarwidth\",\n \"shapeimagethreshold\",\n \"shapemargin\",\n \"shapeoutside\",\n \"shaperendering\",\n \"sizeadjust\",\n \"speak\",\n \"speakas\",\n \"src\",\n \"stopcolor\",\n \"stopopacity\",\n \"stroke\",\n \"strokedasharray\",\n \"strokedashoffset\",\n \"strokelinecap\",\n \"strokelinejoin\",\n \"strokemiterlimit\",\n \"strokeopacity\",\n \"strokewidth\",\n \"suffix\",\n \"symbols\",\n \"syntax\",\n \"system\",\n \"tabsize\",\n \"tablelayout\",\n \"textalign\",\n \"textalignlast\",\n \"textanchor\",\n \"textbox\",\n \"textboxedge\",\n \"textboxtrim\",\n \"textcombineupright\",\n \"textdecoration\",\n \"textdecorationcolor\",\n \"textdecorationline\",\n \"textdecorationskipink\",\n \"textdecorationstyle\",\n \"textdecorationthickness\",\n \"textemphasis\",\n \"textemphasiscolor\",\n \"textemphasisposition\",\n \"textemphasisstyle\",\n \"textindent\",\n \"textorientation\",\n \"textoverflow\",\n \"textrendering\",\n \"textshadow\",\n \"textsizeadjust\",\n \"textspacingtrim\",\n \"texttransform\",\n \"textunderlineoffset\",\n \"textunderlineposition\",\n \"textwrap\",\n \"textwrapmode\",\n \"textwrapstyle\",\n \"timelinescope\",\n \"top\",\n \"touchaction\",\n \"transform\",\n \"transformbox\",\n \"transformorigin\",\n \"transformstyle\",\n \"transition\",\n \"transitionbehavior\",\n \"transitiondelay\",\n \"transitionduration\",\n \"transitionproperty\",\n \"transitiontimingfunction\",\n \"translate\",\n \"types\",\n \"unicodebidi\",\n \"unicoderange\",\n \"userselect\",\n \"vectoreffect\",\n \"verticalalign\",\n \"viewtimeline\",\n \"viewtimelineaxis\",\n \"viewtimelineinset\",\n \"viewtimelinename\",\n \"viewtransitionclass\",\n \"viewtransitionname\",\n \"visibility\",\n \"webkitaligncontent\",\n \"webkitalignitems\",\n \"webkitalignself\",\n \"webkitanimation\",\n \"webkitanimationdelay\",\n \"webkitanimationdirection\",\n \"webkitanimationduration\",\n \"webkitanimationfillmode\",\n \"webkitanimationiterationcount\",\n \"webkitanimationname\",\n \"webkitanimationplaystate\",\n \"webkitanimationtimingfunction\",\n \"webkitappregion\",\n \"webkitappearance\",\n \"webkitbackfacevisibility\",\n \"webkitbackgroundclip\",\n \"webkitbackgroundorigin\",\n \"webkitbackgroundsize\",\n \"webkitborderafter\",\n \"webkitborderaftercolor\",\n \"webkitborderafterstyle\",\n \"webkitborderafterwidth\",\n \"webkitborderbefore\",\n \"webkitborderbeforecolor\",\n \"webkitborderbeforestyle\",\n \"webkitborderbeforewidth\",\n \"webkitborderbottomleftradius\",\n \"webkitborderbottomrightradius\",\n \"webkitborderend\",\n \"webkitborderendcolor\",\n \"webkitborderendstyle\",\n \"webkitborderendwidth\",\n \"webkitborderhorizontalspacing\",\n \"webkitborderimage\",\n \"webkitborderradius\",\n \"webkitborderstart\",\n \"webkitborderstartcolor\",\n \"webkitborderstartstyle\",\n \"webkitborderstartwidth\",\n \"webkitbordertopleftradius\",\n \"webkitbordertoprightradius\",\n \"webkitborderverticalspacing\",\n \"webkitboxalign\",\n \"webkitboxdecorationbreak\",\n \"webkitboxdirection\",\n \"webkitboxflex\",\n \"webkitboxordinalgroup\",\n \"webkitboxorient\",\n \"webkitboxpack\",\n \"webkitboxreflect\",\n \"webkitboxshadow\",\n \"webkitboxsizing\",\n \"webkitclippath\",\n \"webkitcolumnbreakafter\",\n \"webkitcolumnbreakbefore\",\n \"webkitcolumnbreakinside\",\n \"webkitcolumncount\",\n \"webkitcolumngap\",\n \"webkitcolumnrule\",\n \"webkitcolumnrulecolor\",\n \"webkitcolumnrulestyle\",\n \"webkitcolumnrulewidth\",\n \"webkitcolumnspan\",\n \"webkitcolumnwidth\",\n \"webkitcolumns\",\n \"webkitfilter\",\n \"webkitflex\",\n \"webkitflexbasis\",\n \"webkitflexdirection\",\n \"webkitflexflow\",\n \"webkitflexgrow\",\n \"webkitflexshrink\",\n \"webkitflexwrap\",\n \"webkitfontfeaturesettings\",\n \"webkitfontsmoothing\",\n \"webkithyphenatecharacter\",\n \"webkitjustifycontent\",\n \"webkitlinebreak\",\n \"webkitlineclamp\",\n \"webkitlocale\",\n \"webkitlogicalheight\",\n \"webkitlogicalwidth\",\n \"webkitmarginafter\",\n \"webkitmarginbefore\",\n \"webkitmarginend\",\n \"webkitmarginstart\",\n \"webkitmask\",\n \"webkitmaskboximage\",\n \"webkitmaskboximageoutset\",\n \"webkitmaskboximagerepeat\",\n \"webkitmaskboximageslice\",\n \"webkitmaskboximagesource\",\n \"webkitmaskboximagewidth\",\n \"webkitmaskclip\",\n \"webkitmaskcomposite\",\n \"webkitmaskimage\",\n \"webkitmaskorigin\",\n \"webkitmaskposition\",\n \"webkitmaskpositionx\",\n \"webkitmaskpositiony\",\n \"webkitmaskrepeat\",\n \"webkitmasksize\",\n \"webkitmaxlogicalheight\",\n \"webkitmaxlogicalwidth\",\n \"webkitminlogicalheight\",\n \"webkitminlogicalwidth\",\n \"webkitopacity\",\n \"webkitorder\",\n \"webkitpaddingafter\",\n \"webkitpaddingbefore\",\n \"webkitpaddingend\",\n \"webkitpaddingstart\",\n \"webkitperspective\",\n \"webkitperspectiveorigin\",\n \"webkitperspectiveoriginx\",\n \"webkitperspectiveoriginy\",\n \"webkitprintcoloradjust\",\n \"webkitrtlordering\",\n \"webkitrubyposition\",\n \"webkitshapeimagethreshold\",\n \"webkitshapemargin\",\n \"webkitshapeoutside\",\n \"webkittaphighlightcolor\",\n \"webkittextcombine\",\n \"webkittextdecorationsineffect\",\n \"webkittextemphasis\",\n \"webkittextemphasiscolor\",\n \"webkittextemphasisposition\",\n \"webkittextemphasisstyle\",\n \"webkittextfillcolor\",\n \"webkittextorientation\",\n \"webkittextsecurity\",\n \"webkittextsizeadjust\",\n \"webkittextstroke\",\n \"webkittextstrokecolor\",\n \"webkittextstrokewidth\",\n \"webkittransform\",\n \"webkittransformorigin\",\n \"webkittransformoriginx\",\n \"webkittransformoriginy\",\n \"webkittransformoriginz\",\n \"webkittransformstyle\",\n \"webkittransition\",\n \"webkittransitiondelay\",\n \"webkittransitionduration\",\n \"webkittransitionproperty\",\n \"webkittransitiontimingfunction\",\n \"webkituserdrag\",\n \"webkitusermodify\",\n \"webkituserselect\",\n \"webkitwritingmode\",\n \"whitespace\",\n \"whitespacecollapse\",\n \"widows\",\n \"width\",\n \"willchange\",\n \"wordbreak\",\n \"wordspacing\",\n \"wordwrap\",\n \"writingmode\",\n \"zindex\",\n \"zoom\",\n]);\n\nexport const cssPropsToExclude: Set<string> = new Set([\n \"position\",\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"width\",\n \"height\",\n \"minwidth\",\n \"minheight\",\n \"maxwidth\",\n \"maxheight\",\n \"margin\",\n \"margintop\",\n \"marginbottom\",\n \"marginleft\",\n \"marginright\",\n \"marginblock\",\n \"margininline\",\n \"marginblockstart\",\n \"marginblockend\",\n \"margininlinestart\",\n \"margininlineend\",\n \"margintrim\",\n \"zindex\",\n]);\n","import { forwardRef, memo } from \"react\";\nimport { useTheme } from \"react-better-core\";\n\nimport { ComponentMarginProps, ComponentPropWithRef } from \"../types/components\";\n\nimport Div from \"./Div\";\nimport Text from \"./Text\";\n\ntype DividerProps = {\n /** @default 1 */\n width?: number;\n /** @default border */\n backgroundColor?: string;\n} & ComponentMarginProps;\n\nexport type VerticalDividerProps = DividerProps & {\n /** @default \"100%\" */\n height?: number;\n};\n\nexport type HorizontalDividerProps = DividerProps & {\n text?: string;\n textFontSize?: React.CSSProperties[\"fontSize\"];\n /** @default textSecondary */\n textColor?: React.CSSProperties[\"color\"];\n};\n\ntype DividerComponentType = {\n vertical: (props: ComponentPropWithRef<HTMLDivElement, VerticalDividerProps>) => React.ReactElement;\n horizontal: (props: ComponentPropWithRef<HTMLDivElement, HorizontalDividerProps>) => React.ReactElement;\n};\n\nexport default {\n vertical: memo(\n forwardRef(function Divider(\n { width = 1, backgroundColor, height, ...props }: VerticalDividerProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n ) {\n const theme = useTheme();\n\n return (\n <Div\n width={width}\n height={height ?? \"100%\"}\n flexShrink={0}\n backgroundColor={backgroundColor ?? theme.colors.border}\n {...props}\n ref={ref}\n />\n );\n }),\n ) as DividerComponentType[\"vertical\"],\n horizontal: memo(\n forwardRef(function Divider(\n { width = 1, backgroundColor, text, textFontSize, textColor, ...props }: HorizontalDividerProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n ) {\n const theme = useTheme();\n\n return (\n <Div.row width=\"100%\" alignItems=\"center\" gap={text ? theme.styles.space : undefined} {...props} ref={ref}>\n <Div flex={1} height={width} flexShrink={0} backgroundColor={backgroundColor ?? theme.colors.border} />\n\n {text && (\n <Text fontSize={textFontSize} color={textColor ?? theme.colors.textSecondary}>\n {text}\n </Text>\n )}\n\n <Div flex={1} height={width} flexShrink={0} backgroundColor={backgroundColor ?? theme.colors.border} />\n </Div.row>\n );\n }),\n ) as DividerComponentType[\"horizontal\"],\n};\n","import { ComponentProps, forwardRef, memo } from \"react\";\nimport { OmitProps, useTheme } from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport { ComponentHoverStyle, ComponentPropWithRef, ComponentStyle } from \"../types/components\";\n\nimport { useComponentPropsGrouper, useComponentPropsWithPrefix } from \"../utils/hooks\";\n\nconst TextStyledComponent = styled.p.withConfig({\n shouldForwardProp: (prop) => ![\"style\", \"hoverStyle\"].includes(prop),\n})<{ style: ComponentStyle; hoverStyle: ComponentStyle }>`\n ${(props) => props.style as any}\n\n &:hover {\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nexport type TextAs = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"span\" | \"label\";\n\nexport type TextProps<As extends TextAs = \"p\"> = {\n /** @default \"p\" */\n as?: As;\n htmlContentTranslate?: React.ComponentProps<\"div\">[\"translate\"];\n} & OmitProps<React.ComponentProps<As>, \"style\"> &\n ComponentStyle &\n ComponentHoverStyle;\n\ntype TextComponentType = {\n <As extends TextAs>(props: ComponentPropWithRef<HTMLParagraphElement, TextProps<As>>): React.ReactElement;\n unknown: <As extends TextAs>(props: ComponentPropWithRef<HTMLParagraphElement, TextProps<As>>) => React.ReactElement;\n oneLine: <As extends TextAs>(props: ComponentPropWithRef<HTMLParagraphElement, TextProps<As>>) => React.ReactElement;\n};\n\nconst TextComponent: TextComponentType = forwardRef(function Text<As extends TextAs>(\n { htmlContentTranslate, children, ...props }: TextProps<As>,\n ref: React.ForwardedRef<HTMLParagraphElement>,\n) {\n const { style, hoverStyle, restProps } = useComponentPropsGrouper(props);\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n return (\n <TextStyledComponent\n as={props.as as any}\n translate={htmlContentTranslate}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n ref={ref}\n >\n {children}\n </TextStyledComponent>\n );\n}) as any;\n\nTextComponent.unknown = forwardRef(function Unknown(\n props: ComponentProps<TextComponentType[\"unknown\"]>,\n ref: React.ForwardedRef<HTMLParagraphElement>,\n) {\n const theme = useTheme();\n\n return (\n <TextComponent fontStyle=\"italic\" textAlign=\"center\" color={theme.colors.textSecondary} ref={ref} {...props} />\n );\n}) as TextComponentType[\"unknown\"];\n\nTextComponent.oneLine = forwardRef(function OneLine(\n props: ComponentProps<TextComponentType[\"oneLine\"]>,\n ref: React.ForwardedRef<HTMLParagraphElement>,\n) {\n return <TextComponent textOverflow=\"ellipsis\" whiteSpace=\"nowrap\" overflow=\"hidden\" ref={ref} {...props} />;\n}) as TextComponentType[\"oneLine\"];\n\nconst Text = memo(TextComponent) as any as typeof TextComponent & {\n unknown: typeof TextComponent.unknown;\n oneLine: typeof TextComponent.oneLine;\n};\n\nText.unknown = TextComponent.unknown;\nText.oneLine = TextComponent.oneLine;\n\nexport default Text;\n","import { forwardRef, memo } from \"react\";\nimport { AnyOtherString, AssetName, IconName, useTheme } from \"react-better-core\";\n\nimport { ComponentMarginProps, ComponentPropWithRef } from \"../types/components\";\n\nimport { useMediaQuery } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport Text, { TextAs } from \"./Text\";\nimport Image from \"./Image\";\nimport Icon from \"./Icon\";\nimport { useBetterHtmlContextInternal } from \"./BetterHtmlProvider\";\n\n//* Used in DIV.box\n\nexport type PageHeaderProps = {\n icon?: IconName | AnyOtherString;\n image?: AssetName | AnyOtherString;\n imageUrl?: string;\n imageSize?: number;\n /** @default false */\n imageAzProfileImage?: boolean;\n title?: string | React.ReactNode;\n /** @default \"h1\" */\n titleAs?: TextAs;\n /** @default textPrimary */\n titleColor?: React.CSSProperties[\"color\"];\n titleRightElement?: React.ReactNode;\n description?: string | React.ReactNode;\n /** @default textSecondary */\n descriptionColor?: React.CSSProperties[\"color\"];\n textAlign?: React.CSSProperties[\"textAlign\"];\n rightElement?: React.ReactNode;\n /** @default false */\n lightMode?: boolean;\n} & Pick<ComponentMarginProps, \"marginBottom\">;\n\ntype PageHeaderComponentType = {\n (props: ComponentPropWithRef<HTMLDivElement, PageHeaderProps>): React.ReactElement;\n};\n\nconst PageHeaderComponent: PageHeaderComponentType = forwardRef(function PageHeader(\n {\n icon,\n image,\n imageUrl,\n imageSize = 60,\n imageAzProfileImage,\n title,\n titleAs = \"h1\",\n titleColor,\n titleRightElement,\n description,\n descriptionColor,\n textAlign,\n rightElement,\n lightMode,\n marginBottom,\n }: PageHeaderProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const theme = useTheme();\n const { app } = useBetterHtmlContextInternal();\n const mediaQuery = useMediaQuery();\n\n const ImageTag = imageAzProfileImage ? Image.profileImage : Image;\n const readyImageSize = imageSize ?? (mediaQuery.size600 ? 46 : 60);\n\n return (\n <Div.row\n alignItems=\"center\"\n gap={theme.styles.space}\n marginBottom={marginBottom ?? theme.styles.space * 2}\n ref={ref}\n >\n {icon && <Icon name={icon} size={20} flexShrink={0} />}\n {(image || imageUrl) && (\n <ImageTag\n name={image}\n src={imageUrl}\n width={readyImageSize}\n height={readyImageSize}\n size={readyImageSize}\n flexShrink={0}\n />\n )}\n\n <Div.column\n alignItems={textAlign === \"center\" ? \"center\" : textAlign === \"right\" ? \"flex-end\" : undefined}\n flex={1}\n gap={theme.styles.gap / 2}\n >\n <Div.row\n alignItems=\"center\"\n justifyContent={textAlign === \"center\" ? \"center\" : textAlign === \"right\" ? \"flex-end\" : undefined}\n gap={theme.styles.space}\n >\n {typeof title === \"string\" ? (\n <Text\n as={titleAs}\n textAlign={textAlign}\n color={titleColor ?? (lightMode ? theme.colors.base : theme.colors.textPrimary)}\n >\n {title}\n </Text>\n ) : (\n title\n )}\n\n {titleRightElement}\n </Div.row>\n\n {description &&\n (typeof description === \"string\" ? (\n <Text\n maxWidth={!mediaQuery.size600 ? app.contentMaxWidth * 0.6 : undefined}\n textAlign={textAlign}\n color={descriptionColor ?? (lightMode ? theme.colors.base : theme.colors.textSecondary)}\n opacity={lightMode ? 0.7 : undefined}\n >\n {description}\n </Text>\n ) : (\n description\n ))}\n </Div.column>\n\n {rightElement}\n </Div.row>\n );\n}) as any;\n\nconst PageHeader = memo(PageHeaderComponent) as any as typeof PageHeaderComponent & {};\n\nexport default PageHeader;\n","import { forwardRef, memo, useEffect } from \"react\";\nimport { AnyOtherString, AssetName, OmitProps, useBetterCoreContext, useTheme } from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport { ComponentHoverStyle, ComponentPropWithRef, ComponentStyle } from \"../types/components\";\n\nimport { useComponentPropsGrouper, useComponentPropsWithPrefix } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport Text from \"./Text\";\n\nconst ImageElement = styled.img.withConfig({\n shouldForwardProp: (prop) => ![\"style\", \"hoverStyle\"].includes(prop),\n})<{ style: ComponentStyle; hoverStyle: ComponentStyle }>`\n display: block;\n user-select: none;\n -webkit-user-drag: none;\n\n ${(props) => props.style as any}\n\n &:hover {\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nexport type ImageProps = {\n name?: AssetName | AnyOtherString;\n} & OmitProps<React.ComponentProps<\"img\">, \"style\"> &\n ComponentStyle &\n ComponentHoverStyle;\n\ntype ImageComponent = {\n (props: ComponentPropWithRef<HTMLImageElement, ImageProps>): React.ReactElement;\n profileImage: (\n props: ComponentPropWithRef<\n HTMLImageElement,\n OmitProps<ImageProps, \"width\" | \"height\"> & {\n /** @default 40 */\n size?: number;\n letters?: string;\n backgroundColor?: string;\n }\n >,\n ) => React.ReactElement;\n};\n\nconst Image: ImageComponent = forwardRef(function Image(\n { name, src, ...props }: ImageProps,\n ref: React.ForwardedRef<HTMLImageElement>,\n) {\n const { assets } = useBetterCoreContext();\n\n const { style, hoverStyle, restProps } = useComponentPropsGrouper(props);\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n useEffect(() => {\n if (!name) return;\n\n if (!assets[name.toString()])\n console.warn(\n `The asset \\`${name}\\` you are trying to use does not exist. Make sure to add it to the \\`assets\\` object in \\`<BetterHtmlProvider>\\` config value prop.`,\n );\n }, [assets, name]);\n\n return (\n <ImageElement\n src={name ? assets[name.toString()] : src}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n ref={ref}\n />\n );\n}) as any;\n\nImage.profileImage = forwardRef(function ProfileImage({ size = 40, letters, backgroundColor, ...props }, ref) {\n const theme = useTheme();\n\n return letters ? (\n <Div.row\n backgroundColor={backgroundColor ?? theme.colors.backgroundSecondary}\n border={`solid 1px ${theme.colors.border}`}\n borderRadius={999}\n alignItems=\"center\"\n justifyContent=\"center\"\n ref={ref}\n {...props}\n width={size}\n height={size}\n >\n <Text fontSize={size / 2.5} fontWeight={700}>\n {letters.toUpperCase().slice(0, 2)}\n </Text>\n </Div.row>\n ) : (\n <Image\n width={size}\n height={size}\n border={`solid 1px ${theme.colors.border}`}\n borderRadius={999}\n objectFit=\"cover\"\n ref={ref}\n {...props}\n />\n );\n}) as ImageComponent[\"profileImage\"];\n\nconst MemoizedImage = memo(Image) as any as typeof Image & {\n profileImage: typeof Image.profileImage;\n};\n\nMemoizedImage.profileImage = Image.profileImage;\n\nexport default { Image: MemoizedImage }.Image;\n","import { forwardRef, memo, useEffect } from \"react\";\nimport { AnyOtherString, IconName, OmitProps, Theme, useBetterCoreContext, useTheme } from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport { ComponentHoverStyle, ComponentPropWithRef, ComponentStyle } from \"../types/components\";\n\nimport { useComponentPropsGrouper, useComponentPropsWithPrefix } from \"../utils/hooks\";\n\nexport type IconProps = {\n name: IconName | AnyOtherString;\n /** @default 16 */\n size?: number;\n} & OmitProps<React.ComponentProps<\"svg\">, \"style\" | \"width\" | \"height\" | \"viewBox\" | \"fill\" | \"xmlns\" | \"name\"> &\n ComponentStyle &\n ComponentHoverStyle;\n\ntype IconComponent = {\n (props: ComponentPropWithRef<SVGSVGElement, IconProps>): React.ReactElement;\n};\n\nconst IconElement = styled.svg.withConfig({\n shouldForwardProp: (prop) => ![\"theme\", \"style\", \"hoverStyle\", \"hoverColor\"].includes(prop),\n})<{ theme: Theme; style: ComponentStyle; hoverStyle: ComponentStyle; hoverColor?: string }>`\n ${(props) => props.style as any}\n\n path {\n ${(props) => (props.hoverColor ? `transition: ${props.theme.styles.transition};` : \"\")}\n }\n\n &:hover {\n path.react-better-html-icon-path-with-fill {\n fill: ${(props) => props.hoverColor};\n }\n\n path.react-better-html-icon-path-with-stroke {\n stroke: ${(props) => props.hoverColor};\n }\n }\n\n &:hover {\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nconst Icon: IconComponent = forwardRef(function Icon(\n { name, size = 16, ...props }: IconProps,\n ref: React.ForwardedRef<SVGSVGElement>,\n) {\n const theme = useTheme();\n const { icons } = useBetterCoreContext();\n\n const { style, hoverStyle, restProps } = useComponentPropsGrouper(props);\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n const svgColor = props.color ?? theme.colors.textPrimary;\n const svgHoverColorColor = props.colorHover;\n\n useEffect(() => {\n if (!icons[name.toString()])\n console.warn(\n `The icon \\`${name}\\` you are trying to use does not exist. Make sure to add it to the \\`icons\\` object in \\`<BetterHtmlProvider>\\` config value prop.`,\n );\n }, [icons, name]);\n\n return (\n <IconElement\n width={size}\n height={size}\n viewBox={`0 0 ${icons[name.toString()]?.width ?? 0} ${icons[name.toString()]?.height ?? 0}`}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n theme={theme}\n hoverColor={svgHoverColorColor}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n ref={ref}\n >\n {icons[name.toString()]?.paths.map((path) => (\n <path\n {...path}\n className={\n path.type === \"fill\"\n ? \"react-better-html-icon-path-with-fill\"\n : \"react-better-html-icon-path-with-stroke\"\n }\n fill={path.type === \"fill\" ? svgColor : undefined}\n stroke={path.type === \"stroke\" ? svgColor : undefined}\n key={path.d}\n />\n ))}\n </IconElement>\n );\n}) as any;\n\nconst MemoizedIcon = memo(Icon) as any as typeof Icon & {};\n\nexport default { Icon: MemoizedIcon }.Icon;\n","import { memo, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { ThemeConfig, useTheme } from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport { defaultAlertDuration } from \"../../constants/app\";\n\nimport { AlertDisplay, AlertDuration, Alert as AlertT, AlertType } from \"../../types/alert\";\n\nimport { AlertsPluginOptions, defaultAlertsPluginOptions } from \"../../plugins\";\n\nimport Div from \"../Div\";\nimport Icon from \"../Icon\";\nimport Text from \"../Text\";\nimport Button from \"../Button\";\nimport Modal, { ModalRef } from \"../Modal\";\nimport { useAlertControls, usePlugin } from \"../BetterHtmlProvider\";\n\nconst StyledDiv = styled.div.withConfig({\n shouldForwardProp: (prop) => ![\"theme\"].includes(prop),\n})<{ theme: ThemeConfig }>`\n @keyframes fadeInFromLeft {\n from {\n opacity: 0;\n transform: translateX(-${(props) => props.theme.styles.space}px);\n }\n to {\n opacity: 1;\n transform: translateX(0px);\n }\n }\n\n @keyframes fadeInFromRight {\n from {\n opacity: 0;\n transform: translateX(${(props) => props.theme.styles.space}px);\n }\n to {\n opacity: 1;\n transform: translateX(0px);\n }\n }\n\n @keyframes fadeInFromTop {\n from {\n opacity: 0;\n transform: translateY(-${(props) => props.theme.styles.space}px);\n }\n to {\n opacity: 1;\n transform: translateX(0px);\n }\n }\n\n @keyframes fadeInFromBottom {\n from {\n opacity: 0;\n transform: translateY(${(props) => props.theme.styles.space}px);\n }\n to {\n opacity: 1;\n transform: translateY(0px);\n }\n }\n\n @keyframes fadeOutToLeft {\n from {\n opacity: 1;\n transform: translateX(0px);\n }\n to {\n opacity: 0;\n transform: translateX(-${(props) => props.theme.styles.space}px);\n }\n }\n\n @keyframes fadeOutToRight {\n from {\n opacity: 1;\n transform: translateX(0px);\n }\n to {\n opacity: 0;\n transform: translateX(${(props) => props.theme.styles.space}px);\n }\n }\n\n @keyframes fadeOutToTop {\n from {\n opacity: 1;\n transform: translateY(0px);\n }\n to {\n opacity: 0;\n transform: translateY(-${(props) => props.theme.styles.space}px);\n }\n }\n\n @keyframes fadeOutToBottom {\n from {\n opacity: 1;\n transform: translateY(0px);\n }\n to {\n opacity: 0;\n transform: translateY(${(props) => props.theme.styles.space}px);\n }\n }\n`;\n\nconst minWidth = 250;\nconst updateInterval = 20;\n\nconst getAnimationInName = (\n position: AlertsPluginOptions[\"position\"],\n): Record<NonNullable<AlertsPluginOptions[\"align\"]>, string> => ({\n left: \"fadeInFromLeft\",\n right: \"fadeInFromRight\",\n center: position === \"top\" ? \"fadeInFromTop\" : \"fadeInFromBottom\",\n});\n\nconst getAnimationOutName = (\n position: AlertsPluginOptions[\"position\"],\n): Record<NonNullable<AlertsPluginOptions[\"align\"]>, string> => ({\n left: \"fadeOutToLeft\",\n right: \"fadeOutToRight\",\n center: position === \"top\" ? \"fadeOutToTop\" : \"fadeOutToBottom\",\n});\n\nconst getAlertDurationFromAuto = (duration: AlertDuration, alert: AlertT): number => {\n if (duration === \"auto\") {\n const titleLength: number = alert.title?.length ?? 0;\n const messageLength: number = alert.message?.length ?? 0;\n\n return Math.max(defaultAlertDuration, (titleLength + messageLength) * 30);\n }\n\n return duration;\n};\n\ntype AlertData = {\n icon: string;\n iconColor?: string;\n backgroundColor: string;\n title: string;\n};\n\ntype AlertProps = {\n alert: AlertT;\n};\n\nfunction Alert({ alert }: AlertProps) {\n const theme = useTheme();\n const alertControls = useAlertControls();\n const alertsPlugin = usePlugin<AlertsPluginOptions>(\"alerts\");\n\n const pluginConfig = alertsPlugin?.getConfig() ?? {};\n\n const modalRef = useRef<ModalRef>(null);\n\n const defaultAlertDurationNumber: number = getAlertDurationFromAuto(\n alert.duration ?? pluginConfig.defaultDuration ?? defaultAlertsPluginOptions.defaultDuration,\n alert,\n );\n const defaultAlertDisplay: AlertDisplay =\n alert.display ??\n pluginConfig.defaultDisplay?.[alert.type] ??\n defaultAlertsPluginOptions.defaultDisplay[alert.type] ??\n \"default\";\n\n const intervalRef = useRef<number>(undefined);\n const startTimeRef = useRef<number>(Date.now());\n const remainingTimeRef = useRef<number>(defaultAlertDurationNumber);\n const calledOnCloseRef = useRef<boolean>(false);\n\n const [isPaused, setIsPaused] = useState<boolean>(false);\n const [progress, setProgress] = useState<number>(100);\n const [isRemoved, setIsRemoved] = useState<boolean>(false);\n\n const startProgressTimer = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n }\n\n const totalDuration = remainingTimeRef.current;\n\n const segmentStartTime = Date.now();\n\n intervalRef.current = setInterval(() => {\n const elapsedTime = Date.now() - segmentStartTime;\n const newProgress = Math.max(0, progress - (elapsedTime / totalDuration) * 100);\n\n setProgress(newProgress);\n\n if (newProgress <= 0) {\n if (intervalRef.current) clearInterval(intervalRef.current);\n\n if (defaultAlertDisplay === \"prominent\") return;\n\n setIsRemoved(true);\n\n setTimeout(() => {\n alertControls.removeAlert(alert.id);\n\n if (!calledOnCloseRef.current) {\n alert.onClose?.(alert);\n calledOnCloseRef.current = true;\n }\n }, 0.2 * 1000 - 10);\n }\n }, updateInterval);\n }, [alert, progress, defaultAlertDisplay]);\n const onClickCloseAlert = useCallback(() => {\n setIsRemoved(true);\n\n setTimeout(() => {\n alertControls.removeAlert(alert.id);\n\n if (!calledOnCloseRef.current) {\n alert.onClose?.(alert);\n calledOnCloseRef.current = true;\n }\n }, 0.2 * 1000 - 10);\n }, [alert]);\n const onMouseEnter = useCallback(() => {\n setIsPaused(true);\n\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = undefined;\n }\n\n remainingTimeRef.current = defaultAlertDurationNumber * (progress / 100);\n }, [defaultAlertDurationNumber, progress]);\n const onMouseLeave = useCallback(() => {\n setIsPaused(false);\n startProgressTimer();\n }, [startProgressTimer]);\n const onClickAlertModalDone = useCallback(() => {\n setIsRemoved(true);\n modalRef.current?.close();\n\n setTimeout(() => {\n alertControls.removeAlert(alert.id);\n\n if (!calledOnCloseRef.current) {\n alert.onClose?.(alert);\n calledOnCloseRef.current = true;\n }\n }, 0.2 * 1000 - 10);\n }, [alert]);\n\n const alertData = useMemo<Record<AlertType, AlertData>>(\n () => ({\n info: {\n icon: \"infoI\",\n backgroundColor: theme.colors.info,\n title: \"Info\",\n },\n success: {\n icon: \"check\",\n backgroundColor: theme.colors.success,\n title: \"Success\",\n },\n warning: {\n icon: \"warningTriangle\",\n backgroundColor: theme.colors.warn,\n title: \"Warning\",\n },\n error: {\n icon: \"XMark\",\n backgroundColor: theme.colors.error,\n title: \"Error\",\n },\n }),\n [theme],\n );\n\n useEffect(() => {\n startTimeRef.current = Date.now();\n remainingTimeRef.current = defaultAlertDurationNumber;\n startProgressTimer();\n\n return () => {\n if (intervalRef.current) clearInterval(intervalRef.current);\n };\n }, [defaultAlertDurationNumber, startProgressTimer]);\n\n const animation = `${\n isRemoved\n ? getAnimationOutName(pluginConfig.position ?? defaultAlertsPluginOptions.position)[\n pluginConfig.align ?? defaultAlertsPluginOptions.align\n ]\n : getAnimationInName(pluginConfig.position ?? defaultAlertsPluginOptions.position)[\n pluginConfig.align ?? defaultAlertsPluginOptions.align\n ]\n } ${theme.styles.transition}`;\n\n const alertTitle = alert.title ?? alertData[alert.type].title;\n\n return defaultAlertDisplay === \"prominent\" ? (\n <Modal\n defaultIsOpened\n icon={alertData[alert.type].icon}\n title={alertTitle}\n description={alert.message}\n titleColor={theme.colors.base}\n descriptionColor={theme.colors.base + \"a0\"}\n headerTextAlign=\"center\"\n headerBackgroundColor={alertData[alert.type].backgroundColor}\n withoutCloseButton\n ref={modalRef}\n >\n <Div.row width=\"100%\" alignItems=\"center\" justifyContent=\"center\">\n <Button\n text=\"Close\"\n backgroundColor={alertData[alert.type].backgroundColor}\n onClick={onClickAlertModalDone}\n />\n </Div.row>\n </Modal>\n ) : (\n <StyledDiv theme={theme}>\n <Div.box\n width=\"fit-content\"\n maxWidth={Math.max(minWidth, pluginConfig.maxWidth ?? defaultAlertsPluginOptions.maxWidth)}\n minWidth={minWidth}\n boxShadow=\"0px 10px 20px #00000020\"\n onMouseEnter={onMouseEnter}\n onMouseMove={onMouseEnter}\n onMouseLeave={onMouseLeave}\n animation={animation}\n >\n <Div.column gap={theme.styles.space}>\n <Div.row alignItems=\"center\" gap={theme.styles.gap}>\n <Div.row\n width={36}\n height={36}\n alignItems=\"center\"\n justifyContent=\"center\"\n backgroundColor={alertData[alert.type].backgroundColor}\n borderRadius={999}\n marginTop={theme.styles.gap / 2}\n >\n <Icon\n name={alertData[alert.type].icon}\n size={18}\n color={alertData[alert.type].iconColor ?? theme.colors.base}\n />\n </Div.row>\n\n <Div.column flex={1} gap={theme.styles.gap / 2}>\n <Text fontSize={18} fontWeight={700}>\n {alertTitle}\n </Text>\n\n <Text color={theme.colors.textSecondary}>{alert.message}</Text>\n </Div.column>\n\n {pluginConfig.withCloseButton && (\n <Button.icon icon=\"XMark\" alignSelf=\"flex-start\" onClick={onClickCloseAlert} />\n )}\n </Div.row>\n\n {pluginConfig.withLoaderBar && (\n <Div\n width=\"100%\"\n height={5}\n backgroundColor={theme.colors.backgroundBase}\n borderRadius={999}\n overflow=\"hidden\"\n >\n <Div\n width={`${progress}%`}\n height=\"100%\"\n backgroundColor={alertData[alert.type].backgroundColor}\n borderRadius={999}\n transition={isPaused ? \"none\" : \"width 0.02s linear\"}\n />\n </Div>\n )}\n </Div.column>\n </Div.box>\n </StyledDiv>\n );\n}\n\nexport default memo(Alert);\n","import { PartialRecord } from \"react-better-core\";\n\nimport { AlertDisplay, AlertDuration, AlertType } from \"../types/alert\";\nimport { BetterHtmlPluginConstructor } from \"../types/plugin\";\n\nexport type AlertsPluginOptions = {\n /** @default \"bottom\" */\n position?: \"top\" | \"bottom\";\n /** @default \"right\" */\n align?: \"left\" | \"center\" | \"right\";\n /** @default \"auto\" */\n defaultDuration?: AlertDuration;\n defaultDisplay?: PartialRecord<AlertType, AlertDisplay>;\n /** @default 460 */\n maxWidth?: number;\n /** @default true */\n withLoaderBar?: boolean;\n /** @default true */\n withCloseButton?: boolean;\n};\n\nexport const defaultAlertsPluginOptions: Required<AlertsPluginOptions> = {\n position: \"bottom\",\n align: \"right\",\n defaultDuration: \"auto\",\n defaultDisplay: {},\n maxWidth: 460,\n withLoaderBar: true,\n withCloseButton: true,\n};\n\nexport const alertsPlugin: BetterHtmlPluginConstructor<AlertsPluginOptions> = (options) => ({\n name: \"alerts\",\n initialize: () => {\n console.log(\"alerts plugin initialized\");\n },\n getConfig: () => ({\n ...defaultAlertsPluginOptions,\n ...options,\n }),\n});\n","import { createSearchParams, useInRouterContext, useLocation, useNavigate, useSearchParams } from \"react-router-dom\";\n\nimport { BetterHtmlPluginConstructor } from \"../types/plugin\";\n\nexport type ReactRouterDomPluginOptions = {\n useNavigate: typeof useNavigate;\n useLocation: typeof useLocation;\n useInRouterContext: typeof useInRouterContext;\n useSearchParams: typeof useSearchParams;\n createSearchParams: typeof createSearchParams;\n};\n\nexport const defaultReactRouterDomPluginOptions: Required<ReactRouterDomPluginOptions> = {\n useNavigate,\n useLocation,\n useInRouterContext,\n useSearchParams,\n createSearchParams,\n};\n\nexport const reactRouterDomPlugin: BetterHtmlPluginConstructor<ReactRouterDomPluginOptions> = (options) => ({\n name: \"react-router-dom\",\n initialize: () => {\n console.log(\"react-router-dom plugin initialized\");\n },\n getConfig: () => ({\n ...defaultReactRouterDomPluginOptions,\n ...options,\n }),\n});\n","import { BetterHtmlPluginConstructor } from \"../types/plugin\";\n\nexport type LocalStoragePluginOptions = {\n encryption?:\n | {\n /** @default false */\n enabled?: false;\n }\n | {\n /** @default false */\n enabled?: true;\n secretKey: string;\n iv: string;\n };\n};\n\nexport const defaultLocalStoragePluginOptions: Required<LocalStoragePluginOptions> = {\n encryption: {},\n};\n\nexport const localStoragePlugin: BetterHtmlPluginConstructor<LocalStoragePluginOptions> = (options) => ({\n name: \"localStorage\",\n initialize: () => {\n console.log(\"localStorage plugin initialized\");\n },\n getConfig: () => ({\n ...defaultLocalStoragePluginOptions,\n ...options,\n }),\n});\n","import { ComponentProps, memo, useCallback } from \"react\";\nimport {\n AnyOtherString,\n AssetName,\n Color,\n ColorTheme,\n IconName,\n LoaderName,\n OmitProps,\n Theme,\n useBetterCoreContext,\n useLoader,\n useTheme,\n} from \"react-better-core\";\nimport styled, { css } from \"styled-components\";\n\nimport { ComponentHoverStyle, ComponentStyle } from \"../types/components\";\n\nimport { useComponentPropsGrouper, useComponentPropsWithPrefix } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport Icon from \"./Icon\";\nimport Loader from \"./Loader\";\nimport Image from \"./Image\";\nimport { useBetterHtmlContextInternal } from \"./BetterHtmlProvider\";\n\nconst ButtonElement = styled.button.withConfig({\n shouldForwardProp: (prop) =>\n ![\"theme\", \"colorTheme\", \"style\", \"hoverStyle\", \"isSmall\", \"withText\", \"isLoading\"].includes(prop),\n})<{\n theme: Theme;\n colorTheme: ColorTheme;\n style: ComponentStyle;\n hoverStyle: ComponentStyle;\n isSmall?: boolean;\n withText?: boolean;\n disabled?: boolean;\n isLoading?: boolean;\n}>`\n display: block;\n position: relative;\n width: fit-content;\n min-width: max-content;\n font-family: ${(props) => props.theme.styles.fontFamily};\n font-size: 16px;\n line-height: 20px;\n text-decoration: none;\n color: ${(props) => props.theme.colors.base};\n background-color: ${(props) => props.theme.colors.primary};\n border: none;\n border-radius: ${(props) => props.theme.styles.borderRadius}px;\n padding: ${(props) =>\n props.isSmall\n ? `${props.theme.styles.gap + 1}px ${props.theme.styles.space}px`\n : `${(props.theme.styles.gap + props.theme.styles.space) / 2 + 1}px ${\n props.theme.styles.space + (props.withText ? props.theme.styles.gap : 0)\n }px`};\n user-select: none;\n flex-shrink: 0;\n transition: ${(props) => props.theme.styles.transition};\n\n ${(props) =>\n props.disabled\n ? css`\n opacity: 0.6;\n cursor: not-allowed;\n `\n : !props.isLoading\n ? css`\n cursor: pointer;\n\n &:not(.secondary):hover {\n filter: ${props.colorTheme === \"dark\" ? \"brightness(1.2)\" : \"brightness(0.9)\"};\n }\n\n &.secondary:hover {\n border-color: ${props.theme.colors.primary};\n }\n `\n : \"\"}\n\n &.secondary {\n padding-block: ${(props) =>\n props.isSmall ? props.theme.styles.gap : (props.theme.styles.space + props.theme.styles.gap) / 2}px;\n border: solid 1px ${(props) => props.theme.colors.border};\n background-color: ${(props) => props.theme.colors.backgroundContent};\n background-image: none;\n\n ${(props) => props.style as any}\n }\n\n ${(props) => props.style as any}\n\n &:hover {\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nexport type ButtonProps<Value> = {\n text?: string;\n value?: Value;\n\n href?: string;\n download?: string;\n target?: React.ComponentProps<\"a\">[\"target\"];\n\n icon?: IconName | AnyOtherString;\n /** @default \"left\" */\n iconPosition?: \"left\" | \"right\";\n /** @default Same as text color */\n iconColor?: string;\n /** @default 16 */\n iconSize?: number;\n\n image?: AssetName | AnyOtherString;\n /** @default \"left\" */\n imagePosition?: \"left\" | \"right\";\n /** @default 16 */\n imageWidth?: number;\n /** @default undefined */\n imageHeight?: number;\n\n loaderName?: LoaderName | AnyOtherString;\n /** @default 16 */\n loaderSize?: number;\n /** @default false */\n isLoading?: boolean;\n\n /** @default false */\n disabled?: boolean;\n /** @default false */\n isSmall?: boolean;\n /** @default false */\n isSubmit?: boolean;\n\n onClickWithValue?: (value: Value) => void;\n} & OmitProps<React.ComponentProps<\"button\">, \"style\" | \"defaultValue\" | \"translate\" | \"value\"> &\n ComponentStyle &\n ComponentHoverStyle;\n\ntype ButtonComponent = {\n <Value>(props: ButtonProps<Value>): React.ReactElement;\n secondary: <Value>(props: ButtonProps<Value>) => React.ReactElement;\n destructive: <Value>(props: ButtonProps<Value>) => React.ReactElement;\n icon: <Value>(\n props: OmitProps<ButtonProps<Value>, \"icon\" | \"width\" | \"height\" | \"isSmall\"> & {\n icon: IconName | AnyOtherString;\n /** @default 16 */\n size?: number;\n buttonSize?: number;\n /** @default \"#000000\" */\n backgroundButtonColor?: string;\n },\n ) => React.ReactElement;\n upload: <Value>(\n props: OmitProps<ButtonProps<Value>, \"onClick\"> & {\n accept?: ComponentProps<\"input\">[\"accept\"];\n /** @default false */\n multiple?: boolean;\n onUpload?: (files: FileList | null) => void;\n },\n ) => React.ReactElement;\n};\n\nconst ButtonComponent: ButtonComponent = function Button<Value>({\n href,\n text,\n value,\n download,\n target,\n\n icon,\n iconPosition = \"left\",\n iconColor,\n iconSize,\n\n image,\n imagePosition = \"left\",\n imageWidth,\n imageHeight,\n\n loaderName,\n loaderSize,\n isLoading,\n\n disabled,\n isSmall,\n isSubmit,\n\n onClick,\n onClickWithValue,\n ...props\n}: ButtonProps<Value>) {\n const theme = useTheme();\n const isLoadingHook = useLoader(loaderName);\n const { components } = useBetterHtmlContextInternal();\n const { colorTheme } = useBetterCoreContext();\n\n const isLoadingElement = isLoading || isLoadingHook;\n\n const { style, hoverStyle, restProps } = useComponentPropsGrouper({\n ...components.button?.style?.default,\n ...props,\n });\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n const onClickElement = useCallback(\n (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n onClick?.(event);\n onClickWithValue?.(value as any);\n },\n [onClick, onClickWithValue, value],\n );\n\n const iconComponent = icon ? (\n <Div.row\n height={iconSize ?? parseInt(style.fontSize?.toString() ?? \"16\")}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <Icon\n name={icon}\n color={iconColor ?? props.color ?? theme.colors.base}\n size={iconSize ?? parseInt(style.fontSize?.toString() ?? \"16\")}\n />\n </Div.row>\n ) : undefined;\n const imageComponent = image ? (\n <Image\n name={image}\n color={iconColor ?? props.color ?? theme.colors.base}\n width={imageWidth ?? parseInt(style.fontSize?.toString() ?? \"16\")}\n height={imageHeight}\n />\n ) : undefined;\n\n const linkComponentTag = components.button?.tagReplacement?.linkComponent ?? \"a\";\n const buttonComponentTag = components.button?.tagReplacement?.buttonComponent ?? \"button\";\n\n return (\n <ButtonElement\n as={(href ? linkComponentTag : buttonComponentTag) as any}\n theme={theme}\n colorTheme={colorTheme}\n isSmall={isSmall}\n withText={text !== undefined}\n isLoading={isLoadingElement}\n disabled={disabled}\n to={href}\n href={href}\n download={download}\n target={target}\n type={isSubmit && !isLoadingElement ? \"submit\" : \"button\"}\n onClick={!disabled && !isLoadingElement ? onClickElement : undefined}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n >\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={10}\n pointerEvents=\"none\"\n opacity={isLoadingElement ? 0 : 1}\n transition={theme.styles.transition}\n >\n {iconPosition === \"left\" && iconComponent}\n {imagePosition === \"left\" && imageComponent}\n\n {text}\n\n {iconPosition === \"right\" && iconComponent}\n {imagePosition === \"right\" && imageComponent}\n </Div.row>\n\n <Div.row\n position=\"absolute\"\n width=\"100%\"\n height=\"100%\"\n top={0}\n left={0}\n pointerEvents=\"none\"\n alignItems=\"center\"\n justifyContent=\"center\"\n opacity={isLoadingElement ? 1 : 0}\n transition={theme.styles.transition}\n >\n <Loader\n color={(props.color as Color) ?? theme.colors.base}\n size={loaderSize}\n disabled={!isLoadingElement}\n />\n </Div.row>\n </ButtonElement>\n );\n} as any;\n\nButtonComponent.secondary = function Secondary({ className, ...props }) {\n const theme = useTheme();\n const betterHtmlContext = useBetterHtmlContextInternal();\n\n return (\n <ButtonComponent\n {...betterHtmlContext.components.button?.style?.secondary}\n className={`secondary${className ? ` ${className}` : \"\"}`}\n color={theme.colors.textPrimary}\n {...props}\n />\n );\n} as ButtonComponent[\"secondary\"];\n\nButtonComponent.destructive = function Destructive(props) {\n const theme = useTheme();\n const betterHtmlContext = useBetterHtmlContextInternal();\n\n return (\n <ButtonComponent\n {...betterHtmlContext.components.button?.style?.destructive}\n backgroundColor={theme.colors.error}\n color={theme.colors.base}\n {...props}\n />\n );\n} as ButtonComponent[\"destructive\"];\n\nButtonComponent.icon = function Icon({ size = 16, buttonSize, backgroundButtonColor, ...props }) {\n const theme = useTheme();\n const betterHtmlContext = useBetterHtmlContextInternal();\n\n const readyButtonSize = buttonSize ?? size + theme.styles.space;\n const backgroundButtonColorReady = backgroundButtonColor ?? theme.colors.textPrimary;\n\n return (\n <ButtonComponent\n {...betterHtmlContext.components.button?.style?.icon}\n width={readyButtonSize}\n height={readyButtonSize}\n color={theme.colors.textPrimary}\n backgroundColor={backgroundButtonColorReady + \"00\"}\n backgroundImage=\"none\"\n backgroundColorHover={backgroundButtonColorReady + \"20\"}\n borderRadius={999}\n iconSize={size}\n loaderSize={12}\n border=\"none\"\n padding={0}\n filterHover=\"none !important\"\n {...props}\n />\n );\n} as ButtonComponent[\"icon\"];\n\nButtonComponent.upload = function Upload({ accept, multiple, onUpload, ...props }) {\n const betterHtmlContext = useBetterHtmlContextInternal();\n\n const onClickElement = useCallback(() => {\n const input = document.createElement(\"input\");\n input.setAttribute(\"type\", \"file\");\n if (accept) input.setAttribute(\"accept\", accept);\n if (multiple) input.setAttribute(\"multiple\", \"true\");\n\n input.addEventListener(\"change\", () => {\n onUpload?.(input.files);\n });\n\n input.click();\n }, [accept]);\n\n return (\n <ButtonComponent\n {...betterHtmlContext.components.button?.style?.upload}\n text=\"Upload\"\n icon=\"uploadCloud\"\n onClick={onClickElement}\n {...props}\n />\n );\n} as ButtonComponent[\"upload\"];\n\nconst Button = memo(ButtonComponent) as any as typeof ButtonComponent & {\n secondary: typeof ButtonComponent.secondary;\n destructive: typeof ButtonComponent.destructive;\n icon: typeof ButtonComponent.icon;\n upload: typeof ButtonComponent.upload;\n};\n\nButton.secondary = ButtonComponent.secondary;\nButton.destructive = ButtonComponent.destructive;\nButton.icon = ButtonComponent.icon;\nButton.upload = ButtonComponent.upload;\n\nexport default Button;\n","import { memo } from \"react\";\nimport { Color, OmitProps, useTheme } from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport Div, { DivProps } from \"./Div\";\nimport Text from \"./Text\";\n\nconst StyledDiv = styled.div`\n @keyframes loaderAnimation {\n to {\n transform: rotate(360deg);\n }\n }\n\n @keyframes textLoaderAnimation {\n to {\n clip-path: inset(0 -1ch 0 0);\n }\n }\n`;\n\nexport type LoaderProps = {\n /** @default textPrimary */\n color?: Color;\n /** @default 16 */\n size?: number;\n /** @default 5 */\n width?: number;\n /** @default false */\n disabled?: boolean;\n} & OmitProps<\n DivProps,\n | \"children\"\n | \"width\"\n | \"height\"\n | \"color\"\n | \"background\"\n | \"borderRadius\"\n | \"mask\"\n | \"WebkitMask\"\n | \"padding\"\n | \"animation\"\n | \"animationName\"\n | \"transform\"\n | \"clipPath\"\n>;\n\ntype LoaderComponentType = {\n (props: LoaderProps): React.ReactElement;\n box: (\n props: OmitProps<LoaderProps, \"size\"> & {\n /** @default \"Loading...\" */\n text?: string;\n /** @default 20 */\n size?: number;\n },\n ) => React.ReactElement;\n text: (\n props: OmitProps<LoaderProps, \"size\"> & {\n /** @default \"Loading...\" */\n text?: string;\n /** @default 14 */\n size?: number;\n },\n ) => React.ReactElement;\n};\n\nconst LoaderComponent: LoaderComponentType = function Loader({\n color,\n size = 16,\n width,\n disabled,\n ...props\n}: LoaderProps) {\n const theme = useTheme();\n\n const readyColor: Color = color ?? theme.colors.textPrimary;\n const readyWidth: number = width ?? size / 3;\n const mask: React.CSSProperties[\"mask\"] = `radial-gradient(farthest-side, #0000 calc(100% - ${readyWidth}px), #000 0)`;\n\n return (\n <StyledDiv>\n <Div\n width={size + readyWidth * 2}\n height={size + readyWidth * 2}\n background={`radial-gradient(farthest-side, ${readyColor} 94%, #0000) top/${readyWidth}px ${readyWidth}px no-repeat, conic-gradient(#0000 30%, ${readyColor})`}\n borderRadius={999}\n mask={mask}\n WebkitMask={mask}\n padding={readyWidth}\n animation={!disabled ? \"loaderAnimation .6s infinite linear\" : undefined}\n {...props}\n />\n </StyledDiv>\n );\n} as any;\n\nLoaderComponent.box = function Box({ text = \"Loading...\", size = 20, ...props }) {\n const theme = useTheme();\n\n return (\n <Div.column width=\"100%\" alignItems=\"center\" gap={theme.styles.gap}>\n <Loader size={size} {...props} />\n\n {text && (\n <Text textAlign=\"center\" color={props.color ?? theme.colors.textSecondary}>\n {text}\n </Text>\n )}\n </Div.column>\n );\n} as LoaderComponentType[\"box\"];\n\nLoaderComponent.text = function LoaderText({ text = \"Loading...\", size = 14, ...props }) {\n const theme = useTheme();\n\n return (\n <Div.row alignItems=\"center\" gap={theme.styles.gap}>\n <Loader size={size} {...props} />\n\n {text && (\n <Text textAlign=\"center\" color={props.color ?? theme.colors.textSecondary}>\n {text}\n </Text>\n )}\n </Div.row>\n );\n} as LoaderComponentType[\"text\"];\n\nconst Loader = memo(LoaderComponent) as any as typeof LoaderComponent & {\n box: typeof LoaderComponent.box;\n text: typeof LoaderComponent.text;\n};\n\nLoader.box = LoaderComponent.box;\nLoader.text = LoaderComponent.text;\n\nexport default Loader;\n","import { memo, useCallback, forwardRef, useImperativeHandle, useRef, useState, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n AnyOtherString,\n ColorTheme,\n IconName,\n LoaderName,\n OmitProps,\n PickValue,\n Theme,\n useBetterCoreContext,\n useBooleanState,\n useTheme,\n} from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport { ComponentPropWithRef } from \"../types/components\";\n\nimport { useUrlQuery } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport Button from \"./Button\";\nimport Text from \"./Text\";\nimport Divider from \"./Divider\";\nimport Icon from \"./Icon\";\nimport { useBetterHtmlContextInternal, usePlugin } from \"./BetterHtmlProvider\";\n\nconst DialogStylesElement = styled.dialog.withConfig({\n shouldForwardProp: (prop) => ![\"theme\", \"colorTheme\", \"opacity\"].includes(prop),\n})<{ theme: Theme; colorTheme: ColorTheme; opacity?: number }>`\n width: 100%;\n max-width: none;\n height: 100%;\n max-height: none;\n color: ${(props) => props.theme.colors.textPrimary};\n border: none;\n outline: none;\n background-color: transparent;\n margin: auto auto;\n padding-inline: ${(props) => props.theme.styles.gap}px;\n opacity: ${(props) => props.opacity};\n transition: ${(props) => props.theme.styles.transition};\n\n &::backdrop {\n background-color: ${(props) => (props.colorTheme === \"light\" ? \"#000000a0\" : \"#222222e0\")};\n opacity: ${(props) => props.opacity};\n transition: ${(props) => props.theme.styles.transition};\n }\n\n @keyframes fadeInAnimation {\n from {\n transform: translateY(${(props) => props.theme.styles.space}px);\n }\n to {\n transform: translateY(0px);\n }\n }\n\n @keyframes fadeOutAnimation {\n from {\n transform: translateY(0px);\n }\n to {\n transform: translateY(${(props) => props.theme.styles.space}px);\n }\n }\n`;\n\nexport type ModalProps = {\n /**\n * If you want to have a small modal, you can use 660px as it looks good on most screens.\n *\n * @default 30% smaller than app.contentMaxWidth\n * */\n maxWidth?: number;\n icon?: IconName | AnyOtherString;\n title?: string;\n titleColor?: React.CSSProperties[\"color\"];\n description?: string;\n descriptionColor?: React.CSSProperties[\"color\"];\n headerTextAlign?: PickValue<NonNullable<React.CSSProperties[\"textAlign\"]>, \"left\" | \"center\">;\n headerBackgroundColor?: React.CSSProperties[\"backgroundColor\"];\n backgroundColor?: React.CSSProperties[\"backgroundColor\"];\n /** @requires ReactRouterDomPlugin */\n name?: string;\n overflow?: React.CSSProperties[\"overflow\"];\n withoutCloseButton?: boolean;\n /** @default false */\n defaultIsOpened?: boolean;\n onOpen?: () => void;\n onClose?: () => void;\n children?: React.ReactNode;\n};\n\nexport type ModalRef = {\n isOpened: boolean;\n open: () => void;\n close: () => void;\n};\n\ntype ModalComponent = {\n (props: ComponentPropWithRef<ModalRef, ModalProps>): React.ReactElement;\n confirmation: (\n props: ComponentPropWithRef<\n ModalRef,\n OmitProps<ModalProps, \"maxWidth\" | \"children\" | \"overflow\"> & {\n message?: string;\n /** @default \"Continue\" */\n continueButtonText?: string;\n continueButtonLoaderName?: LoaderName | AnyOtherString;\n onContinue?: () => void;\n onCancel?: () => void;\n }\n >,\n ) => React.ReactElement;\n destructive: (\n props: ComponentPropWithRef<\n ModalRef,\n OmitProps<ModalProps, \"maxWidth\" | \"children\" | \"overflow\"> & {\n message?: string;\n /** @default \"Delete\" */\n deleteButtonText?: string;\n /** @default \"trash\" */\n deleteButtonIconName?: IconName | AnyOtherString;\n deleteButtonLoaderName?: LoaderName | AnyOtherString;\n onDelete?: () => void;\n onCancel?: () => void;\n }\n >,\n ) => React.ReactElement;\n};\n\nconst ModalComponent: ModalComponent = forwardRef(function Modal(\n {\n maxWidth,\n icon,\n title,\n titleColor,\n description,\n descriptionColor,\n headerTextAlign,\n headerBackgroundColor,\n backgroundColor,\n name,\n overflow,\n withoutCloseButton,\n defaultIsOpened = false,\n onOpen,\n onClose,\n children,\n }: ModalProps,\n ref: React.ForwardedRef<ModalRef>,\n) {\n const reactRouterDomPlugin = usePlugin(\"react-router-dom\");\n const urlQuery = reactRouterDomPlugin ? useUrlQuery() : undefined;\n\n const theme = useTheme();\n const { app } = useBetterHtmlContextInternal();\n const { colorTheme } = useBetterCoreContext();\n\n const dialogRef = useRef<HTMLDialogElement>(null);\n\n const [isOpened, setIsOpened] = useBooleanState(false);\n const [isOpenedLate, setIsOpenedLate] = useBooleanState(false);\n\n const onClickOpen = useCallback(() => {\n dialogRef.current?.showModal();\n\n setIsOpened.setTrue();\n setIsOpenedLate.setTrue();\n\n if (urlQuery && name) {\n urlQuery.setQuery(\n {\n [`${name}-modal`]: \"opened\",\n },\n false,\n );\n }\n\n onOpen?.();\n }, [onOpen, urlQuery, name]);\n const onClickClose = useCallback(() => {\n setIsOpened.setFalse();\n onClose?.();\n\n if (urlQuery && name) urlQuery.removeQuery(`${name}-modal`, false);\n\n setTimeout(() => {\n dialogRef.current?.close();\n setIsOpenedLate.setFalse();\n }, 0.2 * 1000);\n }, [onClose, urlQuery, name]);\n const onKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDialogElement>) => {\n if (event.key === \"Escape\") {\n if (!withoutCloseButton) return;\n\n event.preventDefault();\n }\n },\n [withoutCloseButton],\n );\n\n useEffect(() => {\n if (!defaultIsOpened) return;\n\n onClickOpen();\n }, []);\n\n useImperativeHandle(\n ref,\n (): ModalRef => {\n return {\n open: onClickOpen,\n close: onClickClose,\n isOpened,\n };\n },\n [onClickOpen, onClickClose, isOpened],\n );\n\n const headerVertical = headerTextAlign === \"center\";\n\n return createPortal(\n <DialogStylesElement\n theme={theme}\n colorTheme={colorTheme}\n opacity={!isOpened ? 0 : 1}\n onClose={onClickClose}\n onKeyDown={onKeyDown}\n ref={dialogRef}\n >\n {isOpenedLate ? (\n <Div.column\n position=\"relative\"\n width=\"100%\"\n maxWidth={maxWidth ?? app.contentMaxWidth / 1.3}\n minHeight={`calc(100% - ${theme.styles.space * 2}px)`}\n alignItems=\"center\"\n justifyContent=\"center\"\n marginBlock={theme.styles.space}\n marginInline=\"auto\"\n transform={`translateY(${theme.styles.space}px)`}\n transition={theme.styles.transition}\n animation={isOpened ? \"fadeInAnimation 0.2s ease forwards\" : \"fadeOutAnimation 0.2s ease forwards\"}\n >\n <Div\n position=\"relative\"\n width=\"100%\"\n minHeight={32 + theme.styles.space * 2}\n backgroundColor={backgroundColor ?? theme.colors.backgroundBase}\n borderRadius={theme.styles.borderRadius * 2}\n padding={!title ? theme.styles.space : undefined}\n overflow={overflow}\n >\n {title ? (\n <>\n <Div.row\n alignItems=\"center\"\n gap={theme.styles.gap}\n backgroundColor={headerBackgroundColor}\n borderTopLeftRadius={theme.styles.borderRadius * 2 - 1}\n borderTopRightRadius={theme.styles.borderRadius * 2 - 1}\n paddingInline={theme.styles.space}\n paddingBlock={theme.styles.space}\n transition={theme.styles.transition}\n >\n <Div.row\n flex={1}\n alignItems=\"center\"\n gap={headerVertical ? theme.styles.space * 2 : theme.styles.space}\n invertFlexDirection={headerVertical}\n >\n {icon &&\n (headerVertical ? (\n <Div.row\n width={76}\n height={76}\n alignItems=\"center\"\n justifyContent=\"center\"\n backgroundColor={titleColor ?? theme.colors.textPrimary}\n borderRadius={999}\n >\n <Icon\n name={icon}\n size={36}\n color={headerBackgroundColor ?? theme.colors.backgroundBase}\n flexShrink={0}\n />\n </Div.row>\n ) : (\n <Icon\n name={icon}\n size={24}\n color={titleColor ?? theme.colors.textPrimary}\n flexShrink={0}\n />\n ))}\n\n <Div.column flex={1} gap={theme.styles.gap / 2}>\n <Text\n as=\"h1\"\n textAlign={headerTextAlign}\n color={titleColor ?? theme.colors.textPrimary}\n transition={theme.styles.transition}\n >\n {title}\n </Text>\n\n {description && (\n <Text\n textAlign={headerTextAlign}\n color={descriptionColor ?? theme.colors.textSecondary}\n transition={theme.styles.transition}\n >\n {description}\n </Text>\n )}\n </Div.column>\n </Div.row>\n\n {!withoutCloseButton && (\n <Button.icon\n icon=\"XMark\"\n marginTop={1}\n iconColor={titleColor}\n onClick={onClickClose}\n transition={theme.styles.transition}\n zIndex={10}\n />\n )}\n </Div.row>\n\n <Divider.horizontal />\n </>\n ) : (\n <>\n {!withoutCloseButton && (\n <Div position=\"absolute\" top={theme.styles.space} right={theme.styles.space} zIndex={10}>\n <Button.icon icon=\"XMark\" iconColor={titleColor} onClick={onClickClose} />\n </Div>\n )}\n </>\n )}\n\n <Div padding={title ? theme.styles.space : undefined}>{children}</Div>\n </Div>\n </Div.column>\n ) : undefined}\n </DialogStylesElement>,\n document.body,\n );\n}) as any;\n\nModalComponent.confirmation = forwardRef(function Confirmation(\n { message, continueButtonText = \"Continue\", continueButtonLoaderName, onContinue, onCancel, ...props },\n ref,\n) {\n const theme = useTheme();\n\n const modalRef = useRef<ModalRef>(null);\n\n const onCancelElement = useCallback(() => {\n onCancel?.();\n modalRef.current?.close();\n }, [onCancel]);\n const onContinueElement = useCallback(() => {\n onContinue?.();\n modalRef.current?.close();\n }, [onContinue]);\n\n useImperativeHandle(ref, (): ModalRef => modalRef.current as ModalRef, []);\n\n return (\n <ModalComponent title=\"Are you sure?\" maxWidth={660} {...props} ref={modalRef}>\n <Text color={theme.colors.textSecondary}>\n {message ?? \"Do you really want to continue? This action may be irreversible.\"}\n </Text>\n\n <Div.row\n alignItems=\"center\"\n justifyContent=\"flex-end\"\n gap={theme.styles.gap}\n marginTop={theme.styles.space * 2}\n >\n <Button.secondary text=\"Cancel\" onClick={onCancelElement} />\n <Button text={continueButtonText} loaderName={continueButtonLoaderName} onClick={onContinueElement} />\n </Div.row>\n </ModalComponent>\n );\n}) as ModalComponent[\"confirmation\"];\n\nModalComponent.destructive = forwardRef(function Destructive(\n {\n message,\n deleteButtonText = \"Delete\",\n deleteButtonIconName = \"trash\",\n deleteButtonLoaderName,\n onDelete,\n onCancel,\n ...props\n },\n ref,\n) {\n const theme = useTheme();\n\n const modalRef = useRef<ModalRef>(null);\n\n const onCancelElement = useCallback(() => {\n onCancel?.();\n modalRef.current?.close();\n }, [onCancel]);\n const onDeleteElement = useCallback(() => {\n onDelete?.();\n modalRef.current?.close();\n }, [onDelete]);\n\n useImperativeHandle(ref, (): ModalRef => modalRef.current as ModalRef, []);\n\n return (\n <ModalComponent title=\"Are you sure?\" maxWidth={660} {...props} ref={modalRef}>\n <Text color={theme.colors.textSecondary}>\n {message ??\n \"Do you really want to continue with the deleting of the item? This action may be irreversible.\"}\n </Text>\n\n <Div.row\n alignItems=\"center\"\n justifyContent=\"flex-end\"\n gap={theme.styles.gap}\n marginTop={theme.styles.space * 2}\n >\n <Button.secondary text=\"Cancel\" onClick={onCancelElement} />\n <Button.destructive\n icon={deleteButtonIconName}\n text={deleteButtonText}\n loaderName={deleteButtonLoaderName}\n onClick={onDeleteElement}\n />\n </Div.row>\n </ModalComponent>\n );\n}) as ModalComponent[\"destructive\"];\n\nconst Modal = memo(ModalComponent) as any as typeof ModalComponent & {\n confirmation: typeof ModalComponent.confirmation;\n destructive: typeof ModalComponent.destructive;\n};\n\nModal.confirmation = ModalComponent.confirmation;\nModal.destructive = ModalComponent.destructive;\n\nexport default Modal;\n","import { PartialRecord } from \"react-better-core\";\nimport CryptoJS from \"crypto-js\";\n\nimport { BrowserName } from \"../types/other\";\n\nimport { LocalStoragePluginOptions } from \"../plugins\";\nimport { checkBetterHtmlContextValue } from \"./variableFunctions\";\nimport { useForm } from \"./hooks\";\n\nimport { externalBetterHtmlContextValue } from \"../components/BetterHtmlProvider\";\n\nexport const getBrowser = (): BrowserName | undefined => {\n const userAgent = navigator.userAgent.toLowerCase();\n\n if (userAgent.includes(\"firefox\")) return \"firefox\";\n if (userAgent.includes(\"chrome\") && !userAgent.includes(\"edg\")) return \"chrome\";\n if (userAgent.includes(\"safari\") && !userAgent.includes(\"chrome\")) return \"safari\";\n if (userAgent.includes(\"edg\")) return \"edge\";\n if (userAgent.includes(\"opr\") || userAgent.includes(\"opera\")) return \"opera\";\n\n return;\n};\n\nexport const getFormErrorObject = <FormFields extends ReturnType<typeof useForm>[\"values\"]>(\n formValues: FormFields,\n): PartialRecord<keyof FormFields, string> => {\n return {};\n};\n\nexport const encryptString = (text: string): string => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"encryptString\")) return undefined as any;\n\n const localStoragePlugin = externalBetterHtmlContextValue.plugins.find((plugin) => plugin.name === \"localStorage\");\n\n if (!localStoragePlugin) {\n throw new Error(\n \"`encryptString` hook requires the `localStorage` plugin to be added to the `plugins` prop in `<BetterHtmlProvider>`.\",\n );\n }\n\n const pluginConfig: LocalStoragePluginOptions = localStoragePlugin.getConfig();\n\n if (!pluginConfig.encryption?.enabled) return text;\n\n const encrypted = CryptoJS.AES.encrypt(text, CryptoJS.enc.Hex.parse(pluginConfig.encryption.secretKey), {\n iv: CryptoJS.enc.Hex.parse(pluginConfig.encryption.iv),\n mode: CryptoJS.mode.CBC,\n padding: CryptoJS.pad.Pkcs7,\n }).toString();\n\n return encrypted;\n};\n\nexport const decryptString = <ReturnValue extends string>(text: string): ReturnValue => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"decryptString\")) return undefined as any;\n\n const localStoragePlugin = externalBetterHtmlContextValue.plugins.find((plugin) => plugin.name === \"localStorage\");\n\n if (!localStoragePlugin) {\n throw new Error(\n \"`decryptString` hook requires the `localStorage` plugin to be added to the `plugins` prop in `<BetterHtmlProvider>`.\",\n );\n }\n\n const pluginConfig: LocalStoragePluginOptions = localStoragePlugin.getConfig();\n\n if (!pluginConfig.encryption?.enabled) return text as ReturnValue;\n\n const decrypted = CryptoJS.AES.decrypt(text, CryptoJS.enc.Hex.parse(pluginConfig.encryption.secretKey), {\n iv: CryptoJS.enc.Hex.parse(pluginConfig.encryption.iv),\n mode: CryptoJS.mode.CBC,\n padding: CryptoJS.pad.Pkcs7,\n });\n\n return decrypted.toString(CryptoJS.enc.Utf8) as ReturnValue;\n};\n","import { BetterCoreConfig, OmitProps } from \"react-better-core\";\n\nimport { Alert } from \"../types/alert\";\n\nimport {\n BetterHtmlInternalConfig,\n externalBetterCoreContextValue,\n externalBetterHtmlContextValue,\n} from \"../components/BetterHtmlProvider\";\n\nexport const checkBetterCoreContextValue = (\n value: BetterCoreConfig | undefined,\n functionsName: string,\n): value is BetterCoreConfig => {\n if (value === undefined) {\n throw new Error(\n `\\`${functionsName}()\\` must be used within a \\`<BetterCoreProvider>\\`. Make sure to add one at the root of your component tree.`,\n );\n }\n\n return value !== undefined;\n};\nexport const checkBetterHtmlContextValue = (\n value: BetterHtmlInternalConfig | undefined,\n functionsName: string,\n): value is BetterHtmlInternalConfig => {\n if (value === undefined) {\n throw new Error(\n `\\`${functionsName}()\\` must be used within a \\`<BetterHtmlProvider>\\`. Make sure to add one at the root of your component tree.`,\n );\n }\n\n return value !== undefined;\n};\n\nexport const alertControls = {\n createAlert: (alert: OmitProps<Alert, \"id\">): Alert => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"alertControls.createAlert\"))\n return undefined as any;\n\n const readyAlert: Alert = {\n id: crypto.randomUUID(),\n ...alert,\n };\n externalBetterHtmlContextValue.setAlerts((oldValue) => [...oldValue, readyAlert]);\n\n return readyAlert;\n },\n removeAlert: (alertId: string) => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"alertControls.removeAlert\")) return;\n\n externalBetterHtmlContextValue.setAlerts((oldValue) => oldValue.filter((alert) => alert.id !== alertId));\n },\n};\n\nexport const sideMenuControls = {\n expand: () => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"sideMenuControls.expand\")) return;\n\n externalBetterHtmlContextValue.setSideMenuIsCollapsed.setFalse();\n },\n collapse: () => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"sideMenuControls.collapse\")) return;\n\n externalBetterHtmlContextValue.setSideMenuIsCollapsed.setTrue();\n },\n toggleExpanded: () => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"sideMenuControls.toggleExpanded\")) return;\n\n externalBetterHtmlContextValue.setSideMenuIsCollapsed.toggle();\n },\n open: () => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"sideMenuControls.open\")) return;\n\n externalBetterHtmlContextValue.setSideMenuIsOpenMobile.setTrue();\n },\n close: () => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"sideMenuControls.close\")) return;\n\n externalBetterHtmlContextValue.setSideMenuIsOpenMobile.setFalse();\n },\n toggleOpened: () => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"sideMenuControls.toggleOpened\")) return;\n\n externalBetterHtmlContextValue.setSideMenuIsOpenMobile.toggle();\n },\n};\n\nexport const filterHover = (): Record<\"z05\" | \"z1\" | \"z2\" | \"z3\", React.CSSProperties[\"filter\"]> => {\n if (!checkBetterCoreContextValue(externalBetterCoreContextValue, \"filterHover\")) return undefined as any;\n\n return {\n z05: externalBetterCoreContextValue.colorTheme === \"dark\" ? \"brightness(1.2)\" : \"brightness(0.95)\",\n z1: externalBetterCoreContextValue.colorTheme === \"dark\" ? \"brightness(1.3)\" : \"brightness(0.9)\",\n z2: externalBetterCoreContextValue.colorTheme === \"dark\" ? \"brightness(1.6)\" : \"brightness(0.8)\",\n z3: externalBetterCoreContextValue.colorTheme === \"dark\" ? \"brightness(1.9)\" : \"brightness(0.7)\",\n };\n};\n","import { LocalStoragePluginOptions } from \"../plugins\";\n\nimport { decryptString, encryptString } from \"./functions\";\nimport { checkBetterHtmlContextValue } from \"./variableFunctions\";\n\nimport { externalBetterHtmlContextValue } from \"../components/BetterHtmlProvider\";\n\nexport function generateLocalStorage<LocalStorage extends object>(): {\n setItem: <StorageName extends keyof LocalStorage>(name: StorageName, value: LocalStorage[StorageName]) => void;\n getItem: <StorageName extends keyof LocalStorage>(name: StorageName) => LocalStorage[StorageName] | undefined;\n removeItem: (name: keyof LocalStorage) => void;\n removeAllItems: () => void;\n} {\n return {\n setItem: (name, value) => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"generateLocalStorage.setItem\"))\n return undefined as any;\n\n const localStoragePlugin = externalBetterHtmlContextValue.plugins.find(\n (plugin) => plugin.name === \"localStorage\",\n );\n\n if (!localStoragePlugin) {\n throw new Error(\n \"`generateLocalStorage.setItem` function requires the `localStorage` plugin to be added to the `plugins` prop in `<BetterHtmlProvider>`.\",\n );\n }\n\n const pluginConfig: LocalStoragePluginOptions = localStoragePlugin.getConfig();\n\n const encryptionEnabled = pluginConfig.encryption?.enabled ?? false;\n\n const readyName = encryptionEnabled ? encryptString(name.toString()) : name;\n const readyValue = encryptionEnabled ? encryptString(JSON.stringify(value)) : JSON.stringify(value);\n\n if (value) localStorage.setItem(readyName.toString(), readyValue);\n else localStorage.removeItem(readyName.toString());\n },\n getItem: (name) => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"generateLocalStorage.getItem\"))\n return undefined as any;\n\n const localStoragePlugin = externalBetterHtmlContextValue.plugins.find(\n (plugin) => plugin.name === \"localStorage\",\n );\n\n if (!localStoragePlugin) {\n throw new Error(\n \"`generateLocalStorage.getItem` function requires the `localStorage` plugin to be added to the `plugins` prop in `<BetterHtmlProvider>`.\",\n );\n }\n\n const pluginConfig: LocalStoragePluginOptions = localStoragePlugin.getConfig();\n\n const encryptionEnabled = pluginConfig.encryption?.enabled ?? false;\n\n const readyName = encryptionEnabled ? encryptString(name.toString()) : name;\n const item = localStorage.getItem(readyName.toString());\n\n if (item === null) return undefined;\n\n try {\n return encryptionEnabled ? JSON.parse(decryptString(item)) : JSON.parse(item);\n } catch (error) {\n return undefined;\n }\n },\n removeItem: (name) => {\n if (!checkBetterHtmlContextValue(externalBetterHtmlContextValue, \"generateLocalStorage.removeItem\"))\n return undefined as any;\n\n const localStoragePlugin = externalBetterHtmlContextValue.plugins.find(\n (plugin) => plugin.name === \"localStorage\",\n );\n\n if (!localStoragePlugin) {\n throw new Error(\n \"`generateLocalStorage.removeItem` function requires the `localStorage` plugin to be added to the `plugins` prop in `<BetterHtmlProvider>`.\",\n );\n }\n\n const pluginConfig: LocalStoragePluginOptions = localStoragePlugin.getConfig();\n\n const encryptionEnabled = pluginConfig.encryption?.enabled ?? false;\n\n const readyName = encryptionEnabled ? encryptString(name.toString()) : name;\n\n localStorage.removeItem(readyName.toString());\n },\n removeAllItems: () => {\n localStorage.clear();\n },\n };\n}\n","import { forwardRef, memo } from \"react\";\nimport { useTheme } from \"react-better-core\";\n\nimport { ComponentPaddingProps, ComponentPropWithRef } from \"../types/components\";\n\nimport { useMediaQuery } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport { useBetterHtmlContextInternal } from \"./BetterHtmlProvider\";\n\nexport type PageHolderProps = {\n /** @default false */\n noMaxContentWidth?: boolean;\n backgroundColor?: React.CSSProperties[\"backgroundColor\"];\n backgroundImage?: React.CSSProperties[\"backgroundImage\"];\n children?: React.ReactNode;\n} & ComponentPaddingProps;\n\ntype PageHolderComponentType = {\n (props: ComponentPropWithRef<HTMLDivElement, PageHolderProps>): React.ReactElement;\n center: (\n props: ComponentPropWithRef<\n HTMLDivElement,\n PageHolderProps & {\n pageBackgroundColor?: React.CSSProperties[\"backgroundColor\"];\n pageBackgroundImage?: React.CSSProperties[\"backgroundImage\"];\n contentMaxWidth?: React.CSSProperties[\"maxWidth\"];\n /** @default true */\n contentInsideBox?: boolean;\n behindComponent?: React.ReactNode;\n sideComponent?: React.ReactNode;\n /** @default \"right\" */\n sideComponentPosition?: \"left\" | \"right\";\n }\n >,\n ) => React.ReactElement;\n};\n\nconst PageHolderComponent: PageHolderComponentType = forwardRef(function PageHolder(\n { noMaxContentWidth, children, ...props }: PageHolderProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const theme = useTheme();\n const { app } = useBetterHtmlContextInternal();\n\n return (\n <Div\n as=\"main\"\n width=\"100%\"\n maxWidth={!noMaxContentWidth ? app.contentMaxWidth : undefined}\n margin=\"0px auto\"\n padding={theme.styles.space}\n {...props}\n ref={ref}\n >\n {children}\n </Div>\n );\n}) as any;\n\nPageHolderComponent.center = forwardRef(function Center(\n {\n pageBackgroundColor,\n pageBackgroundImage,\n contentMaxWidth,\n contentInsideBox,\n behindComponent,\n sideComponent,\n sideComponentPosition = \"right\",\n noMaxContentWidth,\n children,\n ...props\n },\n ref,\n) {\n const theme = useTheme();\n const mediaQuery = useMediaQuery();\n const { app } = useBetterHtmlContextInternal();\n\n const breakingPoint = mediaQuery.size1000;\n\n const withSideComponent = sideComponent && !breakingPoint;\n\n const ContentTag = contentInsideBox !== false ? Div.box : Div;\n\n return (\n <Div.row\n position=\"relative\"\n width=\"100%\"\n minHeight=\"100svh\"\n alignItems=\"center\"\n justifyContent=\"center\"\n backgroundColor={pageBackgroundColor}\n backgroundImage={pageBackgroundImage}\n >\n {behindComponent && (\n <Div\n position=\"fixed\"\n width={`${withSideComponent ? 50 : 100}%`}\n height=\"100svh\"\n top={0}\n left={sideComponentPosition === \"right\" ? 0 : \"auto\"}\n right={sideComponentPosition === \"left\" ? 0 : \"auto\"}\n zIndex={1}\n >\n {behindComponent}\n </Div>\n )}\n\n {sideComponentPosition === \"left\" && withSideComponent && <Div width=\"50%\" />}\n\n <Div.column position=\"relative\" width={`${withSideComponent ? 50 : 100}%`} alignItems=\"center\" zIndex={2}>\n <ContentTag\n width={`calc(100% - ${theme.styles.space * 2}px)`}\n maxWidth={!noMaxContentWidth ? contentMaxWidth ?? app.contentMaxWidth / 2 : undefined}\n marginInline={theme.styles.space}\n marginBlock={theme.styles.space}\n {...props}\n ref={ref}\n >\n {children}\n </ContentTag>\n </Div.column>\n\n {sideComponentPosition === \"right\" && withSideComponent && <Div width=\"50%\" />}\n\n {withSideComponent && (\n <Div\n position=\"fixed\"\n width=\"50%\"\n height=\"100svh\"\n top={0}\n left={sideComponentPosition === \"left\" ? 0 : \"auto\"}\n right={sideComponentPosition === \"right\" ? 0 : \"auto\"}\n >\n {sideComponent}\n </Div>\n )}\n </Div.row>\n );\n}) as PageHolderComponentType[\"center\"];\n\nconst PageHolder = memo(PageHolderComponent) as any as typeof PageHolderComponent & {\n center: typeof PageHolderComponent.center;\n};\n\nPageHolder.center = PageHolderComponent.center;\n\nexport default PageHolder;\n","import { forwardRef, memo, useCallback } from \"react\";\nimport { darkenColor, lightenColor, OmitProps, useBetterCoreContext, useTheme } from \"react-better-core\";\n\nimport { ComponentPaddingProps, ComponentPropWithRef } from \"../types/components\";\n\nimport { filterHover } from \"../utils/variableFunctions\";\n\nimport Div, { DivProps } from \"./Div\";\nimport Text, { TextProps } from \"./Text\";\n\nconst borderRadiusOffset = 1.3;\n\nexport type ChipProps<Value = unknown> = {\n text: string | React.ReactNode;\n beforeText?: React.ReactNode;\n afterText?: React.ReactNode;\n /** @default theme.colors.textPrimary */\n color?: string;\n /** @default backgroundSecondary */\n backgroundColor?: string;\n /** @default theme.styles.borderRadius / 1.3 */\n borderRadius?: number;\n /** @default false */\n isCircle?: boolean;\n value?: Value;\n onClick?: (event: React.MouseEvent<HTMLDivElement, globalThis.MouseEvent>) => void;\n onClickWithValue?: (value: Value) => void;\n} & Pick<\n DivProps,\n \"border\" | \"borderColor\" | \"borderWidth\" | \"borderStyle\" | keyof ComponentPaddingProps | \"transition\" | \"height\"\n> &\n Pick<TextProps, \"fontFamily\" | \"fontSize\" | \"fontWeight\" | \"fontStyle\">;\n\ntype ChipComponentType = {\n <Value>(props: ComponentPropWithRef<HTMLDivElement, ChipProps<Value>>): React.ReactElement;\n colored: <Value>(\n props: ComponentPropWithRef<\n HTMLDivElement,\n OmitProps<ChipProps<Value>, \"color\" | \"backgroundColor\"> & {\n color?: string;\n /** @default false */\n withWhiteBackground?: boolean;\n }\n >,\n ) => React.ReactElement;\n};\n\nconst ChipComponent: ChipComponentType = forwardRef(function Chip<Value>(\n {\n text,\n beforeText,\n afterText,\n color,\n backgroundColor,\n borderRadius,\n isCircle,\n value,\n onClick,\n onClickWithValue,\n ...props\n }: ChipProps<Value>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const theme = useTheme();\n\n const onClickElement = useCallback(\n (event: React.MouseEvent<HTMLDivElement, globalThis.MouseEvent>) => {\n onClick?.(event);\n onClickWithValue?.(value as any);\n },\n [onClick, onClickWithValue, value],\n );\n\n return (\n <Div\n width=\"fit-content\"\n backgroundColor={backgroundColor ?? theme.colors.backgroundSecondary}\n borderRadius={isCircle ? 999 : (borderRadius ?? theme.styles.borderRadius / borderRadiusOffset)}\n paddingBlock={theme.styles.gap / 2}\n paddingInline={theme.styles.space / 1.5}\n filterHover={onClick || onClickWithValue ? filterHover().z1 : undefined}\n onClick={onClickElement}\n cursor={onClick || onClickWithValue ? \"pointer\" : undefined}\n {...props}\n ref={ref}\n >\n <Div.row height=\"100%\" alignItems=\"center\" gap={theme.styles.gap}>\n {beforeText}\n {typeof text === \"string\" ? <Text color={color ?? theme.colors.textPrimary}>{text}</Text> : text}\n {afterText}\n </Div.row>\n </Div>\n );\n}) as any;\n\nChipComponent.colored = forwardRef(function Colored({ color, withWhiteBackground, ...props }, ref) {\n const theme = useTheme();\n const { colorTheme } = useBetterCoreContext();\n\n const readyColor = color ?? theme.colors.textSecondary;\n\n const chip = (\n <ChipComponent\n color={colorTheme === \"light\" ? darkenColor(readyColor, 0.7) : lightenColor(readyColor, 0.7)}\n backgroundColor={readyColor + \"40\"}\n border={`1px solid ${readyColor}`}\n ref={ref}\n {...props}\n />\n );\n\n return withWhiteBackground ? (\n <Div\n width=\"fit-content\"\n backgroundColor={withWhiteBackground ? (colorTheme === \"light\" ? \"#ffffff\" : \"#000000\") : undefined}\n borderRadius={\n withWhiteBackground\n ? (props.borderRadius ?? theme.styles.borderRadius / borderRadiusOffset + 0.3)\n : undefined\n }\n >\n {chip}\n </Div>\n ) : (\n chip\n );\n}) as ChipComponentType[\"colored\"];\n\nconst Chip = memo(ChipComponent) as any as typeof ChipComponent & {\n colored: typeof ChipComponent.colored;\n};\n\nChip.colored = ChipComponent.colored;\n\nexport default Chip;\n","import { forwardRef, memo, useCallback, useState, useEffect, useMemo, useRef, useId } from \"react\";\nimport {\n AnyOtherString,\n Country,\n darkenColor,\n lightenColor,\n OmitProps,\n useBooleanState,\n useDebounceState,\n countries,\n IconName,\n Theme,\n useTheme,\n useBetterCoreContext,\n} from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport { isMobileDevice } from \"../constants\";\n\nimport { ComponentHoverStyle, ComponentPropWithRef, ComponentStyle } from \"../types/components\";\n\nimport { useComponentInputFieldDateProps, useComponentPropsGrouper, useComponentPropsWithPrefix } from \"../utils/hooks\";\nimport { getBrowser } from \"../utils/functions\";\n\nimport Text from \"./Text\";\nimport Div from \"./Div\";\nimport Icon from \"./Icon\";\nimport Button from \"./Button\";\nimport Label from \"./Label\";\nimport Dropdown, { DropdownOption } from \"./Dropdown\";\nimport Image from \"./Image\";\nimport Calendar from \"./Calendar\";\n\nconst buttonWidth = 50;\nconst colorPickerSpacing = 4;\nconst colorPickerColorWidth = 12 + 27 + colorPickerSpacing;\nconst colorPickerValueWidth = 12 + 74 + colorPickerSpacing;\n\nconst InputElement = styled.input.withConfig({\n shouldForwardProp: (prop) =>\n ![\"theme\", \"withLeftIcon\", \"withRightIcon\", \"withPrefix\", \"withSuffix\", \"style\", \"hoverStyle\"].includes(prop),\n})<{\n theme: Theme;\n withLeftIcon?: boolean;\n withRightIcon?: boolean;\n withPrefix?: boolean;\n withSuffix?: boolean;\n style: ComponentStyle;\n hoverStyle: ComponentStyle;\n}>`\n position: relative;\n width: 100%;\n font-family: ${(props) => props.theme.styles.fontFamily};\n font-size: 16px;\n line-height: 20px;\n color: ${(props) => props.theme.colors.textPrimary};\n background: ${(props) => props.theme.colors.backgroundContent};\n border: 1px solid ${(props) => props.theme.colors.border};\n border-radius: ${(props) => props.theme.styles.borderRadius}px;\n border-top-left-radius: ${(props) => (props.withPrefix ? 0 : undefined)};\n border-bottom-left-radius: ${(props) => (props.withPrefix ? 0 : undefined)};\n border-top-right-radius: ${(props) => (props.withSuffix ? 0 : undefined)};\n border-bottom-right-radius: ${(props) => (props.withSuffix ? 0 : undefined)};\n outline: none;\n padding: ${(props) => `${(props.theme.styles.space + props.theme.styles.gap) / 2}px ${props.theme.styles.space}px`};\n padding-left: ${(props) =>\n props.withLeftIcon\n ? `${props.theme.styles.space + 16 + props.theme.styles.space - 1}px`\n : props.withPrefix\n ? `${props.theme.styles.space}px`\n : undefined};\n padding-right: ${(props) =>\n props.withRightIcon\n ? `${props.theme.styles.space + 16 + props.theme.styles.space - 1}px`\n : props.withSuffix\n ? `${props.theme.styles.space}px`\n : undefined};\n transition: ${(props) => props.theme.styles.transition};\n\n &::placeholder {\n color: ${(props) => props.theme.colors.textSecondary}80;\n }\n\n &:focus {\n border-color: ${(props) => props.theme.colors.primary};\n }\n\n &:disabled {\n filter: brightness(0.9);\n cursor: not-allowed;\n }\n\n &:read-only {\n caret-color: transparent;\n }\n\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n &[type=\"number\"] {\n -moz-appearance: textfield;\n }\n\n &[type=\"date\"],\n &[type=\"datetime-local\"],\n &[type=\"time\"] {\n min-height: 48px;\n -webkit-appearance: none;\n -moz-appearance: textfield;\n\n &::-webkit-calendar-picker-indicator {\n display: none;\n -webkit-appearance: none;\n }\n\n &::-webkit-date-and-time-value {\n text-align: left !important;\n }\n }\n\n &[type=\"color\"] {\n --color-spacing: ${(props) => (props.theme.styles.space + props.theme.styles.gap) / 2}px;\n\n width: calc(var(--color-spacing) + 27px + ${colorPickerValueWidth}px);\n height: 48px;\n padding: 0px;\n padding-block: calc(var(--color-spacing) - 3px);\n padding-left: var(--color-spacing);\n padding-right: ${colorPickerValueWidth}px;\n }\n\n &.react-better-html-phone-number-holder {\n border-right: none;\n border-top-right-radius: 0px;\n border-bottom-right-radius: 0px;\n }\n\n &.react-better-html-phone-number {\n border-top-left-radius: 0px;\n border-bottom-left-radius: 0px;\n }\n\n &.react-better-html-dropdown {\n padding-right: ${(props) => props.theme.styles.space + 16 + props.theme.styles.space - 1}px;\n\n &.react-better-html-dropdown-multiselect {\n border-top: none;\n border-top-left-radius: 0px;\n border-top-right-radius: 0px;\n }\n\n &.react-better-html-dropdown-open {\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n }\n\n &.react-better-html-dropdown-open-late {\n z-index: 1001;\n }\n }\n\n &.react-better-html-inputField-dateTime-opened {\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n }\n\n &.react-better-html-inputField-dateTime-opened-late {\n z-index: 1001;\n }\n\n ${(props) => props.style as any}\n\n &:hover {\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nconst TextareaElement = styled.textarea.withConfig({\n shouldForwardProp: (prop) => ![\"theme\", \"withLeftIcon\", \"withRightIcon\", \"style\", \"hoverStyle\"].includes(prop),\n})<{\n theme: Theme;\n withLeftIcon?: boolean;\n withRightIcon?: boolean;\n style: ComponentStyle;\n hoverStyle: ComponentStyle;\n}>`\n width: 100%;\n min-height: 3lh;\n max-height: 8lh;\n font-family: ${(props) => props.theme.styles.fontFamily};\n font-size: 16px;\n line-height: 20px;\n color: ${(props) => props.theme.colors.textPrimary};\n background: ${(props) => props.theme.colors.backgroundContent};\n border: 1px solid ${(props) => props.theme.colors.border};\n border-radius: ${(props) => props.theme.styles.borderRadius}px;\n outline: none;\n padding: ${(props) => `${(props.theme.styles.gap + props.theme.styles.space) / 2}px ${props.theme.styles.space}px`};\n padding-left: ${(props) =>\n props.withLeftIcon ? `${props.theme.styles.space + 16 + props.theme.styles.space - 1}px` : undefined};\n padding-right: ${(props) =>\n props.withRightIcon ? `${props.theme.styles.space + 16 + props.theme.styles.space - 1}px` : undefined};\n resize: vertical;\n transition: border-color ${(props) => props.theme.styles.transition};\n\n &::placeholder {\n color: ${(props) => props.theme.colors.textSecondary}80;\n }\n\n &:focus {\n border-color: ${(props) => props.theme.colors.primary};\n }\n\n ${(props) => props.style as any}\n\n &:hover {\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nconst hours = Array.from({ length: 24 }, (_, index) => index);\nconst minutes = Array.from({ length: 60 }, (_, index) => index);\n\nexport type InputFieldProps = {\n label?: string;\n labelColor?: string;\n errorText?: string;\n infoText?: string;\n leftIcon?: IconName | AnyOtherString;\n rightIcon?: IconName | AnyOtherString;\n prefix?: React.ReactNode;\n prefixBackgroundColor?: string;\n suffix?: React.ReactNode;\n suffixBackgroundColor?: string;\n insideInputFieldBeforeComponent?: React.ReactNode;\n insideInputFieldAfterComponent?: React.ReactNode;\n /** @default false */\n withDebounce?: boolean;\n /** @default 0.5s */\n debounceDelay?: number;\n onChangeValue?: (value: string) => void;\n onClickRightIcon?: () => void;\n holderRef?: React.ForwardedRef<HTMLDivElement>;\n} & OmitProps<React.ComponentProps<\"input\">, \"style\" | \"ref\" | \"prefix\"> &\n ComponentStyle &\n ComponentHoverStyle;\n\nexport type TextareaFieldProps = OmitProps<InputFieldProps, \"type\"> &\n OmitProps<React.ComponentProps<\"textarea\">, \"style\" | \"ref\">;\n\ntype InputFieldComponentType = {\n (props: ComponentPropWithRef<HTMLInputElement, InputFieldProps>): React.ReactElement;\n multiline: (props: ComponentPropWithRef<HTMLTextAreaElement, TextareaFieldProps>) => React.ReactElement;\n email: (props: ComponentPropWithRef<HTMLInputElement, InputFieldProps>) => React.ReactElement;\n password: (\n props: ComponentPropWithRef<\n HTMLInputElement,\n OmitProps<InputFieldProps, \"autoComplete\"> & {\n /** @default \"current-password\" */\n autoComplete?: React.ComponentProps<\"input\">[\"autoComplete\"];\n }\n >,\n ) => React.ReactElement;\n search: (props: ComponentPropWithRef<HTMLInputElement, InputFieldProps>) => React.ReactElement;\n phoneNumber: (\n props: ComponentPropWithRef<HTMLInputElement, OmitProps<InputFieldProps, \"type\" | \"prefix\">>,\n ) => React.ReactElement;\n date: (\n props: ComponentPropWithRef<\n HTMLInputElement,\n InputFieldProps & {\n minDate?: Date;\n maxDate?: Date;\n }\n >,\n ) => React.ReactElement;\n dateTime: (\n props: ComponentPropWithRef<\n HTMLInputElement,\n InputFieldProps & {\n minDate?: Date;\n maxDate?: Date;\n /** @default today */\n defaultDateAfterTimePick?: `${number}-${number}-${number}`;\n /** @default \"00:00\" */\n defaultTimeAfterDatePick?: `${number}:${number}`;\n }\n >,\n ) => React.ReactElement;\n time: (props: ComponentPropWithRef<HTMLInputElement, InputFieldProps>) => React.ReactElement;\n color: (props: ComponentPropWithRef<HTMLInputElement, InputFieldProps>) => React.ReactElement;\n};\n\nconst InputFieldComponent: InputFieldComponentType = forwardRef(function InputField(\n {\n label,\n labelColor,\n errorText,\n infoText,\n leftIcon,\n rightIcon,\n prefix,\n prefixBackgroundColor,\n suffix,\n suffixBackgroundColor,\n insideInputFieldBeforeComponent,\n insideInputFieldAfterComponent,\n withDebounce,\n debounceDelay = 0.5,\n onChange,\n onChangeValue,\n onClickRightIcon,\n holderRef,\n required,\n placeholder,\n id,\n ...props\n }: InputFieldProps,\n ref: React.ForwardedRef<HTMLInputElement>,\n) {\n const theme = useTheme();\n const internalId = useId();\n const { colorTheme } = useBetterCoreContext();\n const [_, debouncedValue, setDebouncedValue] = useDebounceState<string>(\n props.value?.toString() ?? \"\",\n debounceDelay,\n );\n\n const { style, hoverStyle, excludeStyle, restProps } = useComponentPropsGrouper(props, true);\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n const onChangeElement = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = event.target.value;\n\n if (withDebounce) {\n onChange?.(event);\n setDebouncedValue(newValue);\n } else {\n onChange?.(event);\n onChangeValue?.(newValue);\n }\n },\n [onChange, onChangeValue, withDebounce],\n );\n\n const leftIconZIndex = useMemo(\n () =>\n [\"react-better-html-dropdown-open-late\", \"react-better-html-inputField-dateTime-opened-late\"].some(\n (classNameItem) => props.className?.includes(classNameItem),\n )\n ? 1002\n : 1,\n [props.className],\n );\n\n useEffect(() => {\n if (!withDebounce) return;\n\n onChangeValue?.(debouncedValue);\n }, [withDebounce, onChangeValue, debouncedValue]);\n\n const readyId = id ?? internalId;\n\n return (\n <Div.column width=\"100%\" gap={theme.styles.gap / 2} {...excludeStyle}>\n {label && (\n <Label text={label} color={labelColor} required={required} isError={!!errorText} htmlFor={readyId} />\n )}\n\n <Div.row alignItems=\"stretch\" width=\"100%\">\n {prefix && (\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n border={`1px solid ${theme.colors.border}`}\n borderRight=\"none\"\n backgroundColor={\n prefixBackgroundColor ??\n (colorTheme === \"light\"\n ? darkenColor(theme.colors.backgroundContent, 0.03)\n : lightenColor(theme.colors.backgroundContent, 0.1))\n }\n borderTopLeftRadius={theme.styles.borderRadius}\n borderBottomLeftRadius={theme.styles.borderRadius}\n paddingInline={theme.styles.space}\n >\n {prefix}\n </Div.row>\n )}\n\n <Div position=\"relative\" width=\"100%\" height=\"fit-content\" ref={holderRef}>\n {insideInputFieldBeforeComponent}\n\n <Div position=\"relative\" width=\"100%\" height=\"fit-content\">\n {leftIcon && (\n <Icon\n name={leftIcon}\n position=\"absolute\"\n top={\n (props.type === \"date\" || props.type === \"time\" || props.type === \"datetime-local\"\n ? 48\n : 46) / 2\n }\n left={theme.styles.space + 1}\n transform=\"translateY(-50%)\"\n pointerEvents=\"none\"\n zIndex={leftIconZIndex}\n />\n )}\n\n <InputElement\n theme={theme}\n withLeftIcon={leftIcon !== undefined}\n withRightIcon={rightIcon !== undefined}\n withPrefix={prefix !== undefined}\n withSuffix={suffix !== undefined}\n required={required}\n placeholder={placeholder ?? label}\n id={readyId}\n onChange={onChangeElement}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n ref={ref}\n />\n\n {rightIcon ? (\n onClickRightIcon ? (\n <Button.icon\n icon={rightIcon}\n position=\"absolute\"\n top={46 / 2}\n right={theme.styles.space + 1 - theme.styles.space / 2}\n transform=\"translateY(-50%)\"\n onClick={onClickRightIcon}\n />\n ) : (\n <Icon\n name={rightIcon}\n position=\"absolute\"\n top={46 / 2}\n right={theme.styles.space + 1}\n transform=\"translateY(-50%)\"\n pointerEvents=\"none\"\n />\n )\n ) : undefined}\n\n {insideInputFieldAfterComponent}\n </Div>\n </Div>\n\n {suffix && (\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n border={`1px solid ${theme.colors.border}`}\n borderLeft=\"none\"\n backgroundColor={\n suffixBackgroundColor ??\n (colorTheme === \"light\"\n ? darkenColor(theme.colors.backgroundContent, 0.03)\n : lightenColor(theme.colors.backgroundContent, 0.1))\n }\n borderTopRightRadius={theme.styles.borderRadius}\n borderBottomRightRadius={theme.styles.borderRadius}\n paddingInline={theme.styles.space}\n >\n {suffix}\n </Div.row>\n )}\n </Div.row>\n\n {(errorText || infoText) && (\n <Text\n as=\"span\"\n display=\"block\"\n fontSize={14}\n color={errorText ? theme.colors.error : labelColor ?? theme.colors.textSecondary}\n >\n {errorText || infoText}\n </Text>\n )}\n </Div.column>\n );\n}) as any;\n\nInputFieldComponent.multiline = forwardRef(function Multiline(\n {\n label,\n placeholder,\n errorText,\n infoText,\n leftIcon,\n rightIcon,\n onChange,\n onChangeValue,\n onClickRightIcon,\n required,\n id,\n ...props\n },\n ref,\n) {\n const theme = useTheme();\n const internalId = useId();\n\n const { style, hoverStyle, restProps } = useComponentPropsGrouper(props);\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n const onChangeElement = useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange?.(event);\n onChangeValue?.(event.target.value);\n },\n [onChange, onChangeValue],\n );\n\n const readyId = id ?? internalId;\n\n return (\n <Div.column gap={theme.styles.gap / 2}>\n {label && <Label text={label} required={required} isError={!!errorText} htmlFor={readyId} />}\n\n <Div position=\"relative\" width=\"100%\">\n {leftIcon && (\n <Icon\n name={leftIcon}\n position=\"absolute\"\n top={46 / 2}\n left={theme.styles.space + 1}\n transform=\"translateY(-50%)\"\n pointerEvents=\"none\"\n />\n )}\n\n <TextareaElement\n theme={theme}\n withLeftIcon={leftIcon !== undefined}\n withRightIcon={rightIcon !== undefined}\n required={required}\n placeholder={placeholder ?? label}\n onChange={onChangeElement}\n id={readyId}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n ref={ref}\n />\n\n {rightIcon ? (\n onClickRightIcon ? (\n <Button.icon\n icon={rightIcon}\n position=\"absolute\"\n top={46 / 2}\n right={theme.styles.space + 1 - theme.styles.space / 2}\n transform=\"translateY(-50%)\"\n onClick={onClickRightIcon}\n />\n ) : (\n <Icon\n name={rightIcon}\n position=\"absolute\"\n top={46 / 2}\n right={theme.styles.space + 1}\n transform=\"translateY(-50%)\"\n pointerEvents=\"none\"\n />\n )\n ) : undefined}\n </Div>\n\n {(errorText || infoText) && (\n <Text\n as=\"span\"\n display=\"block\"\n marginTop={theme.styles.gap / 2}\n color={errorText ? theme.colors.error : props.labelColor ?? theme.colors.textSecondary}\n fontSize={14}\n >\n {errorText || infoText}\n </Text>\n )}\n </Div.column>\n );\n}) as InputFieldComponentType[\"multiline\"];\n\nInputFieldComponent.email = forwardRef(function Email({ ...props }, ref) {\n return (\n <InputFieldComponent\n type=\"email\"\n placeholder=\"your@email.here\"\n autoComplete=\"email\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n ref={ref}\n {...props}\n />\n );\n}) as InputFieldComponentType[\"email\"];\n\nInputFieldComponent.password = forwardRef(function Password({ ...props }, ref) {\n const [isPassword, setIsPassword] = useBooleanState(true);\n\n return (\n <InputFieldComponent\n type={isPassword ? \"password\" : \"text\"}\n placeholder=\"******\"\n rightIcon={isPassword ? \"eye\" : \"eyeDashed\"}\n onClickRightIcon={setIsPassword.toggle}\n autoComplete=\"current-password\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n ref={ref}\n {...props}\n />\n );\n}) as InputFieldComponentType[\"password\"];\n\nInputFieldComponent.search = forwardRef(function Search({ value, onChangeValue, onFocus, onBlur, ...props }, ref) {\n const [inputFieldValue, setInputFieldValue] = useState<string>(value?.toString() ?? \"\");\n const [inputFieldFocused, setInputFieldFocused] = useBooleanState();\n\n const onChangeValueElement = useCallback(\n (value: string) => {\n setInputFieldValue(value);\n onChangeValue?.(value);\n },\n [onChangeValue],\n );\n const onFocusElement = useCallback(\n (event: React.FocusEvent<HTMLInputElement, Element>) => {\n setInputFieldFocused.setTrue();\n onFocus?.(event);\n },\n [onFocus],\n );\n const onBlurElement = useCallback(\n (event: React.FocusEvent<HTMLInputElement, Element>) => {\n setTimeout(() => setInputFieldFocused.setFalse(), 0.1 * 1000);\n onBlur?.(event);\n },\n [onBlur],\n );\n const onClickRightIcon = useCallback(() => {\n onChangeValueElement(\"\");\n }, [onChangeValueElement]);\n\n return (\n <InputFieldComponent\n leftIcon=\"magnifyingGlass\"\n placeholder=\"Search...\"\n rightIcon={inputFieldValue.length > 0 && inputFieldFocused ? \"XMark\" : undefined}\n onClickRightIcon={onClickRightIcon}\n value={inputFieldValue}\n onChangeValue={onChangeValueElement}\n onFocus={onFocusElement}\n onBlur={onBlurElement}\n ref={ref}\n {...props}\n />\n );\n}) as InputFieldComponentType[\"search\"];\n\nInputFieldComponent.phoneNumber = forwardRef(function PhoneNumber(\n { label, value, onChangeValue, labelColor, id, ...props },\n ref,\n) {\n const theme = useTheme();\n const internalId = useId();\n\n const [dropdownValue, setDropdownValue] = useState<string>();\n const [inputFieldValue, setInputFieldValue] = useState<string>(value?.toString() ?? \"\");\n\n const renderOption = useCallback(\n (option: DropdownOption<string, Country>, index: number, isSelected: boolean): React.ReactNode => (\n <Div.row alignItems=\"center\" gap={theme.styles.gap}>\n <Image src={`https://flagcdn.com/w80/${option.data?.code.toString().toLowerCase()}.webp`} width={20} />\n <Text>{option.label}</Text>\n </Div.row>\n ),\n [],\n );\n const onChangeDropdown = useCallback(\n (value: string | undefined) => {\n setDropdownValue(value);\n onChangeValue?.(value ? `+${value}${inputFieldValue}` : inputFieldValue); //? Same line as onChangeValueElement\n },\n [onChangeValue, inputFieldValue],\n );\n const onChangeValueElement = useCallback(\n (value: string) => {\n const readyValue = value.replace(/\\D/g, \"\");\n\n setInputFieldValue(readyValue);\n onChangeValue?.(dropdownValue ? `+${dropdownValue}${readyValue}` : readyValue); //? Same line as onChangeDropdown\n },\n [onChangeValue, dropdownValue],\n );\n\n const options = useMemo<DropdownOption<string, Country>[]>(\n () =>\n countries.map((country) => ({\n value: country.phoneNumberExtension,\n label: `+${country.phoneNumberExtension}`,\n data: country,\n })),\n [],\n );\n const defaultValue = useMemo<string>(() => {\n const thisTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n const initialDefaultValue = options.find((option) => option.data?.timeZone === thisTimeZone)?.value ?? \"\";\n setDropdownValue(initialDefaultValue);\n\n return initialDefaultValue;\n }, [options]);\n\n useEffect(() => {\n if (value === undefined || value === null) return;\n\n const newValue = value.toString();\n\n const country = countries.find(\n (country) =>\n country.phoneNumberExtension ===\n newValue.slice(\n newValue.startsWith(\"+\") ? 1 : 0,\n country.phoneNumberExtension.length + (newValue.startsWith(\"+\") ? 1 : 0),\n ),\n );\n\n if (!country) {\n setInputFieldValue(newValue);\n return;\n }\n\n setDropdownValue(country.phoneNumberExtension);\n setInputFieldValue(newValue.slice(country?.phoneNumberExtension.length + 1));\n }, [value]);\n\n const readyId = id ?? internalId;\n\n return (\n <Div.column width=\"100%\" gap={theme.styles.gap / 2}>\n {label && (\n <Label\n text={label}\n color={labelColor}\n required={props.required}\n isError={!!props.errorText}\n htmlFor={readyId}\n />\n )}\n\n <Div.row>\n <Dropdown\n options={options}\n renderOption={renderOption}\n width={130}\n minWidth={116}\n withSearch\n placeholder=\"+00\"\n inputFieldClassName=\"react-better-html-phone-number-holder\"\n defaultValue={defaultValue}\n value={dropdownValue}\n disabled={props.disabled}\n onChange={onChangeDropdown}\n withoutClearButton\n withoutRenderingOptionsWhenClosed\n />\n <InputFieldComponent\n placeholder={label ?? \"Phone number\"}\n className=\"react-better-html-phone-number\"\n value={inputFieldValue}\n onChangeValue={onChangeValueElement}\n ref={ref}\n id={readyId}\n {...props}\n />\n </Div.row>\n </Div.column>\n );\n}) as InputFieldComponentType[\"phoneNumber\"];\n\nInputFieldComponent.date = forwardRef(function Date({ minDate, maxDate, ...props }, ref) {\n const theme = useTheme();\n\n const holderRef = useRef<HTMLDivElement>(null);\n\n const isMobileIOS = isMobileDevice && getBrowser() === \"safari\";\n\n const { internalValue, setInternalValue, inputFieldProps, insideInputFieldComponentProps } =\n useComponentInputFieldDateProps(props, holderRef, isMobileIOS);\n\n const onChange = useCallback(\n (date?: string) => {\n inputFieldProps.onChangeValue?.(date ?? \"\");\n setInternalValue(date ?? \"\");\n },\n [inputFieldProps.onChangeValue],\n );\n\n return (\n <InputFieldComponent\n type=\"date\"\n insideInputFieldAfterComponent={\n !isMobileIOS ? (\n <Div\n position=\"absolute\"\n top=\"100%\"\n left={0}\n width=\"fit-content\"\n backgroundColor={theme.colors.backgroundContent}\n borderBottomLeftRadius={theme.styles.borderRadius}\n borderBottomRightRadius={theme.styles.borderRadius}\n boxShadow=\"0px 10px 20px #00000020\"\n userSelect=\"none\"\n {...insideInputFieldComponentProps}\n >\n <Calendar value={internalValue} minDate={minDate} maxDate={maxDate} onChange={onChange} />\n </Div>\n ) : undefined\n }\n holderRef={holderRef}\n ref={ref}\n {...props}\n {...inputFieldProps}\n />\n );\n}) as InputFieldComponentType[\"date\"];\n\nInputFieldComponent.dateTime = forwardRef(function DateTime(\n { minDate, maxDate, defaultDateAfterTimePick, defaultTimeAfterDatePick = \"00:00\", ...props },\n ref,\n) {\n const theme = useTheme();\n\n const holderRef = useRef<HTMLDivElement>(null);\n const selectedHourRef = useRef<HTMLDivElement>(null);\n const selectedMinuteRef = useRef<HTMLDivElement>(null);\n\n const isMobileIOS = isMobileDevice && getBrowser() === \"safari\";\n\n const { internalValue, setInternalValue, inputFieldProps, insideInputFieldComponentProps, isOpen } =\n useComponentInputFieldDateProps(props, holderRef, isMobileIOS);\n\n const onChange = useCallback(\n (date?: string) => {\n const newValue = date ? `${date}T${internalValue?.toString().split(\"T\")[1] ?? defaultTimeAfterDatePick}` : \"\";\n\n inputFieldProps.onChangeValue?.(newValue);\n setInternalValue(newValue);\n },\n [internalValue, defaultTimeAfterDatePick, inputFieldProps.onChangeValue],\n );\n const onClickHour = useCallback(\n (hour: number) => {\n const newTime = `${hour.toString().padStart(2, \"0\")}:${internalValue?.toString().split(\":\")[1] || \"00\"}`;\n\n const today =\n defaultDateAfterTimePick ??\n `${new Date().getFullYear()}-${(new Date().getMonth() + 1).toString().padStart(2, \"0\")}-${new Date()\n .getDate()\n .toString()\n .padStart(2, \"0\")}`;\n\n const newValue = `${(internalValue.trim() || today)?.toString().split(\"T\")[0]}T${newTime}`;\n inputFieldProps.onChangeValue?.(newValue);\n setInternalValue(newValue);\n },\n [defaultDateAfterTimePick, internalValue, inputFieldProps.onChangeValue],\n );\n const onClickMinute = useCallback(\n (minute: number) => {\n const newTime = `${internalValue?.toString().split(\"T\")?.[1]?.split(\":\")[0] || \"00\"}:${minute\n .toString()\n .padStart(2, \"0\")}`;\n\n const today =\n defaultDateAfterTimePick ??\n `${new Date().getFullYear()}-${(new Date().getMonth() + 1).toString().padStart(2, \"0\")}-${new Date()\n .getDate()\n .toString()\n .padStart(2, \"0\")}`;\n\n const newValue = `${(internalValue.trim() || today)?.toString().split(\"T\")[0]}T${newTime}`;\n\n inputFieldProps.onChangeValue?.(newValue);\n setInternalValue(newValue);\n },\n [defaultDateAfterTimePick, internalValue, inputFieldProps.onChangeValue],\n );\n\n useEffect(() => {\n if (isOpen && selectedHourRef.current)\n selectedHourRef.current.scrollIntoView({ block: \"nearest\", behavior: \"instant\" });\n\n if (isOpen && selectedMinuteRef.current)\n selectedMinuteRef.current.scrollIntoView({ block: \"nearest\", behavior: \"instant\" });\n }, [isOpen]);\n\n const valueHour = parseInt(internalValue?.toString().split(\"T\")?.[1]?.split(\":\")?.[0]).toString();\n const valueMinute = parseInt(internalValue?.toString().split(\"T\")?.[1]?.split(\":\")?.[1]).toString();\n\n const topSpacing = 32 + theme.styles.space / 2 + theme.styles.gap;\n\n return (\n <InputFieldComponent\n type=\"datetime-local\"\n insideInputFieldAfterComponent={\n !isMobileIOS ? (\n <Div\n position=\"absolute\"\n top=\"100%\"\n left={0}\n width=\"fit-content\"\n backgroundColor={theme.colors.backgroundContent}\n borderBottomLeftRadius={theme.styles.borderRadius}\n borderBottomRightRadius={theme.styles.borderRadius}\n boxShadow=\"0px 10px 20px #00000020\"\n overflow=\"hidden\"\n userSelect=\"none\"\n {...insideInputFieldComponentProps}\n >\n <Div.row gap={theme.styles.space}>\n <Calendar value={internalValue} minDate={minDate} maxDate={maxDate} onChange={onChange} />\n\n <Div.row\n height={276}\n gap={theme.styles.gap / 2}\n paddingTop={topSpacing}\n paddingBottom={theme.styles.space / 2}\n paddingRight={theme.styles.space / 2}\n >\n <Div height=\"100%\">\n <Text fontSize={14} fontWeight={700} textAlign=\"center\" marginBottom={theme.styles.gap / 2}>\n H\n </Text>\n\n <Div\n className=\"react-better-html-no-scrollbar\"\n width={buttonWidth}\n height={`calc(100% - ${16 + theme.styles.gap / 2}px)`}\n overflowY=\"auto\"\n tabIndex={-1}\n >\n {hours.map((hour) => {\n const isSelected = hour.toString() === valueHour;\n\n return (\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n color={isSelected ? theme.colors.base : theme.colors.textPrimary}\n backgroundColor={\n isSelected ? theme.colors.primary : theme.colors.backgroundContent\n }\n borderRadius={theme.styles.borderRadius / 2}\n filterHover=\"brightness(0.9)\"\n cursor=\"pointer\"\n padding={`${theme.styles.space / 2}px ${\n theme.styles.space + theme.styles.gap\n }px`}\n value={hour}\n onClickWithValue={onClickHour}\n ref={isSelected ? selectedHourRef : undefined}\n key={hour}\n >\n <Text textAlign=\"center\">{hour.toString().padStart(2, \"0\")}</Text>\n </Div.row>\n );\n })}\n </Div>\n </Div>\n\n <Div height=\"100%\">\n <Text fontSize={14} fontWeight={700} textAlign=\"center\" marginBottom={theme.styles.gap / 2}>\n M\n </Text>\n\n <Div\n className=\"react-better-html-no-scrollbar\"\n width={buttonWidth}\n height={`calc(100% - ${16 + theme.styles.gap / 2}px)`}\n overflowY=\"auto\"\n tabIndex={-1}\n >\n {minutes.map((minute) => {\n const isSelected = minute.toString() === valueMinute;\n\n return (\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n color={isSelected ? theme.colors.base : theme.colors.textPrimary}\n backgroundColor={\n isSelected ? theme.colors.primary : theme.colors.backgroundContent\n }\n borderRadius={theme.styles.borderRadius / 2}\n filterHover=\"brightness(0.9)\"\n cursor=\"pointer\"\n padding={`${theme.styles.space / 2}px ${\n theme.styles.space + theme.styles.gap\n }px`}\n value={minute}\n onClickWithValue={onClickMinute}\n ref={isSelected ? selectedMinuteRef : undefined}\n key={minute}\n >\n <Text textAlign=\"center\">{minute.toString().padStart(2, \"0\")}</Text>\n </Div.row>\n );\n })}\n </Div>\n </Div>\n </Div.row>\n </Div.row>\n </Div>\n ) : undefined\n }\n holderRef={holderRef}\n ref={ref}\n {...props}\n {...inputFieldProps}\n />\n );\n}) as InputFieldComponentType[\"dateTime\"];\n\nInputFieldComponent.time = forwardRef(function Time({ ...props }, ref) {\n const theme = useTheme();\n\n const holderRef = useRef<HTMLDivElement>(null);\n const selectedHourRef = useRef<HTMLDivElement>(null);\n const selectedMinuteRef = useRef<HTMLDivElement>(null);\n\n const isMobileIOS = isMobileDevice && getBrowser() === \"safari\";\n\n const { internalValue, setInternalValue, inputFieldProps, insideInputFieldComponentProps, isOpen } =\n useComponentInputFieldDateProps(props, holderRef, isMobileIOS);\n\n const onClickHour = useCallback(\n (hour: number) => {\n const value = `${hour.toString().padStart(2, \"0\")}:${internalValue?.toString().split(\":\")[1] || \"00\"}`;\n\n inputFieldProps.onChangeValue?.(value);\n setInternalValue(value);\n },\n [internalValue, inputFieldProps.onChangeValue],\n );\n const onClickMinute = useCallback(\n (minute: number) => {\n const value = `${internalValue?.toString().split(\":\")[0] || \"00\"}:${minute.toString().padStart(2, \"0\")}`;\n\n inputFieldProps.onChangeValue?.(value);\n setInternalValue(value);\n },\n [internalValue, inputFieldProps.onChangeValue],\n );\n\n useEffect(() => {\n if (isOpen && selectedHourRef.current)\n selectedHourRef.current.scrollIntoView({ block: \"nearest\", behavior: \"instant\" });\n\n if (isOpen && selectedMinuteRef.current)\n selectedMinuteRef.current.scrollIntoView({ block: \"nearest\", behavior: \"instant\" });\n }, [isOpen]);\n\n const valueHour = parseInt(internalValue?.toString().split(\":\")?.[0]).toString();\n const valueMinute = parseInt(internalValue?.toString().split(\":\")?.[1]).toString();\n\n return (\n <InputFieldComponent\n type=\"time\"\n insideInputFieldAfterComponent={\n !isMobileIOS ? (\n <Div\n position=\"absolute\"\n top=\"100%\"\n left={0}\n width={buttonWidth * 2 + 2}\n height={300}\n backgroundColor={theme.colors.backgroundContent}\n borderBottomLeftRadius={theme.styles.borderRadius}\n borderBottomRightRadius={theme.styles.borderRadius}\n boxShadow=\"0px 10px 20px #00000020\"\n overflowY=\"auto\"\n userSelect=\"none\"\n {...insideInputFieldComponentProps}\n >\n <Div.row height=\"100%\">\n <Div\n className=\"react-better-html-no-scrollbar\"\n width={buttonWidth}\n height=\"100%\"\n overflowY=\"auto\"\n tabIndex={-1}\n >\n {hours.map((hour) => {\n const isSelected = hour.toString() === valueHour;\n\n return (\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n color={isSelected ? theme.colors.base : theme.colors.textPrimary}\n backgroundColor={isSelected ? theme.colors.primary : theme.colors.backgroundContent}\n filterHover=\"brightness(0.9)\"\n cursor=\"pointer\"\n padding={`${theme.styles.space / 2}px ${theme.styles.space + theme.styles.gap}px`}\n value={hour}\n onClickWithValue={onClickHour}\n ref={isSelected ? selectedHourRef : undefined}\n key={hour}\n >\n <Text textAlign=\"center\">{hour.toString().padStart(2, \"0\")}</Text>\n </Div.row>\n );\n })}\n </Div>\n\n <Div\n className=\"react-better-html-no-scrollbar\"\n width={buttonWidth}\n height=\"100%\"\n overflowY=\"auto\"\n tabIndex={-1}\n >\n {minutes.map((minute) => {\n const isSelected = minute.toString() === valueMinute;\n\n return (\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n color={isSelected ? theme.colors.base : theme.colors.textPrimary}\n backgroundColor={isSelected ? theme.colors.primary : theme.colors.backgroundContent}\n filterHover=\"brightness(0.9)\"\n cursor=\"pointer\"\n padding={`${theme.styles.space / 2}px ${theme.styles.space + theme.styles.gap}px`}\n value={minute}\n onClickWithValue={onClickMinute}\n ref={isSelected ? selectedMinuteRef : undefined}\n key={minute}\n >\n <Text textAlign=\"center\">{minute.toString().padStart(2, \"0\")}</Text>\n </Div.row>\n );\n })}\n </Div>\n </Div.row>\n </Div>\n ) : undefined\n }\n holderRef={holderRef}\n ref={ref}\n {...props}\n {...inputFieldProps}\n minWidth={buttonWidth * 2 + 2}\n />\n );\n}) as InputFieldComponentType[\"time\"];\n\nInputFieldComponent.color = forwardRef(function Color({ value, onChangeValue, ...props }, ref) {\n const [inputFieldValue, setInputFieldValue] = useState<typeof value>(value ?? \"#000000\");\n\n const onChangeValueElement = useCallback(\n (value: string) => {\n setInputFieldValue(value);\n onChangeValue?.(value);\n },\n [onChangeValue],\n );\n\n useEffect(() => {\n if (value === undefined) return;\n\n setInputFieldValue(value);\n }, [value]);\n\n return (\n <InputFieldComponent\n type=\"color\"\n insideInputFieldAfterComponent={\n <Div.row\n position=\"absolute\"\n width=\"100%\"\n height=\"100%\"\n top={0}\n left={colorPickerSpacing}\n alignItems=\"center\"\n pointerEvents=\"none\"\n userSelect=\"none\"\n paddingLeft={colorPickerColorWidth}\n >\n <Text>{inputFieldValue}</Text>\n </Div.row>\n }\n value={inputFieldValue}\n onChangeValue={onChangeValueElement}\n ref={ref}\n {...props}\n />\n );\n}) as InputFieldComponentType[\"color\"];\n\nconst InputField = memo(InputFieldComponent) as any as typeof InputFieldComponent & {\n multiline: typeof InputFieldComponent.multiline;\n email: typeof InputFieldComponent.email;\n password: typeof InputFieldComponent.password;\n search: typeof InputFieldComponent.search;\n phoneNumber: typeof InputFieldComponent.phoneNumber;\n date: typeof InputFieldComponent.date;\n dateTime: typeof InputFieldComponent.dateTime;\n time: typeof InputFieldComponent.time;\n color: typeof InputFieldComponent.color;\n};\n\nInputField.multiline = InputFieldComponent.multiline;\nInputField.email = InputFieldComponent.email;\nInputField.password = InputFieldComponent.password;\nInputField.search = InputFieldComponent.search;\nInputField.phoneNumber = InputFieldComponent.phoneNumber;\nInputField.date = InputFieldComponent.date;\nInputField.dateTime = InputFieldComponent.dateTime;\nInputField.time = InputFieldComponent.time;\nInputField.color = InputFieldComponent.color;\n\nexport default InputField;\n","import { memo } from \"react\";\nimport { useTheme } from \"react-better-core\";\n\nimport Text from \"./Text\";\n\nexport type LabelProps = {\n text?: string;\n /** @default false */\n required?: boolean;\n /** @default false */\n isError?: boolean;\n color?: string;\n htmlFor?: string;\n};\n\nfunction Label({ text, required, isError, color, htmlFor }: LabelProps) {\n const theme = useTheme();\n\n return (\n <Text\n as=\"label\"\n width=\"fit-content\"\n height={16}\n fontSize={14}\n color={isError ? theme.colors.error : color ?? theme.colors.textSecondary}\n htmlFor={htmlFor}\n aria-required={required}\n >\n {text}\n\n {required && (\n <Text as=\"span\" fontSize={16} color={theme.colors.error}>\n {\" \"}\n *\n </Text>\n )}\n </Text>\n );\n}\n\nexport default memo(Label);\n","import { forwardRef, Fragment, memo, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n getPluralWord,\n OmitProps,\n useBooleanState,\n useDebounceState,\n AnyOtherString,\n Country,\n countries,\n IconName,\n useTheme,\n} from \"react-better-core\";\n\nimport { ComponentPropWithRef } from \"../types/components\";\n\nimport Text from \"./Text\";\nimport Div, { DivProps } from \"./Div\";\nimport InputField from \"./InputField\";\nimport Icon from \"./Icon\";\nimport Button from \"./Button\";\nimport Loader from \"./Loader\";\nimport Image from \"./Image\";\nimport Chip from \"./Chip\";\n\nexport type DropdownOption<Value, Data = unknown> = {\n value: Value;\n label: string;\n /** @default false */\n disabled?: boolean;\n searchValues?: string[];\n data?: Data;\n} & (\n | {\n renderType?: \"default\";\n }\n | {\n renderType?: \"chip\";\n chipProps?: OmitProps<\n React.ComponentProps<typeof Chip>,\n \"text\" | \"value\" | \"onClick\" | \"onClickWithValue\" | \"ref\"\n >;\n }\n | {\n renderType?: \"chip.colored\";\n chipProps?: OmitProps<\n React.ComponentProps<typeof Chip.colored>,\n \"text\" | \"value\" | \"onClick\" | \"onClickWithValue\" | \"ref\"\n >;\n }\n);\n\nexport type DropdownProps<Value, Data = unknown> = {\n label?: string;\n labelColor?: string;\n errorText?: string;\n infoText?: string;\n /** @default false */\n required?: boolean;\n name?: string;\n /** @default false */\n disabled?: boolean;\n options: DropdownOption<Value, Data>[];\n placeholder?: string;\n leftIcon?: IconName | AnyOtherString;\n inputFieldClassName?: string;\n /** @default false */\n withSearch?: boolean;\n /** @default false */\n withDebounce?: boolean;\n /** @default 0.5s */\n debounceDelay?: number;\n /** @default false */\n debounceIsLoading?: boolean;\n debounceMinimumSymbolsRequired?: number;\n /** @default false */\n withoutClearButton?: boolean;\n /** @default false */\n withoutRenderingOptionsWhenClosed?: boolean;\n onChangeSearch?: (query: string) => void;\n renderOption?: (option: DropdownOption<Value, Data>, index: number, isSelected: boolean) => React.ReactNode;\n renderOptionDivider?: (\n previousOption: DropdownOption<Value, Data> | undefined,\n nextOption: DropdownOption<Value, Data> | undefined,\n previousOptionIndex: number,\n nextOptionIndex: number,\n ) => React.ReactNode;\n} & OmitProps<DivProps, \"onChange\" | \"defaultChecked\"> &\n (\n | {\n withMultiselect?: false;\n value?: Value;\n defaultValue?: Value;\n onChange?: (value: Value | undefined) => void;\n }\n | {\n withMultiselect: true;\n value?: Value[];\n defaultValue?: Value[];\n onChange?: (value: Value[] | undefined) => void;\n }\n );\n\ntype DropdownComponentType = {\n <Value, Data>(props: ComponentPropWithRef<HTMLDivElement, DropdownProps<Value, Data>>): React.ReactElement;\n countries: (\n props: ComponentPropWithRef<HTMLDivElement, OmitProps<DropdownProps<string, Country>, \"options\">>,\n ) => React.ReactElement;\n};\n\nconst DropdownComponent: DropdownComponentType = forwardRef(function Dropdown<Value, Data>(\n {\n label,\n labelColor,\n errorText,\n infoText,\n required,\n name,\n disabled,\n options,\n value: controlledValue,\n defaultValue,\n placeholder,\n leftIcon,\n inputFieldClassName,\n withSearch,\n withDebounce,\n debounceDelay = 0.5,\n debounceIsLoading,\n debounceMinimumSymbolsRequired,\n withoutClearButton,\n withoutRenderingOptionsWhenClosed,\n onChange,\n onChangeSearch,\n renderOption,\n renderOptionDivider,\n withMultiselect,\n id,\n ...props\n }: DropdownProps<Value, Data>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const theme = useTheme();\n\n const inputFieldHolderRef = useRef<HTMLDivElement>(null);\n const buttonsRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const [isOpen, setIsOpen] = useBooleanState();\n const [isOpenLate, setIsOpenLate] = useBooleanState();\n const [isFocused, setIsFocused] = useBooleanState();\n\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [_, debouncedSearchQuery, setDebouncedSearchQuery, isLoadingDebouncedSearchQuery] = useDebounceState<string>(\n \"\",\n debounceDelay,\n );\n const [focusedOptionIndex, setFocusedOptionIndex] = useState<number | undefined>();\n\n const [internalValue, setInternalValue] = useState<Value | Value[] | undefined>(defaultValue);\n\n const value = controlledValue ?? internalValue;\n\n const filteredOptions = useMemo(() => {\n if (!searchQuery) return options;\n\n const query = searchQuery.toLowerCase();\n\n return options.filter(\n (option) =>\n option.label.toLowerCase().includes(query) ||\n option.searchValues?.some((value) => value.toLowerCase().includes(query)),\n );\n }, [options, searchQuery]);\n\n const onKeyDownInputField = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\" || (!withSearch && event.key === \" \")) {\n event.preventDefault();\n\n if (!disabled) {\n if (withMultiselect) setIsOpen.setTrue();\n else setIsOpen.toggle();\n\n if (isOpen && filteredOptions.length > 0 && focusedOptionIndex !== undefined) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (!option.disabled) {\n const clickedValue = option.value;\n const newValue = withMultiselect\n ? Array.isArray(internalValue)\n ? internalValue?.includes(clickedValue)\n ? internalValue.filter((value) => value !== clickedValue)\n : [...internalValue, clickedValue]\n : [clickedValue]\n : clickedValue;\n\n if (controlledValue === undefined) setInternalValue(newValue);\n\n onChange?.(newValue as any);\n\n if (!withMultiselect) {\n setIsOpen.setFalse();\n inputRef.current?.blur();\n setSearchQuery(\"\");\n setFocusedOptionIndex(undefined);\n }\n }\n }\n }\n } else if (event.key === \"Escape\") {\n setIsOpen.setFalse();\n setFocusedOptionIndex(undefined);\n } else if (event.key === \"ArrowDown\") {\n event.preventDefault();\n\n if (!isOpen) setIsOpen.setTrue();\n\n if (filteredOptions.length > 0) {\n setFocusedOptionIndex((oldValue) =>\n oldValue === undefined ? 0 : (oldValue + 1) % filteredOptions.length,\n );\n }\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n\n if (!isOpen) setIsOpen.setTrue();\n\n if (filteredOptions.length > 0) {\n setFocusedOptionIndex((oldValue) =>\n oldValue === undefined\n ? filteredOptions.length - 1\n : (oldValue - 1 + filteredOptions.length) % filteredOptions.length,\n );\n }\n }\n },\n [\n disabled,\n withSearch,\n isOpen,\n filteredOptions,\n focusedOptionIndex,\n internalValue,\n controlledValue,\n onChange,\n withMultiselect,\n ],\n );\n const onClickOption = useCallback(\n (option: DropdownOption<Value, Data>) => {\n if (!option.disabled) {\n const clickedValue = option.value;\n const newValue = withMultiselect\n ? Array.isArray(internalValue)\n ? internalValue?.includes(clickedValue)\n ? internalValue.filter((value) => value !== clickedValue)\n : [...internalValue, clickedValue]\n : [clickedValue]\n : clickedValue;\n\n if (controlledValue === undefined) setInternalValue(newValue);\n\n onChange?.(newValue as any);\n\n if (!withMultiselect) {\n setIsOpen.setFalse();\n inputRef.current?.blur();\n setSearchQuery(\"\");\n setFocusedOptionIndex(undefined);\n }\n }\n },\n [onChange, internalValue, controlledValue, withMultiselect],\n );\n const onClickClearButton = useCallback(\n (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n event.stopPropagation();\n\n setInternalValue(undefined);\n onChange?.(undefined);\n\n setIsOpen.setFalse();\n inputRef.current?.blur();\n setSearchQuery(\"\");\n setFocusedOptionIndex(undefined);\n },\n [onChange],\n );\n const onChangeValue = useCallback(\n (newValue: string) => {\n setSearchQuery(newValue);\n\n if (withDebounce) setDebouncedSearchQuery(newValue);\n else onChangeSearch?.(newValue);\n },\n [withDebounce, onChangeSearch],\n );\n\n const selectedOption = useMemo(\n () =>\n withMultiselect\n ? options.filter((option) => (Array.isArray(value) ? value.includes(option.value) : false))\n : options.find((option) => option.value === value),\n [options, value],\n );\n const renderedOptions = useMemo(\n (): React.ReactNode => (\n <>\n {renderOptionDivider ? renderOptionDivider(undefined, filteredOptions[0], -1, 0) : undefined}\n\n {filteredOptions.map((option, index) => {\n const isSelected = withMultiselect\n ? Array.isArray(value)\n ? value.includes(option.value)\n : false\n : option.value === value;\n const isDisabled = option.disabled;\n const isFocused = index === focusedOptionIndex;\n\n return (\n <Fragment key={JSON.stringify(option)}>\n <Div\n color={\n isDisabled\n ? theme.colors.textSecondary + \"80\"\n : isSelected\n ? theme.colors.base\n : theme.colors.textPrimary\n }\n backgroundColor={isSelected ? theme.colors.primary : theme.colors.backgroundContent}\n filter={isFocused ? (isDisabled ? \"brightness(0.95)\" : \"brightness(0.9)\") : undefined}\n filterHover={focusedOptionIndex === undefined && !isDisabled ? \"brightness(0.9)\" : undefined}\n cursor={isDisabled ? \"not-allowed\" : \"pointer\"}\n padding={`${theme.styles.gap}px ${theme.styles.space}px`}\n value={option}\n onClickWithValue={onClickOption}\n onMouseMove={() => setFocusedOptionIndex(undefined)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={isDisabled}\n >\n {renderOption ? (\n renderOption(option, index, isSelected)\n ) : (\n <>\n {!option.renderType || option.renderType === \"default\" ? (\n <Text>{option.label}</Text>\n ) : option.renderType === \"chip\" ? (\n <Chip text={option.label} {...option.chipProps} />\n ) : option.renderType === \"chip.colored\" ? (\n <Chip.colored text={option.label} withWhiteBackground {...option.chipProps} />\n ) : undefined}\n </>\n )}\n </Div>\n\n {renderOptionDivider\n ? renderOptionDivider(\n option,\n filteredOptions[index + 1],\n index,\n filteredOptions[index + 1] ? index + 1 : -1,\n )\n : undefined}\n </Fragment>\n );\n })}\n </>\n ),\n [\n withMultiselect,\n filteredOptions,\n value,\n focusedOptionIndex,\n theme.colors,\n onClickOption,\n renderOption,\n renderOptionDivider,\n ],\n );\n\n useEffect(() => {\n setInternalValue(controlledValue);\n }, [controlledValue]);\n useEffect(() => {\n if (isOpen) {\n setIsOpenLate.setTrue();\n\n if (withSearch && inputRef.current) inputRef.current.focus();\n } else {\n const timeout = setTimeout(setIsOpenLate.setFalse, 0.2 * 1000);\n\n return () => {\n clearTimeout(timeout);\n };\n }\n }, [isOpen, withSearch]);\n useEffect(() => {\n setFocusedOptionIndex(undefined);\n }, [filteredOptions]);\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n inputFieldHolderRef.current &&\n buttonsRef.current &&\n !inputFieldHolderRef.current.contains(event.target as Node) &&\n !buttonsRef.current.contains(event.target as Node)\n ) {\n setIsOpen.setFalse();\n setSearchQuery(\"\");\n setFocusedOptionIndex(undefined);\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpen]);\n useEffect(() => {\n if (!withDebounce) return;\n\n onChangeSearch?.(debouncedSearchQuery);\n }, [withDebounce, onChangeSearch, debouncedSearchQuery]);\n\n const displayValue =\n (withSearch && isFocused ? searchQuery : !Array.isArray(selectedOption) ? selectedOption?.label : undefined) ??\n \"\";\n const withClearButton = isOpen && (Array.isArray(selectedOption) ? selectedOption.length > 0 : selectedOption);\n const readyPlaceholder =\n placeholder ??\n `Select ${!withMultiselect ? \"an \" : \"\"}${\n label?.toLowerCase() ?? getPluralWord(\"option\", withMultiselect ? 2 : 1)\n }`;\n\n return (\n <Div.column width=\"100%\" position=\"relative\" userSelect=\"none\" {...props}>\n <InputField\n label={label}\n labelColor={labelColor}\n errorText={errorText}\n infoText={infoText}\n required={\n withMultiselect\n ? (Array.isArray(value) ? value.length > 0 : value !== undefined)\n ? false\n : required\n : required\n }\n name={name}\n disabled={disabled}\n readOnly={!withSearch}\n value={displayValue}\n id={id}\n cursor={!withSearch ? \"pointer\" : undefined}\n placeholder={\n withSearch\n ? selectedOption && !Array.isArray(selectedOption)\n ? selectedOption.label\n : readyPlaceholder\n : readyPlaceholder\n }\n leftIcon={leftIcon}\n autoComplete=\"off\"\n className={`react-better-html-dropdown${\n Array.isArray(selectedOption) && selectedOption.length > 0\n ? \" react-better-html-dropdown-multiselect\"\n : \"\"\n }${isOpen ? \" react-better-html-dropdown-open\" : \"\"}${\n isOpenLate ? \" react-better-html-dropdown-open-late\" : \"\"\n }${inputFieldClassName ? ` ${inputFieldClassName}` : \"\"}`}\n onClick={!disabled ? (withMultiselect ? setIsOpen.setTrue : setIsOpen.toggle) : undefined}\n onFocus={setIsFocused.setTrue}\n onBlur={setIsFocused.setFalse}\n onKeyDown={onKeyDownInputField}\n onChangeValue={withSearch ? onChangeValue : undefined}\n insideInputFieldBeforeComponent={\n Array.isArray(selectedOption) && selectedOption.length > 0 ? (\n <Div\n width=\"100%\"\n backgroundColor={theme.colors.backgroundContent}\n border={`solid 1px ${theme.colors.border}`}\n borderColor={isFocused ? theme.colors.primary : undefined}\n borderBottom=\"none\"\n borderTopLeftRadius={theme.styles.borderRadius}\n borderTopRightRadius={theme.styles.borderRadius}\n paddingBlock={theme.styles.gap}\n paddingInline={(theme.styles.space + theme.styles.gap) / 2}\n transition={theme.styles.transition}\n >\n <Div.row width=\"100%\" flexWrap=\"wrap\" gap={theme.styles.gap}>\n {selectedOption.map((option) => {\n const ChipComponentTag =\n !option.renderType || option.renderType === \"default\" || option.renderType === \"chip\"\n ? Chip\n : option.renderType === \"chip.colored\"\n ? Chip.colored\n : Chip;\n const withXButton = isFocused || isOpen;\n\n return (\n <ChipComponentTag\n text={option.label}\n afterText={\n withXButton && (\n <Button.icon\n icon=\"XMark\"\n color={theme.colors.textSecondary}\n size={14}\n buttonSize={20}\n value={option}\n onClickWithValue={onClickOption}\n />\n )\n }\n height={20 + theme.styles.gap}\n paddingRight={withXButton ? theme.styles.gap / 2 : undefined}\n transition=\"none\"\n {...(option.renderType === \"chip\" || option.renderType === \"chip.colored\"\n ? option.chipProps\n : [])}\n withWhiteBackground={option.renderType === \"chip.colored\"}\n key={JSON.stringify(option)}\n />\n );\n })}\n </Div.row>\n </Div>\n ) : undefined\n }\n insideInputFieldAfterComponent={\n <>\n <Div\n position=\"absolute\"\n top=\"100%\"\n left={0}\n width=\"100%\"\n maxHeight={300}\n backgroundColor={theme.colors.backgroundContent}\n border={`1px solid ${isFocused ? theme.colors.primary : theme.colors.border}`}\n borderTop=\"none\"\n borderBottomLeftRadius={theme.styles.borderRadius}\n borderBottomRightRadius={theme.styles.borderRadius}\n boxShadow=\"0px 10px 20px #00000020\"\n zIndex={1000}\n overflowY=\"auto\"\n opacity={!isOpen ? 0 : undefined}\n pointerEvents={!isOpen ? \"none\" : undefined}\n transform={`translateY(${!isOpen ? -10 : 0}px)`}\n transition={theme.styles.transition}\n role=\"listbox\"\n aria-label={label}\n >\n {isLoadingDebouncedSearchQuery || debounceIsLoading ? (\n <Div padding={`${theme.styles.space / 2}px ${theme.styles.space + theme.styles.gap}px`}>\n <Loader.text />\n </Div>\n ) : filteredOptions.length ? (\n <>\n {(withoutRenderingOptionsWhenClosed ? isOpen || isOpenLate : true)\n ? renderedOptions\n : undefined}\n </>\n ) : (\n <Div padding={`${theme.styles.space / 2}px ${theme.styles.space + theme.styles.gap}px`}>\n <Text.unknown textAlign=\"left\">\n {debounceMinimumSymbolsRequired !== undefined &&\n searchQuery.length < debounceMinimumSymbolsRequired\n ? `Enter at least ${debounceMinimumSymbolsRequired} characters`\n : \"No options\"}\n </Text.unknown>\n </Div>\n )}\n </Div>\n\n <Div.row\n position=\"absolute\"\n top={46 / 2}\n right={theme.styles.space + 1}\n alignItems=\"center\"\n gap={theme.styles.gap}\n transform=\"translateY(-50%)\"\n pointerEvents=\"none\"\n filter={disabled ? \"brightness(0.9)\" : undefined}\n opacity={disabled ? 0.6 : undefined}\n zIndex={isOpen || isOpenLate ? 1001 : undefined}\n ref={buttonsRef}\n >\n {!withoutClearButton && (\n <Button.icon\n icon=\"XMark\"\n position=\"relative\"\n size={10}\n iconSize={14}\n opacity={!withClearButton ? 0 : undefined}\n pointerEvents={withClearButton ? \"all\" : undefined}\n onClick={onClickClearButton}\n disabled={!withClearButton}\n />\n )}\n\n <Icon\n name=\"chevronDown\"\n position=\"relative\"\n size={16}\n color={theme.colors.textSecondary}\n transform={`rotate(${isOpen ? 180 : 0}deg)`}\n transition={theme.styles.transition}\n pointerEvents=\"none\"\n aria-hidden\n />\n </Div.row>\n </>\n }\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-controls=\"dropdown-list\"\n aria-multiselectable={withMultiselect ? \"true\" : \"false\"}\n aria-haspopup=\"listbox\"\n aria-label={label}\n holderRef={inputFieldHolderRef}\n ref={inputRef}\n />\n </Div.column>\n );\n}) as any;\n\nDropdownComponent.countries = forwardRef(function Countries({ ...props }, ref) {\n const theme = useTheme();\n\n const renderOption = useCallback(\n (option: DropdownOption<string, Country>, index: number, isSelected: boolean): React.ReactNode => (\n <Div.row alignItems=\"center\" gap={theme.styles.gap}>\n <Image src={`https://flagcdn.com/w80/${option.data?.code.toString().toLowerCase()}.webp`} width={20} />\n <Text>{option.label}</Text>\n </Div.row>\n ),\n [],\n );\n\n const options = useMemo(\n () =>\n countries.map(\n (country): DropdownOption<string, Country> => ({\n value: country.code,\n label: country.name,\n data: country,\n searchValues: [country.code],\n }),\n ),\n [],\n );\n\n return (\n <DropdownComponent\n placeholder=\"Select a country\"\n options={options}\n renderOption={renderOption}\n withoutRenderingOptionsWhenClosed\n ref={ref}\n {...(props as any)}\n />\n );\n}) as DropdownComponentType[\"countries\"];\n\nconst Dropdown = memo(DropdownComponent) as any as typeof DropdownComponent & {\n countries: typeof DropdownComponent.countries;\n};\n\nDropdown.countries = DropdownComponent.countries;\n\nexport default Dropdown;\n","import { useCallback, useMemo, useState, memo, useEffect, useId } from \"react\";\nimport { Theme, useTheme } from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport Div from \"./Div\";\nimport Text from \"./Text\";\nimport Button from \"./Button\";\nimport Icon from \"./Icon\";\n\nconst getMonthName = (month: number, short = false) => {\n return [\n short ? \"Jan\" : \"January\",\n short ? \"Feb\" : \"February\",\n short ? \"Mar\" : \"March\",\n short ? \"Apr\" : \"April\",\n short ? \"May\" : \"May\",\n short ? \"Jun\" : \"June\",\n short ? \"Jul\" : \"July\",\n short ? \"Aug\" : \"August\",\n short ? \"Sep\" : \"September\",\n short ? \"Oct\" : \"October\",\n short ? \"Nov\" : \"November\",\n short ? \"Dec\" : \"December\",\n ][month];\n};\nconst getWeekDayName = (day: number, short = false) => {\n return [\n short ? \"Sun\" : \"Sunday\",\n short ? \"Mon\" : \"Monday\",\n short ? \"Tue\" : \"Tuesday\",\n short ? \"Wed\" : \"Wednesday\",\n short ? \"Thu\" : \"Thursday\",\n short ? \"Fri\" : \"Friday\",\n short ? \"Sat\" : \"Saturday\",\n ][day];\n};\n\nconst weekDaysIndex = [1, 2, 3, 4, 5, 6, 0];\nconst yearsRange = Array.from({ length: 100 + 1 + 50 }, (_, index) => index + new Date().getFullYear() - 100);\n\nconst SelectWrapperComponent = styled.div.withConfig({\n shouldForwardProp: (prop) => ![\"theme\"].includes(prop),\n})<{ theme: Theme }>`\n &:has(select:focus) {\n outline: auto;\n outline-color: -webkit-focus-ring-color;\n outline-style: auto;\n outline-offset: 2px;\n }\n`;\n\nconst SelectComponent = styled.select.withConfig({\n shouldForwardProp: (prop) => ![\"theme\"].includes(prop),\n})<{ theme: Theme }>`\n position: absolute;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n opacity: 0;\n`;\n\ntype CalendarProps = {\n value?: string;\n minDate?: Date;\n maxDate?: Date;\n onChange?: (date?: string) => void;\n};\n\nfunction Calendar({ value, minDate, maxDate, onChange }: CalendarProps) {\n const theme = useTheme();\n const internalYearSelectId = useId();\n\n const [currentDate, setCurrentDate] = useState(value ? new Date(value) : undefined);\n const [currentMonth, setCurrentMonth] = useState(currentDate?.getMonth() ?? new Date().getMonth());\n const [currentYear, setCurrentYear] = useState(currentDate?.getFullYear() ?? new Date().getFullYear());\n\n const daysInMonth = useMemo(() => new Date(currentYear, currentMonth + 1, 0).getDate(), [currentMonth, currentYear]);\n\n const onClickPreviousMonthButton = useCallback(() => {\n const newMonth = currentMonth === 0 ? 11 : currentMonth - 1;\n const newYear = currentMonth === 0 ? currentYear - 1 : currentYear;\n\n setCurrentMonth(newMonth);\n setCurrentYear(newYear);\n }, [currentMonth, currentYear]);\n const onClickNextMonthButton = useCallback(() => {\n const newMonth = currentMonth === 11 ? 0 : currentMonth + 1;\n const newYear = currentMonth === 11 ? currentYear + 1 : currentYear;\n\n setCurrentMonth(newMonth);\n setCurrentYear(newYear);\n }, [currentMonth, currentYear]);\n const onClickDay = useCallback(\n (day: number | undefined) => {\n if (!day) return;\n\n const newDate = new Date(currentYear, currentMonth, day);\n\n setCurrentDate(newDate);\n onChange?.(\n `${newDate.getFullYear()}-${(newDate.getMonth() + 1).toString().padStart(2, \"0\")}-${newDate\n .getDate()\n .toString()\n .padStart(2, \"0\")}`,\n );\n },\n [currentMonth, currentYear, onChange],\n );\n const onClickClear = useCallback(() => {\n setCurrentDate(undefined);\n onChange?.(undefined);\n }, []);\n const onClickToday = useCallback(() => {\n const today = new Date();\n\n setCurrentDate(today);\n onChange?.(\n `${today.getFullYear()}-${(today.getMonth() + 1).toString().padStart(2, \"0\")}-${today\n .getDate()\n .toString()\n .padStart(2, \"0\")}`,\n );\n }, [onChange]);\n const onChangeYearSelect = useCallback((event: React.ChangeEvent<HTMLSelectElement>) => {\n setCurrentYear(parseInt(event.target.value));\n }, []);\n\n const firstDayOfMonth = useMemo(() => {\n const day = new Date(currentYear, currentMonth, 1).getDay();\n\n return day === 0 ? 6 : day - 1;\n }, [currentMonth, currentYear]);\n const days = useMemo(() => {\n const result = [];\n\n for (let index = 0; index < firstDayOfMonth; index++) {\n result.push(undefined);\n }\n for (let index = 1; index <= daysInMonth; index++) {\n result.push(index);\n }\n\n return result;\n }, [daysInMonth, firstDayOfMonth]);\n\n useEffect(() => {\n if (!value) return;\n\n const date = new Date(value);\n\n setCurrentDate(date);\n setCurrentMonth(date.getMonth());\n setCurrentYear(date.getFullYear());\n }, [value]);\n\n return (\n <Div.column width=\"100%\" maxWidth={320} gap={theme.styles.gap} padding={theme.styles.space / 2} userSelect=\"none\">\n <Div.row width=\"100%\" justifyContent=\"space-between\" alignItems=\"center\">\n <Button.icon icon=\"chevronLeft\" onClick={onClickPreviousMonthButton} />\n\n <Div.row alignItems=\"center\" gap={4}>\n <Text fontWeight={700}>{getMonthName(currentMonth)}</Text>\n\n <SelectWrapperComponent>\n <Div.row position=\"relative\" alignItems=\"center\" gap={2}>\n <Text fontWeight={700}>{currentYear}</Text>\n <Icon name=\"chevronDown\" size={12} />\n\n <SelectComponent\n theme={theme}\n value={currentYear}\n onChange={onChangeYearSelect}\n id={internalYearSelectId}\n >\n {yearsRange.map((year) => (\n <option value={year} key={year}>\n {year}\n </option>\n ))}\n </SelectComponent>\n </Div.row>\n </SelectWrapperComponent>\n </Div.row>\n\n <Button.icon icon=\"chevronRight\" onClick={onClickNextMonthButton} />\n </Div.row>\n\n <Div.grid width=\"100%\" gridTemplateColumns=\"repeat(7, 1fr)\" gap={theme.styles.gap / 2}>\n {weekDaysIndex.map((day) => (\n <Div.row alignItems=\"center\" justifyContent=\"center\" key={day}>\n <Text fontSize={14} fontWeight={700} textAlign=\"center\">\n {getWeekDayName(day, true)}\n </Text>\n </Div.row>\n ))}\n\n {days.map((day, index) => {\n const thisDayDate = new Date(currentYear, currentMonth, day);\n\n const isSelected =\n day !== undefined &&\n day === currentDate?.getDate() &&\n currentMonth === currentDate.getMonth() &&\n currentYear === currentDate.getFullYear();\n\n const isToday =\n thisDayDate.getDate() === new Date().getDate() &&\n thisDayDate.getMonth() === new Date().getMonth() &&\n thisDayDate.getFullYear() === new Date().getFullYear();\n const isWeekend = thisDayDate.getDay() === 6 || thisDayDate.getDay() === 0;\n\n const isDisabled =\n (minDate && thisDayDate.getTime() < minDate.getTime()) ||\n (maxDate && thisDayDate.getTime() > maxDate.getTime());\n\n return (\n <Div.row\n position=\"relative\"\n width=\"100%\"\n aspectRatio=\"1\"\n alignItems=\"center\"\n justifyContent=\"center\"\n backgroundColor={isSelected ? theme.colors.primary : theme.colors.backgroundContent}\n filterHover={day && !isDisabled ? \"brightness(0.9)\" : undefined}\n border={`1px solid ${isToday ? theme.colors.primary : theme.colors.primary + \"00\"}`}\n borderRadius={theme.styles.borderRadius / 2}\n padding={theme.styles.space / 2}\n cursor={day ? (!isDisabled ? \"pointer\" : \"not-allowed\") : undefined}\n value={day}\n onClickWithValue={!isDisabled ? onClickDay : undefined}\n key={index}\n >\n {day && (\n <Text\n fontSize={14}\n textAlign=\"center\"\n color={\n isDisabled\n ? theme.colors.textSecondary + \"80\"\n : isSelected\n ? theme.colors.base\n : isWeekend\n ? theme.colors.textSecondary\n : undefined\n }\n >\n {day}\n </Text>\n )}\n\n {isDisabled && (\n <Div\n position=\"absolute\"\n width=\"60%\"\n height={1}\n top=\"50%\"\n left=\"50%\"\n backgroundColor={theme.colors.textSecondary}\n borderRadius={999}\n transform=\"translate(-50%, -50%) rotate(45deg)\"\n />\n )}\n </Div.row>\n );\n })}\n </Div.grid>\n\n <Div.row width=\"100%\" justifyContent=\"space-between\" alignItems=\"center\">\n <Div isTabAccessed cursor=\"pointer\" onClick={onClickClear}>\n <Text\n fontSize={14}\n textDecorationHover=\"underline\"\n color={theme.colors.textSecondary}\n colorHover={theme.colors.textPrimary}\n >\n Clear\n </Text>\n </Div>\n\n <Div isTabAccessed cursor=\"pointer\" onClick={onClickToday}>\n <Text\n fontSize={14}\n textDecorationHover=\"underline\"\n color={theme.colors.textSecondary}\n colorHover={theme.colors.textPrimary}\n >\n Today\n </Text>\n </Div>\n </Div.row>\n </Div.column>\n );\n}\n\nexport default memo(Calendar);\n","import { forwardRef, useCallback, useId, useState } from \"react\";\nimport { OmitProps, Theme, useBooleanState, useTheme } from \"react-better-core\";\nimport styled from \"styled-components\";\n\nimport { ComponentHoverStyle, ComponentPropWithRef, ComponentStyle } from \"../types/components\";\n\nimport { useComponentPropsGrouper, useComponentPropsWithPrefix } from \"../utils/hooks\";\n\nimport Text from \"./Text\";\nimport Div from \"./Div\";\nimport Icon from \"./Icon\";\nimport Label from \"./Label\";\n\nconst componentSize = 26;\nconst switchComponentBallGap = 3;\nconst switchComponentMouseDownDifference = 4;\n\nconst InputElement = styled.input.withConfig({\n shouldForwardProp: (prop) => ![\"theme\", \"style\", \"hoverStyle\"].includes(prop),\n})<{ theme: Theme; style: ComponentStyle; hoverStyle: ComponentStyle }>`\n position: relative;\n appearance: none;\n width: ${componentSize}px;\n height: ${componentSize}px;\n background-color: ${(props) => props.theme.colors.backgroundContent};\n border: 1px solid ${(props) => props.theme.colors.border};\n border-radius: ${(props) => props.theme.styles.borderRadius / 2}px;\n cursor: pointer;\n transition: ${(props) => props.theme.styles.transition};\n flex-shrink: 0;\n\n &[type=\"radio\"] {\n border-radius: 999px;\n }\n\n &:checked {\n background-color: ${(props) => props.theme.colors.primary};\n border-color: ${(props) => props.theme.colors.primary};\n }\n\n &:disabled {\n filter: brightness(0.9);\n cursor: not-allowed;\n }\n\n ${(props) => props.style as any}\n\n &:hover {\n border-color: ${(props) => props.theme.colors.primary};\n\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nconst SwitchElement = styled.div.withConfig({\n shouldForwardProp: (prop) => ![\"theme\", \"checked\", \"disabled\", \"isMouseDown\", \"style\", \"hoverStyle\"].includes(prop),\n})<{\n theme: Theme;\n checked: boolean;\n disabled: boolean;\n isMouseDown: boolean;\n style: ComponentStyle;\n hoverStyle: ComponentStyle;\n}>`\n --width: ${(props) => componentSize * 2 - props.theme.styles.gap / 2}px;\n --ball-size: ${componentSize - switchComponentBallGap * 2}px;\n\n position: relative;\n width: var(--width);\n height: ${componentSize}px;\n background-color: ${(props) => (props.checked ? props.theme.colors.primary : props.theme.colors.border)};\n border-radius: 999px;\n cursor: ${(props) => (props.disabled ? \"not-allowed\" : \"pointer\")};\n opacity: ${(props) => (props.disabled ? 0.5 : 1)};\n transition: ${(props) => props.theme.styles.transition};\n\n &::before {\n content: \"\";\n position: absolute;\n width: ${(props) =>\n componentSize - switchComponentBallGap * 2 + (props.isMouseDown ? switchComponentMouseDownDifference : 0)}px;\n height: ${componentSize - switchComponentBallGap * 2}px;\n background-color: ${(props) => props.theme.colors.base};\n border-radius: 999px;\n top: ${switchComponentBallGap}px;\n left: ${switchComponentBallGap}px;\n transform: translateX(\n ${(props) =>\n props.checked\n ? `calc(var(--width) - ${\n componentSize + (props.isMouseDown ? switchComponentMouseDownDifference : 0)\n }px)`\n : \"0px\"}\n );\n transition: ${(props) => props.theme.styles.transition};\n }\n\n &.react-better-html-color-theme-switch-with-moon {\n &::after {\n content: \"\";\n position: absolute;\n width: ${(props) =>\n componentSize -\n switchComponentBallGap * 2 +\n (props.isMouseDown ? switchComponentMouseDownDifference : 0)}px;\n height: ${componentSize - switchComponentBallGap * 2}px;\n background-color: ${(props) => (props.checked ? props.theme.colors.primary : \"transparent\")};\n border-radius: 999px;\n top: ${switchComponentBallGap}px;\n left: ${switchComponentBallGap}px;\n transform: translateX(\n ${(props) =>\n props.checked\n ? `calc(var(--width) - ${\n componentSize + (props.isMouseDown ? switchComponentMouseDownDifference * 2 : 0)\n }px - calc(var(--ball-size) / 3))`\n : \"0px\"}\n );\n transition: ${(props) => props.theme.styles.transition};\n }\n }\n\n ${(props) => props.style as any}\n\n &:hover {\n ${(props) => props.hoverStyle as any}\n }\n`;\n\nexport type ToggleInputRef = {};\n\ntype InternalToggleInputProps<Value> = {\n label?: string;\n labelColor?: string;\n text?: string;\n textAdvanced?: React.ReactNode;\n errorText?: string;\n infoText?: string;\n value?: Value;\n onChange?: (checked: boolean, value?: Value) => void;\n} & OmitProps<React.ComponentProps<\"input\">, \"style\" | \"value\" | \"ref\" | \"onChange\"> &\n ComponentStyle &\n ComponentHoverStyle;\n\nexport type ToggleInputProps<Value> = ComponentPropWithRef<\n ToggleInputRef,\n OmitProps<InternalToggleInputProps<Value>, \"type\">\n>;\ntype ToggleInputComponentType = <Value>(props: ToggleInputProps<Value>) => React.ReactElement;\n\nconst ToggleInputComponent = forwardRef(function ToggleInput<Value>(\n {\n label,\n labelColor,\n text,\n textAdvanced,\n errorText,\n infoText,\n value,\n onChange,\n checked: controlledChecked,\n color,\n required,\n id,\n ...props\n }: InternalToggleInputProps<Value>,\n ref: React.ForwardedRef<ToggleInputRef>,\n) {\n const theme = useTheme();\n const internalId = useId();\n\n const { style, hoverStyle, excludeStyle, restProps } = useComponentPropsGrouper(props, true);\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n const [internalChecked, setInternalChecked] = useState(false);\n\n const onChangeElement = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const newIsChecked = event.target.checked;\n\n if (controlledChecked === undefined) setInternalChecked(newIsChecked);\n onChange?.(newIsChecked, value);\n },\n [onChange, controlledChecked, value],\n );\n\n const checked = controlledChecked ?? internalChecked;\n\n const onClickText = useCallback(() => {\n const newIsChecked = !checked;\n\n if (controlledChecked === undefined) setInternalChecked(newIsChecked);\n onChange?.(newIsChecked, value);\n }, [checked, controlledChecked, onChange, value]);\n\n const readyId = id ?? internalId;\n\n return (\n <Div.column gap={theme.styles.gap} {...excludeStyle}>\n {label && (\n <Label text={label} color={labelColor} required={required} isError={!!errorText} htmlFor={readyId} />\n )}\n\n <Div.row alignItems=\"center\" gap={theme.styles.gap}>\n <Div.row position=\"relative\" alignItems=\"center\">\n <InputElement\n theme={theme}\n type={props.type ?? \"checkbox\"}\n checked={checked}\n onChange={onChangeElement}\n id={readyId}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n />\n\n {props.type === \"checkbox\" ? (\n <Icon\n name=\"check\"\n position=\"absolute\"\n top=\"50%\"\n left=\"50%\"\n color={theme.colors.base}\n size={14}\n transform={`translate(-50%, -50%)${checked ? \"\" : \" scale(0.4)\"}`}\n opacity={checked ? 1 : 0}\n pointerEvents=\"none\"\n transition={theme.styles.transition}\n />\n ) : props.type === \"radio\" ? (\n <Div\n position=\"absolute\"\n width={10}\n height={10}\n top=\"50%\"\n left=\"50%\"\n backgroundColor={theme.colors.base}\n borderRadius={999}\n transform={`translate(-50%, -50%)${checked ? \"\" : \" scale(0.4)\"}`}\n opacity={checked ? 1 : 0}\n pointerEvents=\"none\"\n />\n ) : undefined}\n </Div.row>\n\n {text ? (\n <Text color={color} userSelect=\"none\" cursor=\"pointer\" onClick={onClickText}>\n {text}\n {required && !label && (\n <Text as=\"span\" fontSize={16} color={theme.colors.error}>\n {\" \"}\n *\n </Text>\n )}\n </Text>\n ) : textAdvanced ? (\n <Div.row userSelect=\"none\" cursor=\"pointer\" onClick={onClickText}>\n {textAdvanced}\n\n {required && !label && (\n <Text as=\"span\" fontSize={16} color={theme.colors.error} marginLeft={4}>\n {\" \"}\n *\n </Text>\n )}\n </Div.row>\n ) : undefined}\n </Div.row>\n\n {(errorText || infoText) && (\n <Text\n as=\"span\"\n display=\"block\"\n fontSize={14}\n color={errorText ? theme.colors.error : labelColor ?? theme.colors.textSecondary}\n >\n {errorText || infoText}\n </Text>\n )}\n </Div.column>\n );\n}) as <Value>(props: ComponentPropWithRef<ToggleInputRef, InternalToggleInputProps<Value>>) => React.ReactElement;\n\nexport default {\n checkbox: forwardRef(function Checkbox<Value>(\n props: ToggleInputProps<Value>,\n ref: React.ForwardedRef<ToggleInputRef>,\n ) {\n return <ToggleInputComponent type=\"checkbox\" ref={ref} {...props} />;\n }) as ToggleInputComponentType,\n radiobutton: forwardRef(function RadioButton<Value>(\n props: ToggleInputProps<Value>,\n ref: React.ForwardedRef<ToggleInputRef>,\n ) {\n return <ToggleInputComponent type=\"radio\" ref={ref} {...props} />;\n }) as ToggleInputComponentType,\n switch: forwardRef(function Switch<Value>(\n {\n label,\n labelColor,\n errorText,\n infoText,\n disabled,\n value,\n onChange,\n checked: controlledChecked,\n required,\n id,\n ...props\n }: InternalToggleInputProps<Value>,\n ref: React.ForwardedRef<ToggleInputRef>,\n ) {\n const theme = useTheme();\n const internalId = useId();\n\n const { style, hoverStyle, excludeStyle, restProps } = useComponentPropsGrouper(props, true);\n const dataProps = useComponentPropsWithPrefix(restProps, \"data\");\n const ariaProps = useComponentPropsWithPrefix(restProps, \"aria\");\n\n const [internalChecked, setInternalChecked] = useBooleanState();\n const [isMouseDown, setIsMouseDown] = useBooleanState();\n\n const checked = controlledChecked ?? internalChecked;\n\n const onClickElement = useCallback(() => {\n if (disabled) return;\n\n const newIsChecked = !checked;\n\n if (controlledChecked === undefined) setInternalChecked.setState(newIsChecked);\n onChange?.(newIsChecked, value);\n }, [disabled, checked, onChange, controlledChecked, value]);\n\n const readyId = id ?? internalId;\n\n return (\n <Div.column width=\"fit-content\" gap={theme.styles.gap} {...excludeStyle}>\n {label && (\n <Label text={label} color={labelColor} required={required} isError={!!errorText} htmlFor={readyId} />\n )}\n\n <Div.row\n alignItems=\"center\"\n gap={theme.styles.gap}\n borderRadius={999}\n isTabAccessed\n onClick={onClickElement}\n onMouseDown={setIsMouseDown.setTrue}\n onMouseUp={setIsMouseDown.setFalse}\n onMouseOut={setIsMouseDown.setFalse}\n onTouchStart={setIsMouseDown.setTrue}\n onTouchEnd={setIsMouseDown.setFalse}\n onTouchCancel={setIsMouseDown.setFalse}\n >\n <SwitchElement\n theme={theme}\n checked={checked}\n disabled={disabled ?? false}\n isMouseDown={isMouseDown}\n id={readyId}\n role=\"switch\"\n aria-checked={checked}\n aria-disabled={disabled ?? false}\n style={style}\n hoverStyle={hoverStyle}\n {...restProps}\n {...dataProps}\n {...ariaProps}\n />\n </Div.row>\n\n {(errorText || infoText) && (\n <Text\n as=\"span\"\n display=\"block\"\n fontSize={14}\n color={errorText ? theme.colors.error : labelColor ?? theme.colors.textSecondary}\n >\n {errorText || infoText}\n </Text>\n )}\n </Div.column>\n );\n }) as ToggleInputComponentType,\n};\n","import { Children, forwardRef, Fragment, memo, useMemo } from \"react\";\nimport { AnyOtherString, LoaderName, OmitProps, useTheme } from \"react-better-core\";\n\nimport { ComponentMarginProps, ComponentPropWithRef } from \"../types/components\";\n\nimport { useForm } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport Button from \"./Button\";\nimport Divider from \"./Divider\";\n\nexport type FormProps = {\n form?: OmitProps<ReturnType<typeof useForm>, \"focusField\">;\n name?: string;\n submitButtonText?: string;\n submitButtonLoaderName?: LoaderName | AnyOtherString;\n submitButtonIsLoading?: boolean;\n submitButtonId?: string;\n /** @default false */\n submitButtonIsDisabled?: boolean;\n cancelButtonText?: string;\n cancelButtonLoaderName?: LoaderName | AnyOtherString;\n cancelButtonIsLoading?: boolean;\n cancelButtonId?: string;\n /** @default false */\n cancelButtonIsDisabled?: boolean;\n /** @default \"right\" */\n actionButtonsLocation?: \"left\" | \"center\" | \"right\";\n gap?: React.CSSProperties[\"gap\"];\n /** @default false */\n isDestructive?: boolean;\n /** @default false */\n withDividers?: boolean;\n renderActionButtons?: React.ReactNode;\n onClickCancel?: () => void;\n onSubmit?: (event: React.FormEvent<HTMLFormElement>) => void;\n children?: React.ReactNode;\n} & ComponentMarginProps;\n\ntype FormComponentType = {\n (props: ComponentPropWithRef<HTMLFormElement, FormProps>): React.ReactElement;\n};\n\nconst FormComponent: FormComponentType = forwardRef(function Form(\n {\n form,\n name,\n submitButtonText,\n submitButtonLoaderName,\n submitButtonIsLoading,\n submitButtonId,\n submitButtonIsDisabled,\n cancelButtonText,\n cancelButtonLoaderName,\n cancelButtonIsLoading,\n cancelButtonId,\n cancelButtonIsDisabled,\n actionButtonsLocation = \"right\",\n gap,\n isDestructive,\n withDividers,\n renderActionButtons,\n onClickCancel,\n onSubmit,\n children,\n ...props\n }: FormProps,\n ref: React.ForwardedRef<HTMLFormElement>,\n) {\n const theme = useTheme();\n\n const submitButtonIsDisabledInternal = useMemo<boolean>(() => {\n if (!form || !form.requiredFields) return false;\n\n return Object.entries(form.values).some(\n ([key, value]) =>\n form.requiredFields?.includes(key) &&\n (value === undefined || value === null || value?.toString().trim() === \"\"),\n );\n }, [form]);\n\n const SubmitButtonTag = isDestructive ? Button.destructive : Button;\n const submitButtonIsDisabledFinal = submitButtonIsDisabled || submitButtonIsDisabledInternal;\n\n return (\n <Div width=\"100%\" {...props}>\n <form name={name} onSubmit={onSubmit ?? form?.onSubmit} ref={ref}>\n {gap !== undefined || withDividers ? (\n <Div.column gap={gap ?? (withDividers ? theme.styles.space : theme.styles.gap)}>\n {withDividers\n ? Children.toArray(children).map((child, index) => (\n <Fragment key={index}>\n {child}\n\n {index < Children.toArray(children).length - 1 && <Divider.horizontal />}\n </Fragment>\n ))\n : children}\n </Div.column>\n ) : (\n children\n )}\n\n {submitButtonText && (\n <Div.row\n alignItems=\"center\"\n justifyContent={\n actionButtonsLocation === \"left\"\n ? \"flex-start\"\n : actionButtonsLocation === \"center\"\n ? \"center\"\n : \"flex-end\"\n }\n gap={theme.styles.gap}\n marginTop={theme.styles.space}\n >\n {renderActionButtons}\n\n {onClickCancel && (\n <Button.secondary\n text={cancelButtonText ?? \"Cancel\"}\n isLoading={cancelButtonIsLoading}\n loaderName={cancelButtonLoaderName}\n disabled={cancelButtonIsDisabled}\n id={cancelButtonId}\n onClick={onClickCancel}\n />\n )}\n\n <SubmitButtonTag\n text={submitButtonText}\n isLoading={submitButtonIsLoading || form?.isSubmitting}\n loaderName={submitButtonLoaderName}\n disabled={submitButtonIsDisabledFinal}\n id={submitButtonId}\n isSubmit\n />\n </Div.row>\n )}\n </form>\n </Div>\n );\n}) as any;\n\nconst Form = memo(FormComponent) as any as typeof FormComponent & {};\n\nexport default Form;\n","import { forwardRef, memo } from \"react\";\nimport { AnyOtherString, IconName, LoaderName, useTheme } from \"react-better-core\";\n\nimport { ComponentMarginProps, ComponentPropWithRef } from \"../types/components\";\n\nimport { useMediaQuery } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport Icon from \"./Icon\";\nimport Text, { TextAs } from \"./Text\";\nimport Button from \"./Button\";\nimport Loader from \"./Loader\";\n\nexport type FormRowProps = {\n oneItemOnly?: boolean;\n /**\n * @description Weather to break the two items into two separate lines on mobile or not\n * @default false\n */\n noBreakingPoint?: boolean;\n /**\n * @description Weather to render the children as a column or not\n * @default false\n */\n asColumn?: boolean;\n gap?: React.CSSProperties[\"gap\"];\n children?: React.ReactNode;\n} & ComponentMarginProps;\n\ntype FormRowComponentType = {\n (props: ComponentPropWithRef<HTMLDivElement, FormRowProps>): React.ReactElement;\n withTitle: (\n props: ComponentPropWithRef<\n HTMLDivElement,\n FormRowProps & {\n icon?: IconName | AnyOtherString;\n title?: string;\n /** @default \"h3\" */\n titleAs?: TextAs;\n titleFontSize?: React.CSSProperties[\"fontSize\"];\n description?: string;\n descriptionFontSize?: React.CSSProperties[\"fontSize\"];\n required?: boolean;\n alignChildren?: React.CSSProperties[\"justifyContent\"];\n isLoading?: boolean;\n withActions?: boolean;\n saveButtonLoaderName?: LoaderName | AnyOtherString;\n resetButtonLoaderName?: LoaderName | AnyOtherString;\n onClickSave?: () => void;\n onClickReset?: () => void;\n }\n >,\n ) => React.ReactElement;\n};\n\nconst FormRowComponent: FormRowComponentType = forwardRef(function FormRow(\n { oneItemOnly, noBreakingPoint, asColumn, gap, children, ...props }: FormRowProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const theme = useTheme();\n const mediaQuery = useMediaQuery();\n\n const breakingPoint = asColumn ?? (!noBreakingPoint ? mediaQuery.size900 : false);\n const readyGap =\n breakingPoint || (noBreakingPoint && mediaQuery.size900) ? theme.styles.gap : theme.styles.space * 2;\n\n return (\n <Div.row alignItems=\"center\" gap={gap ?? readyGap} invertFlexDirection={breakingPoint} {...props} ref={ref}>\n {children}\n\n {oneItemOnly && <Div width=\"100%\" />}\n </Div.row>\n );\n}) as any;\n\nFormRowComponent.withTitle = forwardRef(function WithTitle(\n {\n icon,\n title,\n titleAs = \"h3\",\n titleFontSize,\n description,\n descriptionFontSize,\n required,\n alignChildren = \"flex-start\",\n isLoading,\n withActions,\n saveButtonLoaderName,\n resetButtonLoaderName,\n onClickSave,\n onClickReset,\n children,\n ...props\n },\n ref,\n) {\n const theme = useTheme();\n const mediaQuery = useMediaQuery();\n\n const titleGap = theme.styles.space;\n\n return (\n <FormRowComponent {...props} ref={ref}>\n <Div.row width=\"100%\" alignItems=\"center\" gap={titleGap}>\n {icon && <Icon name={icon} />}\n\n <Div.column flex={1} gap={theme.styles.gap / 2}>\n <Text as={titleAs} fontSize={titleFontSize}>\n {title}\n\n {required && (\n <Text as=\"span\" fontSize={16} color={theme.colors.error}>\n {\" \"}\n *\n </Text>\n )}\n </Text>\n\n {description && (\n <Text fontSize={descriptionFontSize} color={theme.colors.textSecondary}>\n {description}\n </Text>\n )}\n </Div.column>\n\n {isLoading && <Div width={26 - titleGap} />}\n </Div.row>\n\n <Div.row\n position=\"relative\"\n width={props.noBreakingPoint && mediaQuery.size900 ? undefined : \"100%\"}\n alignItems=\"center\"\n justifyContent={alignChildren}\n gap={theme.styles.gap}\n >\n <Div\n position=\"absolute\"\n top=\"50%\"\n right={`calc(100% + ${theme.styles.space}px)`}\n transform=\"translateY(-50%)\"\n opacity={!isLoading ? 0 : undefined}\n pointerEvents={!isLoading ? \"none\" : undefined}\n >\n <Loader />\n </Div>\n\n {children}\n\n {withActions && (\n <Div.row alignItems=\"center\" gap={theme.styles.gap}>\n {onClickReset && (\n <Button.icon icon=\"XMark\" loaderName={resetButtonLoaderName} onClick={onClickReset} />\n )}\n <Button.icon icon=\"check\" loaderName={saveButtonLoaderName} onClick={onClickSave} />\n </Div.row>\n )}\n </Div.row>\n </FormRowComponent>\n );\n}) as FormRowComponentType[\"withTitle\"];\n\nconst FormRow = memo(FormRowComponent) as any as typeof FormRowComponent & {\n withTitle: typeof FormRowComponent.withTitle;\n};\n\nFormRow.withTitle = FormRowComponent.withTitle;\n\nexport default FormRow;\n","import { memo, useCallback, useEffect, useState } from \"react\";\nimport { useTheme } from \"react-better-core\";\n\nimport { ComponentMarginProps } from \"../types/components\";\n\nimport Div from \"./Div\";\nimport Text from \"./Text\";\nimport ToggleInput from \"./ToggleInput\";\n\nexport type ColorThemeSwitchProps = {\n /** @default false */\n withMoon?: boolean;\n className?: string;\n} & ComponentMarginProps;\n\ntype ColorThemeSwitchComponentType = {\n (props: ColorThemeSwitchProps): React.ReactElement;\n withText: (props: ColorThemeSwitchProps) => React.ReactElement;\n};\n\nconst ColorThemeSwitchComponent: ColorThemeSwitchComponentType = function ColorThemeSwitch({\n withMoon,\n className,\n ...props\n}: ColorThemeSwitchProps) {\n const [value, setValue] = useState(localStorage.getItem(\"theme\") === \"dark\");\n\n const onChangeSwitch = useCallback((checked: boolean) => {\n setValue(checked);\n\n document.querySelector(\"html\")?.setAttribute(\"data-theme\", checked ? \"dark\" : \"light\");\n }, []);\n\n useEffect(() => {\n const html = document.querySelector(\"html\");\n\n if (!html) return;\n\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === \"attributes\") {\n setValue(html.getAttribute(\"data-theme\") === \"dark\");\n }\n });\n });\n\n observer.observe(html, {\n attributes: true,\n attributeFilter: [\"data-theme\"],\n });\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return (\n <ToggleInput.switch\n className={`react-better-html-color-theme-switch ${\n withMoon ? ` react-better-html-color-theme-switch-with-moon` : \"\"\n }${className ? ` ${className}` : \"\"}`}\n checked={value}\n onChange={onChangeSwitch}\n {...props}\n />\n );\n} as any;\n\nColorThemeSwitchComponent.withText = function WithText({ withMoon, className, ...props }) {\n const theme = useTheme();\n\n return (\n <Div.row width=\"fit-content\" alignItems=\"center\" gap={theme.styles.gap} userSelect=\"none\" {...props}>\n <Text>Light</Text>\n <ColorThemeSwitchComponent withMoon={withMoon} className={className} />\n <Text>Dark</Text>\n </Div.row>\n );\n} as ColorThemeSwitchComponentType[\"withText\"];\n\nconst ColorThemeSwitch = memo(ColorThemeSwitchComponent) as any as typeof ColorThemeSwitchComponent & {\n withText: typeof ColorThemeSwitchComponent.withText;\n};\n\nColorThemeSwitch.withText = ColorThemeSwitchComponent.withText;\n\nexport default ColorThemeSwitch;\n","import {\n forwardRef,\n memo,\n useCallback,\n ReactNode,\n useMemo,\n useState,\n useImperativeHandle,\n useRef,\n useEffect,\n Fragment,\n} from \"react\";\nimport { ColorTheme, darkenColor, OmitProps, Theme, useBetterCoreContext, useTheme } from \"react-better-core\";\nimport styled, { css } from \"styled-components\";\n\nimport { ComponentMarginProps, ComponentPropWithRef, ComponentStyle } from \"../types/components\";\n\nimport { useForm, useMediaQuery } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport ToggleInput, { ToggleInputProps } from \"./ToggleInput\";\nimport Image, { ImageProps } from \"./Image\";\nimport Text, { TextProps } from \"./Text\";\nimport Loader from \"./Loader\";\nimport Button from \"./Button\";\nimport Modal, { ModalRef } from \"./Modal\";\nimport FormRow from \"./FormRow\";\nimport InputField from \"./InputField\";\nimport Form from \"./Form\";\nimport Label from \"./Label\";\nimport Icon from \"./Icon\";\nimport Pagination from \"./Pagination\";\n\nconst defaultImageWidth = 160;\nconst maximumVisiblePages = 11;\n\nconst TableStyledComponent = styled.table.withConfig({\n shouldForwardProp: (prop) =>\n ![\n \"isStriped\",\n \"withHover\",\n \"withStickyHeader\",\n \"colorTheme\",\n \"theme\",\n \"containsOverflowComponents\",\n \"withFooter\",\n ].includes(prop),\n})<{\n isStriped?: boolean;\n withHover?: boolean;\n withStickyHeader?: boolean;\n colorTheme?: ColorTheme;\n theme: Theme;\n containsOverflowComponents?: boolean;\n withFooter?: boolean;\n}>`\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n\n thead {\n tr:first-child {\n border-top-left-radius: ${(props) =>\n props.containsOverflowComponents ? `${props.theme.styles.borderRadius * 2 - 1}px` : undefined};\n border-top-right-radius: ${(props) =>\n props.containsOverflowComponents ? `${props.theme.styles.borderRadius * 2 - 1}px` : undefined};\n\n th:first-child {\n border-top-left-radius: ${(props) =>\n props.containsOverflowComponents ? `${props.theme.styles.borderRadius * 2 - 1}px` : undefined};\n }\n\n th:last-child {\n border-top-right-radius: ${(props) =>\n props.containsOverflowComponents ? `${props.theme.styles.borderRadius * 2 - 1}px` : undefined};\n }\n }\n }\n\n tbody {\n tr:last-child {\n border-bottom-left-radius: ${(props) =>\n props.containsOverflowComponents && !props.withFooter\n ? `${props.theme.styles.borderRadius * 2 - 1}px`\n : undefined};\n border-bottom-right-radius: ${(props) =>\n props.containsOverflowComponents && !props.withFooter\n ? `${props.theme.styles.borderRadius * 2 - 1}px`\n : undefined};\n\n td:first-child {\n border-bottom-left-radius: ${(props) =>\n props.containsOverflowComponents && !props.withFooter\n ? `${props.theme.styles.borderRadius * 2 - 1}px`\n : undefined};\n }\n\n td:last-child {\n border-bottom-right-radius: ${(props) =>\n props.containsOverflowComponents && !props.withFooter\n ? `${props.theme.styles.borderRadius * 2 - 1}px`\n : undefined};\n }\n }\n }\n\n tfoot {\n tr:last-child {\n border-bottom-left-radius: ${(props) =>\n props.containsOverflowComponents ? `${props.theme.styles.borderRadius * 2 - 1}px` : undefined};\n border-bottom-right-radius: ${(props) =>\n props.containsOverflowComponents ? `${props.theme.styles.borderRadius * 2 - 1}px` : undefined};\n\n td:first-child {\n border-bottom-left-radius: ${(props) =>\n props.containsOverflowComponents ? `${props.theme.styles.borderRadius * 2 - 1}px` : undefined};\n }\n\n td:last-child {\n border-bottom-right-radius: ${(props) =>\n props.containsOverflowComponents ? `${props.theme.styles.borderRadius * 2 - 1}px` : undefined};\n }\n }\n }\n\n tr {\n background-color: ${(props) => props.theme.colors.backgroundContent};\n\n &.isHeader {\n background-color: ${(props) => props.theme.colors.backgroundSecondary};\n font-weight: 700;\n }\n\n &.isFooter {\n background-color: ${(props) => props.theme.colors.backgroundSecondary};\n }\n\n &.isExpandRow {\n height: 0px;\n\n td {\n border-top: none;\n }\n }\n\n ${(props) =>\n props.isStriped\n ? css`\n &:nth-child(even) {\n background-color: ${props.theme.colors.backgroundSecondary};\n }\n `\n : \"\"}\n\n ${(props) =>\n props.withHover\n ? css`\n transition: ${props.theme.styles.transition};\n\n &:not(.isHeader):not(.isFooter):not(.withoutHover):hover {\n background-color: ${darkenColor(\n props.theme.colors.backgroundContent,\n props.colorTheme === \"light\" ? 0.05 : 0.15,\n )};\n cursor: pointer;\n }\n `\n : \"\"}\n\n th {\n font-size: 18px;\n text-align: left;\n padding: ${(props) => props.theme.styles.space}px;\n }\n\n td {\n border-top: 1px solid ${(props) => props.theme.colors.border + (props.colorTheme === \"light\" ? \"60\" : \"40\")};\n padding: ${(props) => props.theme.styles.gap}px ${(props) => props.theme.styles.space}px;\n\n &.noData {\n text-align: center;\n padding: ${(props) => props.theme.styles.space}px;\n }\n }\n }\n`;\n\nconst ThStyledComponent = styled.th.withConfig({\n shouldForwardProp: (prop) => ![\"width\", \"minWidth\", \"maxWidth\", \"textAlign\"].includes(prop),\n})<{\n width?: React.CSSProperties[\"width\"];\n minWidth?: React.CSSProperties[\"minWidth\"];\n maxWidth?: React.CSSProperties[\"maxWidth\"];\n textAlign?: React.CSSProperties[\"textAlign\"];\n}>`\n ${(props) => (props.width ? `width: ${props.width}px;` : \"\")}\n ${(props) => (props.minWidth ? `min-width: ${props.minWidth}px;` : \"\")}\n ${(props) => (props.maxWidth ? `max-width: ${props.maxWidth}px;` : \"\")}\n ${(props) => (props.textAlign ? `text-align: ${props.textAlign} !important;` : \"\")}\n`;\n\nconst TdStyledComponent = styled.td.withConfig({\n shouldForwardProp: (prop) => ![\"width\", \"textAlign\"].includes(prop),\n})<{\n textAlign?: React.CSSProperties[\"textAlign\"];\n}>`\n ${(props) => (props.textAlign ? `text-align: ${props.textAlign} !important;` : \"\")}\n`;\n\nconst filterPresetsText: Record<FilterPreset, string> = {\n today: \"Today\",\n yesterday: \"Yesterday\",\n tomorrow: \"Tomorrow\",\n thisWeek: \"This week\",\n thisMonth: \"This month\",\n thisYear: \"This year\",\n lastWeek: \"Last week\",\n lastMonth: \"Last month\",\n lastYear: \"Last year\",\n nextWeek: \"Next week\",\n nextMonth: \"Next month\",\n nextYear: \"Next year\",\n};\n\ntype FilterPreset =\n | \"today\"\n | \"yesterday\"\n | \"tomorrow\"\n | \"thisWeek\"\n | \"thisMonth\"\n | \"thisYear\"\n | \"lastWeek\"\n | \"lastMonth\"\n | \"lastYear\"\n | \"nextWeek\"\n | \"nextMonth\"\n | \"nextYear\";\n\ntype ListFilterValue = {\n value: number | string | boolean;\n label?: string;\n count: number;\n};\n\nexport type TableListFilterListItem = OmitProps<ListFilterValue, \"count\">;\n\nexport type TableFilterData =\n | {\n type: \"number\";\n min?: number;\n max?: number;\n }\n | {\n type: \"date\" | \"date-time\";\n min?: string;\n max?: string;\n }\n | {\n type: \"list\";\n list: ListFilterValue[\"value\"][];\n };\n\n//? Column types\ntype TextColumn<DataItem> = {\n type: \"text\";\n keyName?: keyof DataItem;\n getTextProps?: ((item: DataItem, index: number) => TextProps) | TextProps;\n format?: (item: DataItem, index: number) => string;\n};\n\ntype ElementColumn<DataItem> = {\n type: \"element\";\n render?: (item: DataItem, index: number) => ReactNode;\n};\n\ntype ImageColumn<DataItem> = {\n type: \"image\";\n getImageProps?: ((item: DataItem, index: number) => ImageProps) | ImageProps;\n};\n\ntype CheckboxColumn<DataItem> = {\n type: \"checkbox\";\n getToggleInputProps?: ((item: DataItem, index: number) => ToggleInputProps<DataItem>) | ToggleInputProps<DataItem>;\n};\n\ntype ExpandColumn<DataItem> = {\n type: \"expand\";\n onlyOneExpanded?: boolean;\n render?: (item: DataItem, index: number) => ReactNode;\n onExpand?: (item: DataItem, index: number) => void;\n onCollapse?: (item: DataItem, index: number) => void;\n};\n\n//? Filter types\ntype NumberFilter<DataItem> = {\n filter?: \"number\";\n getValue?: (item: DataItem) => number;\n};\n\ntype DateFilter<DataItem> = {\n filter?: \"date\" | \"date-time\";\n presets?: FilterPreset[];\n getValue?: (item: DataItem) => Date;\n};\n\ntype ListFilter<DataItem> = {\n filter?: \"list\";\n withTotalNumber?: boolean;\n withSearch?: boolean;\n list: (TableListFilterListItem | undefined)[];\n getItemValue?: (item: DataItem) => ListFilterValue[\"value\"];\n};\n\nexport type TableColumn<DataItem> = {\n hidden?: boolean;\n label?: string;\n /** @requires label */\n renderLabel?: (label: string) => React.ReactNode;\n width?: string | number;\n minWidth?: string | number;\n maxWidth?: string | number;\n align?: \"left\" | \"center\" | \"right\";\n clickStopPropagation?: boolean;\n} & (\n | TextColumn<DataItem>\n | ElementColumn<DataItem>\n | ImageColumn<DataItem>\n | CheckboxColumn<DataItem>\n | ExpandColumn<DataItem>\n) &\n (NumberFilter<DataItem> | DateFilter<DataItem> | ListFilter<DataItem>);\n\nexport type TableProps<DataItem> = {\n name?: string;\n columns: TableColumn<DataItem>[];\n data: DataItem[];\n /** @default false */\n isStriped?: boolean;\n /** @default false */\n isLoading?: boolean;\n /** @default false */\n withStickyHeader?: boolean;\n /** @default \"No data available\" */\n noDataItemsMessage?: string;\n pageSize?: number;\n pageCount?: number;\n isInsideTableExpandRow?: boolean;\n containsOverflowComponents?: boolean;\n wrapperComponentRef?: React.Ref<HTMLDivElement>;\n defaultFilterData?: Record<number, TableFilterData | undefined>;\n /**\n * @default false\n * @requires name\n */\n memoizeFilters?: boolean;\n /**\n * The lifespan of the memoized filters in milliseconds. The time will reset if the user changes the filters or reloads the page.\n * @default 7200000 (2 hours)\n */\n memoizeFiltersLifespan?: number;\n getRowStyle?: (item: DataItem, index: number) => ComponentStyle;\n onClickRow?: (item: DataItem, index: number) => void;\n onClickAllCheckboxes?: (checked: boolean) => void;\n onChangePage?: (page: number) => void;\n onChangeFilter?: (filterData: Record<number, TableFilterData | undefined>) => void;\n onChangeFilterDataValue?: (data: DataItem[]) => void;\n} & ComponentMarginProps;\n\nexport type TableRef = {\n currentPage: number;\n setCurrentPage: React.Dispatch<React.SetStateAction<number>>;\n pagesCount: number;\n setCheckedItems: React.Dispatch<React.SetStateAction<boolean[]>>;\n};\n\ntype TableComponentType = {\n <DataItem>(props: ComponentPropWithRef<TableRef, TableProps<DataItem>>): React.ReactElement;\n};\n\nconst TableComponent: TableComponentType = forwardRef(function Table<DataItem>(\n {\n name,\n columns,\n data,\n isStriped,\n isLoading,\n withStickyHeader,\n noDataItemsMessage = \"No data available\",\n pageSize,\n pageCount,\n isInsideTableExpandRow,\n containsOverflowComponents,\n wrapperComponentRef,\n defaultFilterData,\n memoizeFilters,\n memoizeFiltersLifespan = 7200000,\n getRowStyle,\n onClickRow,\n onClickAllCheckboxes,\n onChangePage,\n onChangeFilter,\n onChangeFilterDataValue,\n ...props\n }: TableProps<DataItem>,\n ref: React.ForwardedRef<TableRef>,\n) {\n const theme = useTheme();\n const mediaQuery = useMediaQuery();\n const { colorTheme } = useBetterCoreContext();\n\n const filterModalRef = useRef<ModalRef>(null);\n\n const readyColumns = useMemo(() => columns.filter((column) => !column.hidden), [columns]);\n\n const columnsRef = useRef(readyColumns);\n columnsRef.current = readyColumns;\n\n const [checkedItems, setCheckedItems] = useState<boolean[]>([]);\n const [expandedRows, setExpandedRows] = useState<boolean[]>([]);\n const [currentPage, setCurrentPage] = useState<number>(1);\n\n const [filterData, setFilterData] = useState<Record<number, TableFilterData | undefined>>(() => {\n if (!memoizeFilters || !name) return defaultFilterData ?? {};\n\n const localStorageData = JSON.parse(localStorage.getItem(`react-better-html-table-filters-${name}`) || \"{}\");\n\n const timestamp = localStorageData.timestamp;\n const data = localStorageData.data ?? defaultFilterData ?? {};\n\n const timeDiff = Date.now() - timestamp;\n if (timeDiff > memoizeFiltersLifespan) return defaultFilterData ?? {};\n\n return data;\n });\n const [openedFilterColumnIndex, setOpenedFilterColumnIndex] = useState<number>();\n\n const [filterListSelectedItems, setFilterListSelectedItems] = useState<ListFilterValue[\"value\"][]>();\n\n const openedFilterData = openedFilterColumnIndex !== undefined ? filterData[openedFilterColumnIndex] : undefined;\n const openedFilterColumn = openedFilterColumnIndex !== undefined ? readyColumns[openedFilterColumnIndex] : undefined;\n\n const filterForm = useForm({\n defaultValues: {\n min: undefined as number | string | undefined,\n max: undefined as number | string | undefined,\n search: \"\",\n },\n onSubmit: (values) => {\n if (!openedFilterColumn?.filter) return;\n if (openedFilterColumnIndex === undefined) return;\n\n setFilterData((oldValue) => ({\n ...oldValue,\n [openedFilterColumnIndex]:\n openedFilterColumn.filter === \"number\"\n ? {\n type: openedFilterColumn.filter,\n min: values.min as number | undefined,\n max: values.max as number | undefined,\n }\n : openedFilterColumn.filter === \"date\" || openedFilterColumn.filter === \"date-time\"\n ? {\n type: openedFilterColumn.filter,\n min: values.min as string | undefined,\n max: values.max as string | undefined,\n }\n : openedFilterColumn.filter === \"list\"\n ? filterListSelectedItems && filterListSelectedItems.length > 0\n ? {\n type: openedFilterColumn.filter,\n list: filterListSelectedItems,\n }\n : undefined\n : undefined,\n }));\n\n filterModalRef.current?.close();\n },\n });\n\n const expandColumn = useMemo(() => readyColumns.find((column) => column.type === \"expand\"), [readyColumns]);\n\n const renderCellContent = useCallback(\n (column: (typeof readyColumns)[number], item: DataItem, itemIndex: number) => {\n switch (column.type) {\n case \"text\": {\n const value = column.keyName ? item[column.keyName] : undefined;\n const textProps =\n (typeof column.getTextProps === \"function\"\n ? column.getTextProps?.(item, itemIndex)\n : column.getTextProps) ?? {};\n\n return <Text {...textProps}>{column.format?.(item, itemIndex) ?? String(value ?? \"\")}</Text>;\n }\n\n case \"element\": {\n return column.render?.(item, itemIndex) ?? <></>;\n }\n\n case \"image\": {\n const imageProps =\n (typeof column.getImageProps === \"function\"\n ? column.getImageProps?.(item, itemIndex)\n : column.getImageProps) ?? {};\n\n return <Image width=\"100%\" borderRadius={theme.styles.borderRadius / 2} {...imageProps} />;\n }\n\n case \"checkbox\": {\n const { onChange, ...toggleInputProps } =\n (typeof column.getToggleInputProps === \"function\"\n ? column.getToggleInputProps?.(item, itemIndex)\n : column.getToggleInputProps) ?? {};\n\n const checkedValue = checkedItems[itemIndex];\n\n return (\n <ToggleInput.checkbox\n checked={checkedValue}\n value={item}\n onClick={(event) => {\n event.stopPropagation();\n }}\n onChange={(checked, value) => {\n setCheckedItems((oldValue) =>\n oldValue.map((isChecked, internalIndex) =>\n internalIndex === itemIndex ? checked : isChecked,\n ),\n );\n\n onChange?.(checked, value);\n }}\n {...toggleInputProps}\n />\n );\n }\n\n case \"expand\": {\n return (\n <Div isTabAccessed>\n <Icon\n name=\"chevronDown\"\n transform={`rotate(${expandedRows[itemIndex] ? 180 : 0}deg)`}\n transition={theme.styles.transition}\n />\n </Div>\n );\n }\n\n default: {\n return <></>;\n }\n }\n },\n [theme, checkedItems, expandedRows],\n );\n const onClickRowElement = useCallback(\n (item: DataItem, index: number) => {\n if (expandColumn) {\n setExpandedRows((oldValue) => {\n if (oldValue[index] === undefined) {\n const newValue = expandColumn.onlyOneExpanded ? [] : [...oldValue];\n newValue[index] = true;\n\n expandColumn.onExpand?.(item, index);\n\n return newValue;\n }\n\n expandColumn.onCollapse?.(item, index);\n\n return oldValue.map((isExpanded, internalIndex) => (internalIndex === index ? !isExpanded : isExpanded));\n });\n } else onClickRow?.(item, index);\n },\n [onClickRow, expandColumn],\n );\n const onClickAllCheckboxesElement = useCallback(\n (checked: boolean) => {\n onClickAllCheckboxes?.(checked);\n setCheckedItems(data.map(() => checked));\n },\n [onClickAllCheckboxes, data],\n );\n const onClickFilterButton = useCallback(\n (columnIndex: number) => {\n const thisFilterData = filterData[columnIndex];\n\n if (\n thisFilterData?.type === \"number\" ||\n thisFilterData?.type === \"date\" ||\n thisFilterData?.type === \"date-time\"\n ) {\n filterForm.setFieldsValue({\n min: thisFilterData.min ?? undefined,\n max: thisFilterData.max ?? undefined,\n });\n } else if (thisFilterData?.type === \"list\") {\n setFilterListSelectedItems(thisFilterData.list);\n }\n\n setOpenedFilterColumnIndex(columnIndex);\n filterModalRef.current?.open();\n },\n [filterData],\n );\n const onCloseFilterModal = useCallback(() => {\n setTimeout(() => setOpenedFilterColumnIndex(undefined), 0.2 * 1000);\n setFilterListSelectedItems(undefined);\n filterForm.reset();\n }, []);\n const onClickCancelFormFilter = useCallback(() => {\n if (openedFilterColumnIndex === undefined) return;\n\n setFilterData((oldValue) =>\n Object.entries({\n ...oldValue,\n [openedFilterColumnIndex]: undefined,\n }).reduce<typeof oldValue>((previousValue, [key, value]) => {\n if (value !== undefined) previousValue[parseInt(key)] = value;\n\n return previousValue;\n }, {}),\n );\n\n filterModalRef.current?.close();\n }, [openedFilterColumnIndex]);\n const onClickFilterListItem = useCallback(\n (value: ListFilterValue[\"value\"]) =>\n setFilterListSelectedItems((oldValue) => {\n if (!oldValue) return [value];\n if (oldValue.includes(value)) return oldValue.filter((item) => item !== value);\n return [...oldValue, value];\n }),\n [],\n );\n const onClickFilterPreset = useCallback(\n (preset: FilterPreset) => {\n const getValueForDate = (date: Date) => {\n if (openedFilterColumn?.filter === \"date\") return date.toISOString().split(\"T\")[0];\n return date.toISOString();\n };\n\n switch (preset) {\n case \"today\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date()),\n max: getValueForDate(new Date()),\n });\n break;\n\n case \"yesterday\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setDate(new Date().getDate() - 1))),\n max: getValueForDate(new Date(new Date().setDate(new Date().getDate() - 1))),\n });\n break;\n\n case \"tomorrow\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setDate(new Date().getDate() + 1))),\n max: getValueForDate(new Date(new Date().setDate(new Date().getDate() + 1))),\n });\n break;\n\n case \"thisWeek\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setDate(new Date().getDate() - 7))),\n max: getValueForDate(new Date()),\n });\n break;\n\n case \"thisMonth\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setMonth(new Date().getMonth() - 1))),\n max: getValueForDate(new Date()),\n });\n break;\n\n case \"thisYear\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setFullYear(new Date().getFullYear() - 1))),\n max: getValueForDate(new Date()),\n });\n break;\n\n case \"lastWeek\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setDate(new Date().getDate() - 7))),\n max: getValueForDate(new Date(new Date().setDate(new Date().getDate() - 1))),\n });\n break;\n\n case \"lastMonth\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setMonth(new Date().getMonth() - 1))),\n max: getValueForDate(new Date(new Date().setDate(new Date().getDate() - 1))),\n });\n break;\n\n case \"lastYear\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setFullYear(new Date().getFullYear() - 1))),\n max: getValueForDate(new Date(new Date().setDate(new Date().getDate() - 1))),\n });\n break;\n\n case \"nextWeek\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setDate(new Date().getDate() + 7))),\n max: getValueForDate(new Date(new Date().setDate(new Date().getDate() + 7))),\n });\n break;\n\n case \"nextMonth\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setMonth(new Date().getMonth() + 1))),\n max: getValueForDate(new Date(new Date().setMonth(new Date().getMonth() + 1))),\n });\n break;\n\n case \"nextYear\":\n filterForm.setFieldsValue({\n min: getValueForDate(new Date(new Date().setFullYear(new Date().getFullYear() + 1))),\n max: getValueForDate(new Date(new Date().setFullYear(new Date().getFullYear() + 1))),\n });\n break;\n\n default:\n break;\n }\n },\n [openedFilterColumn],\n );\n const renderExpandedRow = useCallback(\n (...props: Parameters<NonNullable<ExpandColumn<DataItem>[\"render\"]>>) => {\n const expandColumn = readyColumns.find((column) => column.type === \"expand\");\n if (!expandColumn) return;\n\n return expandColumn.render?.(...props);\n },\n [readyColumns],\n );\n\n const dataAfterFilter = useMemo(\n () =>\n data.filter((item) =>\n Object.entries(filterData).every(([columnIndex, filter]) => {\n if (!filter) return true;\n\n const column = columnsRef.current[parseInt(columnIndex)];\n if (!column) return true;\n\n if (column.filter === \"number\" && filter.type === \"number\") {\n const itemValue: number =\n column.getValue?.(item) ??\n (column.type === \"text\" && column.keyName ? Number(item[column.keyName]) : 0);\n\n if (filter.min !== undefined && itemValue < filter.min) return false;\n if (filter.max !== undefined && itemValue > filter.max) return false;\n } else if (\n (column.filter === \"date\" && filter.type === \"date\") ||\n (column.filter === \"date-time\" && filter.type === \"date-time\")\n ) {\n const minDate = filter.min ? new Date(filter.min) : undefined;\n const maxDate = filter.max ? new Date(filter.max) : undefined;\n\n if (column.filter === \"date\") {\n minDate?.setHours(0, 0, 0, 0);\n maxDate?.setHours(23, 59, 59, 999);\n }\n\n const itemValue: Date =\n column.getValue?.(item) ??\n new Date(column.type === \"text\" && column.keyName ? String(item[column.keyName]) : \"\");\n\n if (filter.min !== undefined && minDate && itemValue < minDate) return false;\n if (filter.max !== undefined && maxDate && itemValue > maxDate) return false;\n } else if (column.filter === \"list\" && filter.type === \"list\") {\n const itemValue: ListFilterValue[\"value\"] =\n column.getItemValue?.(item) ??\n (column.type === \"text\" && column.keyName ? String(item[column.keyName]) : \"\");\n\n if (!filter.list?.includes(itemValue)) return false;\n }\n\n return true;\n }),\n ),\n [data, filterData],\n );\n const dataAfterPagination = useMemo(() => {\n if (pageSize === undefined) return dataAfterFilter;\n if (pageCount !== undefined) return dataAfterFilter;\n\n const pageStartItemIndex = (currentPage - 1) * (pageSize ?? 0);\n const pageEndItemIndex = pageStartItemIndex + (pageSize ?? 0);\n\n return dataAfterFilter.slice(pageStartItemIndex, pageEndItemIndex);\n }, [dataAfterFilter, pageSize, currentPage, pageCount]);\n const everythingIsChecked = useMemo<boolean>(() => {\n return data.length > 0 && checkedItems.every((checked) => checked) && checkedItems.length === data.length;\n }, [data, checkedItems]);\n const possibleFilterListValues = useMemo<ListFilterValue[]>(() => {\n if (!openedFilterColumn || openedFilterColumn.filter !== \"list\") return [];\n\n return openedFilterColumn.list\n .filter((item) => item !== undefined)\n .map<ListFilterValue>((item) => ({\n ...item,\n count: data.reduce<number>((previousValue, currentValue) => {\n const value: ListFilterValue[\"value\"] =\n openedFilterColumn.getItemValue?.(currentValue) ??\n (openedFilterColumn.type === \"text\" && openedFilterColumn.keyName\n ? String(currentValue[openedFilterColumn.keyName])\n : \"\");\n\n return previousValue + (item.value === value ? 1 : 0);\n }, 0),\n }))\n .reduce<ListFilterValue[]>(\n (previousValue, currentValue) =>\n !previousValue.some((item) => item.value === currentValue.value)\n ? [...previousValue, currentValue]\n : previousValue,\n [],\n );\n }, [data, openedFilterColumn, filterForm.values.search]);\n\n const pageCountInternal = pageCount ?? (pageSize !== undefined ? Math.ceil(dataAfterFilter.length / pageSize) : 1);\n\n const onClickSelectAllFilterListItems = useCallback(\n () => setFilterListSelectedItems(possibleFilterListValues.map((item) => item.value)),\n [possibleFilterListValues],\n );\n const onClickDeselectAllFilterListItems = useCallback(() => setFilterListSelectedItems([]), []);\n\n useEffect(() => {\n onChangePage?.(currentPage);\n }, [onChangePage, currentPage]);\n useEffect(() => {\n onChangeFilter?.(filterData);\n }, [onChangeFilter, filterData]);\n useEffect(() => {\n if (!memoizeFilters) return;\n if (!name) return;\n\n localStorage.setItem(\n `react-better-html-table-filters-${name}`,\n JSON.stringify({\n timestamp: Date.now(),\n data: filterData,\n }),\n );\n }, [memoizeFilters, name, filterData]);\n useEffect(() => {\n onChangeFilterDataValue?.(dataAfterFilter);\n }, [onChangeFilterDataValue, dataAfterFilter]);\n\n useImperativeHandle(\n ref,\n (): TableRef => {\n return {\n currentPage,\n setCurrentPage,\n pagesCount: pageCountInternal,\n setCheckedItems,\n };\n },\n [currentPage, setCurrentPage, pageCountInternal, setCheckedItems],\n );\n\n const withFooter = pageSize !== undefined && pageCountInternal > 1;\n const mobileFooterBreakingPoint = mediaQuery.size700 && pageCountInternal > maximumVisiblePages / 1.4;\n\n return (\n <>\n <Div\n border={`1px solid ${theme.colors.border}`}\n borderRadius={theme.styles.borderRadius * 2}\n overflow={!containsOverflowComponents ? \"auto\" : undefined}\n {...props}\n ref={wrapperComponentRef}\n >\n <TableStyledComponent\n isStriped={isStriped}\n withHover={onClickRow !== undefined || expandColumn !== undefined}\n withStickyHeader={withStickyHeader}\n colorTheme={colorTheme}\n theme={theme}\n containsOverflowComponents={containsOverflowComponents}\n withFooter={withFooter}\n >\n <thead>\n <tr className=\"isHeader\">\n {readyColumns.map((column, index) => (\n <ThStyledComponent\n width={\n column.width ??\n (column.type === \"image\"\n ? defaultImageWidth\n : column.type === \"checkbox\"\n ? 26\n : column.type === \"expand\"\n ? 16\n : undefined)\n }\n minWidth={column.minWidth}\n maxWidth={column.maxWidth}\n textAlign={column.align}\n key={column.type + column.label + index}\n >\n <Div.row\n width=\"100%\"\n alignItems=\"center\"\n justifyContent={\n column.filter\n ? \"space-between\"\n : column.align === \"center\"\n ? \"center\"\n : column.align === \"right\"\n ? \"flex-end\"\n : \"flex-start\"\n }\n gap={theme.styles.gap}\n >\n {column.type === \"checkbox\" && onClickAllCheckboxes ? (\n <ToggleInput.checkbox\n checked={everythingIsChecked}\n disabled={data.length === 0}\n onChange={onClickAllCheckboxesElement}\n />\n ) : column.label ? (\n column.renderLabel ? (\n column.renderLabel(column.label)\n ) : (\n <Text>{column.label}</Text>\n )\n ) : undefined}\n\n {column.filter && (\n <Button.icon\n icon=\"filter\"\n color={filterData[index] ? theme.colors.primary : theme.colors.textSecondary}\n value={index}\n onClickWithValue={onClickFilterButton}\n />\n )}\n </Div.row>\n </ThStyledComponent>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {isLoading ? (\n <tr className=\"withoutHover\">\n <td className=\"noData\" colSpan={readyColumns.length}>\n <Loader.box />\n </td>\n </tr>\n ) : dataAfterPagination.length > 0 ? (\n dataAfterPagination.map((item, rowIndex) => {\n const realRowIndex = rowIndex + (pageSize ? (currentPage - 1) * pageSize : 0);\n\n return (\n <Fragment key={JSON.stringify(item) + realRowIndex}>\n <tr\n className={\n isInsideTableExpandRow && onClickRow === undefined && expandColumn === undefined\n ? \"withoutHover\"\n : undefined\n }\n style={getRowStyle?.(item, realRowIndex)}\n onClick={() => onClickRowElement(item, realRowIndex)}\n >\n {readyColumns.map((column, colIndex) => (\n <TdStyledComponent\n textAlign={column.align}\n onClick={(event) => {\n if (column.clickStopPropagation) event.stopPropagation();\n }}\n key={column.type + column.label + colIndex}\n >\n {renderCellContent(column, item, realRowIndex)}\n </TdStyledComponent>\n ))}\n </tr>\n\n {expandedRows[realRowIndex] && (\n <tr className=\"withoutHover isExpandRow\">\n <td colSpan={readyColumns.length}>{renderExpandedRow(item, realRowIndex)}</td>\n </tr>\n )}\n </Fragment>\n );\n })\n ) : (\n <tr className=\"withoutHover\">\n <td className=\"noData\" colSpan={readyColumns.length}>\n <Text.unknown>{noDataItemsMessage}</Text.unknown>\n </td>\n </tr>\n )}\n </tbody>\n\n {withFooter && (\n <tfoot>\n <tr className=\"isFooter\">\n <td colSpan={readyColumns.length}>\n <Div.column\n position=\"relative\"\n width=\"100%\"\n justifyContent=\"center\"\n flexReverse\n gap={theme.styles.gap / 2}\n >\n <Text\n position={mobileFooterBreakingPoint ? \"relative\" : \"absolute\"}\n top={!mobileFooterBreakingPoint ? \"50%\" : undefined}\n color={theme.colors.textSecondary}\n transform={!mobileFooterBreakingPoint ? \"translateY(-50%)\" : undefined}\n userSelect=\"none\"\n >\n {currentPage} / {pageCountInternal}\n </Text>\n\n <Pagination\n currentPage={currentPage}\n itemsLength={dataAfterFilter.length}\n itemsPerPage={pageSize}\n pageCount={pageCount}\n maximumVisiblePages={maximumVisiblePages}\n onChangePage={setCurrentPage}\n />\n </Div.column>\n </td>\n </tr>\n </tfoot>\n )}\n </TableStyledComponent>\n </Div>\n\n <Modal\n title={`Filter ${openedFilterColumn?.label ?? \"\"}`}\n description={\n openedFilterColumn?.filter === \"number\"\n ? \"Enter minimum and maximum values to filter\"\n : openedFilterColumn?.filter === \"date\" || openedFilterColumn?.filter === \"date-time\"\n ? \"Enter minimum and maximum dates to filter\"\n : openedFilterColumn?.filter === \"list\"\n ? \"Select values to filter from the list bellow\"\n : \"\"\n }\n onClose={onCloseFilterModal}\n ref={filterModalRef}\n >\n {openedFilterColumn ? (\n openedFilterColumn.filter === \"number\" ? (\n <Form\n form={filterForm}\n submitButtonText=\"Filter\"\n cancelButtonText=\"Clear\"\n onClickCancel={openedFilterData ? onClickCancelFormFilter : undefined}\n >\n <FormRow>\n <InputField type=\"number\" label=\"Min\" {...filterForm.getInputFieldProps(\"min\")} />\n <InputField type=\"number\" label=\"Max\" {...filterForm.getInputFieldProps(\"max\")} />\n </FormRow>\n </Form>\n ) : openedFilterColumn.filter === \"date\" || openedFilterColumn.filter === \"date-time\" ? (\n <Form\n form={filterForm}\n gap={theme.styles.gap}\n submitButtonText=\"Filter\"\n cancelButtonText=\"Clear\"\n onClickCancel={openedFilterData ? onClickCancelFormFilter : undefined}\n >\n <FormRow>\n {openedFilterColumn.filter === \"date\" ? (\n <>\n <InputField.date label=\"Min\" {...filterForm.getInputFieldProps(\"min\")} />\n <InputField.date label=\"Max\" {...filterForm.getInputFieldProps(\"max\")} />\n </>\n ) : (\n <>\n <InputField.dateTime label=\"Min\" {...filterForm.getInputFieldProps(\"min\")} />\n <InputField.dateTime label=\"Max\" {...filterForm.getInputFieldProps(\"max\")} />\n </>\n )}\n </FormRow>\n\n {openedFilterColumn.presets && (\n <Div.column gap={theme.styles.gap / 2}>\n <Label text=\"Presets\" />\n\n <Div.row alignItems=\"center\" flexWrap=\"wrap\" gap={theme.styles.gap}>\n {openedFilterColumn.presets.map((preset) => (\n <Button.secondary\n text={filterPresetsText[preset]}\n isSmall={mediaQuery.size600}\n value={preset}\n onClickWithValue={onClickFilterPreset}\n key={preset}\n />\n ))}\n </Div.row>\n </Div.column>\n )}\n </Form>\n ) : openedFilterColumn.filter === \"list\" ? (\n <Form\n gap={theme.styles.space}\n submitButtonText=\"Filter\"\n cancelButtonText=\"Clear\"\n renderActionButtons={\n <Div.row marginRight=\"auto\" alignItems=\"center\" gap={theme.styles.gap}>\n <Button.secondary\n text=\"Select All\"\n isSmall\n disabled={possibleFilterListValues.length === filterListSelectedItems?.length}\n onClick={onClickSelectAllFilterListItems}\n />\n <Button.secondary\n text=\"Deselect All\"\n isSmall\n disabled={!filterListSelectedItems?.length}\n onClick={onClickDeselectAllFilterListItems}\n />\n </Div.row>\n }\n onClickCancel={openedFilterData ? onClickCancelFormFilter : undefined}\n onSubmit={filterForm.onSubmit}\n >\n {openedFilterColumn?.withSearch && (\n <FormRow oneItemOnly>\n <InputField.search\n label=\"Search\"\n autoComplete=\"off\"\n {...filterForm.getInputFieldProps(\"search\")}\n />\n </FormRow>\n )}\n\n <Div.column gap={theme.styles.gap / 2}>\n <Label text=\"Possible values\" />\n\n <Div.row flexWrap=\"wrap\" gap={theme.styles.gap}>\n {possibleFilterListValues.length > 0 ? (\n possibleFilterListValues.map((value) => {\n const isActive = filterListSelectedItems?.includes(value.value);\n\n return (\n <Div.box\n isActive={isActive}\n value={value.value}\n onClickWithValue={onClickFilterListItem}\n key={value.value.toString()}\n >\n <Div.row alignItems=\"center\" gap={theme.styles.gap / 2}>\n <Text>{value.label || value.value}</Text>\n\n {openedFilterColumn.withTotalNumber && (\n <Text\n fontSize={14}\n color={isActive ? theme.colors.base + \"c0\" : theme.colors.textSecondary}\n >\n ({value.count})\n </Text>\n )}\n </Div.row>\n </Div.box>\n );\n })\n ) : (\n <Text.unknown>No values</Text.unknown>\n )}\n </Div.row>\n </Div.column>\n\n <Div />\n </Form>\n ) : (\n <Text.unknown>Unknown filter</Text.unknown>\n )\n ) : (\n <Loader.box />\n )}\n </Modal>\n </>\n );\n}) as any;\n\nconst Table = memo(TableComponent) as any as typeof TableComponent;\n\nexport default Table;\n","import { memo, useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useTheme } from \"react-better-core\";\n\nimport { useMediaQuery } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport Button from \"./Button\";\nimport Text from \"./Text\";\n\ntype PaginationProps = {\n currentPage?: number;\n itemsLength?: number;\n itemsPerPage?: number;\n pageCount?: number;\n /** @default 11 */\n maximumVisiblePages?: number;\n onClickPreviousPage?: (newPage: number) => void;\n onClickNextPage?: (newPage: number) => void;\n onChangePage?: (page: number) => void;\n};\n\ntype PaginationComponentType = {\n (props: PaginationProps): React.ReactElement;\n};\n\nconst PaginationComponent: PaginationComponentType = function Pagination({\n currentPage = 1,\n itemsLength = 0,\n itemsPerPage,\n pageCount,\n maximumVisiblePages = 11,\n onClickPreviousPage,\n onClickNextPage,\n onChangePage,\n}: PaginationProps) {\n const theme = useTheme();\n const mediaQuery = useMediaQuery();\n\n const [currentPageInternal, setCurrentPage] = useState<number>(currentPage);\n\n const pageCountInternal = pageCount ?? (itemsPerPage !== undefined ? Math.ceil(itemsLength / itemsPerPage) : 1);\n\n const onClickPreviousPageElement = useCallback(() => {\n const newPage = currentPageInternal <= 1 ? 1 : currentPageInternal - 1;\n\n setCurrentPage(newPage);\n onClickPreviousPage?.(newPage);\n }, [currentPageInternal, onClickPreviousPage]);\n const onClickNextPageElement = useCallback(() => {\n const newPage = currentPageInternal >= pageCountInternal ? pageCountInternal : currentPageInternal + 1;\n\n setCurrentPage(newPage);\n onClickNextPage?.(newPage);\n }, [currentPageInternal, pageCountInternal, onClickNextPage]);\n\n const paginationItems = useMemo(() => {\n const halfRange = Math.floor(maximumVisiblePages / 2);\n\n let startPage = Math.max(1, currentPageInternal - halfRange);\n let endPage = Math.min(pageCountInternal, currentPageInternal + halfRange);\n\n if (endPage - startPage + 1 < maximumVisiblePages) {\n startPage = Math.max(1, endPage - maximumVisiblePages + 1);\n endPage = Math.min(pageCountInternal, startPage + maximumVisiblePages - 1);\n }\n\n return Array.from(\n {\n length: endPage - startPage + 1,\n },\n (_, index) => startPage + index,\n );\n }, [pageCountInternal, currentPageInternal]);\n\n useEffect(() => {\n onChangePage?.(currentPageInternal);\n }, [currentPageInternal, onChangePage]);\n useEffect(() => {\n setCurrentPage(currentPage);\n }, [currentPage]);\n\n const mobileFooterBreakingPoint = mediaQuery.size700 && pageCountInternal > maximumVisiblePages / 1.4;\n\n return (\n <Div.row alignItems=\"center\" justifyContent=\"center\" gap={theme.styles.gap * 2}>\n {pageCountInternal > maximumVisiblePages && (\n <Button.icon\n icon=\"doubleChevronLeft\"\n disabled={currentPageInternal === 1}\n value={1}\n onClickWithValue={setCurrentPage}\n />\n )}\n <Button.icon icon=\"chevronLeft\" disabled={currentPageInternal === 1} onClick={onClickPreviousPageElement} />\n\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n flexWrap={mobileFooterBreakingPoint ? \"wrap\" : undefined}\n gap={theme.styles.gap}\n >\n {paginationItems.map((pageIndex) => {\n const isActive = currentPageInternal === pageIndex;\n\n return (\n <Div\n cursor=\"pointer\"\n userSelect=\"none\"\n value={pageIndex}\n onClickWithValue={setCurrentPage}\n key={pageIndex}\n >\n <Text\n fontWeight={isActive ? 700 : 400}\n color={isActive ? theme.colors.primary : theme.colors.textSecondary}\n transition={theme.styles.transition}\n >\n {pageIndex}\n </Text>\n </Div>\n );\n })}\n </Div.row>\n\n <Button.icon\n icon=\"chevronRight\"\n disabled={currentPageInternal === pageCountInternal}\n onClick={onClickNextPageElement}\n />\n {pageCountInternal > maximumVisiblePages && (\n <Button.icon\n icon=\"doubleChevronRight\"\n disabled={currentPageInternal === pageCountInternal}\n onClickWithValue={setCurrentPage}\n value={pageCountInternal}\n />\n )}\n </Div.row>\n );\n};\n\nconst Pagination = memo(PaginationComponent) as any as typeof PaginationComponent & {};\n\nexport default Pagination;\n","import { memo, useCallback, useRef, useState, useEffect, forwardRef, useImperativeHandle, useMemo } from \"react\";\nimport { AnyOtherString, IconName, OmitProps, Theme, useTheme } from \"react-better-core\";\nimport styled, { css, RuleSet } from \"styled-components\";\n\nimport { ComponentPropWithRef } from \"../types/components\";\n\nimport Div, { DivProps } from \"./Div\";\nimport Text, { TextProps } from \"./Text\";\nimport Divider, { HorizontalDividerProps } from \"./Divider\";\nimport Icon from \"./Icon\";\n\ntype TooltipContainerProps = {\n theme: Theme;\n position: TooltipPosition;\n align?: TooltipAlign;\n pointerEvents?: React.CSSProperties[\"pointerEvents\"];\n withArrow?: boolean;\n arrowSize?: number;\n isOpen: boolean;\n gap: number;\n};\n\nconst tooltipContainerStyle = (props: TooltipContainerProps): Record<TooltipPosition, RuleSet<object>> => ({\n top: css`\n bottom: calc(100% + ${props.gap}px + ${props.arrowSize}px);\n ${props.align === \"center\" ? \"left: 50%;\" : props.align === \"left\" ? \"left: 0;\" : \"right: 0;\"}\n `,\n bottom: css`\n top: calc(100% + ${props.gap}px + ${props.arrowSize}px);\n ${props.align === \"center\" ? \"left: 50%;\" : props.align === \"left\" ? \"left: 0;\" : \"right: 0;\"};\n `,\n left: css`\n ${props.align === \"center\" ? \"top: 50%;\" : props.align === \"top\" ? \"top: 0;\" : \"bottom: 0;\"};\n right: calc(100% + ${props.gap}px + ${props.arrowSize}px);\n `,\n right: css`\n ${props.align === \"center\" ? \"top: 50%;\" : props.align === \"top\" ? \"top: 0;\" : \"bottom: 0;\"};\n left: calc(100% + ${props.gap}px + ${props.arrowSize}px);\n `,\n});\n\nconst tooltipPositionStyle = (\n props: TooltipContainerProps,\n): Record<\n TooltipPosition,\n {\n opened: RuleSet<object>;\n closed: RuleSet<object>;\n }\n> => ({\n top: {\n opened: css`\n transform: translateX(${props.align === \"center\" ? \"-50%\" : \"0\"});\n `,\n closed: css`\n transform: translateX(${props.align === \"center\" ? \"-50%\" : \"0\"}) translateY(${props.theme.styles.gap}px);\n `,\n },\n bottom: {\n opened: css`\n transform: translateX(${props.align === \"center\" ? \"-50%\" : \"0\"});\n `,\n closed: css`\n transform: translateX(${props.align === \"center\" ? \"-50%\" : \"0\"}) translateY(-${props.theme.styles.gap}px);\n `,\n },\n left: {\n opened: css`\n transform: translateY(${props.align === \"center\" ? \"-50%\" : \"0\"});\n `,\n closed: css`\n transform: translateX(${props.theme.styles.gap}px) translateY(${props.align === \"center\" ? \"-50%\" : \"0\"});\n `,\n },\n right: {\n opened: css`\n transform: translateY(${props.align === \"center\" ? \"-50%\" : \"0\"});\n `,\n closed: css`\n transform: translateX(-${props.theme.styles.gap}px) translateY(${props.align === \"center\" ? \"-50%\" : \"0\"});\n `,\n },\n});\n\nconst TooltipContainer = styled.div.withConfig({\n shouldForwardProp: (prop) =>\n ![\"theme\", \"position\", \"align\", \"pointerEvents\", \"withArrow\", \"arrowSize\", \"isOpen\", \"gap\"].includes(prop),\n})<TooltipContainerProps>`\n position: absolute;\n opacity: ${(props) => (props.isOpen ? 1 : 0)};\n pointer-events: ${(props) => (props.isOpen ? props.pointerEvents : \"none\")};\n transition: ${(props) => props.theme.styles.transition};\n z-index: 1000;\n\n ${(props) => tooltipContainerStyle(props)[props.position]}\n\n ${(props) =>\n props.isOpen\n ? tooltipPositionStyle(props)[props.position].opened\n : tooltipPositionStyle(props)[props.position].closed}\n`;\n\ntype TooltipPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\ntype TooltipAlign = \"left\" | \"center\" | \"right\" | \"top\" | \"bottom\";\n\ntype ArrowProps = {\n position: TooltipPosition;\n align: TooltipAlign;\n sideSpace: number;\n size: number;\n color: string;\n isOpen: boolean;\n};\n\nconst arrowStyle = (props: ArrowProps, borderWidth?: number): Record<TooltipPosition, DivProps> => ({\n top: {\n borderTopColor: props.color,\n borderBottom: 0,\n top: borderWidth ? -props.size : undefined,\n left: borderWidth\n ? -props.size + borderWidth * 2\n : props.align === \"center\"\n ? \"50%\"\n : props.align === \"left\"\n ? props.sideSpace\n : undefined,\n right: !borderWidth && props.align === \"right\" ? props.sideSpace : undefined,\n bottom: -props.size + 1,\n transform: !borderWidth && props.align === \"center\" ? \"translateX(-50%)\" : undefined,\n },\n bottom: {\n borderBottomColor: props.color,\n borderTop: 0,\n top: borderWidth ? borderWidth * 2 : -props.size + 1,\n left: borderWidth\n ? -props.size + borderWidth * 2\n : props.align === \"center\"\n ? \"50%\"\n : props.align === \"left\"\n ? props.sideSpace\n : undefined,\n right: !borderWidth && props.align === \"right\" ? props.sideSpace : undefined,\n transform: !borderWidth && props.align === \"center\" ? \"translateX(-50%);\" : undefined,\n },\n left: {\n borderLeftColor: props.color,\n borderRight: 0,\n top: borderWidth\n ? -props.size + borderWidth * 2\n : props.align === \"center\"\n ? \"50%\"\n : props.align === \"top\"\n ? props.sideSpace\n : undefined,\n bottom: !borderWidth && props.align === \"bottom\" ? props.sideSpace : undefined,\n left: borderWidth ? -props.size : undefined,\n right: -props.size + 1,\n transform: !borderWidth && props.align === \"center\" ? \"translateY(-50%)\" : undefined,\n },\n right: {\n borderRightColor: props.color,\n borderLeft: 0,\n top: borderWidth\n ? -props.size + borderWidth * 2\n : props.align === \"center\"\n ? \"50%\"\n : props.align === \"top\"\n ? props.sideSpace\n : undefined,\n bottom: !borderWidth && props.align === \"bottom\" ? props.sideSpace : undefined,\n left: borderWidth ? borderWidth * 2 : -props.size + 1,\n transform: !borderWidth && props.align === \"center\" ? \"translateY(-50%);\" : undefined,\n },\n});\n\nconst Arrow = memo(function Arrow(props: ArrowProps) {\n const theme = useTheme();\n\n const { position, size } = props;\n\n const outerProps = useMemo<ArrowProps>(\n () => ({\n ...props,\n color: theme.colors.border,\n }),\n [props, theme],\n );\n\n const borderWidth = 1;\n\n return (\n <Div\n position=\"absolute\"\n width={0}\n height={0}\n border={`${size}px solid transparent`}\n {...arrowStyle(outerProps)[position]}\n >\n <Div\n position=\"absolute\"\n width={0}\n height={0}\n border={`${size - borderWidth * 2}px solid transparent`}\n {...arrowStyle(props, borderWidth)[position]}\n />\n </Div>\n );\n});\n\nexport type TooltipProps = {\n /** @default \"bottom\" */\n position?: TooltipPosition;\n /** @default \"hover\" */\n trigger?: \"hover\" | \"click\";\n /** @default \"center\" */\n align?: TooltipAlign;\n content: React.ReactNode;\n contentWidth?: React.CSSProperties[\"width\"];\n contentMinWidth?: React.CSSProperties[\"minWidth\"];\n contentPointerEvents?: React.CSSProperties[\"pointerEvents\"];\n /** @default \"fit-content\" */\n childrenWrapperWidth?: React.CSSProperties[\"width\"];\n childrenWrapperHeight?: React.CSSProperties[\"height\"];\n disabled?: boolean;\n withArrow?: boolean;\n isSmall?: boolean;\n backgroundColor?: string;\n asContextMenu?: boolean;\n isTabAccessed?: boolean;\n onOpen?: () => void;\n onClose?: () => void;\n children: React.ReactNode;\n};\n\nexport type TooltipRef = {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n};\n\ntype TooltipComponent = {\n (props: ComponentPropWithRef<TooltipRef, TooltipProps>): React.ReactElement;\n item: <Value>(props: ComponentPropWithRef<HTMLDivElement, TooltipItemProps<Value>>) => React.ReactElement;\n divider: (props: ComponentPropWithRef<HTMLDivElement, HorizontalDividerProps>) => React.ReactElement;\n sectionTitle: (props: ComponentPropWithRef<HTMLParagraphElement, TooltipSectionTitleProps>) => React.ReactElement;\n};\n\nconst TooltipComponent: TooltipComponent = forwardRef(function Tooltip(\n {\n position = \"bottom\",\n trigger = \"hover\",\n align = \"center\",\n content,\n contentWidth,\n contentMinWidth,\n contentPointerEvents = \"auto\",\n childrenWrapperWidth = \"fit-content\",\n childrenWrapperHeight,\n disabled,\n withArrow,\n isSmall,\n backgroundColor,\n asContextMenu,\n isTabAccessed,\n onOpen,\n onClose,\n children,\n }: TooltipProps,\n ref: React.ForwardedRef<TooltipRef>,\n) {\n const theme = useTheme();\n\n const triggerHolderRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const tooltipContainerRef = useRef<HTMLDivElement>(null);\n\n const closeTimerRef = useRef<number>(undefined);\n\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [isOpenLate, setIsOpenLate] = useState<boolean>(false);\n\n const arrowSize = withArrow ? theme.styles.gap : 0;\n const gap = theme.styles.gap / 2;\n\n const outsideScreenGap = theme.styles.gap / 2;\n const totalGap = arrowSize + gap;\n\n const openTooltip = useCallback(() => {\n if (disabled) return;\n if (closeTimerRef.current) clearTimeout(closeTimerRef.current);\n\n setIsOpen(true);\n setIsOpenLate(true);\n\n setTimeout(() => {\n if (!tooltipContainerRef.current) return;\n if (!contentRef.current) return;\n\n const clientRects = tooltipContainerRef.current.getBoundingClientRect();\n\n if (clientRects) {\n const { width, height, x, y } = clientRects;\n\n const topOutside = y < 0;\n const bottomOutside = y + height > window.innerHeight;\n const leftOutside = x < 0;\n const rightOutside = x + width > window.innerWidth;\n\n if (topOutside) contentRef.current.style.transform = `translateY(${y * -1 + outsideScreenGap}px)`;\n if (bottomOutside)\n contentRef.current.style.transform = `translateY(${window.innerHeight - (y + height) - totalGap}px)`;\n if (leftOutside) contentRef.current.style.transform = `translateX(${x * -1 + outsideScreenGap}px)`;\n if (rightOutside)\n contentRef.current.style.transform = `translateX(${window.innerWidth - (x + width) - totalGap}px)`;\n }\n }, 1);\n\n onOpen?.();\n }, [disabled, onOpen, outsideScreenGap, totalGap]);\n const closeTooltip = useCallback(() => {\n setIsOpen(false);\n closeTimerRef.current = setTimeout(() => setIsOpenLate(false), 300);\n\n onClose?.();\n }, [onClose]);\n const onMouseEnter = useCallback(() => {\n if (trigger === \"hover\") openTooltip();\n }, [trigger, openTooltip]);\n const onMouseLeave = useCallback(() => {\n if (trigger === \"hover\") closeTooltip();\n }, [trigger, closeTooltip]);\n const onClickHolder = useCallback(\n (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (trigger === \"click\") {\n if (!isOpen) openTooltip();\n else if (triggerHolderRef.current?.contains(event.target as Node)) closeTooltip();\n }\n },\n [trigger, openTooltip, isOpen, closeTooltip],\n );\n const onClickOutside = useCallback(\n (event: MouseEvent) => {\n if (!isOpen) return;\n if (trigger !== \"click\") return;\n\n if (\n !contentRef.current?.contains(event.target as Node) &&\n !triggerHolderRef.current?.contains(event.target as Node)\n ) {\n closeTooltip();\n }\n },\n [trigger, isOpen, closeTooltip],\n );\n\n useEffect(() => {\n if (trigger === \"click\") {\n document.addEventListener(\"mousedown\", onClickOutside);\n\n return () => {\n document.removeEventListener(\"mousedown\", onClickOutside);\n };\n }\n }, [trigger, onClickOutside]);\n useEffect(() => {\n if (!disabled) return;\n\n closeTooltip();\n }, [disabled]);\n\n useImperativeHandle(\n ref,\n (): TooltipRef => {\n return {\n isOpen,\n open: openTooltip,\n close: closeTooltip,\n };\n },\n [isOpen, openTooltip, closeTooltip],\n );\n\n return (\n <Div\n position=\"relative\"\n width={childrenWrapperWidth}\n height={childrenWrapperHeight}\n onClick={onClickHolder}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <Div\n width={childrenWrapperWidth}\n height={childrenWrapperHeight}\n isTabAccessed={isTabAccessed}\n ref={triggerHolderRef}\n >\n {children}\n </Div>\n\n <TooltipContainer\n theme={theme}\n position={position}\n align={align}\n pointerEvents={contentPointerEvents}\n withArrow={withArrow}\n arrowSize={arrowSize}\n gap={gap}\n isOpen={isOpen}\n role=\"tooltip\"\n ref={tooltipContainerRef}\n >\n {(isOpen || isOpenLate) && (\n <Div position=\"relative\" ref={contentRef}>\n <Div.box\n position=\"relative\"\n width={contentWidth}\n minWidth={contentMinWidth}\n backgroundColor={backgroundColor ?? theme.colors.backgroundContent}\n boxShadow=\"0px 10px 20px #00000020\"\n paddingBlock={isSmall ? theme.styles.gap / 2 : theme.styles.gap}\n paddingInline={asContextMenu ? 0 : isSmall ? theme.styles.space / 2 : theme.styles.space}\n overflow={asContextMenu ? \"hidden\" : undefined}\n >\n {content}\n </Div.box>\n\n <Div\n position=\"absolute\"\n width={position === \"left\" || position === \"right\" ? totalGap : \"100%\"}\n height={position === \"top\" || position === \"bottom\" ? totalGap : \"100%\"}\n top={position === \"top\" ? \"100%\" : position === \"bottom\" ? undefined : 0}\n bottom={position === \"bottom\" ? \"100%\" : position === \"top\" ? undefined : 0}\n left={position === \"left\" ? \"100%\" : position === \"right\" ? undefined : 0}\n right={position === \"right\" ? \"100%\" : position === \"left\" ? undefined : 0}\n borderTopLeftRadius={999}\n borderTopRightRadius={999}\n />\n\n {withArrow && (\n <Arrow\n position={position}\n align={align}\n sideSpace={theme.styles.borderRadius}\n size={arrowSize}\n color={backgroundColor ?? theme.colors.backgroundContent}\n isOpen={isOpen}\n />\n )}\n </Div>\n )}\n </TooltipContainer>\n </Div>\n );\n}) as any;\n\ntype TooltipItemProps<Value = unknown> = {\n icon?: IconName | AnyOtherString;\n iconColor?: string;\n text?: string;\n textColor?: string;\n description?: string;\n isActive?: boolean;\n value?: Value;\n id?: string;\n disabled?: boolean;\n onClick?: () => void;\n onClickWithValue?: (value: Value) => void;\n};\n\nTooltipComponent.item = forwardRef(function Item<Value>(\n {\n icon,\n iconColor,\n text,\n textColor,\n description,\n isActive,\n value,\n id,\n disabled,\n onClick,\n onClickWithValue,\n }: TooltipItemProps<Value>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const theme = useTheme();\n\n return (\n <Div.row\n alignItems=\"center\"\n gap={theme.styles.space}\n backgroundColor={theme.colors.backgroundContent}\n filterHover={!disabled ? \"brightness(0.9)\" : \"brightness(0.94)\"}\n paddingBlock={theme.styles.gap}\n paddingInline={theme.styles.space}\n cursor={disabled ? \"not-allowed\" : \"pointer\"}\n isTabAccessed\n id={id}\n opacity={disabled ? 0.4 : undefined}\n value={value}\n onClick={!disabled ? onClick : undefined}\n onClickWithValue={!disabled ? onClickWithValue : undefined}\n ref={ref}\n >\n {icon && <Icon name={icon} color={iconColor ?? (!isActive ? theme.colors.textSecondary : undefined)} />}\n\n <Div.column flex={1} gap={theme.styles.gap / 2}>\n <Text fontWeight={isActive ? 700 : undefined} color={textColor ?? theme.colors.textPrimary}>\n {text}\n </Text>\n {description && (\n <Text fontSize={14} color={theme.colors.textSecondary}>\n {description}\n </Text>\n )}\n </Div.column>\n </Div.row>\n );\n}) as TooltipComponent[\"item\"];\n\nTooltipComponent.divider = forwardRef(function DividerComponent(props, ref) {\n const theme = useTheme();\n\n return <Divider.horizontal marginBlock={theme.styles.gap} {...props} ref={ref} />;\n}) as TooltipComponent[\"divider\"];\n\ntype TooltipSectionTitleProps = OmitProps<TextProps, \"children\"> & {\n text?: string;\n};\n\nTooltipComponent.sectionTitle = forwardRef(function SectionTitle({ text, ...props }, ref) {\n const theme = useTheme();\n\n return (\n <Text\n fontSize={12}\n fontWeight={700}\n textTransform=\"uppercase\"\n marginBlock={theme.styles.gap / 2}\n marginInline={theme.styles.space}\n {...props}\n ref={ref}\n >\n {text}\n </Text>\n );\n}) as TooltipComponent[\"sectionTitle\"];\n\nconst Tooltip = memo(TooltipComponent) as any as typeof TooltipComponent & {\n item: typeof TooltipComponent.item;\n divider: typeof TooltipComponent.divider;\n sectionTitle: typeof TooltipComponent.sectionTitle;\n};\n\nTooltip.item = TooltipComponent.item;\nTooltip.divider = TooltipComponent.divider;\nTooltip.sectionTitle = TooltipComponent.sectionTitle;\n\nexport default Tooltip;\n","import { forwardRef, memo, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { Color, useBetterCoreContext, useTheme } from \"react-better-core\";\n\nimport { ComponentMarginProps, ComponentPropWithRef } from \"../types/components\";\n\nimport { useUrlQuery } from \"../utils/hooks\";\n\nimport Div from \"./Div\";\nimport Text from \"./Text\";\nimport { useBetterHtmlContextInternal, usePlugin } from \"./BetterHtmlProvider\";\n\nconst tabBottomLineWidth = 2;\nconst tabDotSize = 6;\nconst defaultTabName = \"tab\";\n\nexport type TabGroup = {\n name: string;\n selectedTab: string;\n};\n\nexport type TabsComponentState = {\n tabGroups: TabGroup[];\n setTabGroups: React.Dispatch<React.SetStateAction<TabGroup[]>>;\n tabsWithDots: string[];\n setTabsWithDots: React.Dispatch<React.SetStateAction<string[]>>;\n};\n\nexport type TabsProps = {\n tabs: string[];\n name?: string;\n accentColor?: Color;\n style?: \"default\" | \"borderRadiusTop\" | \"box\";\n onChange?: (tab: string) => void;\n children?: React.ReactNode;\n} & ComponentMarginProps;\n\nexport type TabsRef = {\n selectedTab: string;\n selectTab: (tab: string) => void;\n};\n\ntype TabsComponent = {\n (props: ComponentPropWithRef<TabsRef, TabsProps>): React.ReactElement;\n content: (props: TabsContentProps) => React.ReactElement;\n};\n\nconst TabsComponent: TabsComponent = forwardRef(function Tabs(\n { tabs, name, accentColor, style = \"default\", onChange, children, ...props }: TabsProps,\n ref: React.ForwardedRef<TabsRef>,\n) {\n const reactRouterDomPlugin = usePlugin(\"react-router-dom\");\n\n const theme = useTheme();\n const urlQuery = reactRouterDomPlugin ? useUrlQuery() : undefined;\n const { componentsState } = useBetterHtmlContextInternal();\n const { colorTheme } = useBetterCoreContext();\n\n const firstRenderPassedRef = useRef<boolean>(false);\n const tabsRef = useRef<Record<string, HTMLDivElement | null>>({});\n\n const [selectedTab, setSelectedTab] = useState<string>(() => {\n const selectedTabValue = tabs[0] ?? \"\";\n\n if (urlQuery) {\n const tabQueryValue = urlQuery.getQuery(name ?? defaultTabName);\n\n if (!tabQueryValue) return selectedTabValue;\n\n if (tabs.includes(tabQueryValue)) return tabQueryValue;\n }\n\n return selectedTabValue;\n });\n const [rerenderState, setRerenderState] = useState<number>(0);\n\n const tabsGap = style === \"box\" ? theme.styles.gap / 2 : 0;\n\n const onClickTab = useCallback(\n (tab: string) => {\n setSelectedTab(tab);\n onChange?.(tab);\n\n if (urlQuery) {\n urlQuery.setQuery({\n [name ?? defaultTabName]: tab,\n });\n }\n },\n [onChange, name, urlQuery],\n );\n\n const width = useMemo<number>(\n () => tabsRef.current[selectedTab]?.getBoundingClientRect().width ?? 0,\n [rerenderState, selectedTab],\n );\n const leftSpacing = useMemo<number>(() => {\n const selectedTabIndex = tabs.findIndex((tab) => tab === selectedTab);\n\n let spacing = 0;\n Object.values(tabsRef.current).forEach((tab, index) => {\n if (index < selectedTabIndex) spacing += (tab?.getBoundingClientRect().width ?? 0) + tabsGap;\n });\n\n return spacing;\n }, [selectedTab, tabs, tabsGap]);\n\n useEffect(() => {\n const timeout = setTimeout(() => {\n setRerenderState(Math.random());\n firstRenderPassedRef.current = true;\n }, 0.01 * 1000);\n\n return () => {\n clearTimeout(timeout);\n };\n }, []);\n useEffect(() => {\n componentsState.tabs.setTabGroups((oldValue) => {\n const thisTabGroup = oldValue.find((item) => item.name === (name ?? defaultTabName));\n\n if (thisTabGroup) {\n return oldValue.map((item) =>\n item.name === (name ?? defaultTabName)\n ? {\n ...item,\n selectedTab,\n }\n : item,\n );\n } else {\n return [\n ...oldValue,\n {\n name: name ?? defaultTabName,\n selectedTab,\n },\n ];\n }\n });\n }, [selectedTab, name]);\n useEffect(() => {\n tabsRef.current[selectedTab]?.scrollIntoView({\n behavior: firstRenderPassedRef.current ? \"smooth\" : undefined,\n block: \"nearest\",\n });\n }, [selectedTab]);\n useEffect(() => {\n return () => {\n componentsState.tabs.setTabGroups((oldValue) =>\n oldValue.filter((item) => item.name !== (name ?? defaultTabName)),\n );\n };\n }, []);\n\n useImperativeHandle(\n ref,\n (): TabsRef => {\n return {\n selectedTab,\n selectTab: onClickTab,\n };\n },\n [selectedTab, onClickTab],\n );\n\n return (\n <Div.column width=\"100%\" gap={theme.styles.space} {...props}>\n <Div position=\"relative\" className=\"react-better-html-no-scrollbar\" overflowY=\"auto\">\n <Div.row position=\"relative\" width=\"fit-content\" gap={tabsGap} userSelect=\"none\">\n {tabs.map((tab) => {\n const selected = tab === selectedTab;\n\n return (\n <Div\n position=\"relative\"\n width=\"fit-content\"\n backgroundColor={\n style === \"box\"\n ? selected\n ? theme.colors.primary\n : theme.colors.backgroundContent\n : theme.colors.backgroundBase\n }\n borderRadius={style === \"box\" ? theme.styles.borderRadius : undefined}\n borderTopLeftRadius={style === \"borderRadiusTop\" ? theme.styles.borderRadius : undefined}\n borderTopRightRadius={style === \"borderRadiusTop\" ? theme.styles.borderRadius : undefined}\n border={\n style === \"box\" ? `1px solid ${selected ? \"transparent\" : theme.colors.border}` : undefined\n }\n filterHover={\n colorTheme === \"dark\"\n ? style === \"box\"\n ? \"brightness(1.2)\"\n : \"brightness(2)\"\n : \"brightness(0.9)\"\n }\n paddingInline={theme.styles.space}\n paddingBlock={theme.styles.gap}\n value={tab}\n cursor=\"pointer\"\n isTabAccessed\n onClickWithValue={onClickTab}\n ref={(ref) => {\n tabsRef.current[tab] = ref;\n }}\n key={tab}\n >\n {componentsState.tabs.tabsWithDots.includes(tab) && (\n <Div\n position=\"absolute\"\n top={(theme.styles.space - tabDotSize) / 2}\n right={(theme.styles.space - tabDotSize) / 2}\n width={tabDotSize}\n height={tabDotSize}\n backgroundColor={style === \"box\" && selected ? theme.colors.base : theme.colors.primary}\n borderRadius={999}\n transition={theme.styles.transition}\n />\n )}\n\n <Text\n fontWeight={700}\n color={\n !selected ? theme.colors.textSecondary : style === \"box\" ? theme.colors.base : undefined\n }\n transition={theme.styles.transition}\n whiteSpace=\"nowrap\"\n >\n {tab}\n </Text>\n </Div>\n );\n })}\n </Div.row>\n\n {style !== \"box\" && (\n <Div\n position=\"absolute\"\n width={width}\n height={tabBottomLineWidth}\n bottom={0}\n left={leftSpacing}\n backgroundColor={accentColor ?? theme.colors.primary}\n transition={firstRenderPassedRef.current ? theme.styles.transition : \"none\"}\n />\n )}\n </Div>\n\n {children && <Div width=\"100%\">{children}</Div>}\n </Div.column>\n );\n}) as any;\n\ntype TabsContentProps = {\n tab: string;\n tabWithDot?: boolean;\n tabsGroupName?: string;\n isInitialTab?: boolean;\n children?: React.ReactNode;\n};\n\nTabsComponent.content = function Content({ tab, tabWithDot, tabsGroupName, isInitialTab, children }) {\n const { componentsState } = useBetterHtmlContextInternal();\n\n const thisTabGroupData = useMemo<TabGroup | undefined>(\n () => componentsState.tabs.tabGroups.find((item) => item.name === (tabsGroupName ?? defaultTabName)),\n [componentsState.tabs, tabsGroupName],\n );\n\n useEffect(() => {\n if (tabWithDot) {\n componentsState.tabs.setTabsWithDots?.((oldValue) => (oldValue.includes(tab) ? oldValue : [...oldValue, tab]));\n } else {\n componentsState.tabs.setTabsWithDots?.((oldValue) =>\n oldValue.includes(tab) ? oldValue.filter((tab) => tab !== tab) : oldValue,\n );\n }\n }, [tabWithDot]);\n\n return (thisTabGroupData ? thisTabGroupData.selectedTab === tab : isInitialTab) ? (\n <Div width=\"100%\">{children}</Div>\n ) : undefined;\n} as TabsComponent[\"content\"];\n\nconst Tabs = memo(TabsComponent) as any as typeof TabsComponent & {\n content: typeof TabsComponent.content;\n};\n\nTabs.content = TabsComponent.content;\n\nexport default Tabs;\n","import { forwardRef, memo, useCallback, useEffect, useImperativeHandle, useRef, useState } from \"react\";\nimport { AnyOtherString, AssetName, IconName, OmitProps, useBooleanState, useTheme } from \"react-better-core\";\n\nimport { ComponentPropWithRef } from \"../types/components\";\n\nimport Div, { DivProps } from \"./Div\";\nimport Icon from \"./Icon\";\nimport Text, { TextAs } from \"./Text\";\nimport Image from \"./Image\";\nimport Divider from \"./Divider\";\n\nconst animationDurationClose = 0.15;\nconst animationDurationOpen = animationDurationClose * 2;\n\nexport type FoldableProps = {\n isOpen?: boolean;\n defaultOpen?: boolean;\n title?: string;\n /** @default \"h3\" */\n titleAs?: TextAs;\n /** @default textPrimary */\n titleColor?: React.CSSProperties[\"color\"];\n titleRightElement?: React.ReactNode;\n description?: string;\n /** @default textSecondary */\n descriptionColor?: React.CSSProperties[\"color\"];\n rightElement?: React.ReactNode;\n icon?: IconName | AnyOtherString;\n image?: AssetName | AnyOtherString;\n headerPaddingBlock?: React.CSSProperties[\"paddingBlock\"];\n headerPaddingInline?: React.CSSProperties[\"paddingInline\"];\n renderHeader?: (isOpen: boolean, toggleOpen: () => void) => React.ReactNode;\n onOpenChange?: (isOpen: boolean) => void;\n children?: React.ReactNode;\n} & OmitProps<DivProps, \"ref\">;\n\nexport type FoldableRef = {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n};\n\ntype FoldableComponentType = {\n (props: ComponentPropWithRef<FoldableRef, FoldableProps>): React.ReactElement;\n box: (props: ComponentPropWithRef<FoldableRef, FoldableProps>) => React.ReactElement;\n};\n\nconst FoldableComponent: FoldableComponentType = forwardRef<FoldableRef, FoldableProps>(function Foldable(\n {\n isOpen: controlledIsOpen,\n defaultOpen = false,\n title,\n titleAs = \"h3\",\n titleColor,\n titleRightElement,\n description,\n descriptionColor,\n rightElement,\n icon,\n image,\n headerPaddingBlock,\n headerPaddingInline,\n renderHeader,\n onOpenChange,\n children,\n ...props\n },\n ref,\n) {\n const theme = useTheme();\n\n const bodyRef = useRef<HTMLDivElement>(null);\n\n const [internalIsOpen, setInternalIsOpen] = useBooleanState(defaultOpen);\n const [bodyVirtualHeight, setBodyVirtualHeight] = useState<number>();\n\n const isOpen = controlledIsOpen !== undefined ? controlledIsOpen : internalIsOpen;\n\n const open = useCallback(() => {\n if (controlledIsOpen === undefined) setInternalIsOpen.setTrue();\n onOpenChange?.(true);\n }, [controlledIsOpen, onOpenChange]);\n const close = useCallback(() => {\n if (controlledIsOpen === undefined) setInternalIsOpen.setFalse();\n onOpenChange?.(false);\n }, [controlledIsOpen, onOpenChange]);\n const toggleOpen = useCallback(() => {\n if (controlledIsOpen === undefined) setInternalIsOpen.toggle();\n onOpenChange?.(!isOpen);\n }, [controlledIsOpen, isOpen, onOpenChange]);\n\n useEffect(() => {\n if (!bodyRef.current) return;\n\n const body = bodyRef.current;\n\n setBodyVirtualHeight(body.scrollHeight * 2);\n\n const timeout = setTimeout(() => {\n setBodyVirtualHeight(body.scrollHeight * 2);\n }, 0.2 * 1000);\n\n return () => {\n clearTimeout(timeout);\n };\n }, [isOpen]);\n useEffect(() => {\n if (!isOpen) return;\n if (!bodyRef.current) return;\n\n const observer = new ResizeObserver(() => {\n if (!bodyRef.current) return;\n\n setBodyVirtualHeight(bodyRef.current.scrollHeight * 2);\n });\n\n observer.observe(bodyRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, [isOpen]);\n\n useImperativeHandle(ref, (): FoldableRef => {\n return {\n open,\n close,\n toggle: toggleOpen,\n isOpen,\n };\n }, [open, close, toggleOpen, isOpen]);\n\n return (\n <Div.column width=\"100%\" {...props}>\n {renderHeader ? (\n renderHeader(isOpen, toggleOpen)\n ) : (\n <Div.row\n width=\"100%\"\n alignItems=\"center\"\n gap={theme.styles.space}\n paddingBlock={headerPaddingBlock ?? theme.styles.gap}\n paddingInline={headerPaddingInline}\n cursor=\"pointer\"\n onClick={toggleOpen}\n userSelect=\"none\"\n >\n <Div.row flex={1} alignItems=\"center\" gap={theme.styles.space}>\n {icon && <Icon name={icon} size={20} flexShrink={0} />}\n {image && <Image.profileImage name={image} size={24} flexShrink={0} />}\n\n <Div.column gap={theme.styles.gap / 2}>\n {title && (\n <Div.row alignItems=\"center\" gap={theme.styles.space}>\n <Text\n as={titleAs}\n fontWeight={700}\n lineHeight=\"20px\"\n color={titleColor ?? theme.colors.textPrimary}\n >\n {title}\n </Text>\n\n {titleRightElement}\n </Div.row>\n )}\n\n {description && <Text color={descriptionColor ?? theme.colors.textSecondary}>{description}</Text>}\n </Div.column>\n </Div.row>\n\n {rightElement}\n\n <Icon\n name=\"chevronDown\"\n transform={`rotate(${isOpen ? 180 : 0}deg)`}\n transition={theme.styles.transition}\n />\n </Div.row>\n )}\n\n <Div height={isOpen ? 1 : 0} opacity={isOpen ? 1 : 0} transition={theme.styles.transition}>\n <Divider.horizontal />\n </Div>\n\n <Div\n maxHeight={isOpen ? bodyVirtualHeight : 0}\n opacity={!isOpen ? 0 : undefined}\n transition={`max-height ${isOpen ? animationDurationOpen : animationDurationClose}s ease, opacity ${\n theme.styles.transition\n }`}\n overflow={!isOpen ? \"hidden\" : undefined}\n pointerEvents={!isOpen ? \"none\" : undefined}\n ref={bodyRef}\n >\n <Div paddingBlock={theme.styles.gap} paddingInline={headerPaddingInline}>\n {children}\n </Div>\n </Div>\n </Div.column>\n );\n}) as any;\n\nFoldableComponent.box = forwardRef(function Box({ ...props }, ref) {\n const theme = useTheme();\n\n return (\n <FoldableComponent\n backgroundColor={theme.colors.backgroundContent}\n border={`1px solid ${theme.colors.border}`}\n borderRadius={theme.styles.borderRadius}\n headerPaddingBlock={(theme.styles.gap + theme.styles.space) / 2}\n headerPaddingInline={theme.styles.space}\n {...props}\n ref={ref}\n />\n );\n}) as FoldableComponentType[\"box\"];\n\nconst Foldable = memo(FoldableComponent) as any as typeof FoldableComponent & {\n box: typeof FoldableComponent.box;\n};\n\nFoldable.box = FoldableComponent.box;\n\nexport default Foldable;\n","import { createContext, memo, useCallback, useContext, useEffect, useMemo, useState } from \"react\";\nimport {\n AnyOtherString,\n AssetName,\n IconName,\n lightenColor,\n useBetterCoreContext,\n useBooleanState,\n useTheme,\n} from \"react-better-core\";\n\nimport { defaultSideMenuWidth } from \"../constants/app\";\n\nimport { useMediaQuery } from \"../utils/hooks\";\nimport { filterHover } from \"../utils/variableFunctions\";\n\nimport { ReactRouterDomPluginOptions } from \"../plugins\";\n\nimport Div from \"./Div\";\nimport Icon from \"./Icon\";\nimport Button from \"./Button\";\nimport Text from \"./Text\";\nimport Image from \"./Image\";\nimport PageHolder, { PageHolderProps } from \"./PageHolder\";\nimport Loader from \"./Loader\";\nimport Tooltip from \"./Tooltip\";\nimport { useBetterHtmlContextInternal, usePlugin } from \"./BetterHtmlProvider\";\n\nconst tabDotSize = 6;\n\ntype SideMenuActiveItem = {\n href: string;\n length: number;\n};\n\ntype SideMenuContext = {\n activeItem: SideMenuActiveItem | undefined;\n setActiveItem: React.Dispatch<React.SetStateAction<SideMenuActiveItem | undefined>>;\n};\n\nconst sideMenuContext = createContext<SideMenuContext | undefined>(undefined);\n\nconst SideMenuContextProvider = sideMenuContext.Provider;\nconst useSideMenuContext = () => {\n const context = useContext(sideMenuContext);\n\n if (!context) {\n throw new Error(\"`useSideMenuContext` must be used within a `<SideMenuContextProvider>` component\");\n }\n\n return context;\n};\n\nexport type SideMenuItem = {\n text: string;\n iconName: IconName | AnyOtherString;\n href?: string;\n disabled?: boolean;\n hidden?: boolean;\n withDot?: boolean;\n children?: SideMenuItem[];\n /** @default true */\n onClickCloseSideMenu?: boolean;\n onClick?: (item: SideMenuItem) => void;\n};\n\ntype MenuItemComponentProps = {\n item: SideMenuItem;\n backgroundColor?: React.CSSProperties[\"backgroundColor\"];\n onClick?: () => void;\n};\n\nconst MenuItemComponent = memo(function MenuItemComponent({ item, backgroundColor, onClick }: MenuItemComponentProps) {\n const reactRouterDomPlugin = usePlugin<ReactRouterDomPluginOptions>(\"react-router-dom\");\n\n if (!reactRouterDomPlugin) {\n throw new Error(\n \"`SideMenu` component requires the `react-router-dom` plugin to be added to the `plugins` prop in `<BetterHtmlProvider>`.\",\n );\n }\n\n const reactRouterDomPluginConfig = reactRouterDomPlugin.getConfig();\n\n const theme = useTheme();\n const mediaQuery = useMediaQuery();\n const location = reactRouterDomPluginConfig.useLocation();\n const { components, sideMenuIsCollapsed, setSideMenuIsCollapsed } = useBetterHtmlContextInternal();\n const { colorTheme } = useBetterCoreContext();\n\n const { activeItem, setActiveItem } = useSideMenuContext();\n\n const [isOpened, setIsOpened] = useBooleanState();\n\n const isCollapsed = sideMenuIsCollapsed && !mediaQuery.size1000;\n\n const onClickElement = useCallback(() => {\n if (item.disabled) return;\n\n if (!item.children) setActiveItem((oldValue) => (oldValue?.href === item.href ? oldValue : undefined));\n\n if (item.children) {\n setSideMenuIsCollapsed.setFalse();\n if (isCollapsed) setTimeout(setIsOpened.setTrue, 0.1 * 1000);\n else setIsOpened.toggle();\n } else {\n if (item.onClickCloseSideMenu !== false) onClick?.();\n item.onClick?.(item);\n }\n }, [onClick, item, isCollapsed]);\n\n const childrenHaveDot = useMemo<boolean>(\n () => item.children?.some((child) => child.withDot) ?? false,\n [item.children],\n );\n\n const isActive = activeItem && item.href && activeItem.href === item.href;\n\n const readyBackgroundColor = backgroundColor ?? theme.colors.backgroundContent;\n\n const iconSize = 16;\n const paddingBlock = theme.styles.gap;\n const paddingLeft = theme.styles.gap + 2;\n const iconGap = theme.styles.gap;\n const lineHeight = 20;\n\n const lineWidth = 2;\n const lineEndRadius = iconSize / 2 + iconGap * 2;\n\n const content = (\n <Tooltip\n content={\n <Div.row alignItems=\"center\" gap={theme.styles.gap}>\n <Text whiteSpace=\"nowrap\">{item.text}</Text>\n\n {item.children && <Icon name=\"chevronDown\" color={theme.colors.textSecondary} size={14} />}\n </Div.row>\n }\n contentPointerEvents=\"none\"\n withArrow\n childrenWrapperWidth=\"100%\"\n disabled={!isCollapsed}\n position=\"right\"\n >\n <Div.row\n alignItems=\"center\"\n gap={iconGap}\n whiteSpace=\"nowrap\"\n backgroundColor={\n isActive\n ? colorTheme === \"dark\"\n ? lightenColor(theme.colors.primary, 0.7)\n : lightenColor(theme.colors.primary, 0.85)\n : readyBackgroundColor\n }\n borderRadius={theme.styles.borderRadius}\n paddingBlock={paddingBlock}\n paddingLeft={isCollapsed ? theme.styles.space : paddingLeft}\n paddingRight={theme.styles.space}\n filterHover={`brightness(${colorTheme === \"dark\" ? (isActive ? 0.8 : 1.3) : isActive ? 0.8 : 0.95})`}\n overflow={isCollapsed ? \"hidden\" : undefined}\n cursor={item.disabled ? \"not-allowed\" : \"pointer\"}\n opacity={item.disabled ? 0.6 : undefined}\n onClick={onClickElement}\n >\n <Icon name={item.iconName} color={theme.colors.primary} size={iconSize} flexShrink={0} />\n\n <Text\n flex={1}\n lineHeight={`${lineHeight}px`}\n color={isActive ? theme.colors.primary : theme.colors.textPrimary}\n opacity={isCollapsed ? 0 : undefined}\n transition={theme.styles.transition}\n >\n {item.text}\n </Text>\n\n {item.children && (\n <Icon\n name=\"chevronDown\"\n color={theme.colors.textSecondary}\n size={14}\n transform={isOpened ? \"rotate(180deg)\" : undefined}\n transition={theme.styles.transition}\n />\n )}\n\n <Div\n position=\"absolute\"\n top={(theme.styles.space - tabDotSize) / 2}\n right={(theme.styles.space - tabDotSize) / 2}\n width={tabDotSize}\n height={tabDotSize}\n backgroundColor={theme.colors.primary}\n borderRadius={999}\n opacity={item.withDot || (childrenHaveDot && !isOpened) ? 1 : 0}\n transition={theme.styles.transition}\n />\n </Div.row>\n </Tooltip>\n );\n\n useEffect(() => {\n if (!item.href) return;\n\n const isActive =\n location.pathname === \"/\"\n ? location.pathname === item.href\n : location.pathname.startsWith(item.href) && item.href !== \"/\";\n\n if (!isActive) return;\n\n setActiveItem((oldValue) =>\n item.href\n ? oldValue && oldValue.length > item.href.length\n ? oldValue\n : {\n href: item.href,\n length: item.href.length,\n }\n : undefined,\n );\n }, [location.pathname]);\n useEffect(() => {\n if (!item.children) return;\n\n const toBeOpened = item.children.some((child) =>\n child.href\n ? location.pathname === \"/\"\n ? location.pathname === child.href\n : location.pathname.startsWith(child.href) && child.href !== \"/\"\n : false,\n );\n\n setIsOpened.setState(toBeOpened);\n }, [item]);\n useEffect(() => {\n if (!isCollapsed) return;\n\n setIsOpened.setFalse();\n }, [isCollapsed]);\n\n const LinkComponentTag = components.button?.tagReplacement?.linkComponent ?? \"a\";\n\n return (\n <Div width=\"100%\">\n {item.href ? (\n <LinkComponentTag to={item.href} href={item.href} onClick={onClickElement}>\n {content}\n </LinkComponentTag>\n ) : (\n content\n )}\n\n {item.children && (\n <Div.column\n position=\"relative\"\n maxHeight={isOpened ? 1000 : 0}\n gap={theme.styles.gap / 2}\n marginTop={isOpened ? theme.styles.gap / 2 : undefined}\n paddingLeft={paddingLeft + iconSize + iconGap}\n overflow=\"hidden\"\n transition={`max-height ${theme.styles.transition}, margin-top ${theme.styles.transition}`}\n >\n {item.children.map((child) => (\n <MenuItemComponent\n item={child}\n backgroundColor={readyBackgroundColor}\n onClick={onClick}\n key={child.text}\n />\n ))}\n\n <Div\n position=\"absolute\"\n height={`calc(100% - ${paddingBlock + lineHeight / 2 + lineEndRadius / 2}px)`}\n top={0}\n left={paddingLeft + iconSize / 2}\n zIndex={-1}\n >\n <Div\n position=\"relative\"\n width={lineWidth}\n height=\"100%\"\n backgroundColor={theme.colors.border}\n zIndex={1}\n />\n <Div\n position=\"absolute\"\n width={lineEndRadius}\n height={lineEndRadius}\n top={`calc(100% - ${lineEndRadius / 2}px)`}\n left={0}\n border={`${lineWidth}px solid ${theme.colors.border}`}\n borderRadius={999}\n borderTopColor={readyBackgroundColor}\n borderLeftColor={readyBackgroundColor}\n borderRightColor={readyBackgroundColor}\n transform=\"rotate(45deg)\"\n />\n </Div>\n </Div.column>\n )}\n </Div>\n );\n});\n\nexport type SideMenuProps = {\n items: SideMenuItem[];\n bottomItems?: SideMenuItem[];\n topSpace?: number;\n logoAssetName?: AssetName | AnyOtherString;\n logoUrl?: string;\n logoText?: string;\n logoFontFamily?: string;\n collapsable?: boolean;\n withCloseButton?: boolean;\n widthMobileHandle?: boolean;\n absoluteComponent?: React.ReactNode;\n additionalComponent?: React.ReactNode;\n isLoading?: boolean;\n /** @default backgroundContent */\n backgroundColor?: React.CSSProperties[\"backgroundColor\"];\n paddingTop?: React.CSSProperties[\"paddingTop\"];\n};\n\ntype SideMenuComponentType = {\n (props: SideMenuProps): React.ReactElement;\n pageHolder: (props: SideMenuPageHolderProps) => React.ReactElement;\n burgerButton: () => React.ReactElement;\n};\n\nconst SideMenuComponent: SideMenuComponentType = function SideMenu({\n items,\n bottomItems,\n topSpace = 0,\n logoAssetName,\n logoUrl,\n logoText,\n logoFontFamily,\n collapsable,\n withCloseButton,\n widthMobileHandle,\n absoluteComponent,\n additionalComponent,\n isLoading,\n backgroundColor,\n paddingTop,\n}: SideMenuProps) {\n const theme = useTheme();\n const mediaQuery = useMediaQuery();\n const { components, sideMenuIsCollapsed, setSideMenuIsCollapsed, sideMenuIsOpenMobile, setSideMenuIsOpenMobile } =\n useBetterHtmlContextInternal();\n\n const [activeItem, setActiveItem] = useState<SideMenuActiveItem>();\n\n const onClickXButton = useCallback(() => {\n setSideMenuIsOpenMobile.setFalse();\n }, []);\n\n const readyItems = useMemo(() => items.filter((item) => !item.hidden), [items]);\n const readyBottomItems = useMemo(() => bottomItems?.filter((item) => !item.hidden), [bottomItems]);\n\n const contextValue = useMemo<SideMenuContext>(\n () => ({\n activeItem,\n setActiveItem,\n }),\n [activeItem],\n );\n\n const isCollapsable = collapsable && !mediaQuery.size1000;\n const isCollapsed = sideMenuIsCollapsed && !mediaQuery.size1000;\n\n const LinkComponentTag = components.button?.tagReplacement?.linkComponent ?? \"a\";\n const sideMenuWidth = components.sideMenu?.width ?? defaultSideMenuWidth;\n const sideMenuCollapsedWidth = theme.styles.space + theme.styles.space * 2 + 16 + theme.styles.space;\n\n const readyBackgroundColor = backgroundColor ?? theme.colors.backgroundContent;\n const logoSize = sideMenuCollapsedWidth - theme.styles.space * 2;\n\n return (\n <SideMenuContextProvider value={contextValue}>\n <Div.column\n position=\"fixed\"\n width={mediaQuery.size1000 ? \"100%\" : isCollapsed ? sideMenuCollapsedWidth : sideMenuWidth}\n height={`calc(100svh - ${topSpace}px)`}\n top={topSpace}\n left={0}\n backgroundColor={readyBackgroundColor}\n borderRight={`solid 1px ${theme.colors.border}`}\n transform={!mediaQuery.size1000 || sideMenuIsOpenMobile ? \"translateX(0)\" : \"translateX(-100%)\"}\n paddingTop={paddingTop ?? (logoAssetName || logoUrl ? theme.styles.gap : theme.styles.space)}\n transition={\n mediaQuery.size1000\n ? !isCollapsed\n ? `transform ${theme.styles.transition}`\n : \"none\"\n : theme.styles.transition\n }\n userSelect=\"none\"\n zIndex={10}\n >\n <Div.column width=\"100%\" height=\"100%\" gap={theme.styles.space}>\n {(logoAssetName || logoUrl || (withCloseButton && mediaQuery.size1000)) && (\n <Div.row alignItems=\"center\" paddingInline={theme.styles.space}>\n {(logoAssetName || logoUrl) && (\n <LinkComponentTag to=\"/\" href=\"/\" onClick={onClickXButton}>\n <Div.row\n alignItems=\"center\"\n width={sideMenuCollapsedWidth ? logoSize : undefined}\n height={logoSize}\n whiteSpace=\"nowrap\"\n gap={theme.styles.gap}\n >\n <Image\n name={logoAssetName}\n src={logoUrl}\n width={logoSize}\n height={logoSize}\n objectFit=\"contain\"\n />\n\n {logoText && (\n <Text\n fontFamily={logoFontFamily}\n fontSize={22}\n fontWeight={800}\n opacity={!isCollapsed ? 1 : 0}\n transition={theme.styles.transition}\n userSelect=\"none\"\n >\n {logoText}\n </Text>\n )}\n </Div.row>\n </LinkComponentTag>\n )}\n\n {withCloseButton && mediaQuery.size1000 && (\n <Button.icon icon=\"XMark\" marginLeft=\"auto\" onClick={onClickXButton} />\n )}\n </Div.row>\n )}\n\n {!isLoading ? (\n <>\n <Div.column\n width=\"100%\"\n height=\"100%\"\n overflowY={!isCollapsed ? \"auto\" : undefined}\n paddingInline={theme.styles.space}\n paddingBottom={!isCollapsable && !readyBottomItems ? theme.styles.space : undefined}\n >\n <Div.column gap={theme.styles.gap / 2}>\n {readyItems.map((item) => (\n <MenuItemComponent\n item={item}\n backgroundColor={readyBackgroundColor}\n onClick={onClickXButton}\n key={item.text}\n />\n ))}\n </Div.column>\n </Div.column>\n\n {readyBottomItems && (\n <Div.column\n borderTop={mediaQuery.size1000 ? `solid 1px ${theme.colors.border}` : undefined}\n gap={theme.styles.gap / 2}\n marginTop=\"auto\"\n paddingTop={mediaQuery.size1000 ? theme.styles.space : undefined}\n paddingInline={theme.styles.space}\n paddingBottom={!isCollapsable ? theme.styles.space : undefined}\n >\n {readyBottomItems.map((item) => (\n <MenuItemComponent\n item={item}\n backgroundColor={readyBackgroundColor}\n onClick={onClickXButton}\n key={item.text}\n />\n ))}\n </Div.column>\n )}\n </>\n ) : (\n <Div flex={1}>\n <Loader.box text={isCollapsed ? \"\" : undefined} />\n </Div>\n )}\n\n {additionalComponent}\n\n {isCollapsable && (\n <Div\n borderTop={`solid 1px ${theme.colors.border}`}\n marginTop={!readyBottomItems ? \"auto\" : undefined}\n paddingInline={theme.styles.space}\n paddingBlock={theme.styles.space}\n >\n <Div.row\n alignItems=\"center\"\n justifyContent=\"center\"\n backgroundColor={readyBackgroundColor}\n borderRadius={theme.styles.borderRadius}\n cursor=\"pointer\"\n filterHover={filterHover().z1}\n isTabAccessed\n paddingBlock={theme.styles.gap}\n onClick={setSideMenuIsCollapsed.toggle}\n >\n <Icon\n name=\"chevronRight\"\n size={20}\n color={theme.colors.textSecondary}\n transform={`rotate(${isCollapsed ? 0 : 180}deg)`}\n transition={theme.styles.transition}\n />\n </Div.row>\n </Div>\n )}\n </Div.column>\n\n {widthMobileHandle && (\n <Div.row\n position=\"absolute\"\n top={theme.styles.space}\n left=\"100%\"\n backgroundColor={readyBackgroundColor}\n border={`solid 1px ${theme.colors.border}`}\n borderLeft=\"none\"\n borderTopRightRadius={theme.styles.borderRadius}\n borderBottomRightRadius={theme.styles.borderRadius}\n alignItems=\"center\"\n cursor=\"pointer\"\n opacity={!mediaQuery.size1000 ? 0 : undefined}\n pointerEvents={!mediaQuery.size1000 ? \"none\" : undefined}\n padding={theme.styles.gap}\n paddingRight={(theme.styles.space + theme.styles.gap) / 2}\n transform={!mediaQuery.size1000 ? \"translateX(-100%)\" : undefined}\n transition={theme.styles.transition}\n onClick={setSideMenuIsOpenMobile.toggle}\n >\n <Icon\n name=\"chevronRight\"\n size={20}\n color={theme.colors.textSecondary}\n transform={sideMenuIsOpenMobile ? \"rotate(180deg)\" : undefined}\n transition={theme.styles.transition}\n />\n </Div.row>\n )}\n\n {absoluteComponent && (\n <Div position=\"absolute\" top={0} left={0} pointerEvents=\"none\" zIndex={2}>\n <Div pointerEvents=\"all\">{absoluteComponent}</Div>\n </Div>\n )}\n </Div.column>\n </SideMenuContextProvider>\n );\n};\n\ntype SideMenuPageHolderProps = PageHolderProps & {\n outsideComponent?: React.ReactNode;\n};\n\nSideMenuComponent.pageHolder = function SideMenuPageHolder({ outsideComponent, ...props }) {\n const theme = useTheme();\n const mediaQuery = useMediaQuery();\n const { components, sideMenuIsCollapsed } = useBetterHtmlContextInternal();\n\n const sideMenuWidth = components.sideMenu?.width ?? defaultSideMenuWidth;\n const sideMenuCollapsedWidth = theme.styles.space + theme.styles.space * 2 + 16 + theme.styles.space;\n\n return (\n <Div\n position=\"relative\"\n width=\"100%\"\n paddingLeft={\n !mediaQuery.size1000 ? (!sideMenuIsCollapsed ? sideMenuWidth : sideMenuCollapsedWidth) : undefined\n }\n transition={theme.styles.transition}\n >\n {outsideComponent}\n\n <PageHolder {...props} />\n </Div>\n );\n} as SideMenuComponentType[\"pageHolder\"];\n\nSideMenuComponent.burgerButton = function BurgerButton() {\n const theme = useTheme();\n const { sideMenuIsOpenMobile, setSideMenuIsOpenMobile } = useBetterHtmlContextInternal();\n\n const [isHovered, setIsHovered] = useBooleanState();\n\n const width = 2;\n\n return (\n <Div\n position=\"relative\"\n width={32}\n height={20}\n cursor=\"pointer\"\n onMouseOver={setIsHovered.setTrue}\n onMouseLeave={setIsHovered.setFalse}\n onMouseOut={setIsHovered.setFalse}\n onClick={setSideMenuIsOpenMobile.toggle}\n >\n <Div\n position=\"absolute\"\n width={isHovered || sideMenuIsOpenMobile ? \"100%\" : \"50%\"}\n height={width}\n top={sideMenuIsOpenMobile ? `calc(50% - ${width / 2}px)` : 0}\n left={0}\n backgroundColor={theme.colors.border}\n borderRadius={999}\n transform={sideMenuIsOpenMobile ? \"rotate(45deg)\" : undefined}\n transition={theme.styles.transition}\n />\n <Div\n position=\"absolute\"\n width={isHovered ? \"100%\" : \"100%\"}\n height={width}\n top=\"50%\"\n left={0}\n backgroundColor={theme.colors.border}\n borderRadius={999}\n transform=\"translateY(-50%)\"\n opacity={sideMenuIsOpenMobile ? 0 : undefined}\n transition={theme.styles.transition}\n />\n <Div\n position=\"absolute\"\n width={isHovered || sideMenuIsOpenMobile ? \"100%\" : \"75%\"}\n height={width}\n bottom={sideMenuIsOpenMobile ? `calc(50% - ${width / 2}px)` : 0}\n left={0}\n backgroundColor={theme.colors.border}\n borderRadius={999}\n transform={sideMenuIsOpenMobile ? \"rotate(-45deg)\" : undefined}\n transition={theme.styles.transition}\n />\n </Div>\n );\n} as SideMenuComponentType[\"burgerButton\"];\n\nconst SideMenu = memo(SideMenuComponent) as any as typeof SideMenuComponent & {\n pageHolder: typeof SideMenuComponent.pageHolder;\n burgerButton: typeof SideMenuComponent.burgerButton;\n};\n\nSideMenu.pageHolder = SideMenuComponent.pageHolder;\nSideMenu.burgerButton = SideMenuComponent.burgerButton;\n\nexport default SideMenu;\n"],"mappings":"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AAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACH,CAAC;AAEM,IAAM,oBAAiC,oBAAI,IAAI;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACH,CAAC;;;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","names":["import_react_better_core","import_react","import_react_better_core","import_styled_components","import_react","import_react_better_core","import_react","import_react_better_core","import_styled_components","theme","values","reactRouterDomPlugin","createSearchParams","import_react","import_react_better_core","import_react","import_react_better_core","styled","theme","Text","import_jsx_runtime","theme","Divider","import_react","import_react_better_core","import_react","import_react_better_core","import_styled_components","import_jsx_runtime","styled","Image","assets","theme","import_react","import_react_better_core","import_styled_components","import_jsx_runtime","import_react","styled","Icon","theme","icons","import_jsx_runtime","theme","PageHeader","import_jsx_runtime","styled","theme","Div","import_react","import_react_better_core","import_styled_components","import_react","import_react_better_core","import_styled_components","import_react","import_react_better_core","import_styled_components","import_jsx_runtime","styled","theme","Box","Loader","import_jsx_runtime","styled","theme","betterHtmlContext","Icon","Button","import_react","import_react_better_core","import_styled_components","import_jsx_runtime","styled","reactRouterDomPlugin","theme","Destructive","Modal","import_jsx_runtime","StyledDiv","styled","Alert","theme","alertControls","alertsPlugin","import_jsx_runtime","theme","alertsPlugin","import_jsx_runtime","theme","alertsPlugin","localStoragePlugin","CryptoJS","localStoragePlugin","import_react","import_react_better_core","import_jsx_runtime","theme","PageHolder","import_react","import_react_better_core","import_jsx_runtime","theme","Chip","import_react","import_react_better_core","import_styled_components","import_react","import_react_better_core","import_jsx_runtime","theme","import_react","import_react_better_core","import_jsx_runtime","import_react","theme","value","isFocused","Dropdown","import_react","import_react_better_core","import_styled_components","import_jsx_runtime","styled","theme","import_jsx_runtime","styled","theme","value","country","Date","Color","InputField","import_react","import_react_better_core","import_styled_components","import_jsx_runtime","InputElement","styled","theme","import_react","import_react_better_core","import_jsx_runtime","theme","Form","import_react","import_react_better_core","import_jsx_runtime","theme","FormRow","import_react","import_react_better_core","import_jsx_runtime","theme","ColorThemeSwitch","import_react","import_react_better_core","import_styled_components","import_react","import_react_better_core","import_jsx_runtime","maximumVisiblePages","theme","Pagination","import_jsx_runtime","styled","theme","data","props","expandColumn","Table","import_react","import_react_better_core","import_styled_components","import_jsx_runtime","styled","Arrow","theme","Tooltip","import_react","import_react_better_core","import_jsx_runtime","reactRouterDomPlugin","theme","ref","tab","Tabs","import_react","import_react_better_core","import_jsx_runtime","theme","Box","Foldable","import_react","import_react_better_core","import_jsx_runtime","tabDotSize","MenuItemComponent","reactRouterDomPlugin","theme","isActive","SideMenu"]}
|