@consentry/ui
Version:
Composable UI components for the Consentry consent manager. Built with Emotion and designed for use with @consentry/core or @consentry/next.
1 lines • 36.6 kB
Source Map (JSON)
{"version":3,"sources":["../src/CookieBanner.tsx","../src/StyledComponents.tsx","../src/CookieSettingsModal.tsx","../src/SettingsButton.tsx","../src/consentUI.ts","../src/ConsentManager.tsx","../src/defaultClassNames.ts","../src/defaultColors.ts"],"sourcesContent":["import { X } from \"lucide-react\";\nimport { CookieBannerProps } from \"./types\";\nimport {\n BannerWrapper,\n Header,\n Content,\n Title,\n Message,\n CloseButton,\n ButtonRow,\n ActionButton,\n SecondaryButton,\n} from \"./StyledComponents\";\n\nexport const CookieBanner = ({\n onClose,\n onCustomizeClick,\n onAcceptAll,\n onRejectAll,\n mode,\n dark = false,\n labels,\n classNames,\n colors,\n theme = \"light\",\n}: CookieBannerProps) => {\n const isModal = mode === \"modal\";\n return (\n <BannerWrapper\n mode={mode}\n dark={dark}\n colors={colors}\n theme={theme}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"cookie-banner-title\"\n className={classNames?.container}\n initial={\n isModal\n ? {\n opacity: 0,\n scale: 0.95,\n x: \"-50%\",\n y: \"-50%\",\n }\n : {\n opacity: 0,\n y: mode === \"top\" ? -100 : 100,\n }\n }\n animate={\n isModal\n ? {\n opacity: 1,\n scale: 1,\n x: \"-50%\",\n y: \"-50%\",\n }\n : {\n opacity: 1,\n y: 0,\n }\n }\n exit={\n isModal\n ? {\n opacity: 0,\n scale: 0.95,\n x: \"-50%\",\n y: \"-50%\",\n }\n : {\n opacity: 0,\n y: mode === \"top\" ? -100 : 100,\n }\n }\n transition={{ duration: 0.3, ease: [0.4, 0, 0.2, 1] }}\n >\n <Header className={classNames?.header}>\n <Content className={classNames?.content}>\n <Title id=\"cookie-banner-title\" className={classNames?.title}>\n {labels?.title}\n </Title>\n <Message className={classNames?.message}>{labels?.description}</Message>\n </Content>\n <CloseButton\n onClick={onClose}\n aria-label=\"Close banner\"\n className={classNames?.closeButton}\n >\n <X size={20} />\n </CloseButton>\n </Header>\n\n <ButtonRow className={classNames?.buttonRow}>\n <SecondaryButton\n style={{ marginRight: \"0.5rem\" }}\n dark={dark}\n onClick={onCustomizeClick}\n className={classNames?.customizeButton}\n >\n {labels?.customize}\n </SecondaryButton>\n <ActionButton\n outlined\n dark={dark}\n onClick={onRejectAll}\n className={classNames?.rejectButton}\n colors={colors}\n theme={theme}\n >\n {labels?.rejectAll}\n </ActionButton>\n <ActionButton\n dark={dark}\n onClick={onAcceptAll}\n className={classNames?.acceptButton}\n colors={colors}\n theme={theme}\n >\n {labels?.acceptAll}\n </ActionButton>\n </ButtonRow>\n </BannerWrapper>\n );\n};\n","/** @jsxImportSource @emotion/react */\nimport { HTMLAttributes } from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Switch } from \"@headlessui/react\";\nimport { motion } from \"framer-motion\";\nimport { ColorSettings, Theme } from \"./types\";\n\n// ──────────────────────────────────────────\n// Layout\n// ──────────────────────────────────────────\n\nexport const Wrapper = styled.div`\n position: relative;\n z-index: 9999;\n`;\n\ninterface OverlayProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Overlay = styled(motion.div)<OverlayProps>`\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n padding: 1rem;\n z-index: 50;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\ninterface ModalContainerProps extends HTMLAttributes<HTMLDivElement> {\n dark?: boolean;\n}\n\nexport const ModalContainer = styled(motion.div, {\n shouldForwardProp: prop => prop !== \"dark\",\n})<ModalContainerProps>`\n background: ${({ dark }) => (dark ? \"#111827\" : \"white\")};\n color: ${({ dark }) => (dark ? \"white\" : \"#111827\")};\n border-radius: 0.75rem;\n padding: 1.5rem;\n width: 100%;\n max-width: 32rem;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);\n`;\n\n// ──────────────────────────────────────────\n// Banner Wrapper\n// ──────────────────────────────────────────\n\n// Define custom props\ninterface BannerWrapperProps extends HTMLAttributes<HTMLDivElement> {\n mode: \"top\" | \"bottom\" | \"modal\";\n dark: boolean;\n colors?: ColorSettings;\n theme?: Theme;\n}\n\n// Styled motion.div with prop filtering\nexport const BannerWrapper = styled(motion.div, {\n shouldForwardProp: prop => ![\"dark\", \"mode\", \"colors\", \"theme\"].includes(prop),\n})<BannerWrapperProps>`\n position: fixed;\n z-index: 50;\n padding: 1.5rem;\n background-color: ${({ colors, theme = \"light\" }) => colors?.[theme as Theme]?.background};\n color: ${({ colors, theme = \"light\" }) => colors?.[theme as Theme]?.text};\n font-size: 0.875rem;\n border: 1px solid ${({ colors, theme = \"light\" }) => colors?.[theme as Theme]?.border};\n box-shadow: rgba(50, 50, 93, 0.1) 0px 8px 24px, rgba(0, 0, 0, 0.06) 0px 4px 12px;\n\n ${({ mode }) =>\n mode === \"top\" &&\n `\n top: 0;\n left: 0;\n width: 100vw;\n border-radius: 0 0 0.75rem 0.75rem;\n padding: 1.5rem 2.5rem 1.5rem 2rem;\n `}\n\n ${({ mode }) =>\n mode === \"bottom\" &&\n `\n bottom: 0;\n left: 0;\n width: 100vw;\n border-radius: 0.75rem 0.75rem 0 0;\n padding: 1.5rem 2.5rem 1.5rem 2rem;\n `}\n\n ${({ mode }) =>\n mode === \"modal\" &&\n `\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 100%;\n max-width: 42rem;\n border-radius: 1rem;\n `}\n`;\n\n// ──────────────────────────────────────────\n// Content Structure\n// ──────────────────────────────────────────\n\nexport const Header = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 1.5rem;\n`;\n\nexport const Content = styled.div`\n flex: 1;\n`;\n\nexport const Title = styled.h2<{ large?: boolean; dark?: boolean }>`\n font-size: ${({ large }) => (large ? \"1.25rem\" : \"1.125rem\")};\n font-weight: 600;\n margin-bottom: ${({ large }) => (large ? \"0.5rem\" : \"0.25rem\")};\n color: ${({ dark }) => (dark ? \"white\" : \"inherit\")};\n`;\n\nexport const Message = styled.p`\n font-size: 0.875rem;\n line-height: 1.5;\n`;\n\nexport const Section = styled.div`\n display: flex;\n flex-direction: column;\n gap: 1rem;\n`;\n\nexport const Row = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n`;\n\nexport const RowText = styled.div`\n padding-right: 1rem;\n`;\n\nexport const RowTitle = styled.p<{ dark?: boolean }>`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${({ dark }) => (dark ? \"#ffffff\" : \"#111827\")};\n`;\n\nexport const RowDescription = styled.p<{ dark?: boolean }>`\n font-size: 0.75rem;\n color: ${({ dark }) => (dark ? \"#9ca3af\" : \"#6b7280\")};\n`;\n\n// ──────────────────────────────────────────\n// Buttons\n// ──────────────────────────────────────────\n\nexport const ButtonRow = styled.div<{ align?: \"end\" | \"center\" }>`\n display: flex;\n justify-content: ${({ align = \"end\" }) => (align === \"center\" ? \"center\" : \"flex-end\")};\n gap: 0.75rem;\n margin-top: 1.5rem;\n flex-wrap: wrap;\n`;\n\nexport const ActionButton = styled.button<{\n dark: boolean;\n outlined?: boolean;\n colors?: ColorSettings;\n theme?: Theme;\n}>`\n color: ${({ outlined, colors, theme = \"light\" }) => {\n const themeColors = colors?.[theme as Theme];\n return outlined ? themeColors?.primary ?? \"#000000\" : themeColors?.primaryText ?? \"#ffffff\";\n }};\n background-color: ${({ outlined, colors, theme = \"light\" }) => {\n const themeColors = colors?.[theme as Theme];\n return outlined ? \"transparent\" : themeColors?.primary ?? \"#000000\";\n }};\n border: ${({ outlined, colors, theme = \"light\" }) => {\n const themeColors = colors?.[theme as Theme];\n return outlined ? `2px solid ${themeColors?.primary ?? \"#000000\"}` : \"none\";\n }};\n font-weight: 500;\n font-size: 0.875rem;\n padding: 0.625rem 1.25rem;\n border-radius: 0.5rem;\n transition: background-color 0.2s ease, border-color 0.2s ease;\n cursor: pointer;\n\n &:hover {\n background-color: ${({ outlined, colors, theme = \"light\" }) => {\n const themeColors = colors?.[theme as Theme];\n return outlined ? \"transparent\" : themeColors?.primaryHover ?? \"#000000\";\n }};\n border-color: ${({ outlined, colors, theme = \"light\" }) => {\n const themeColors = colors?.[theme as Theme];\n return outlined ? themeColors?.primaryHover ?? \"#000000\" : \"none\";\n }};\n }\n\n &:focus {\n outline: none;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.5);\n }\n`;\n\nexport const SecondaryButton = styled.button<{ dark?: boolean }>`\n font-size: 0.875rem;\n color: ${({ dark }) => (dark ? \"#ffffff\" : \"#6b7280\")};\n background: transparent;\n border: none;\n cursor: pointer;\n\n &:hover {\n text-decoration: underline;\n }\n`;\n\nexport const CloseButton = styled.button`\n color: #9ca3af;\n background: transparent;\n border: none;\n padding: 0.25rem;\n cursor: pointer;\n\n &:hover {\n color: #6b7280;\n }\n\n &:focus {\n outline: none;\n }\n`;\n\n// ──────────────────────────────────────────\n// Toggle\n// ──────────────────────────────────────────\n\nexport const StyledSwitch = styled(Switch)<{\n checked: boolean;\n colors?: ColorSettings;\n theme?: Theme;\n}>`\n margin-top: 1px;\n flex-shrink: 0;\n width: 44px;\n height: 24px;\n padding: 2px;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n border-radius: 9999px;\n background-color: ${({ checked, colors, theme = \"light\" }) => {\n const themeColors = colors?.[theme as Theme];\n return checked ? themeColors?.primary ?? \"#000000\" : \"#d1d5db\";\n }};\n transition: background-color 0.2s ease;\n cursor: pointer;\n border: none;\n\n &:focus-visible {\n outline: none;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.5);\n }\n`;\n\ninterface SwitchThumbProps extends HTMLAttributes<HTMLSpanElement> {}\n\nexport const SwitchThumb = styled(motion.span)<SwitchThumbProps>`\n width: 16px;\n height: 16px;\n background-color: white;\n border-radius: 9999px;\n`;\n\nexport const FloatingButton = styled.button<{\n colors?: ColorSettings;\n theme?: Theme;\n}>`\n position: fixed;\n bottom: 1rem;\n left: 1rem;\n z-index: 40;\n padding: 0.5rem;\n background-color: ${({ colors, theme = \"light\" }) => {\n const themeColors = colors?.[theme as Theme];\n return themeColors?.settingsButton ?? \"#000000\";\n }};\n color: ${({ colors, theme = \"light\" }) => {\n const themeColors = colors?.[theme as Theme];\n return themeColors?.settingsButtonText ?? \"#ffffff\";\n }};\n border-radius: 9999px;\n border: none;\n cursor: pointer;\n transition: background-color 0.2s ease;\n width: 2.5rem;\n height: 2.5rem;\n\n svg {\n width: 1.5rem;\n height: 1.5rem;\n }\n\n &:hover {\n background-color: ${({ colors, theme = \"light\" }) => {\n const themeColors = colors?.[theme as Theme];\n return themeColors?.settingsButtonHover ?? \"#000000\";\n }};\n }\n`;\n","import React from \"react\";\nimport {\n CookieCategory,\n CookiePrefs,\n ModalLabels,\n ModalClassNames,\n Theme,\n ColorSettings,\n} from \"./types\";\nimport {\n Overlay,\n ModalContainer,\n Title,\n Section,\n Row,\n RowText,\n RowTitle,\n RowDescription,\n ButtonRow,\n SecondaryButton,\n ActionButton,\n StyledSwitch,\n SwitchThumb,\n} from \"./StyledComponents\";\n\ninterface CookieSettingsModalProps {\n localPrefs: CookiePrefs;\n setLocalPrefs: React.Dispatch<React.SetStateAction<CookiePrefs>>;\n categories: CookieCategory[];\n onSave: () => void;\n onClose: () => void;\n dark?: boolean;\n labels?: ModalLabels;\n classNames?: ModalClassNames;\n colors?: ColorSettings;\n theme?: Theme;\n}\n\nexport const CookieSettingsModal = ({\n localPrefs,\n setLocalPrefs,\n categories,\n onSave,\n onClose,\n dark = false,\n labels,\n classNames,\n colors,\n theme = \"light\",\n}: CookieSettingsModalProps) => {\n const handleToggle = (key: keyof CookiePrefs) => {\n setLocalPrefs(prev => ({\n ...prev,\n [key]: !prev[key],\n }));\n };\n\n return (\n <Overlay\n className={classNames?.overlay}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.25 }}\n >\n <ModalContainer\n dark={dark}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: 20 }}\n transition={{ duration: 0.3, ease: [0.4, 0, 0.2, 1] }}\n className={classNames?.container}\n >\n <Title large dark={dark} className={classNames?.title}>\n {labels?.title}\n </Title>\n\n <Section className={classNames?.section}>\n {categories.map(({ key, title, description, mandatory }) => (\n <Row key={key} className={classNames?.row}>\n <RowText className={classNames?.rowText}>\n <RowTitle dark={dark} className={classNames?.rowTitle}>\n {title}\n </RowTitle>\n <RowDescription dark={dark} className={classNames?.rowDescription}>\n {description}\n </RowDescription>\n </RowText>\n\n <StyledSwitch\n checked={mandatory ? true : localPrefs[key]}\n onChange={() => (mandatory ? null : handleToggle(key))}\n className={classNames?.toggleSwitch}\n colors={colors}\n theme={theme}\n >\n <SwitchThumb\n animate={{ x: localPrefs[key] ? 20 : 4 }}\n transition={{ type: \"spring\", stiffness: 400, damping: 30 }}\n className={classNames?.toggleThumb}\n />\n </StyledSwitch>\n </Row>\n ))}\n </Section>\n\n <ButtonRow className={classNames?.buttonRow}>\n <SecondaryButton\n style={{ marginRight: \"0.5rem\" }}\n onClick={onClose}\n className={classNames?.cancelButton}\n >\n {labels?.cancel}\n </SecondaryButton>\n <ActionButton\n dark={dark}\n onClick={onSave}\n className={classNames?.saveButton}\n colors={colors}\n theme={theme}\n >\n {labels?.save}\n </ActionButton>\n </ButtonRow>\n </ModalContainer>\n </Overlay>\n );\n};\n","\"use client\";\nimport { Cookie } from \"lucide-react\";\nimport { FloatingButton } from \"./StyledComponents\";\nimport { SettingsButtonProps } from \"./types\";\n\nexport const SettingsButton = ({\n setVisible,\n open,\n className,\n icon,\n colors,\n theme = \"light\",\n}: SettingsButtonProps) => {\n if (!open) return null;\n\n return (\n <FloatingButton\n onClick={() => setVisible(true)}\n aria-label=\"Reopen preferences\"\n className={className}\n colors={colors}\n theme={theme}\n >\n {icon ?? <Cookie aria-hidden=\"true\" focusable=\"false\" />}\n </FloatingButton>\n );\n};\n","// consentUI.ts\nlet opener: (() => void) | null = null;\n\nexport function setConsentOpener(fn: () => void) {\n opener = fn;\n}\n\nexport function openConsentSettings() {\n if (opener) {\n opener();\n } else {\n console.warn(\"[consentry] ConsentManager is not mounted yet.\");\n }\n}\n","\"use client\";\n\n/** @jsxImportSource @emotion/react */\nimport React, { useEffect, useState } from \"react\";\nimport merge from \"lodash-es/merge\";\nimport { useConsentManager } from \"@consentry/next\";\nimport { setConsentOpener } from \"./consentUI\";\n\nimport { CookieSettingsModal } from \"./CookieSettingsModal\";\nimport { CookieBanner } from \"./CookieBanner\";\nimport { SettingsButton } from \"./SettingsButton\";\nimport { CookieCategory, ConsentManagerProps, CookiePrefs } from \"./types\";\nimport { Wrapper } from \"./StyledComponents\";\nimport { defaultClassNames } from \"./defaultClassNames\";\nimport { defaultColors } from \"./defaultColors\";\n\nconst DEFAULT_CATEGORIES: CookieCategory[] = [\n {\n key: \"functional\",\n title: \"Essential Cookies\",\n description:\n \"These cookies are necessary for the website to function and cannot be disabled. They ensure core features like security, accessibility, and network management work properly.\",\n mandatory: true,\n },\n {\n key: \"performance\",\n title: \"Performance Cookies\",\n description:\n \"These cookies help us understand how visitors interact with the website by collecting and reporting information anonymously. This allows us to improve performance and user experience.\",\n },\n {\n key: \"advertising\",\n title: \"Advertising Cookies\",\n description:\n \"These cookies are used to deliver relevant advertisements and measure the effectiveness of our marketing campaigns across platforms.\",\n },\n {\n key: \"social\",\n title: \"Social Media Cookies\",\n description:\n \"These cookies enable you to share content through social media platforms and allow us to integrate social features like comment sections and media embeds.\",\n },\n];\n\nconst DEFAULT_LABELS = {\n banner: {\n title: \"Manage your cookie preferences\",\n description:\n \"We use cookies to enhance site navigation, analyze usage, and assist in our marketing efforts. You can choose which types of cookies to allow. Essential cookies are always active to ensure core functionality.\",\n acceptAll: \"Accept all\",\n rejectAll: \"Reject all\",\n customize: \"Customize\",\n },\n modal: {\n title: \"Customize Cookie Preferences\",\n save: \"Save Preferences\",\n cancel: \"Cancel\",\n },\n};\n\nexport const ConsentManager = ({\n mode,\n dark = false,\n hideSettingsButton = false,\n categories,\n labels,\n classNames,\n settingsButtonIcon,\n colors,\n theme = \"light\",\n}: ConsentManagerProps) => {\n const { cookiePreferences, setCookiePreferences, isConsentKnown, showConsentBanner } =\n useConsentManager();\n\n const mergedLabels = merge({}, DEFAULT_LABELS, labels ?? {});\n const mergedClassNames = merge({}, defaultClassNames, classNames ?? {});\n const mergedCategories = categories ?? DEFAULT_CATEGORIES;\n const mergedColors = merge({}, defaultColors, colors ?? {});\n\n useEffect(() => {\n setConsentOpener(() => {\n setLocalPrefs({ ...cookiePreferences });\n setShowSettings(true);\n setShowBanner(false);\n });\n\n return () => {\n setConsentOpener(() => {\n console.warn(\"[consentry] ConsentManager was unmounted.\");\n });\n };\n }, [cookiePreferences]);\n\n const [localPrefs, setLocalPrefs] = useState({ ...cookiePreferences });\n const [showSettings, setShowSettings] = useState(false);\n const [showBanner, setShowBanner] = useState(false);\n\n useEffect(() => {\n if (isConsentKnown && showConsentBanner) {\n setShowBanner(true);\n } else {\n setShowBanner(false);\n }\n }, [isConsentKnown, showConsentBanner]);\n\n const handleSaveSettings = () => {\n setCookiePreferences(localPrefs);\n setShowSettings(false);\n setShowBanner(false);\n };\n\n const handleRejectAll = () => {\n setCookiePreferences({\n functional: true,\n performance: false,\n advertising: false,\n social: false,\n });\n setShowBanner(false);\n };\n\n const handleAcceptAll = () => {\n setCookiePreferences({\n functional: true,\n performance: true,\n advertising: true,\n social: true,\n });\n setShowBanner(false);\n };\n\n const handleOpenSettings = () => {\n setLocalPrefs({ ...cookiePreferences });\n setShowSettings(true);\n setShowBanner(false);\n };\n\n const handleCloseSettings = () => {\n if (showConsentBanner) {\n setShowBanner(true);\n }\n setShowSettings(false);\n };\n\n return (\n <Wrapper className={mergedClassNames.wrapper}>\n {showBanner && (\n <CookieBanner\n onClose={() => setShowBanner(false)}\n onCustomizeClick={() => {\n setShowBanner(false);\n setShowSettings(true);\n }}\n onAcceptAll={() => {\n const newPrefs = Object.fromEntries(\n mergedCategories.map(({ key, mandatory }) => [key, mandatory ?? true])\n ) as CookiePrefs;\n setCookiePreferences(newPrefs);\n setShowBanner(false);\n }}\n onRejectAll={() => {\n const newPrefs = Object.fromEntries(\n mergedCategories.map(({ key, mandatory }) => [key, mandatory ?? false])\n ) as CookiePrefs;\n setCookiePreferences(newPrefs);\n setShowBanner(false);\n }}\n mode={mode}\n dark={dark}\n labels={mergedLabels.banner}\n classNames={mergedClassNames.banner}\n colors={mergedColors}\n theme={theme}\n />\n )}\n\n {showSettings && (\n <CookieSettingsModal\n localPrefs={localPrefs}\n setLocalPrefs={setLocalPrefs}\n categories={mergedCategories}\n onSave={handleSaveSettings}\n onClose={() => setShowSettings(false)}\n dark={dark}\n labels={mergedLabels.modal}\n classNames={mergedClassNames.modal}\n colors={mergedColors}\n theme={theme}\n />\n )}\n\n {!hideSettingsButton && (\n <SettingsButton\n setVisible={setShowSettings}\n open={!showSettings && !showBanner}\n className={mergedClassNames.settingsButton}\n icon={settingsButtonIcon}\n colors={mergedColors}\n theme={theme}\n />\n )}\n </Wrapper>\n );\n};\n","import { ConsentManagerClassNames } from \"./types\";\n\nexport const defaultClassNames: ConsentManagerClassNames = {\n wrapper: \"consent-wrapper\",\n\n banner: {\n container: \"cookie-banner\",\n header: \"cookie-banner-header\",\n title: \"cookie-banner-title\",\n message: \"cookie-banner-message\",\n closeButton: \"cookie-banner-close-button\",\n buttonRow: \"cookie-banner-button-row\",\n acceptButton: \"cookie-banner-accept-button\",\n rejectButton: \"cookie-banner-reject-button\",\n customizeButton: \"cookie-banner-customize-button\",\n content: \"cookie-banner-content\",\n },\n\n modal: {\n overlay: \"cookie-modal-overlay\",\n container: \"cookie-modal-container\",\n title: \"cookie-modal-title\",\n section: \"cookie-modal-section\",\n row: \"cookie-modal-row\",\n rowText: \"cookie-modal-row-text\",\n rowTitle: \"cookie-modal-row-title\",\n rowDescription: \"cookie-modal-row-description\",\n toggleSwitch: \"cookie-modal-switch\",\n toggleThumb: \"cookie-modal-switch-thumb\",\n buttonRow: \"cookie-modal-button-row\",\n saveButton: \"cookie-modal-save-button\",\n cancelButton: \"cookie-modal-cancel-button\",\n },\n\n settingsButton: \"cookie-settings-button\",\n};\n","import { ColorSettings } from \"./types\";\n\nexport const defaultColors: ColorSettings = {\n light: {\n primary: \"#1d4ed8\",\n primaryHover: \"#1e40af\",\n primaryText: \"#ffffff\",\n settingsButton: \"#1d4ed8\",\n settingsButtonHover: \"#1e40af\",\n settingsButtonText: \"#ffffff\",\n background: \"#ffffff\",\n text: \"#111827\",\n border: \"#e5e7eb\",\n },\n dark: {\n primary: \"#3b82f6\",\n primaryHover: \"#2563eb\",\n primaryText: \"#ffffff\",\n settingsButton: \"#3b82f6\",\n settingsButtonHover: \"#2563eb\",\n settingsButtonText: \"#ffffff\",\n background: \"#111827\",\n text: \"#ffffff\",\n border: \"#374151\",\n },\n};\n"],"mappings":"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","names":["jsx","jsxs","jsx","jsx","jsxs"]}