@shellui/core 0.0.12 → 0.0.14
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/{CookiePreferencesView-CIXBJWNt.js → CookiePreferencesView-Bb3hFqw1.js} +3 -3
- package/dist/{CookiePreferencesView-CIXBJWNt.js.map → CookiePreferencesView-Bb3hFqw1.js.map} +1 -1
- package/dist/{DefaultLayout-Bztmv2c_.js → DefaultLayout-D3IpgS4j.js} +4 -4
- package/dist/{DefaultLayout-Bztmv2c_.js.map → DefaultLayout-D3IpgS4j.js.map} +1 -1
- package/dist/{FullscreenLayout-DiX6dbkf.js → FullscreenLayout-Do9vAfl8.js} +3 -3
- package/dist/{FullscreenLayout-DiX6dbkf.js.map → FullscreenLayout-Do9vAfl8.js.map} +1 -1
- package/dist/{HomeView-C610YU6V.js → HomeView-DwckTuxz.js} +2 -2
- package/dist/{HomeView-C610YU6V.js.map → HomeView-DwckTuxz.js.map} +1 -1
- package/dist/{NotFoundView-D00gYlq-.js → NotFoundView-DD7azhz-.js} +2 -2
- package/dist/{NotFoundView-D00gYlq-.js.map → NotFoundView-DD7azhz-.js.map} +1 -1
- package/dist/{OverlayShell-CGjN4rTu.js → OverlayShell-kDY56DaN.js} +2 -2
- package/dist/{OverlayShell-CGjN4rTu.js.map → OverlayShell-kDY56DaN.js.map} +1 -1
- package/dist/{SettingsView-2QMtfS71.js → SettingsView-Bt4I-KDT.js} +4 -4
- package/dist/{SettingsView-2QMtfS71.js.map → SettingsView-Bt4I-KDT.js.map} +1 -1
- package/dist/{WindowsLayout-DkSNQDSb.js → WindowsLayout-CEqkRKyk.js} +3 -3
- package/dist/{WindowsLayout-DkSNQDSb.js.map → WindowsLayout-CEqkRKyk.js.map} +1 -1
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/features/config/ConfigProvider.d.ts.map +1 -1
- package/dist/features/config/useConfig.d.ts.map +1 -1
- package/dist/{index-PsePV0Ng.js → index-CfvdAI_Y.js} +130 -122
- package/dist/index-CfvdAI_Y.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/{sidebar-Cvm_uv4l.js → sidebar-Dt-gibIZ.js} +2 -2
- package/dist/{sidebar-Cvm_uv4l.js.map → sidebar-Dt-gibIZ.js.map} +1 -1
- package/dist/{switch-BjkiJBIa.js → switch-CuKXfl3x.js} +2 -2
- package/dist/{switch-BjkiJBIa.js.map → switch-CuKXfl3x.js.map} +1 -1
- package/package.json +2 -2
- package/src/features/config/ConfigProvider.ts +20 -5
- package/src/features/config/useConfig.ts +14 -1
- package/dist/index-PsePV0Ng.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsView-2QMtfS71.js","sources":["../src/components/ui/breadcrumb.tsx","../src/features/settings/SettingsIcons.tsx","../src/components/ui/button-group.tsx","../src/features/settings/components/Appearance.tsx","../src/components/ui/select.tsx","../src/features/settings/components/LanguageAndRegion.tsx","../src/features/settings/components/UpdateApp.tsx","../src/features/settings/components/Advanced.tsx","../src/features/settings/components/develop/ToastTestButtons.tsx","../src/features/settings/components/develop/DialogTestButtons.tsx","../src/features/settings/components/develop/ModalTestButtons.tsx","../src/features/settings/components/develop/DrawerTestButtons.tsx","../src/features/settings/components/Develop.tsx","../src/features/settings/components/DataPrivacy.tsx","../src/features/settings/components/ServiceWorker.tsx","../src/features/settings/SettingsRoutes.tsx","../src/features/settings/SettingsView.tsx"],"sourcesContent":["import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ComponentProps,\n type ReactNode,\n} from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn } from '@/lib/utils';\n\nconst Breadcrumb = forwardRef<\n HTMLElement,\n ComponentPropsWithoutRef<'nav'> & {\n separator?: ReactNode;\n }\n>(({ ...props }, ref) => (\n <nav\n ref={ref}\n aria-label=\"breadcrumb\"\n {...props}\n />\n));\nBreadcrumb.displayName = 'Breadcrumb';\n\nconst BreadcrumbList = forwardRef<HTMLOListElement, ComponentPropsWithoutRef<'ol'>>(\n ({ className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(\n 'flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5',\n className,\n )}\n {...props}\n />\n ),\n);\nBreadcrumbList.displayName = 'BreadcrumbList';\n\nconst BreadcrumbItem = forwardRef<HTMLLIElement, ComponentPropsWithoutRef<'li'>>(\n ({ className, ...props }, ref) => (\n <li\n ref={ref}\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n ),\n);\nBreadcrumbItem.displayName = 'BreadcrumbItem';\n\nconst BreadcrumbLink = forwardRef<\n HTMLAnchorElement,\n ComponentPropsWithoutRef<'a'> & {\n asChild?: boolean;\n }\n>(({ asChild, className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a';\n\n return (\n <Comp\n ref={ref}\n className={cn('transition-colors hover:text-foreground', className)}\n {...props}\n />\n );\n});\nBreadcrumbLink.displayName = 'BreadcrumbLink';\n\nconst BreadcrumbPage = forwardRef<HTMLSpanElement, ComponentPropsWithoutRef<'span'>>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('font-normal text-foreground', className)}\n {...props}\n />\n ),\n);\nBreadcrumbPage.displayName = 'BreadcrumbPage';\n\nconst BreadcrumbSeparator = ({ children, className, ...props }: ComponentProps<'li'>) => (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('[&>svg]:size-3.5', className)}\n {...props}\n >\n {children ?? (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n )}\n </li>\n);\nBreadcrumbSeparator.displayName = 'BreadcrumbSeparator';\n\nconst BreadcrumbEllipsis = ({ className, ...props }: ComponentProps<'span'>) => (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex h-9 w-9 items-center justify-center', className)}\n {...props}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"h-4 w-4\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"1\"\n />\n <circle\n cx=\"19\"\n cy=\"12\"\n r=\"1\"\n />\n <circle\n cx=\"5\"\n cy=\"12\"\n r=\"1\"\n />\n </svg>\n <span className=\"sr-only\">More</span>\n </span>\n);\nBreadcrumbEllipsis.displayName = 'BreadcrumbEllipsis';\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n","// Simple icon components (since we don't have lucide-react)\nexport const MenuIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line\n x1=\"4\"\n x2=\"20\"\n y1=\"12\"\n y2=\"12\"\n />\n <line\n x1=\"4\"\n x2=\"20\"\n y1=\"6\"\n y2=\"6\"\n />\n <line\n x1=\"4\"\n x2=\"20\"\n y1=\"18\"\n y2=\"18\"\n />\n </svg>\n);\n\nexport const HomeIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />\n <polyline points=\"9 22 9 12 15 12 15 22\" />\n </svg>\n);\n\nexport const PaintbrushIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path\n fill=\"none\"\n d=\"m14.622 17.897l-10.68-2.913M18.376 2.622a1 1 0 1 1 3.002 3.002L17.36 9.643a.5.5 0 0 0 0 .707l.944.944a2.41 2.41 0 0 1 0 3.408l-.944.944a.5.5 0 0 1-.707 0L8.354 7.348a.5.5 0 0 1 0-.707l.944-.944a2.41 2.41 0 0 1 3.408 0l.944.944a.5.5 0 0 0 .707 0zM9 8c-1.804 2.71-3.97 3.46-6.583 3.948a.507.507 0 0 0-.302.819l7.32 8.883a1 1 0 0 0 1.185.204C12.735 20.405 16 16.792 16 15\"\n />\n </svg>\n);\n\nexport const MessageCircleIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\n </svg>\n);\n\nexport const GlobeIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n />\n <line\n x1=\"2\"\n x2=\"22\"\n y1=\"12\"\n y2=\"12\"\n />\n <path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\" />\n </svg>\n);\n\nexport const KeyboardIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect\n width=\"20\"\n height=\"16\"\n x=\"2\"\n y=\"4\"\n rx=\"2\"\n />\n <path d=\"M6 8h.01\" />\n <path d=\"M10 8h.01\" />\n <path d=\"M14 8h.01\" />\n <path d=\"M18 8h.01\" />\n <path d=\"M8 12h.01\" />\n <path d=\"M12 12h.01\" />\n <path d=\"M16 12h.01\" />\n <path d=\"M7 16h10\" />\n </svg>\n);\n\nexport const CheckIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n);\n\nexport const VideoIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5\" />\n <rect\n x=\"2\"\n y=\"6\"\n width=\"14\"\n height=\"12\"\n rx=\"2\"\n />\n </svg>\n);\n\nexport const LinkIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </svg>\n);\n\nexport const LockIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect\n width=\"18\"\n height=\"11\"\n x=\"3\"\n y=\"11\"\n rx=\"2\"\n ry=\"2\"\n />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </svg>\n);\n\nexport const SettingsIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\" />\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"3\"\n />\n </svg>\n);\n\nexport const CodeIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"16 18 22 12 16 6\" />\n <polyline points=\"8 6 2 12 8 18\" />\n </svg>\n);\n\nexport const ChevronRightIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n);\n\nexport const ChevronLeftIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n);\n\nexport const ShieldIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n </svg>\n);\n\nexport const HardDriveIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line\n x1=\"22\"\n y1=\"12\"\n x2=\"2\"\n y2=\"12\"\n />\n <path d=\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\" />\n <line\n x1=\"6\"\n y1=\"16\"\n x2=\"6.01\"\n y2=\"16\"\n />\n <line\n x1=\"10\"\n y1=\"16\"\n x2=\"10.01\"\n y2=\"16\"\n />\n </svg>\n);\n\nexport const RefreshCwIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n </svg>\n);\n\n/** Double-arrow refresh / sync icon (two curved arrows in a circle). */\nexport const RefreshDoubleIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n width=\"16\"\n height=\"16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 0 0-9-9a9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5m-5 4a9 9 0 0 0 9 9a9.75 9.75 0 0 0 6.74-2.74L21 16\" />\n <path d=\"M16 16h5v5\" />\n </svg>\n);\n\nexport const ServerIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect\n width=\"20\"\n height=\"8\"\n x=\"2\"\n y=\"2\"\n rx=\"2\"\n ry=\"2\"\n />\n <rect\n width=\"20\"\n height=\"8\"\n x=\"2\"\n y=\"14\"\n rx=\"2\"\n ry=\"2\"\n />\n <line\n x1=\"6\"\n y1=\"6\"\n x2=\"6.01\"\n y2=\"6\"\n />\n <line\n x1=\"6\"\n y1=\"18\"\n x2=\"6.01\"\n y2=\"18\"\n />\n <line\n x1=\"10\"\n y1=\"6\"\n x2=\"10.01\"\n y2=\"6\"\n />\n <line\n x1=\"10\"\n y1=\"18\"\n x2=\"10.01\"\n y2=\"18\"\n />\n </svg>\n);\n\nexport const PackageIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m7.5 4.27 9 5.15\" />\n <path d=\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\" />\n <path d=\"m3.3 7 8.7 5 8.7-5\" />\n <path d=\"M12 22V12\" />\n </svg>\n);\n","import {\n forwardRef,\n Children,\n isValidElement,\n cloneElement,\n type HTMLAttributes,\n type ReactNode,\n type ReactElement,\n} from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface ButtonGroupProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nconst ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('inline-flex rounded-md', className)}\n role=\"group\"\n {...props}\n >\n {Children.map(children, (child, index) => {\n if (isValidElement(child)) {\n const isFirst = index === 0;\n const isLast = index === Children.count(children) - 1;\n\n return cloneElement(child as ReactElement<Record<string, unknown>>, {\n className: cn(\n // Remove rounded corners from all buttons\n 'rounded-none',\n // First button: rounded left only (uses theme radius)\n isFirst && 'rounded-l-md',\n // Last button: rounded right only (uses theme radius)\n isLast && 'rounded-r-md',\n // Remove left border from all except first, using theme border color\n !isFirst && 'border-l-0 -ml-px',\n (child as ReactElement<{ className?: string }>).props.className,\n ),\n });\n }\n return child;\n })}\n </div>\n );\n },\n);\nButtonGroup.displayName = 'ButtonGroup';\n\nexport { ButtonGroup };\n","import { useTranslation } from 'react-i18next';\nimport { useSettings } from '../hooks/useSettings';\nimport { useConfig } from '@/features/config/useConfig';\nimport { Button } from '@/components/ui/button';\nimport { ButtonGroup } from '@/components/ui/button-group';\nimport { cn } from '@/lib/utils';\nimport { useEffect, useState } from 'react';\nimport { getAllThemes, registerTheme, type ThemeDefinition } from '@/features/theme/themes';\n\nconst SunIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"4\"\n />\n <path d=\"M12 2v2\" />\n <path d=\"M12 20v2\" />\n <path d=\"m4.93 4.93 1.41 1.41\" />\n <path d=\"m17.66 17.66 1.41 1.41\" />\n <path d=\"M2 12h2\" />\n <path d=\"M20 12h2\" />\n <path d=\"m6.34 17.66-1.41 1.41\" />\n <path d=\"m19.07 4.93-1.41 1.41\" />\n </svg>\n);\n\nconst MoonIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\" />\n </svg>\n);\n\nconst MonitorIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect\n width=\"20\"\n height=\"14\"\n x=\"2\"\n y=\"3\"\n rx=\"2\"\n />\n <line\n x1=\"8\"\n x2=\"16\"\n y1=\"21\"\n y2=\"21\"\n />\n <line\n x1=\"12\"\n x2=\"12\"\n y1=\"17\"\n y2=\"21\"\n />\n </svg>\n);\n\n// Theme color preview component\nconst ThemePreview = ({\n theme,\n isSelected,\n isDark,\n}: {\n theme: ThemeDefinition;\n isSelected: boolean;\n isDark: boolean;\n}) => {\n const colors = isDark ? theme.colors.dark : theme.colors.light;\n\n return (\n <div\n className={cn(\n 'relative overflow-hidden rounded-lg border-2 transition-all',\n isSelected ? 'border-primary shadow-lg' : 'border-border',\n )}\n style={{ backgroundColor: colors.background }}\n >\n <div className=\"p-3 space-y-2\">\n {/* Primary color */}\n <div\n className=\"h-8 rounded-md\"\n style={{ backgroundColor: colors.primary }}\n />\n {/* Secondary colors */}\n <div className=\"flex gap-1\">\n <div\n className=\"h-6 flex-1 rounded\"\n style={{ backgroundColor: colors.background }}\n />\n <div\n className=\"h-6 flex-1 rounded\"\n style={{ backgroundColor: colors.secondary }}\n />\n <div\n className=\"h-6 flex-1 rounded\"\n style={{ backgroundColor: colors.accent }}\n />\n </div>\n {/* Accent colors */}\n <div className=\"flex gap-1\">\n <div\n className=\"h-4 flex-1 rounded\"\n style={{ backgroundColor: colors.muted }}\n />\n <div\n className=\"h-4 flex-1 rounded\"\n style={{ backgroundColor: colors.border }}\n />\n </div>\n </div>\n {/* Theme name overlay */}\n <div\n className=\"absolute bottom-0 left-0 right-0 bg-background/90 backdrop-blur-sm px-2 py-1\"\n style={{ backgroundColor: colors.background }}\n >\n <p\n className=\"text-xs font-medium text-center\"\n style={\n theme.fontFamily\n ? {\n fontFamily: theme.fontFamily,\n letterSpacing: theme.letterSpacing || 'normal',\n textShadow: theme.textShadow || 'none',\n }\n : {}\n }\n >\n {theme.displayName}\n </p>\n </div>\n </div>\n );\n};\n\nexport const Appearance = () => {\n const { t } = useTranslation('settings');\n const { settings, updateSetting } = useSettings();\n const { config } = useConfig();\n const currentTheme = settings.appearance?.theme || 'system';\n const currentThemeName = settings.appearance?.themeName || 'default';\n\n const [availableThemes, setAvailableThemes] = useState<ThemeDefinition[]>([]);\n\n // Register custom themes from config and get all themes\n useEffect(() => {\n if (config?.themes) {\n config.themes.forEach((themeDef: ThemeDefinition) => {\n registerTheme(themeDef);\n });\n }\n setAvailableThemes(getAllThemes());\n }, [config]);\n\n // Determine if we're in dark mode for preview\n const [isDarkForPreview, setIsDarkForPreview] = useState(() => {\n if (typeof window === 'undefined') return false;\n return (\n currentTheme === 'dark' ||\n (currentTheme === 'system' && window.matchMedia('(prefers-color-scheme: dark)').matches)\n );\n });\n\n // Update preview mode when theme changes\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const updatePreview = () => {\n setIsDarkForPreview(\n currentTheme === 'dark' ||\n (currentTheme === 'system' && window.matchMedia('(prefers-color-scheme: dark)').matches),\n );\n };\n\n updatePreview();\n\n if (currentTheme === 'system') {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = () => updatePreview();\n\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n } else if (mediaQuery.addListener) {\n mediaQuery.addListener(handleChange);\n return () => mediaQuery.removeListener(handleChange);\n }\n }\n }, [currentTheme]);\n\n const modeThemes = [\n { value: 'light' as const, label: t('appearance.themes.light'), icon: SunIcon },\n { value: 'dark' as const, label: t('appearance.themes.dark'), icon: MoonIcon },\n { value: 'system' as const, label: t('appearance.themes.system'), icon: MonitorIcon },\n ];\n\n return (\n <div className=\"space-y-6\">\n {/* Theme Mode Selection (Light/Dark/System) */}\n <div className=\"space-y-2\">\n <div className=\"space-y-0.5\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('appearance.mode')}\n </label>\n <p className=\"text-sm text-muted-foreground\">{t('appearance.modeDescription')}</p>\n </div>\n <div className=\"mt-2\">\n <ButtonGroup>\n {modeThemes.map((theme) => {\n const Icon = theme.icon;\n const isSelected = currentTheme === theme.value;\n return (\n <Button\n key={theme.value}\n variant={isSelected ? 'default' : 'outline'}\n onClick={() => {\n updateSetting('appearance', { theme: theme.value });\n }}\n className={cn(\n 'h-10 px-4 transition-all flex items-center gap-2 cursor-pointer',\n isSelected && ['font-semibold'],\n !isSelected && ['bg-background hover:bg-accent/50', 'text-muted-foreground'],\n )}\n aria-label={theme.label}\n title={theme.label}\n >\n <Icon />\n <span className=\"text-sm font-medium\">{theme.label}</span>\n </Button>\n );\n })}\n </ButtonGroup>\n </div>\n </div>\n\n {/* Theme Selection (Color Scheme) */}\n <div className=\"space-y-2\">\n <div className=\"space-y-0.5\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('appearance.colorTheme')}\n </label>\n <p className=\"text-sm text-muted-foreground\">{t('appearance.colorThemeDescription')}</p>\n </div>\n <div className=\"mt-2 grid grid-cols-2 md:grid-cols-3 gap-4\">\n {availableThemes.map((theme) => {\n const isSelected = currentThemeName === theme.name;\n return (\n <button\n key={theme.name}\n onClick={() => {\n updateSetting('appearance', { themeName: theme.name });\n }}\n className={cn(\n 'text-left transition-all cursor-pointer',\n isSelected && 'ring-2 ring-primary ring-offset-2 rounded-lg',\n )}\n aria-label={theme.displayName}\n >\n <ThemePreview\n theme={theme}\n isSelected={isSelected}\n isDark={isDarkForPreview}\n />\n </button>\n );\n })}\n </div>\n </div>\n </div>\n );\n};\n","import { forwardRef, type SelectHTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type SelectProps = SelectHTMLAttributes<HTMLSelectElement>;\n\nconst Select = forwardRef<HTMLSelectElement, SelectProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <select\n className={cn(\n 'select-field flex h-10 w-full rounded-md border border-input bg-background pl-3 pr-10 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 cursor-pointer disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n ref={ref}\n {...props}\n >\n {children}\n </select>\n );\n },\n);\nSelect.displayName = 'Select';\n\nexport { Select };\n","import { useTranslation } from 'react-i18next';\nimport { useSettings } from '../hooks/useSettings';\nimport { useConfig } from '@/features/config/useConfig';\nimport { getSupportedLanguages } from '@/i18n/config';\nimport { Button } from '@/components/ui/button';\nimport { ButtonGroup } from '@/components/ui/button-group';\nimport { Select } from '@/components/ui/select';\nimport { cn } from '@/lib/utils';\nimport { useState, useEffect } from 'react';\n\nconst GlobeIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n />\n <line\n x1=\"2\"\n x2=\"22\"\n y1=\"12\"\n y2=\"12\"\n />\n <path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\" />\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n);\n\n// Timezones organized by region\nconst TIMEZONE_GROUPS = [\n {\n label: 'UTC',\n timezones: [{ value: 'UTC', label: 'UTC (Coordinated Universal Time)' }],\n },\n {\n label: 'North America',\n timezones: [\n { value: 'America/New_York', label: 'Eastern Time (US & Canada)' },\n { value: 'America/Chicago', label: 'Central Time (US & Canada)' },\n { value: 'America/Denver', label: 'Mountain Time (US & Canada)' },\n { value: 'America/Los_Angeles', label: 'Pacific Time (US & Canada)' },\n { value: 'America/Toronto', label: 'Toronto' },\n { value: 'America/Vancouver', label: 'Vancouver' },\n { value: 'America/Mexico_City', label: 'Mexico City' },\n ],\n },\n {\n label: 'South America',\n timezones: [\n { value: 'America/Sao_Paulo', label: 'São Paulo' },\n { value: 'America/Buenos_Aires', label: 'Buenos Aires' },\n ],\n },\n {\n label: 'Europe',\n timezones: [\n { value: 'Europe/London', label: 'London' },\n { value: 'Europe/Paris', label: 'Paris' },\n { value: 'Europe/Berlin', label: 'Berlin' },\n { value: 'Europe/Rome', label: 'Rome' },\n { value: 'Europe/Madrid', label: 'Madrid' },\n { value: 'Europe/Amsterdam', label: 'Amsterdam' },\n { value: 'Europe/Stockholm', label: 'Stockholm' },\n { value: 'Europe/Zurich', label: 'Zurich' },\n ],\n },\n {\n label: 'Asia',\n timezones: [\n { value: 'Asia/Tokyo', label: 'Tokyo' },\n { value: 'Asia/Shanghai', label: 'Shanghai' },\n { value: 'Asia/Hong_Kong', label: 'Hong Kong' },\n { value: 'Asia/Singapore', label: 'Singapore' },\n { value: 'Asia/Dubai', label: 'Dubai' },\n { value: 'Asia/Kolkata', label: 'Mumbai, New Delhi' },\n { value: 'Asia/Bangkok', label: 'Bangkok' },\n ],\n },\n {\n label: 'Australia & Pacific',\n timezones: [\n { value: 'Australia/Sydney', label: 'Sydney' },\n { value: 'Australia/Melbourne', label: 'Melbourne' },\n { value: 'Pacific/Auckland', label: 'Auckland' },\n ],\n },\n];\n\n// Format date based on timezone and language\nconst formatDate = (date: Date, timezone: string, lang: string): string => {\n try {\n return new Intl.DateTimeFormat(lang, {\n timeZone: timezone,\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(date);\n } catch {\n return date.toLocaleDateString(lang);\n }\n};\n\n// Format time based on timezone and language\nconst formatTime = (date: Date, timezone: string, lang: string): string => {\n try {\n return new Intl.DateTimeFormat(lang, {\n timeZone: timezone,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n }).format(date);\n } catch {\n return date.toLocaleTimeString(lang);\n }\n};\n\n// Get browser's current timezone\nconst getBrowserTimezone = (): string => {\n if (typeof Intl !== 'undefined') {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n return 'UTC';\n};\n\n// Get human-readable timezone name\nconst getTimezoneDisplayName = (timezone: string, lang = 'en'): string => {\n try {\n // Try to get a friendly name from Intl\n const formatter = new Intl.DateTimeFormat(lang, {\n timeZone: timezone,\n timeZoneName: 'long',\n });\n const parts = formatter.formatToParts(new Date());\n const timeZoneName = parts.find((part) => part.type === 'timeZoneName')?.value;\n\n if (timeZoneName) {\n return timeZoneName;\n }\n\n // Fallback: try to get city name from timezone string\n const cityName = timezone.split('/').pop()?.replace(/_/g, ' ') || timezone;\n return cityName;\n } catch {\n // Final fallback: use the timezone code\n return timezone;\n }\n};\n\nexport const LanguageAndRegion = () => {\n const { t } = useTranslation('settings');\n const { settings, updateSetting } = useSettings();\n const { config } = useConfig();\n const currentLanguage = settings.language?.code || 'en';\n const browserTimezone = getBrowserTimezone();\n const currentTimezone = settings.region?.timezone || browserTimezone;\n const isUsingBrowserTimezone = currentTimezone === browserTimezone;\n\n // Get supported languages based on config\n const supportedLanguages = getSupportedLanguages(config?.language);\n\n const handleResetRegion = () => {\n updateSetting('region', { timezone: browserTimezone });\n };\n\n // State for current date/time\n const [currentDateTime, setCurrentDateTime] = useState<{ date: string; time: string }>(() => {\n const now = new Date();\n return {\n date: formatDate(now, currentTimezone, currentLanguage),\n time: formatTime(now, currentTimezone, currentLanguage),\n };\n });\n\n // Update date/time every second and when timezone/language changes\n useEffect(() => {\n const updateDateTime = () => {\n const now = new Date();\n setCurrentDateTime({\n date: formatDate(now, currentTimezone, currentLanguage),\n time: formatTime(now, currentTimezone, currentLanguage),\n });\n };\n\n // Update immediately when timezone or language changes\n updateDateTime();\n\n // Then update every second\n const interval = setInterval(updateDateTime, 1000);\n\n return () => clearInterval(interval);\n }, [currentTimezone, currentLanguage]);\n\n return (\n <div className=\"space-y-6\">\n <div className=\"space-y-2\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('languageAndRegion.language')}\n </label>\n <div className=\"mt-2\">\n <ButtonGroup>\n {supportedLanguages.map((lang) => {\n const isSelected = currentLanguage === lang.code;\n return (\n <Button\n key={lang.code}\n variant={isSelected ? 'default' : 'outline'}\n onClick={() => {\n updateSetting('language', { code: lang.code });\n }}\n className={cn(\n 'h-10 px-4 transition-all flex items-center gap-2',\n isSelected && ['shadow-md', 'font-semibold'],\n !isSelected && ['bg-background hover:bg-accent/50', 'text-muted-foreground'],\n )}\n aria-label={lang.nativeName}\n title={lang.nativeName}\n >\n <GlobeIcon />\n <span className=\"text-sm font-medium\">{lang.nativeName}</span>\n </Button>\n );\n })}\n </ButtonGroup>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('languageAndRegion.region')}\n </label>\n {!isUsingBrowserTimezone && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleResetRegion}\n className=\"h-8 text-xs\"\n >\n {t('languageAndRegion.resetToBrowser')}\n </Button>\n )}\n </div>\n <div className=\"mt-2 space-y-3\">\n <Select\n value={currentTimezone}\n onChange={(e) => {\n updateSetting('region', { timezone: e.target.value });\n }}\n className=\"w-full\"\n >\n {TIMEZONE_GROUPS.map((group) => (\n <optgroup\n key={group.label}\n label={group.label}\n >\n {group.timezones.map((tz) => {\n const isBrowserTimezone = tz.value === browserTimezone;\n return (\n <option\n key={tz.value}\n value={tz.value}\n >\n {tz.label}\n {isBrowserTimezone ? ` (${t('languageAndRegion.defaultBrowser')})` : ''}\n </option>\n );\n })}\n </optgroup>\n ))}\n </Select>\n <div className=\"flex items-center gap-2 px-3 py-2 rounded-md bg-muted/60 border border-border/50\">\n <ClockIcon />\n <div className=\"flex items-baseline gap-2\">\n <span className=\"text-lg font-semibold tabular-nums\">{currentDateTime.time}</span>\n <span className=\"text-xs text-muted-foreground\">{currentDateTime.date}</span>\n </div>\n </div>\n <div className=\"text-xs text-muted-foreground flex items-center gap-1\">\n <span>{t('languageAndRegion.timezoneLabel')}:</span>\n <span className=\"font-medium\">\n {getTimezoneDisplayName(currentTimezone, currentLanguage)}\n </span>\n {isUsingBrowserTimezone && (\n <span className=\"ml-1\">({t('languageAndRegion.defaultBrowser')})</span>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { useConfig } from '@/features/config/useConfig';\nimport { useSettings } from '../hooks/useSettings';\nimport { Button } from '@/components/ui/button';\nimport {\n isTauri,\n getServiceWorkerStatus,\n addStatusListener,\n checkForServiceWorkerUpdate,\n updateServiceWorker,\n} from '@/service-worker/register';\nimport { shellui, getLogger } from '@shellui/sdk';\nimport { CheckIcon } from '../SettingsIcons';\nimport { useState, useEffect } from 'react';\n\nconst logger = getLogger('shellcore');\n\nexport const UpdateApp = () => {\n const { t } = useTranslation('settings');\n const { config } = useConfig();\n const { settings } = useSettings();\n const [updateAvailable, setUpdateAvailable] = useState(false);\n const [checking, setChecking] = useState(false);\n const [showUpToDateInButton, setShowUpToDateInButton] = useState(false);\n const [checkError, setCheckError] = useState(false);\n\n const serviceWorkerEnabled = settings?.serviceWorker?.enabled ?? true;\n\n useEffect(() => {\n if (isTauri()) return;\n const load = async () => {\n const status = await getServiceWorkerStatus();\n setUpdateAvailable(status.updateAvailable);\n };\n load();\n const unsubscribe = addStatusListener((status) => {\n setUpdateAvailable(status.updateAvailable);\n // If an update becomes available, hide the \"You are up to date\" message and clear any errors\n if (status.updateAvailable) {\n setShowUpToDateInButton(false);\n setCheckError(false);\n }\n });\n return unsubscribe;\n }, []);\n\n const handleCheckForUpdate = async () => {\n if (isTauri()) return;\n setShowUpToDateInButton(false);\n setCheckError(false);\n setChecking(true);\n try {\n // Check current status before triggering update check\n const initialStatus = await getServiceWorkerStatus();\n\n // If update is already available, don't show \"You are up to date\"\n if (initialStatus.updateAvailable) {\n return;\n }\n\n // Trigger update check\n await checkForServiceWorkerUpdate();\n\n // Wait a bit for the update check to complete and status to update\n // The status listener will update updateAvailable if an update is found\n await new Promise((resolve) => setTimeout(resolve, 1000));\n\n // Check status again after update check\n // Use the state value which may have been updated by the status listener\n // If updateAvailable is true, don't show \"You are up to date\"\n if (!updateAvailable) {\n // Double-check with API to be sure\n const finalStatus = await getServiceWorkerStatus();\n if (!finalStatus.updateAvailable) {\n setShowUpToDateInButton(true);\n window.setTimeout(() => setShowUpToDateInButton(false), 3000);\n }\n }\n } catch (error) {\n // Error occurred during update check - show error message in button\n setCheckError(true);\n logger.error('Failed to check for service worker update:', { error });\n } finally {\n setChecking(false);\n }\n };\n\n const version = config?.version ?? t('updateApp.versionUnknown');\n\n if (isTauri()) {\n return (\n <div className=\"space-y-6\">\n <div className=\"space-y-2\">\n <div className=\"space-y-0.5\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('updateApp.currentVersion')}\n </label>\n <p className=\"text-sm text-muted-foreground\">{version}</p>\n </div>\n <div className=\"rounded-lg border border-border bg-muted/30 p-4\">\n <p className=\"text-sm text-muted-foreground\">{t('updateApp.tauriComingSoon')}</p>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"space-y-4\">\n <div className=\"space-y-0.5\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('updateApp.currentVersion')}\n </label>\n <p className=\"text-sm text-muted-foreground\">{version}</p>\n </div>\n {!serviceWorkerEnabled ? (\n <div className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground\">{t('updateApp.swDisabledMessage')}</p>\n <Button\n variant=\"outline\"\n onClick={() => {\n const sent = shellui.sendMessageToParent({\n type: 'SHELLUI_REFRESH_PAGE',\n payload: {},\n });\n if (!sent) window.location.reload();\n }}\n className=\"w-full sm:w-auto\"\n >\n {t('updateApp.refreshApp')}\n </Button>\n </div>\n ) : (\n <>\n <div className=\"space-y-2\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('updateApp.status')}\n </label>\n <div className=\"flex items-center gap-2 text-sm mt-2\">\n {updateAvailable ? (\n <span className=\"text-blue-600 dark:text-blue-400\">\n ● {t('updateApp.statusUpdateAvailable')}\n </span>\n ) : (\n <span className=\"text-green-600 dark:text-green-400\">\n ● {t('updateApp.statusUpToDate')}\n </span>\n )}\n </div>\n </div>\n <div className=\"flex items-center gap-2 flex-wrap\">\n {updateAvailable && (\n <Button\n variant=\"default\"\n onClick={async () => {\n await updateServiceWorker();\n }}\n className=\"w-full sm:w-auto\"\n >\n {t('updateApp.installNow')}\n </Button>\n )}\n <Button\n variant=\"outline\"\n onClick={handleCheckForUpdate}\n disabled={checking || updateAvailable}\n className=\"w-full sm:w-auto\"\n >\n {checking ? (\n <>\n <span\n className=\"inline-block h-4 w-4 shrink-0 animate-spin rounded-full border-2 border-current border-t-transparent mr-2\"\n aria-hidden\n />\n {t('updateApp.checking')}\n </>\n ) : checkError ? (\n <span className=\"inline-flex items-center gap-2 text-red-600 dark:text-red-400\">\n {t('updateApp.checkError')}\n </span>\n ) : showUpToDateInButton && !updateAvailable ? (\n <span className=\"inline-flex items-center gap-2 text-green-600 dark:text-green-400\">\n <CheckIcon />\n {t('updateApp.youAreUpToDate')}\n </span>\n ) : (\n t('updateApp.checkForUpdate')\n )}\n </Button>\n </div>\n </>\n )}\n </div>\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { Switch } from '@/components/ui/switch';\nimport { useConfig } from '@/features/config/useConfig';\nimport { closeSentry, initSentry } from '@/features/sentry/initSentry';\nimport { useSettings } from '../hooks/useSettings';\nimport { Button } from '@/components/ui/button';\nimport { shellui } from '@shellui/sdk';\n\nexport const Advanced = () => {\n const { t } = useTranslation('settings');\n const { config } = useConfig();\n const { settings, updateSetting, resetAllData } = useSettings();\n const errorReportingConfigured = Boolean(config?.sentry?.dsn);\n\n const handleErrorReportingChange = (checked: boolean) => {\n updateSetting('errorReporting', { enabled: checked });\n if (checked) {\n initSentry();\n } else {\n closeSentry();\n }\n };\n\n const handleResetClick = () => {\n shellui.dialog({\n title: t('advanced.dangerZone.reset.toast.title'),\n description: t('advanced.dangerZone.reset.toast.description'),\n mode: 'delete',\n size: 'sm',\n okLabel: t('advanced.dangerZone.reset.toast.confirm'),\n cancelLabel: t('advanced.dangerZone.reset.toast.cancel'),\n onOk: () => {\n resetAllData();\n shellui.toast({\n title: t('advanced.dangerZone.reset.toast.success.title'),\n description: t('advanced.dangerZone.reset.toast.success.description'),\n type: 'success',\n });\n shellui.navigate('/');\n },\n onCancel: () => {\n // User cancelled, no action needed\n },\n });\n };\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <span\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('advanced.errorReporting.label')}\n </span>\n <p className=\"text-sm text-muted-foreground\">\n {errorReportingConfigured\n ? t('advanced.errorReporting.statusConfigured')\n : t('advanced.errorReporting.statusNotConfigured')}\n </p>\n </div>\n {errorReportingConfigured && (\n <Switch\n id=\"error-reporting\"\n checked={settings.errorReporting.enabled}\n onCheckedChange={handleErrorReportingChange}\n />\n )}\n </div>\n\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <label\n htmlFor=\"developer-features\"\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('advanced.developerFeatures.label')}\n </label>\n <p className=\"text-sm text-muted-foreground\">\n {t('advanced.developerFeatures.description')}\n </p>\n </div>\n <Switch\n id=\"developer-features\"\n checked={settings.developerFeatures.enabled}\n onCheckedChange={(checked) => updateSetting('developerFeatures', { enabled: checked })}\n />\n </div>\n\n <div className=\"border-t pt-6 mt-6\">\n <div className=\"space-y-4\">\n <div className=\"space-y-0.5\">\n <h3\n className=\"text-sm font-semibold leading-none text-destructive\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('advanced.dangerZone.title')}\n </h3>\n <p className=\"text-sm text-muted-foreground\">{t('advanced.dangerZone.description')}</p>\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"space-y-0.5\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('advanced.dangerZone.reset.title')}\n </label>\n <p className=\"text-sm text-muted-foreground\">\n {t('advanced.dangerZone.reset.warning')}\n </p>\n </div>\n <Button\n variant=\"destructive\"\n onClick={handleResetClick}\n className=\"w-full sm:w-auto\"\n >\n {t('advanced.dangerZone.reset.button')}\n </Button>\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { Button } from '@/components/ui/button';\nimport { shellui } from '@shellui/sdk';\n\nexport const ToastTestButtons = () => {\n const { t } = useTranslation('settings');\n\n return (\n <div>\n <h4\n className=\"text-sm font-medium mb-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.testing.toastNotifications.title')}\n </h4>\n <div className=\"flex flex-wrap gap-2\">\n <Button\n onClick={() => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.success.title'),\n description: t('develop.testing.toastNotifications.messages.success.description'),\n type: 'success',\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.success')}\n </Button>\n <Button\n onClick={() => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.error.title'),\n description: t('develop.testing.toastNotifications.messages.error.description'),\n type: 'error',\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.error')}\n </Button>\n <Button\n onClick={() => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.warning.title'),\n description: t('develop.testing.toastNotifications.messages.warning.description'),\n type: 'warning',\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.warning')}\n </Button>\n <Button\n onClick={() => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.info.title'),\n description: t('develop.testing.toastNotifications.messages.info.description'),\n type: 'info',\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.info')}\n </Button>\n <Button\n onClick={() => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.default.title'),\n description: t('develop.testing.toastNotifications.messages.default.description'),\n type: 'default',\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.default')}\n </Button>\n <Button\n onClick={() => {\n const toastId = shellui.toast({\n title: t('develop.testing.toastNotifications.messages.processing.title'),\n description: t('develop.testing.toastNotifications.messages.processing.description'),\n type: 'loading',\n });\n\n // Simulate async operation and update toast\n if (typeof toastId === 'string') {\n setTimeout(() => {\n shellui.toast({\n id: toastId,\n type: 'success',\n title: t('develop.testing.toastNotifications.messages.uploadComplete.title'),\n description: t(\n 'develop.testing.toastNotifications.messages.uploadComplete.description',\n ),\n });\n }, 2000);\n }\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.loadingSuccess')}\n </Button>\n <Button\n onClick={() => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.withAction.title'),\n description: t('develop.testing.toastNotifications.messages.withAction.description'),\n type: 'success',\n action: {\n label: t('develop.testing.toastNotifications.messages.actionLabels.undo'),\n onClick: () => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.undone.title'),\n description: t(\n 'develop.testing.toastNotifications.messages.undone.description',\n ),\n type: 'info',\n });\n },\n },\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.withAction')}\n </Button>\n <Button\n onClick={() => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.withAction.title'),\n description: t('develop.testing.toastNotifications.messages.withAction.description'),\n type: 'success',\n action: {\n label: t('develop.testing.toastNotifications.messages.actionLabels.undo'),\n onClick: () => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.undone.title'),\n description: t(\n 'develop.testing.toastNotifications.messages.undone.description',\n ),\n type: 'info',\n });\n },\n },\n cancel: {\n label: t('develop.testing.toastNotifications.messages.actionLabels.cancel'),\n onClick: () => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.cancelled.title'),\n description: t(\n 'develop.testing.toastNotifications.messages.cancelled.description',\n ),\n type: 'info',\n });\n },\n },\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.withActionAndCancel')}\n </Button>\n <Button\n onClick={() => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.persistent.title'),\n description: t('develop.testing.toastNotifications.messages.persistent.description'),\n type: 'info',\n duration: 10000,\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.longDuration')}\n </Button>\n </div>\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { Button } from '@/components/ui/button';\nimport { shellui } from '@shellui/sdk';\n\nexport const DialogTestButtons = () => {\n const { t } = useTranslation('settings');\n\n return (\n <div>\n <h4\n className=\"text-sm font-medium mb-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.testing.dialogTesting.title')}\n </h4>\n <div className=\"flex flex-wrap gap-2\">\n <Button\n onClick={() => {\n shellui.dialog({\n title: t('develop.testing.dialogTesting.dialogs.ok.title'),\n description: t('develop.testing.dialogTesting.dialogs.ok.description'),\n mode: 'ok',\n onOk: () => {\n shellui.toast({\n title: t('develop.testing.dialogTesting.toasts.okClicked'),\n type: 'success',\n });\n },\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.dialogTesting.buttons.okDialog')}\n </Button>\n <Button\n onClick={() => {\n shellui.dialog({\n title: t('develop.testing.dialogTesting.dialogs.okCancel.title'),\n description: t('develop.testing.dialogTesting.dialogs.okCancel.description'),\n mode: 'okCancel',\n size: 'sm',\n onOk: () => {\n shellui.toast({\n title: t('develop.testing.dialogTesting.toasts.okClicked'),\n type: 'success',\n });\n },\n onCancel: () => {\n shellui.toast({\n title: t('develop.testing.dialogTesting.toasts.cancelClicked'),\n type: 'info',\n });\n },\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.dialogTesting.buttons.okCancelDialog')}\n </Button>\n <Button\n onClick={() => {\n shellui.dialog({\n title: t('develop.testing.dialogTesting.dialogs.delete.title'),\n description: t('develop.testing.dialogTesting.dialogs.delete.description'),\n mode: 'delete',\n okLabel: t('develop.testing.dialogTesting.dialogs.delete.okLabel'),\n cancelLabel: t('develop.testing.dialogTesting.dialogs.delete.cancelLabel'),\n size: 'sm',\n onOk: () => {\n shellui.toast({\n title: t('develop.testing.dialogTesting.toasts.itemDeleted'),\n type: 'success',\n });\n },\n onCancel: () => {\n shellui.toast({\n title: t('develop.testing.dialogTesting.toasts.deletionCancelled'),\n type: 'info',\n });\n },\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.dialogTesting.buttons.deleteDialog')}\n </Button>\n <Button\n onClick={() => {\n shellui.dialog({\n title: t('develop.testing.dialogTesting.dialogs.confirm.title'),\n description: t('develop.testing.dialogTesting.dialogs.confirm.description'),\n mode: 'confirm',\n okLabel: t('develop.testing.dialogTesting.dialogs.confirm.okLabel'),\n cancelLabel: t('develop.testing.dialogTesting.dialogs.confirm.cancelLabel'),\n size: 'sm',\n onOk: () => {\n shellui.toast({\n title: t('develop.testing.dialogTesting.toasts.actionConfirmed'),\n type: 'success',\n });\n },\n onCancel: () => {\n shellui.toast({\n title: t('develop.testing.dialogTesting.toasts.actionCancelled'),\n type: 'info',\n });\n },\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.dialogTesting.buttons.confirmDialog')}\n </Button>\n <Button\n onClick={() => {\n shellui.dialog({\n title: t('develop.testing.dialogTesting.dialogs.onlyCancel.title'),\n description: t('develop.testing.dialogTesting.dialogs.onlyCancel.description'),\n mode: 'onlyCancel',\n cancelLabel: t('develop.testing.dialogTesting.dialogs.onlyCancel.cancelLabel'),\n size: 'sm',\n onCancel: () => {\n shellui.toast({\n title: t('develop.testing.dialogTesting.toasts.dialogClosed'),\n type: 'info',\n });\n },\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.dialogTesting.buttons.onlyCancelDialog')}\n </Button>\n </div>\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { Button } from '@/components/ui/button';\nimport { shellui } from '@shellui/sdk';\nimport urls from '@/constants/urls';\n\nexport const ModalTestButtons = () => {\n const { t } = useTranslation('settings');\n\n return (\n <div>\n <h4\n className=\"text-sm font-medium mb-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.testing.modalTesting.title')}\n </h4>\n <div className=\"flex flex-wrap gap-2\">\n <Button\n onClick={() => shellui.openModal(urls.settings)}\n variant=\"outline\"\n >\n {t('develop.testing.modalTesting.buttons.openModal')}\n </Button>\n </div>\n <p className=\"text-xs text-muted-foreground mt-2\">\n {t('develop.testing.modalTesting.description')}\n </p>\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { Button } from '@/components/ui/button';\nimport { shellui, type OpenDrawerOptions } from '@shellui/sdk';\nimport urls from '@/constants/urls';\n\nexport const DrawerTestButtons = () => {\n const { t } = useTranslation('settings');\n\n const openDrawer = (options: OpenDrawerOptions) => {\n shellui.openDrawer({ url: urls.settings, ...options });\n };\n\n return (\n <div>\n <h4\n className=\"text-sm font-medium mb-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.testing.drawerTesting.title')}\n </h4>\n <div className=\"flex flex-wrap gap-2\">\n <Button\n onClick={() => openDrawer({ position: 'right' })}\n variant=\"outline\"\n >\n {t('develop.testing.drawerTesting.buttons.drawerRight')}\n </Button>\n <Button\n onClick={() => openDrawer({ position: 'left' })}\n variant=\"outline\"\n >\n {t('develop.testing.drawerTesting.buttons.drawerLeft')}\n </Button>\n <Button\n onClick={() => openDrawer({ position: 'top' })}\n variant=\"outline\"\n >\n {t('develop.testing.drawerTesting.buttons.drawerTop')}\n </Button>\n <Button\n onClick={() => openDrawer({ position: 'bottom' })}\n variant=\"outline\"\n >\n {t('develop.testing.drawerTesting.buttons.drawerBottom')}\n </Button>\n <Button\n onClick={() => openDrawer({ position: 'right', size: '400px' })}\n variant=\"outline\"\n >\n {t('develop.testing.drawerTesting.buttons.drawerRightNarrow')}\n </Button>\n <Button\n onClick={() => openDrawer({ position: 'bottom', size: '60vh' })}\n variant=\"outline\"\n >\n {t('develop.testing.drawerTesting.buttons.drawerBottomHalf')}\n </Button>\n <Button\n onClick={() => shellui.closeDrawer()}\n variant=\"outline\"\n >\n {t('develop.testing.drawerTesting.buttons.closeDrawer')}\n </Button>\n </div>\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { shellui } from '@shellui/sdk';\nimport { useSettings } from '../hooks/useSettings';\nimport { useConfig } from '../../config/useConfig';\nimport { flattenNavigationItems, resolveLocalizedString } from '../../layouts/utils';\nimport { Switch } from '@/components/ui/switch';\nimport { Select } from '@/components/ui/select';\nimport { Button } from '@/components/ui/button';\nimport { ToastTestButtons } from './develop/ToastTestButtons';\nimport { DialogTestButtons } from './develop/DialogTestButtons';\nimport { ModalTestButtons } from './develop/ModalTestButtons';\nimport { DrawerTestButtons } from './develop/DrawerTestButtons';\nimport type { LayoutType } from '../../config/types';\n\nexport const Develop = () => {\n const { t } = useTranslation('settings');\n const { settings, updateSetting } = useSettings();\n const { config } = useConfig();\n const currentLanguage = settings.language?.code || 'en';\n const effectiveLayout: LayoutType = settings.layout ?? config?.layout ?? 'sidebar';\n const navItems = config?.navigation?.length\n ? flattenNavigationItems(config?.navigation ?? []).filter(\n (item, index, self) => index === self.findIndex((i) => i.path === item.path),\n )\n : [];\n\n return (\n <div className=\"space-y-6\">\n <div>\n <h3\n className=\"text-lg font-semibold mb-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.logging.title')}\n </h3>\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <label\n htmlFor=\"log-shellsdk\"\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.logging.shellsdk.label')}\n </label>\n <p className=\"text-sm text-muted-foreground\">\n {t('develop.logging.shellsdk.description')}\n </p>\n </div>\n <Switch\n id=\"log-shellsdk\"\n checked={settings.logging?.namespaces?.shellsdk || false}\n onCheckedChange={(checked) =>\n updateSetting('logging', {\n namespaces: {\n ...settings.logging?.namespaces,\n shellsdk: checked,\n },\n })\n }\n />\n </div>\n\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <label\n htmlFor=\"log-shellcore\"\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.logging.shellcore.label')}\n </label>\n <p className=\"text-sm text-muted-foreground\">\n {t('develop.logging.shellcore.description')}\n </p>\n </div>\n <Switch\n id=\"log-shellcore\"\n checked={settings.logging?.namespaces?.shellcore || false}\n onCheckedChange={(checked) =>\n updateSetting('logging', {\n namespaces: {\n ...settings.logging?.namespaces,\n shellcore: checked,\n },\n })\n }\n />\n </div>\n </div>\n </div>\n\n <div>\n <h3\n className=\"text-lg font-semibold mb-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.navigation.title')}\n </h3>\n {navItems.length ? (\n <div className=\"space-y-2\">\n <label\n htmlFor=\"develop-nav-select\"\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.navigation.selectLabel')}\n </label>\n <div className=\"mt-2\">\n <Select\n id=\"develop-nav-select\"\n defaultValue=\"\"\n onChange={(e) => {\n const path = e.target.value;\n if (path) {\n shellui.navigate(path.startsWith('/') ? path : `/${path}`);\n }\n }}\n >\n <option value=\"\">{t('develop.navigation.placeholder')}</option>\n {navItems.map((item) => (\n <option\n key={item.path}\n value={`/${item.path}`}\n >\n {resolveLocalizedString(item.label, currentLanguage) || item.path}\n </option>\n ))}\n </Select>\n </div>\n </div>\n ) : (\n <p className=\"text-sm text-muted-foreground\">{t('develop.navigation.empty')}</p>\n )}\n </div>\n\n <div>\n <h3\n className=\"text-lg font-semibold mb-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.layout.title')}\n </h3>\n <div className=\"flex flex-wrap gap-2\">\n {(['sidebar', 'windows'] as const).map((layoutMode) => (\n <Button\n key={layoutMode}\n variant={effectiveLayout === layoutMode ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => updateSetting('layout', layoutMode as LayoutType)}\n >\n {t(`develop.layout.${layoutMode}`)}\n </Button>\n ))}\n </div>\n </div>\n\n <div>\n <h3\n className=\"text-lg font-semibold mb-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.testing.title')}\n </h3>\n <div className=\"space-y-4\">\n <ToastTestButtons />\n <DialogTestButtons />\n <ModalTestButtons />\n <DrawerTestButtons />\n </div>\n </div>\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { useSettings } from '../hooks/useSettings';\nimport { useConfig } from '@/features/config/useConfig';\nimport { Button } from '@/components/ui/button';\nimport { shellui } from '@shellui/sdk';\nimport urls from '@/constants/urls';\nimport { cn } from '@/lib/utils';\n\nexport const DataPrivacy = () => {\n const { t } = useTranslation('settings');\n const { config } = useConfig();\n const { settings, updateSetting } = useSettings();\n\n const cookies = config?.cookieConsent?.cookies ?? [];\n const hasCookieConsent = cookies.length > 0;\n const hasConsented = Boolean(settings?.cookieConsent?.consentedCookieHosts?.length);\n\n // Determine consent status\n const acceptedHosts = settings?.cookieConsent?.acceptedHosts ?? [];\n const allHosts = cookies.map((c) => c.host);\n const strictNecessaryHosts = cookies\n .filter((c) => c.category === 'strict_necessary')\n .map((c) => c.host);\n\n const acceptedAll =\n hasConsented &&\n acceptedHosts.length === allHosts.length &&\n allHosts.every((h) => acceptedHosts.includes(h));\n // \"Rejected all\" means only strictly necessary cookies are accepted\n const rejectedAll =\n hasConsented &&\n acceptedHosts.length === strictNecessaryHosts.length &&\n strictNecessaryHosts.every((h) => acceptedHosts.includes(h)) &&\n !acceptedHosts.some((h) => !strictNecessaryHosts.includes(h));\n const isCustom = hasConsented && !acceptedAll && !rejectedAll;\n\n const handleResetCookieConsent = () => {\n updateSetting('cookieConsent', {\n acceptedHosts: [],\n consentedCookieHosts: [],\n });\n };\n\n return (\n <div className=\"space-y-6\">\n {!hasCookieConsent ? (\n <div className=\"rounded-lg border bg-card p-4 space-y-3\">\n <div className=\"space-y-1\">\n <h3\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('dataPrivacy.noCookiesConfigured.title')}\n </h3>\n <p className=\"text-sm text-muted-foreground\">\n {t('dataPrivacy.noCookiesConfigured.description')}\n </p>\n </div>\n <div className=\"flex items-start gap-2 text-sm\">\n <span className=\"text-green-600 dark:text-green-400 mt-0.5\">✓</span>\n <span className=\"text-muted-foreground\">\n {t('dataPrivacy.noCookiesConfigured.info')}\n </span>\n </div>\n </div>\n ) : (\n <div className=\"space-y-2\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('dataPrivacy.cookieConsent.title')}\n </label>\n <div className=\"mt-2 space-y-3\">\n <p className=\"text-sm text-muted-foreground\">\n {!hasConsented\n ? t('dataPrivacy.cookieConsent.descriptionNotConsented')\n : acceptedAll\n ? t('dataPrivacy.cookieConsent.statusAcceptedAll')\n : rejectedAll\n ? t('dataPrivacy.cookieConsent.statusRejectedAll')\n : t('dataPrivacy.cookieConsent.statusCustom')}\n </p>\n {hasConsented && (\n <div className=\"flex items-center gap-2 text-sm mt-2\">\n <span\n className={cn(\n 'px-2 py-1 rounded-md text-xs font-medium transition-colors',\n acceptedAll\n ? 'bg-primary/10 text-primary border border-primary/20'\n : 'text-muted-foreground',\n )}\n >\n {t('dataPrivacy.cookieConsent.labelAcceptedAll')}\n </span>\n <span className=\"text-muted-foreground/30\">|</span>\n <span\n className={cn(\n 'px-2 py-1 rounded-md text-xs font-medium transition-colors',\n isCustom\n ? 'bg-muted text-muted-foreground border border-border'\n : 'text-muted-foreground',\n )}\n >\n {t('dataPrivacy.cookieConsent.labelCustom')}\n </span>\n <span className=\"text-muted-foreground/30\">|</span>\n <span\n className={cn(\n 'px-2 py-1 rounded-md text-xs font-medium transition-colors',\n rejectedAll\n ? 'bg-muted text-muted-foreground border border-border'\n : 'text-muted-foreground',\n )}\n >\n {t('dataPrivacy.cookieConsent.labelRejectedAll')}\n </span>\n </div>\n )}\n <div className=\"flex flex-wrap gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => shellui.openDrawer({ url: urls.cookiePreferences, size: '420px' })}\n className=\"w-full sm:w-auto\"\n >\n {t('dataPrivacy.cookieConsent.manageButton')}\n </Button>\n <Button\n variant=\"ghost\"\n onClick={handleResetCookieConsent}\n disabled={!hasConsented}\n className=\"w-full sm:w-auto\"\n >\n {t('dataPrivacy.cookieConsent.button')}\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { useSettings } from '../hooks/useSettings';\nimport { Button } from '@/components/ui/button';\nimport { Switch } from '@/components/ui/switch';\nimport {\n isServiceWorkerRegistered,\n updateServiceWorker,\n getServiceWorkerStatus,\n addStatusListener,\n serviceWorkerFileExists,\n} from '@/service-worker/register';\nimport { shellui } from '@shellui/sdk';\nimport { useState, useEffect } from 'react';\n\nexport const ServiceWorker = () => {\n const { t } = useTranslation('settings');\n const { settings, updateSetting } = useSettings();\n const [isRegistered, setIsRegistered] = useState(false);\n const [updateAvailable, setUpdateAvailable] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n const [swFileExists, setSwFileExists] = useState(true); // Track if service worker file exists\n\n const serviceWorkerEnabled = settings?.serviceWorker?.enabled ?? true;\n\n useEffect(() => {\n // Don't check service worker status if disabled\n if (!serviceWorkerEnabled) {\n // Immediately clear all state and hide error messages\n setIsRegistered(false);\n setUpdateAvailable(false);\n setIsLoading(false);\n setSwFileExists(true); // Set to true to prevent error messages from showing\n return;\n }\n\n // Initial check with loading state\n const initialCheck = async () => {\n // Double-check service worker is still enabled before proceeding\n const stillEnabled = settings?.serviceWorker?.enabled ?? true;\n if (!stillEnabled) {\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n\n // First check if service worker file exists\n const exists = await serviceWorkerFileExists();\n\n // Check again if service worker was disabled during the async operation\n const currentEnabled = settings?.serviceWorker?.enabled ?? true;\n if (!currentEnabled) {\n setIsLoading(false);\n return;\n }\n\n setSwFileExists(exists);\n\n if (exists) {\n // Check service worker status only if file exists\n const status = await getServiceWorkerStatus();\n\n // Final check before updating state\n const finalCheck = settings?.serviceWorker?.enabled ?? true;\n if (finalCheck) {\n setIsRegistered(status.registered);\n setUpdateAvailable(status.updateAvailable);\n }\n } else {\n // File doesn't exist, so service worker can't be registered\n // Only update if service worker is still enabled\n const finalCheck = settings?.serviceWorker?.enabled ?? true;\n if (finalCheck) {\n setIsRegistered(false);\n setUpdateAvailable(false);\n }\n }\n\n setIsLoading(false);\n };\n\n // Background refresh without affecting loading state\n const refreshStatus = async () => {\n // Skip if service worker was disabled (check current setting value)\n const currentEnabled = settings?.serviceWorker?.enabled ?? true;\n if (!currentEnabled) {\n return;\n }\n\n // Check if file exists first\n const exists = await serviceWorkerFileExists();\n\n // Check again if service worker was disabled during the async operation\n const currentEnabledAfter = settings?.serviceWorker?.enabled ?? true;\n if (!currentEnabledAfter) {\n return;\n }\n\n setSwFileExists(exists);\n\n if (exists) {\n // Check service worker status only if file exists\n const status = await getServiceWorkerStatus();\n\n // Final check before updating state\n const finalCheck = settings?.serviceWorker?.enabled ?? true;\n if (finalCheck) {\n setIsRegistered(status.registered);\n setUpdateAvailable(status.updateAvailable);\n }\n } else {\n // File doesn't exist, so service worker can't be registered\n // Only update if service worker is still enabled\n const finalCheck = settings?.serviceWorker?.enabled ?? true;\n if (finalCheck) {\n setIsRegistered(false);\n setUpdateAvailable(false);\n }\n }\n };\n\n // Initial check immediately\n initialCheck();\n\n // Listen for status changes\n const unsubscribe = addStatusListener((status) => {\n // Only update if service worker is still enabled (check current setting value)\n const currentEnabled = settings?.serviceWorker?.enabled ?? true;\n if (currentEnabled) {\n setIsRegistered(status.registered);\n setUpdateAvailable(status.updateAvailable);\n setIsLoading(false);\n }\n });\n\n // Also check periodically as fallback (background refresh) - less frequent to avoid excessive fetches\n const interval = setInterval(refreshStatus, 30000); // Check every 30 seconds instead of 5\n\n return () => {\n unsubscribe();\n clearInterval(interval);\n };\n }, [serviceWorkerEnabled]);\n\n const handleToggleServiceWorker = async (enabled: boolean) => {\n // Immediately clear all state before updating setting to prevent error flashes\n if (!enabled) {\n setIsRegistered(false);\n setUpdateAvailable(false);\n setSwFileExists(true); // Set to true to hide error messages immediately\n setIsLoading(false);\n }\n\n updateSetting('serviceWorker', { enabled });\n\n if (!enabled) {\n // Already cleared above, just return\n return;\n }\n\n // Give it a moment to register/unregister\n setTimeout(async () => {\n // Double-check service worker is still enabled before updating state\n const currentEnabled = settings?.serviceWorker?.enabled ?? true;\n if (enabled && currentEnabled) {\n const registered = await isServiceWorkerRegistered();\n setIsRegistered(registered);\n }\n }, 1000);\n };\n\n const handleUpdateNow = async () => {\n try {\n await updateServiceWorker();\n // Don't show toast here - updateServiceWorker() will handle the reload\n // and the update process already provides feedback through the UI\n } catch (_error) {\n shellui.toast({\n title: t('caching.updateError.title'),\n description: t('caching.updateError.description'),\n type: 'error',\n });\n }\n };\n\n const handleResetToLatest = async () => {\n try {\n // Clear all caches and reload\n if ('caches' in window) {\n const cacheNames = await caches.keys();\n await Promise.all(cacheNames.map((name) => caches.delete(name)));\n }\n\n shellui.toast({\n title: t('caching.resetSuccess.title'),\n description: t('caching.resetSuccess.description'),\n type: 'success',\n });\n\n // Reload the app using shellUI refresh message (refreshes entire app, not just iframe)\n setTimeout(() => {\n const sent = shellui.sendMessageToParent({\n type: 'SHELLUI_REFRESH_PAGE',\n payload: {},\n });\n if (!sent) {\n // Fallback to window.location.reload if message can't be sent\n window.location.reload();\n }\n }, 1000);\n } catch (_error) {\n shellui.toast({\n title: t('caching.resetError.title'),\n description: t('caching.resetError.description'),\n type: 'error',\n });\n }\n };\n\n return (\n <div className=\"space-y-6\">\n {isLoading ? (\n <div className=\"text-sm text-muted-foreground\">{t('caching.loading')}</div>\n ) : null}\n\n {!isLoading && (\n <div className=\"space-y-6\">\n {/* Enable/Disable service worker */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('caching.enabled.title')}\n </label>\n <p className=\"text-sm text-muted-foreground\">\n {serviceWorkerEnabled\n ? t('caching.enabled.descriptionEnabled')\n : t('caching.enabled.descriptionDisabled')}\n </p>\n </div>\n <Switch\n checked={serviceWorkerEnabled}\n onCheckedChange={handleToggleServiceWorker}\n />\n </div>\n </div>\n\n {/* Status – always visible; shows Disabled when off */}\n <div className=\"space-y-2\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('caching.status.title')}\n </label>\n <div className=\"flex items-center gap-2 text-sm mt-2\">\n {!serviceWorkerEnabled ? (\n <span className=\"text-muted-foreground\">○ {t('caching.status.disabled')}</span>\n ) : !swFileExists ? (\n <span className=\"text-red-600 dark:text-red-400\">\n ✗ {t('caching.status.fileNotFound')}\n </span>\n ) : (\n <>\n <span\n className={\n isRegistered\n ? 'text-green-600 dark:text-green-400'\n : 'text-orange-600 dark:text-orange-400'\n }\n >\n {isRegistered ? '●' : '○'}{' '}\n {isRegistered ? t('caching.status.registered') : t('caching.status.notRunning')}\n </span>\n {updateAvailable && (\n <>\n <span className=\"text-muted-foreground/50\">|</span>\n <span className=\"text-blue-600 dark:text-blue-400\">\n ● {t('caching.status.updateAvailable')}\n </span>\n </>\n )}\n </>\n )}\n </div>\n </div>\n\n {serviceWorkerEnabled && (\n <>\n {/* Error Message when file missing */}\n {!swFileExists && (\n <div className=\"rounded-lg border border-red-200 dark:border-red-800 bg-red-50 dark:bg-red-950/30 p-4 space-y-3\">\n <div className=\"space-y-1\">\n <h3\n className=\"text-sm font-medium leading-none text-red-600 dark:text-red-400\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('caching.status.fileNotFound')}\n </h3>\n <p className=\"text-sm text-red-700 dark:text-red-300\">\n {t('caching.status.fileNotFoundDescription')}\n </p>\n </div>\n </div>\n )}\n\n {/* Update Available */}\n {updateAvailable && (\n <div className=\"space-y-2\">\n <div className=\"space-y-0.5\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('caching.update.title')}\n </label>\n <p className=\"text-sm text-muted-foreground\">\n {t('caching.update.description')}\n </p>\n </div>\n <div className=\"mt-2\">\n <Button\n variant=\"outline\"\n onClick={handleUpdateNow}\n className=\"w-full sm:w-auto\"\n >\n {t('caching.update.button')}\n </Button>\n </div>\n </div>\n )}\n\n {/* Reset Cache */}\n <div className=\"space-y-2\">\n <div className=\"space-y-0.5\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('caching.reset.title')}\n </label>\n <p className=\"text-sm text-muted-foreground\">{t('caching.reset.description')}</p>\n </div>\n <div className=\"mt-2\">\n <Button\n variant=\"outline\"\n onClick={handleResetToLatest}\n className=\"w-full sm:w-auto\"\n >\n {t('caching.reset.button')}\n </Button>\n </div>\n </div>\n </>\n )}\n </div>\n )}\n </div>\n );\n};\n","import {\n PaintbrushIcon,\n GlobeIcon,\n SettingsIcon,\n CodeIcon,\n ShieldIcon,\n PackageIcon,\n RefreshDoubleIcon,\n} from './SettingsIcons';\nimport { Appearance } from './components/Appearance';\nimport { LanguageAndRegion } from './components/LanguageAndRegion';\nimport { UpdateApp } from './components/UpdateApp';\nimport { Advanced } from './components/Advanced';\nimport { Develop } from './components/Develop';\nimport { DataPrivacy } from './components/DataPrivacy';\nimport { ServiceWorker } from './components/ServiceWorker';\nimport { isTauri } from '../../service-worker/register';\n\nexport const createSettingsRoutes = (t: (key: string) => string) => [\n {\n name: t('routes.appearance'),\n icon: PaintbrushIcon,\n path: 'appearance',\n element: <Appearance />,\n },\n {\n name: t('routes.languageAndRegion'),\n icon: GlobeIcon,\n path: 'language-and-region',\n element: <LanguageAndRegion />,\n },\n {\n name: t('routes.updateApp'),\n icon: RefreshDoubleIcon,\n path: 'update-app',\n element: <UpdateApp />,\n },\n {\n name: t('routes.advanced'),\n icon: SettingsIcon,\n path: 'advanced',\n element: <Advanced />,\n },\n {\n name: t('routes.dataPrivacy'),\n icon: ShieldIcon,\n path: 'data-privacy',\n element: <DataPrivacy />,\n },\n {\n name: t('routes.develop'),\n icon: CodeIcon,\n path: 'developpers',\n element: <Develop />,\n },\n ...(isTauri()\n ? []\n : [\n {\n name: t('routes.serviceWorker'),\n icon: PackageIcon,\n path: 'service-worker',\n element: <ServiceWorker />,\n },\n ]),\n];\n","import { useState, useEffect, useMemo, useCallback } from 'react';\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '@/components/ui/breadcrumb';\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '@/components/ui/sidebar';\nimport { Route, Routes, useLocation, useNavigate, Navigate } from 'react-router';\nimport { useTranslation } from 'react-i18next';\nimport urls from '@/constants/urls';\nimport { createSettingsRoutes } from './SettingsRoutes';\nimport { useSettings } from './hooks/useSettings';\nimport { useConfig } from '../config/useConfig';\nimport { isTauri } from '@/service-worker/register';\nimport { Button } from '@/components/ui/button';\nimport { ChevronRightIcon, ChevronLeftIcon } from './SettingsIcons';\n\nexport const SettingsView = () => {\n const location = useLocation();\n const navigate = useNavigate();\n const { settings } = useSettings();\n const { config } = useConfig();\n const { t } = useTranslation('settings');\n // Re-check isTauri after mount and after a short delay so we catch late-injected __TAURI__ in dev\n const [isTauriEnv, setIsTauriEnv] = useState(() => isTauri());\n\n useEffect(() => {\n setIsTauriEnv(isTauri());\n const tid = window.setTimeout(() => setIsTauriEnv(isTauri()), 200);\n return () => window.clearTimeout(tid);\n }, []);\n\n useEffect(() => {\n if (config?.title) {\n const settingsLabel = t('settings', { ns: 'common' });\n document.title = `${settingsLabel} | ${config.title}`;\n }\n }, [config?.title, t]);\n\n // Create routes with translations (service-worker route is already omitted in Tauri by createSettingsRoutes)\n const settingsRoutes = useMemo(() => createSettingsRoutes(t), [t]);\n\n // In Tauri, hide service worker route; use reactive isTauriEnv so we catch late injection (e.g. dev)\n const routesWithoutTauriSw = useMemo(() => {\n if (isTauriEnv) {\n return settingsRoutes.filter((route) => route.path !== 'service-worker');\n }\n return settingsRoutes;\n }, [settingsRoutes, isTauriEnv]);\n\n // Filter routes based on developer features setting\n const filteredRoutes = useMemo(() => {\n if (settings.developerFeatures.enabled) {\n return routesWithoutTauriSw;\n }\n return routesWithoutTauriSw.filter(\n (route) => route.path !== 'developpers' && route.path !== 'service-worker',\n );\n }, [settings.developerFeatures.enabled, routesWithoutTauriSw]);\n\n // Group routes by category\n const groupedRoutes = useMemo(() => {\n const developerOnlyPaths = ['developpers', 'service-worker'];\n const groups = [\n {\n title: t('categories.preferences'),\n routes: filteredRoutes.filter((route) =>\n ['appearance', 'language-and-region', 'data-privacy'].includes(route.path),\n ),\n },\n {\n title: t('categories.system'),\n routes: filteredRoutes.filter((route) => ['update-app', 'advanced'].includes(route.path)),\n },\n {\n title: t('categories.developer'),\n routes: filteredRoutes.filter((route) => developerOnlyPaths.includes(route.path)),\n },\n ];\n return groups.filter((group) => group.routes.length > 0);\n }, [filteredRoutes, t]);\n\n // Find matching nav item by checking if URL contains or ends with the item path\n const getSelectedItemFromUrl = useCallback(() => {\n const pathname = location.pathname;\n\n // Find matching nav item by checking if pathname contains the item path\n // This works regardless of the URL structure/prefix\n const matchedItem = filteredRoutes.find((item) => {\n // Normalize paths for comparison (remove leading/trailing slashes)\n const normalizedPathname = pathname.replace(/^\\/+|\\/+$/g, '');\n const normalizedItemPath = item.path.replace(/^\\/+|\\/+$/g, '');\n\n // Check if pathname ends with the item path, or contains it as a path segment\n return (\n normalizedPathname === normalizedItemPath ||\n normalizedPathname.endsWith(`/${normalizedItemPath}`) ||\n normalizedPathname.includes(`/${normalizedItemPath}/`)\n );\n });\n\n return matchedItem;\n }, [location.pathname, filteredRoutes]);\n\n const selectedItem = useMemo(() => getSelectedItemFromUrl(), [getSelectedItemFromUrl]);\n\n // Check if we're at the settings root (no specific route selected)\n const isSettingsRoot = useMemo(() => {\n const pathname = location.pathname;\n // Normalize the settings URL (remove leading/trailing slashes)\n const normalizedSettingsPath = urls.settings.replace(/^\\/+|\\/+$/g, '');\n // Normalize the current pathname (remove leading/trailing slashes)\n const normalizedPathname = pathname.replace(/^\\/+|\\/+$/g, '');\n\n // Check if we're exactly at the settings root\n // This handles both \"/__settings\" and \"/__settings/\" cases\n if (normalizedPathname === normalizedSettingsPath) {\n return true;\n }\n\n // If pathname starts with settings path followed by a slash, we're at a subpage\n // e.g., \"__settings/appearance\" means we're NOT at root\n const settingsPathWithSlash = `${normalizedSettingsPath}/`;\n if (normalizedPathname.startsWith(settingsPathWithSlash)) {\n return false;\n }\n\n // Pathname doesn't match settings path structure - not in settings\n return false;\n }, [location.pathname, filteredRoutes]);\n\n // Navigate back to settings root\n const handleBackToSettings = useCallback(() => {\n // Navigate to settings root, replacing current history entry\n navigate(urls.settings, { replace: true });\n }, [navigate]);\n\n return (\n <SidebarProvider>\n <div className=\"flex h-full w-full overflow-hidden items-start\">\n {/* Desktop Sidebar */}\n <Sidebar className=\"hidden md:flex\">\n <SidebarContent>\n {groupedRoutes.map((group) => (\n <SidebarGroup key={group.title}>\n <SidebarGroupLabel>{group.title}</SidebarGroupLabel>\n <SidebarGroupContent>\n <SidebarMenu>\n {group.routes.map((item) => (\n <SidebarMenuItem key={item.name}>\n <SidebarMenuButton\n asChild\n isActive={item.name === selectedItem?.name}\n >\n <button\n onClick={() => navigate(`${urls.settings}/${item.path}`)}\n className=\"cursor-pointer\"\n >\n <item.icon />\n <span>{item.name}</span>\n </button>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n ))}\n </SidebarContent>\n </Sidebar>\n\n {/* Mobile List View */}\n <div className=\"md:hidden flex h-full w-full flex-col overflow-hidden\">\n {isSettingsRoot ? (\n // Show list of settings pages\n <div className=\"flex flex-1 flex-col overflow-y-auto bg-background\">\n <header className=\"flex h-16 shrink-0 items-center justify-center px-4 border-b\">\n <h1 className=\"text-lg font-semibold\">{t('title')}</h1>\n </header>\n <div className=\"flex flex-1 flex-col p-4 gap-6\">\n {groupedRoutes.map((group) => (\n <div\n key={group.title}\n className=\"flex flex-col gap-2\"\n >\n <h2\n className=\"text-xs font-semibold text-foreground/60 uppercase tracking-wider px-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {group.title}\n </h2>\n <div className=\"flex flex-col bg-card rounded-lg overflow-hidden border border-border\">\n {group.routes.map((item, itemIndex) => {\n const Icon = item.icon;\n const isLast = itemIndex === group.routes.length - 1;\n return (\n <div\n key={item.name}\n className=\"relative\"\n >\n {!isLast && (\n <div className=\"absolute left-0 right-0 bottom-0 h-[1px] bg-border\" />\n )}\n <button\n onClick={() => navigate(`${urls.settings}/${item.path}`)}\n className=\"w-full flex items-center justify-between px-4 py-3 bg-transparent hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground transition-colors cursor-pointer rounded-none\"\n >\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\n <div className=\"flex-shrink-0 text-foreground/70\">\n <Icon />\n </div>\n <span className=\"text-sm font-normal text-foreground\">\n {item.name}\n </span>\n </div>\n <div className=\"flex-shrink-0 ml-2 text-foreground/40\">\n <ChevronRightIcon />\n </div>\n </button>\n </div>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n </div>\n ) : (\n // Show selected settings page with back button\n <div className=\"flex h-full flex-1 flex-col overflow-hidden\">\n <header className=\"flex h-16 shrink-0 items-center gap-2 px-4 border-b\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleBackToSettings}\n className=\"mr-2\"\n >\n <ChevronLeftIcon />\n </Button>\n <h1 className=\"text-lg font-semibold\">{selectedItem?.name}</h1>\n </header>\n <div className=\"flex flex-1 flex-col gap-4 overflow-y-auto p-4 pt-4\">\n <Routes>\n <Route\n index\n element={\n filteredRoutes.length > 0 ? (\n <Navigate\n to={`${urls.settings}/${filteredRoutes[0].path}`}\n replace\n />\n ) : null\n }\n />\n {filteredRoutes.map((item) => (\n <Route\n key={item.path}\n path={item.path}\n element={item.element}\n />\n ))}\n </Routes>\n </div>\n </div>\n )}\n </div>\n\n {/* Desktop Main Content */}\n <main className=\"hidden md:flex h-full flex-1 flex-col overflow-hidden\">\n {selectedItem && (\n <header className=\"flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear\">\n <div className=\"flex items-center gap-2 px-4\">\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>{t('title')}</BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>{selectedItem.name}</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n </header>\n )}\n <div className=\"flex flex-1 flex-col gap-4 overflow-y-auto p-4 pt-0\">\n <Routes>\n <Route\n index\n element={\n <div className=\"flex flex-1 flex-col items-center justify-center p-8 text-center\">\n <div className=\"max-w-md\">\n <h2 className=\"text-lg font-semibold mb-2\">{t('title')}</h2>\n <p className=\"text-sm text-muted-foreground\">\n {t('selectCategory', {\n defaultValue: 'Select a category from the sidebar to get started.',\n })}\n </p>\n </div>\n </div>\n }\n />\n {filteredRoutes.map((item) => (\n <Route\n key={item.path}\n path={item.path}\n element={item.element}\n />\n ))}\n </Routes>\n </div>\n </main>\n </div>\n </SidebarProvider>\n );\n};\n"],"names":["Breadcrumb","forwardRef","props","ref","jsx","BreadcrumbList","className","cn","BreadcrumbItem","BreadcrumbLink","asChild","Slot","BreadcrumbPage","BreadcrumbSeparator","children","PaintbrushIcon","GlobeIcon","jsxs","CheckIcon","SettingsIcon","CodeIcon","ChevronRightIcon","ChevronLeftIcon","ShieldIcon","RefreshDoubleIcon","PackageIcon","ButtonGroup","Children","child","index","isValidElement","isFirst","isLast","cloneElement","SunIcon","MoonIcon","MonitorIcon","ThemePreview","theme","isSelected","isDark","colors","Appearance","useTranslation","settings","updateSetting","useSettings","config","useConfig","currentTheme","currentThemeName","availableThemes","setAvailableThemes","useState","useEffect","themeDef","registerTheme","getAllThemes","isDarkForPreview","setIsDarkForPreview","updatePreview","mediaQuery","handleChange","modeThemes","Icon","Button","Select","ClockIcon","TIMEZONE_GROUPS","formatDate","date","timezone","lang","formatTime","getBrowserTimezone","getTimezoneDisplayName","timeZoneName","part","LanguageAndRegion","currentLanguage","browserTimezone","currentTimezone","isUsingBrowserTimezone","supportedLanguages","getSupportedLanguages","handleResetRegion","currentDateTime","setCurrentDateTime","now","updateDateTime","interval","e","group","tz","isBrowserTimezone","logger","getLogger","UpdateApp","updateAvailable","setUpdateAvailable","checking","setChecking","showUpToDateInButton","setShowUpToDateInButton","checkError","setCheckError","serviceWorkerEnabled","isTauri","status","getServiceWorkerStatus","addStatusListener","handleCheckForUpdate","checkForServiceWorkerUpdate","resolve","error","version","Fragment","updateServiceWorker","shellui","Advanced","resetAllData","errorReportingConfigured","handleErrorReportingChange","checked","initSentry","closeSentry","handleResetClick","Switch","ToastTestButtons","toastId","DialogTestButtons","ModalTestButtons","urls","DrawerTestButtons","openDrawer","options","Develop","effectiveLayout","navItems","flattenNavigationItems","item","self","i","path","resolveLocalizedString","layoutMode","DataPrivacy","cookies","hasCookieConsent","hasConsented","acceptedHosts","allHosts","c","strictNecessaryHosts","acceptedAll","h","rejectedAll","isCustom","handleResetCookieConsent","ServiceWorker","isRegistered","setIsRegistered","isLoading","setIsLoading","swFileExists","setSwFileExists","initialCheck","exists","serviceWorkerFileExists","refreshStatus","unsubscribe","handleToggleServiceWorker","enabled","currentEnabled","registered","isServiceWorkerRegistered","handleUpdateNow","handleResetToLatest","cacheNames","name","createSettingsRoutes","SettingsView","location","useLocation","navigate","useNavigate","t","isTauriEnv","setIsTauriEnv","tid","settingsLabel","settingsRoutes","useMemo","routesWithoutTauriSw","route","filteredRoutes","groupedRoutes","developerOnlyPaths","getSelectedItemFromUrl","useCallback","pathname","normalizedPathname","normalizedItemPath","selectedItem","isSettingsRoot","normalizedSettingsPath","settingsPathWithSlash","handleBackToSettings","SidebarProvider","Sidebar","SidebarContent","SidebarGroup","SidebarGroupLabel","SidebarGroupContent","SidebarMenu","SidebarMenuItem","SidebarMenuButton","itemIndex","Routes","Route","Navigate"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SettingsView-Bt4I-KDT.js","sources":["../src/components/ui/breadcrumb.tsx","../src/features/settings/SettingsIcons.tsx","../src/components/ui/button-group.tsx","../src/features/settings/components/Appearance.tsx","../src/components/ui/select.tsx","../src/features/settings/components/LanguageAndRegion.tsx","../src/features/settings/components/UpdateApp.tsx","../src/features/settings/components/Advanced.tsx","../src/features/settings/components/develop/ToastTestButtons.tsx","../src/features/settings/components/develop/DialogTestButtons.tsx","../src/features/settings/components/develop/ModalTestButtons.tsx","../src/features/settings/components/develop/DrawerTestButtons.tsx","../src/features/settings/components/Develop.tsx","../src/features/settings/components/DataPrivacy.tsx","../src/features/settings/components/ServiceWorker.tsx","../src/features/settings/SettingsRoutes.tsx","../src/features/settings/SettingsView.tsx"],"sourcesContent":["import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ComponentProps,\n type ReactNode,\n} from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn } from '@/lib/utils';\n\nconst Breadcrumb = forwardRef<\n HTMLElement,\n ComponentPropsWithoutRef<'nav'> & {\n separator?: ReactNode;\n }\n>(({ ...props }, ref) => (\n <nav\n ref={ref}\n aria-label=\"breadcrumb\"\n {...props}\n />\n));\nBreadcrumb.displayName = 'Breadcrumb';\n\nconst BreadcrumbList = forwardRef<HTMLOListElement, ComponentPropsWithoutRef<'ol'>>(\n ({ className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(\n 'flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5',\n className,\n )}\n {...props}\n />\n ),\n);\nBreadcrumbList.displayName = 'BreadcrumbList';\n\nconst BreadcrumbItem = forwardRef<HTMLLIElement, ComponentPropsWithoutRef<'li'>>(\n ({ className, ...props }, ref) => (\n <li\n ref={ref}\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n ),\n);\nBreadcrumbItem.displayName = 'BreadcrumbItem';\n\nconst BreadcrumbLink = forwardRef<\n HTMLAnchorElement,\n ComponentPropsWithoutRef<'a'> & {\n asChild?: boolean;\n }\n>(({ asChild, className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a';\n\n return (\n <Comp\n ref={ref}\n className={cn('transition-colors hover:text-foreground', className)}\n {...props}\n />\n );\n});\nBreadcrumbLink.displayName = 'BreadcrumbLink';\n\nconst BreadcrumbPage = forwardRef<HTMLSpanElement, ComponentPropsWithoutRef<'span'>>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('font-normal text-foreground', className)}\n {...props}\n />\n ),\n);\nBreadcrumbPage.displayName = 'BreadcrumbPage';\n\nconst BreadcrumbSeparator = ({ children, className, ...props }: ComponentProps<'li'>) => (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('[&>svg]:size-3.5', className)}\n {...props}\n >\n {children ?? (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n )}\n </li>\n);\nBreadcrumbSeparator.displayName = 'BreadcrumbSeparator';\n\nconst BreadcrumbEllipsis = ({ className, ...props }: ComponentProps<'span'>) => (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex h-9 w-9 items-center justify-center', className)}\n {...props}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"h-4 w-4\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"1\"\n />\n <circle\n cx=\"19\"\n cy=\"12\"\n r=\"1\"\n />\n <circle\n cx=\"5\"\n cy=\"12\"\n r=\"1\"\n />\n </svg>\n <span className=\"sr-only\">More</span>\n </span>\n);\nBreadcrumbEllipsis.displayName = 'BreadcrumbEllipsis';\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n","// Simple icon components (since we don't have lucide-react)\nexport const MenuIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line\n x1=\"4\"\n x2=\"20\"\n y1=\"12\"\n y2=\"12\"\n />\n <line\n x1=\"4\"\n x2=\"20\"\n y1=\"6\"\n y2=\"6\"\n />\n <line\n x1=\"4\"\n x2=\"20\"\n y1=\"18\"\n y2=\"18\"\n />\n </svg>\n);\n\nexport const HomeIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />\n <polyline points=\"9 22 9 12 15 12 15 22\" />\n </svg>\n);\n\nexport const PaintbrushIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path\n fill=\"none\"\n d=\"m14.622 17.897l-10.68-2.913M18.376 2.622a1 1 0 1 1 3.002 3.002L17.36 9.643a.5.5 0 0 0 0 .707l.944.944a2.41 2.41 0 0 1 0 3.408l-.944.944a.5.5 0 0 1-.707 0L8.354 7.348a.5.5 0 0 1 0-.707l.944-.944a2.41 2.41 0 0 1 3.408 0l.944.944a.5.5 0 0 0 .707 0zM9 8c-1.804 2.71-3.97 3.46-6.583 3.948a.507.507 0 0 0-.302.819l7.32 8.883a1 1 0 0 0 1.185.204C12.735 20.405 16 16.792 16 15\"\n />\n </svg>\n);\n\nexport const MessageCircleIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\n </svg>\n);\n\nexport const GlobeIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n />\n <line\n x1=\"2\"\n x2=\"22\"\n y1=\"12\"\n y2=\"12\"\n />\n <path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\" />\n </svg>\n);\n\nexport const KeyboardIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect\n width=\"20\"\n height=\"16\"\n x=\"2\"\n y=\"4\"\n rx=\"2\"\n />\n <path d=\"M6 8h.01\" />\n <path d=\"M10 8h.01\" />\n <path d=\"M14 8h.01\" />\n <path d=\"M18 8h.01\" />\n <path d=\"M8 12h.01\" />\n <path d=\"M12 12h.01\" />\n <path d=\"M16 12h.01\" />\n <path d=\"M7 16h10\" />\n </svg>\n);\n\nexport const CheckIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n);\n\nexport const VideoIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5\" />\n <rect\n x=\"2\"\n y=\"6\"\n width=\"14\"\n height=\"12\"\n rx=\"2\"\n />\n </svg>\n);\n\nexport const LinkIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </svg>\n);\n\nexport const LockIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect\n width=\"18\"\n height=\"11\"\n x=\"3\"\n y=\"11\"\n rx=\"2\"\n ry=\"2\"\n />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </svg>\n);\n\nexport const SettingsIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\" />\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"3\"\n />\n </svg>\n);\n\nexport const CodeIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"16 18 22 12 16 6\" />\n <polyline points=\"8 6 2 12 8 18\" />\n </svg>\n);\n\nexport const ChevronRightIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n);\n\nexport const ChevronLeftIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n);\n\nexport const ShieldIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n </svg>\n);\n\nexport const HardDriveIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line\n x1=\"22\"\n y1=\"12\"\n x2=\"2\"\n y2=\"12\"\n />\n <path d=\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\" />\n <line\n x1=\"6\"\n y1=\"16\"\n x2=\"6.01\"\n y2=\"16\"\n />\n <line\n x1=\"10\"\n y1=\"16\"\n x2=\"10.01\"\n y2=\"16\"\n />\n </svg>\n);\n\nexport const RefreshCwIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n </svg>\n);\n\n/** Double-arrow refresh / sync icon (two curved arrows in a circle). */\nexport const RefreshDoubleIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n width=\"16\"\n height=\"16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 0 0-9-9a9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5m-5 4a9 9 0 0 0 9 9a9.75 9.75 0 0 0 6.74-2.74L21 16\" />\n <path d=\"M16 16h5v5\" />\n </svg>\n);\n\nexport const ServerIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect\n width=\"20\"\n height=\"8\"\n x=\"2\"\n y=\"2\"\n rx=\"2\"\n ry=\"2\"\n />\n <rect\n width=\"20\"\n height=\"8\"\n x=\"2\"\n y=\"14\"\n rx=\"2\"\n ry=\"2\"\n />\n <line\n x1=\"6\"\n y1=\"6\"\n x2=\"6.01\"\n y2=\"6\"\n />\n <line\n x1=\"6\"\n y1=\"18\"\n x2=\"6.01\"\n y2=\"18\"\n />\n <line\n x1=\"10\"\n y1=\"6\"\n x2=\"10.01\"\n y2=\"6\"\n />\n <line\n x1=\"10\"\n y1=\"18\"\n x2=\"10.01\"\n y2=\"18\"\n />\n </svg>\n);\n\nexport const PackageIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m7.5 4.27 9 5.15\" />\n <path d=\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\" />\n <path d=\"m3.3 7 8.7 5 8.7-5\" />\n <path d=\"M12 22V12\" />\n </svg>\n);\n","import {\n forwardRef,\n Children,\n isValidElement,\n cloneElement,\n type HTMLAttributes,\n type ReactNode,\n type ReactElement,\n} from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface ButtonGroupProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nconst ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('inline-flex rounded-md', className)}\n role=\"group\"\n {...props}\n >\n {Children.map(children, (child, index) => {\n if (isValidElement(child)) {\n const isFirst = index === 0;\n const isLast = index === Children.count(children) - 1;\n\n return cloneElement(child as ReactElement<Record<string, unknown>>, {\n className: cn(\n // Remove rounded corners from all buttons\n 'rounded-none',\n // First button: rounded left only (uses theme radius)\n isFirst && 'rounded-l-md',\n // Last button: rounded right only (uses theme radius)\n isLast && 'rounded-r-md',\n // Remove left border from all except first, using theme border color\n !isFirst && 'border-l-0 -ml-px',\n (child as ReactElement<{ className?: string }>).props.className,\n ),\n });\n }\n return child;\n })}\n </div>\n );\n },\n);\nButtonGroup.displayName = 'ButtonGroup';\n\nexport { ButtonGroup };\n","import { useTranslation } from 'react-i18next';\nimport { useSettings } from '../hooks/useSettings';\nimport { useConfig } from '@/features/config/useConfig';\nimport { Button } from '@/components/ui/button';\nimport { ButtonGroup } from '@/components/ui/button-group';\nimport { cn } from '@/lib/utils';\nimport { useEffect, useState } from 'react';\nimport { getAllThemes, registerTheme, type ThemeDefinition } from '@/features/theme/themes';\n\nconst SunIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"4\"\n />\n <path d=\"M12 2v2\" />\n <path d=\"M12 20v2\" />\n <path d=\"m4.93 4.93 1.41 1.41\" />\n <path d=\"m17.66 17.66 1.41 1.41\" />\n <path d=\"M2 12h2\" />\n <path d=\"M20 12h2\" />\n <path d=\"m6.34 17.66-1.41 1.41\" />\n <path d=\"m19.07 4.93-1.41 1.41\" />\n </svg>\n);\n\nconst MoonIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\" />\n </svg>\n);\n\nconst MonitorIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect\n width=\"20\"\n height=\"14\"\n x=\"2\"\n y=\"3\"\n rx=\"2\"\n />\n <line\n x1=\"8\"\n x2=\"16\"\n y1=\"21\"\n y2=\"21\"\n />\n <line\n x1=\"12\"\n x2=\"12\"\n y1=\"17\"\n y2=\"21\"\n />\n </svg>\n);\n\n// Theme color preview component\nconst ThemePreview = ({\n theme,\n isSelected,\n isDark,\n}: {\n theme: ThemeDefinition;\n isSelected: boolean;\n isDark: boolean;\n}) => {\n const colors = isDark ? theme.colors.dark : theme.colors.light;\n\n return (\n <div\n className={cn(\n 'relative overflow-hidden rounded-lg border-2 transition-all',\n isSelected ? 'border-primary shadow-lg' : 'border-border',\n )}\n style={{ backgroundColor: colors.background }}\n >\n <div className=\"p-3 space-y-2\">\n {/* Primary color */}\n <div\n className=\"h-8 rounded-md\"\n style={{ backgroundColor: colors.primary }}\n />\n {/* Secondary colors */}\n <div className=\"flex gap-1\">\n <div\n className=\"h-6 flex-1 rounded\"\n style={{ backgroundColor: colors.background }}\n />\n <div\n className=\"h-6 flex-1 rounded\"\n style={{ backgroundColor: colors.secondary }}\n />\n <div\n className=\"h-6 flex-1 rounded\"\n style={{ backgroundColor: colors.accent }}\n />\n </div>\n {/* Accent colors */}\n <div className=\"flex gap-1\">\n <div\n className=\"h-4 flex-1 rounded\"\n style={{ backgroundColor: colors.muted }}\n />\n <div\n className=\"h-4 flex-1 rounded\"\n style={{ backgroundColor: colors.border }}\n />\n </div>\n </div>\n {/* Theme name overlay */}\n <div\n className=\"absolute bottom-0 left-0 right-0 bg-background/90 backdrop-blur-sm px-2 py-1\"\n style={{ backgroundColor: colors.background }}\n >\n <p\n className=\"text-xs font-medium text-center\"\n style={\n theme.fontFamily\n ? {\n fontFamily: theme.fontFamily,\n letterSpacing: theme.letterSpacing || 'normal',\n textShadow: theme.textShadow || 'none',\n }\n : {}\n }\n >\n {theme.displayName}\n </p>\n </div>\n </div>\n );\n};\n\nexport const Appearance = () => {\n const { t } = useTranslation('settings');\n const { settings, updateSetting } = useSettings();\n const { config } = useConfig();\n const currentTheme = settings.appearance?.theme || 'system';\n const currentThemeName = settings.appearance?.themeName || 'default';\n\n const [availableThemes, setAvailableThemes] = useState<ThemeDefinition[]>([]);\n\n // Register custom themes from config and get all themes\n useEffect(() => {\n if (config?.themes) {\n config.themes.forEach((themeDef: ThemeDefinition) => {\n registerTheme(themeDef);\n });\n }\n setAvailableThemes(getAllThemes());\n }, [config]);\n\n // Determine if we're in dark mode for preview\n const [isDarkForPreview, setIsDarkForPreview] = useState(() => {\n if (typeof window === 'undefined') return false;\n return (\n currentTheme === 'dark' ||\n (currentTheme === 'system' && window.matchMedia('(prefers-color-scheme: dark)').matches)\n );\n });\n\n // Update preview mode when theme changes\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const updatePreview = () => {\n setIsDarkForPreview(\n currentTheme === 'dark' ||\n (currentTheme === 'system' && window.matchMedia('(prefers-color-scheme: dark)').matches),\n );\n };\n\n updatePreview();\n\n if (currentTheme === 'system') {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = () => updatePreview();\n\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n } else if (mediaQuery.addListener) {\n mediaQuery.addListener(handleChange);\n return () => mediaQuery.removeListener(handleChange);\n }\n }\n }, [currentTheme]);\n\n const modeThemes = [\n { value: 'light' as const, label: t('appearance.themes.light'), icon: SunIcon },\n { value: 'dark' as const, label: t('appearance.themes.dark'), icon: MoonIcon },\n { value: 'system' as const, label: t('appearance.themes.system'), icon: MonitorIcon },\n ];\n\n return (\n <div className=\"space-y-6\">\n {/* Theme Mode Selection (Light/Dark/System) */}\n <div className=\"space-y-2\">\n <div className=\"space-y-0.5\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('appearance.mode')}\n </label>\n <p className=\"text-sm text-muted-foreground\">{t('appearance.modeDescription')}</p>\n </div>\n <div className=\"mt-2\">\n <ButtonGroup>\n {modeThemes.map((theme) => {\n const Icon = theme.icon;\n const isSelected = currentTheme === theme.value;\n return (\n <Button\n key={theme.value}\n variant={isSelected ? 'default' : 'outline'}\n onClick={() => {\n updateSetting('appearance', { theme: theme.value });\n }}\n className={cn(\n 'h-10 px-4 transition-all flex items-center gap-2 cursor-pointer',\n isSelected && ['font-semibold'],\n !isSelected && ['bg-background hover:bg-accent/50', 'text-muted-foreground'],\n )}\n aria-label={theme.label}\n title={theme.label}\n >\n <Icon />\n <span className=\"text-sm font-medium\">{theme.label}</span>\n </Button>\n );\n })}\n </ButtonGroup>\n </div>\n </div>\n\n {/* Theme Selection (Color Scheme) */}\n <div className=\"space-y-2\">\n <div className=\"space-y-0.5\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('appearance.colorTheme')}\n </label>\n <p className=\"text-sm text-muted-foreground\">{t('appearance.colorThemeDescription')}</p>\n </div>\n <div className=\"mt-2 grid grid-cols-2 md:grid-cols-3 gap-4\">\n {availableThemes.map((theme) => {\n const isSelected = currentThemeName === theme.name;\n return (\n <button\n key={theme.name}\n onClick={() => {\n updateSetting('appearance', { themeName: theme.name });\n }}\n className={cn(\n 'text-left transition-all cursor-pointer',\n isSelected && 'ring-2 ring-primary ring-offset-2 rounded-lg',\n )}\n aria-label={theme.displayName}\n >\n <ThemePreview\n theme={theme}\n isSelected={isSelected}\n isDark={isDarkForPreview}\n />\n </button>\n );\n })}\n </div>\n </div>\n </div>\n );\n};\n","import { forwardRef, type SelectHTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type SelectProps = SelectHTMLAttributes<HTMLSelectElement>;\n\nconst Select = forwardRef<HTMLSelectElement, SelectProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <select\n className={cn(\n 'select-field flex h-10 w-full rounded-md border border-input bg-background pl-3 pr-10 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 cursor-pointer disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n ref={ref}\n {...props}\n >\n {children}\n </select>\n );\n },\n);\nSelect.displayName = 'Select';\n\nexport { Select };\n","import { useTranslation } from 'react-i18next';\nimport { useSettings } from '../hooks/useSettings';\nimport { useConfig } from '@/features/config/useConfig';\nimport { getSupportedLanguages } from '@/i18n/config';\nimport { Button } from '@/components/ui/button';\nimport { ButtonGroup } from '@/components/ui/button-group';\nimport { Select } from '@/components/ui/select';\nimport { cn } from '@/lib/utils';\nimport { useState, useEffect } from 'react';\n\nconst GlobeIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n />\n <line\n x1=\"2\"\n x2=\"22\"\n y1=\"12\"\n y2=\"12\"\n />\n <path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\" />\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n);\n\n// Timezones organized by region\nconst TIMEZONE_GROUPS = [\n {\n label: 'UTC',\n timezones: [{ value: 'UTC', label: 'UTC (Coordinated Universal Time)' }],\n },\n {\n label: 'North America',\n timezones: [\n { value: 'America/New_York', label: 'Eastern Time (US & Canada)' },\n { value: 'America/Chicago', label: 'Central Time (US & Canada)' },\n { value: 'America/Denver', label: 'Mountain Time (US & Canada)' },\n { value: 'America/Los_Angeles', label: 'Pacific Time (US & Canada)' },\n { value: 'America/Toronto', label: 'Toronto' },\n { value: 'America/Vancouver', label: 'Vancouver' },\n { value: 'America/Mexico_City', label: 'Mexico City' },\n ],\n },\n {\n label: 'South America',\n timezones: [\n { value: 'America/Sao_Paulo', label: 'São Paulo' },\n { value: 'America/Buenos_Aires', label: 'Buenos Aires' },\n ],\n },\n {\n label: 'Europe',\n timezones: [\n { value: 'Europe/London', label: 'London' },\n { value: 'Europe/Paris', label: 'Paris' },\n { value: 'Europe/Berlin', label: 'Berlin' },\n { value: 'Europe/Rome', label: 'Rome' },\n { value: 'Europe/Madrid', label: 'Madrid' },\n { value: 'Europe/Amsterdam', label: 'Amsterdam' },\n { value: 'Europe/Stockholm', label: 'Stockholm' },\n { value: 'Europe/Zurich', label: 'Zurich' },\n ],\n },\n {\n label: 'Asia',\n timezones: [\n { value: 'Asia/Tokyo', label: 'Tokyo' },\n { value: 'Asia/Shanghai', label: 'Shanghai' },\n { value: 'Asia/Hong_Kong', label: 'Hong Kong' },\n { value: 'Asia/Singapore', label: 'Singapore' },\n { value: 'Asia/Dubai', label: 'Dubai' },\n { value: 'Asia/Kolkata', label: 'Mumbai, New Delhi' },\n { value: 'Asia/Bangkok', label: 'Bangkok' },\n ],\n },\n {\n label: 'Australia & Pacific',\n timezones: [\n { value: 'Australia/Sydney', label: 'Sydney' },\n { value: 'Australia/Melbourne', label: 'Melbourne' },\n { value: 'Pacific/Auckland', label: 'Auckland' },\n ],\n },\n];\n\n// Format date based on timezone and language\nconst formatDate = (date: Date, timezone: string, lang: string): string => {\n try {\n return new Intl.DateTimeFormat(lang, {\n timeZone: timezone,\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(date);\n } catch {\n return date.toLocaleDateString(lang);\n }\n};\n\n// Format time based on timezone and language\nconst formatTime = (date: Date, timezone: string, lang: string): string => {\n try {\n return new Intl.DateTimeFormat(lang, {\n timeZone: timezone,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n }).format(date);\n } catch {\n return date.toLocaleTimeString(lang);\n }\n};\n\n// Get browser's current timezone\nconst getBrowserTimezone = (): string => {\n if (typeof Intl !== 'undefined') {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n return 'UTC';\n};\n\n// Get human-readable timezone name\nconst getTimezoneDisplayName = (timezone: string, lang = 'en'): string => {\n try {\n // Try to get a friendly name from Intl\n const formatter = new Intl.DateTimeFormat(lang, {\n timeZone: timezone,\n timeZoneName: 'long',\n });\n const parts = formatter.formatToParts(new Date());\n const timeZoneName = parts.find((part) => part.type === 'timeZoneName')?.value;\n\n if (timeZoneName) {\n return timeZoneName;\n }\n\n // Fallback: try to get city name from timezone string\n const cityName = timezone.split('/').pop()?.replace(/_/g, ' ') || timezone;\n return cityName;\n } catch {\n // Final fallback: use the timezone code\n return timezone;\n }\n};\n\nexport const LanguageAndRegion = () => {\n const { t } = useTranslation('settings');\n const { settings, updateSetting } = useSettings();\n const { config } = useConfig();\n const currentLanguage = settings.language?.code || 'en';\n const browserTimezone = getBrowserTimezone();\n const currentTimezone = settings.region?.timezone || browserTimezone;\n const isUsingBrowserTimezone = currentTimezone === browserTimezone;\n\n // Get supported languages based on config\n const supportedLanguages = getSupportedLanguages(config?.language);\n\n const handleResetRegion = () => {\n updateSetting('region', { timezone: browserTimezone });\n };\n\n // State for current date/time\n const [currentDateTime, setCurrentDateTime] = useState<{ date: string; time: string }>(() => {\n const now = new Date();\n return {\n date: formatDate(now, currentTimezone, currentLanguage),\n time: formatTime(now, currentTimezone, currentLanguage),\n };\n });\n\n // Update date/time every second and when timezone/language changes\n useEffect(() => {\n const updateDateTime = () => {\n const now = new Date();\n setCurrentDateTime({\n date: formatDate(now, currentTimezone, currentLanguage),\n time: formatTime(now, currentTimezone, currentLanguage),\n });\n };\n\n // Update immediately when timezone or language changes\n updateDateTime();\n\n // Then update every second\n const interval = setInterval(updateDateTime, 1000);\n\n return () => clearInterval(interval);\n }, [currentTimezone, currentLanguage]);\n\n return (\n <div className=\"space-y-6\">\n <div className=\"space-y-2\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('languageAndRegion.language')}\n </label>\n <div className=\"mt-2\">\n <ButtonGroup>\n {supportedLanguages.map((lang) => {\n const isSelected = currentLanguage === lang.code;\n return (\n <Button\n key={lang.code}\n variant={isSelected ? 'default' : 'outline'}\n onClick={() => {\n updateSetting('language', { code: lang.code });\n }}\n className={cn(\n 'h-10 px-4 transition-all flex items-center gap-2',\n isSelected && ['shadow-md', 'font-semibold'],\n !isSelected && ['bg-background hover:bg-accent/50', 'text-muted-foreground'],\n )}\n aria-label={lang.nativeName}\n title={lang.nativeName}\n >\n <GlobeIcon />\n <span className=\"text-sm font-medium\">{lang.nativeName}</span>\n </Button>\n );\n })}\n </ButtonGroup>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('languageAndRegion.region')}\n </label>\n {!isUsingBrowserTimezone && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleResetRegion}\n className=\"h-8 text-xs\"\n >\n {t('languageAndRegion.resetToBrowser')}\n </Button>\n )}\n </div>\n <div className=\"mt-2 space-y-3\">\n <Select\n value={currentTimezone}\n onChange={(e) => {\n updateSetting('region', { timezone: e.target.value });\n }}\n className=\"w-full\"\n >\n {TIMEZONE_GROUPS.map((group) => (\n <optgroup\n key={group.label}\n label={group.label}\n >\n {group.timezones.map((tz) => {\n const isBrowserTimezone = tz.value === browserTimezone;\n return (\n <option\n key={tz.value}\n value={tz.value}\n >\n {tz.label}\n {isBrowserTimezone ? ` (${t('languageAndRegion.defaultBrowser')})` : ''}\n </option>\n );\n })}\n </optgroup>\n ))}\n </Select>\n <div className=\"flex items-center gap-2 px-3 py-2 rounded-md bg-muted/60 border border-border/50\">\n <ClockIcon />\n <div className=\"flex items-baseline gap-2\">\n <span className=\"text-lg font-semibold tabular-nums\">{currentDateTime.time}</span>\n <span className=\"text-xs text-muted-foreground\">{currentDateTime.date}</span>\n </div>\n </div>\n <div className=\"text-xs text-muted-foreground flex items-center gap-1\">\n <span>{t('languageAndRegion.timezoneLabel')}:</span>\n <span className=\"font-medium\">\n {getTimezoneDisplayName(currentTimezone, currentLanguage)}\n </span>\n {isUsingBrowserTimezone && (\n <span className=\"ml-1\">({t('languageAndRegion.defaultBrowser')})</span>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { useConfig } from '@/features/config/useConfig';\nimport { useSettings } from '../hooks/useSettings';\nimport { Button } from '@/components/ui/button';\nimport {\n isTauri,\n getServiceWorkerStatus,\n addStatusListener,\n checkForServiceWorkerUpdate,\n updateServiceWorker,\n} from '@/service-worker/register';\nimport { shellui, getLogger } from '@shellui/sdk';\nimport { CheckIcon } from '../SettingsIcons';\nimport { useState, useEffect } from 'react';\n\nconst logger = getLogger('shellcore');\n\nexport const UpdateApp = () => {\n const { t } = useTranslation('settings');\n const { config } = useConfig();\n const { settings } = useSettings();\n const [updateAvailable, setUpdateAvailable] = useState(false);\n const [checking, setChecking] = useState(false);\n const [showUpToDateInButton, setShowUpToDateInButton] = useState(false);\n const [checkError, setCheckError] = useState(false);\n\n const serviceWorkerEnabled = settings?.serviceWorker?.enabled ?? true;\n\n useEffect(() => {\n if (isTauri()) return;\n const load = async () => {\n const status = await getServiceWorkerStatus();\n setUpdateAvailable(status.updateAvailable);\n };\n load();\n const unsubscribe = addStatusListener((status) => {\n setUpdateAvailable(status.updateAvailable);\n // If an update becomes available, hide the \"You are up to date\" message and clear any errors\n if (status.updateAvailable) {\n setShowUpToDateInButton(false);\n setCheckError(false);\n }\n });\n return unsubscribe;\n }, []);\n\n const handleCheckForUpdate = async () => {\n if (isTauri()) return;\n setShowUpToDateInButton(false);\n setCheckError(false);\n setChecking(true);\n try {\n // Check current status before triggering update check\n const initialStatus = await getServiceWorkerStatus();\n\n // If update is already available, don't show \"You are up to date\"\n if (initialStatus.updateAvailable) {\n return;\n }\n\n // Trigger update check\n await checkForServiceWorkerUpdate();\n\n // Wait a bit for the update check to complete and status to update\n // The status listener will update updateAvailable if an update is found\n await new Promise((resolve) => setTimeout(resolve, 1000));\n\n // Check status again after update check\n // Use the state value which may have been updated by the status listener\n // If updateAvailable is true, don't show \"You are up to date\"\n if (!updateAvailable) {\n // Double-check with API to be sure\n const finalStatus = await getServiceWorkerStatus();\n if (!finalStatus.updateAvailable) {\n setShowUpToDateInButton(true);\n window.setTimeout(() => setShowUpToDateInButton(false), 3000);\n }\n }\n } catch (error) {\n // Error occurred during update check - show error message in button\n setCheckError(true);\n logger.error('Failed to check for service worker update:', { error });\n } finally {\n setChecking(false);\n }\n };\n\n const version = config?.version ?? t('updateApp.versionUnknown');\n\n if (isTauri()) {\n return (\n <div className=\"space-y-6\">\n <div className=\"space-y-2\">\n <div className=\"space-y-0.5\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('updateApp.currentVersion')}\n </label>\n <p className=\"text-sm text-muted-foreground\">{version}</p>\n </div>\n <div className=\"rounded-lg border border-border bg-muted/30 p-4\">\n <p className=\"text-sm text-muted-foreground\">{t('updateApp.tauriComingSoon')}</p>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"space-y-4\">\n <div className=\"space-y-0.5\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('updateApp.currentVersion')}\n </label>\n <p className=\"text-sm text-muted-foreground\">{version}</p>\n </div>\n {!serviceWorkerEnabled ? (\n <div className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground\">{t('updateApp.swDisabledMessage')}</p>\n <Button\n variant=\"outline\"\n onClick={() => {\n const sent = shellui.sendMessageToParent({\n type: 'SHELLUI_REFRESH_PAGE',\n payload: {},\n });\n if (!sent) window.location.reload();\n }}\n className=\"w-full sm:w-auto\"\n >\n {t('updateApp.refreshApp')}\n </Button>\n </div>\n ) : (\n <>\n <div className=\"space-y-2\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('updateApp.status')}\n </label>\n <div className=\"flex items-center gap-2 text-sm mt-2\">\n {updateAvailable ? (\n <span className=\"text-blue-600 dark:text-blue-400\">\n ● {t('updateApp.statusUpdateAvailable')}\n </span>\n ) : (\n <span className=\"text-green-600 dark:text-green-400\">\n ● {t('updateApp.statusUpToDate')}\n </span>\n )}\n </div>\n </div>\n <div className=\"flex items-center gap-2 flex-wrap\">\n {updateAvailable && (\n <Button\n variant=\"default\"\n onClick={async () => {\n await updateServiceWorker();\n }}\n className=\"w-full sm:w-auto\"\n >\n {t('updateApp.installNow')}\n </Button>\n )}\n <Button\n variant=\"outline\"\n onClick={handleCheckForUpdate}\n disabled={checking || updateAvailable}\n className=\"w-full sm:w-auto\"\n >\n {checking ? (\n <>\n <span\n className=\"inline-block h-4 w-4 shrink-0 animate-spin rounded-full border-2 border-current border-t-transparent mr-2\"\n aria-hidden\n />\n {t('updateApp.checking')}\n </>\n ) : checkError ? (\n <span className=\"inline-flex items-center gap-2 text-red-600 dark:text-red-400\">\n {t('updateApp.checkError')}\n </span>\n ) : showUpToDateInButton && !updateAvailable ? (\n <span className=\"inline-flex items-center gap-2 text-green-600 dark:text-green-400\">\n <CheckIcon />\n {t('updateApp.youAreUpToDate')}\n </span>\n ) : (\n t('updateApp.checkForUpdate')\n )}\n </Button>\n </div>\n </>\n )}\n </div>\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { Switch } from '@/components/ui/switch';\nimport { useConfig } from '@/features/config/useConfig';\nimport { closeSentry, initSentry } from '@/features/sentry/initSentry';\nimport { useSettings } from '../hooks/useSettings';\nimport { Button } from '@/components/ui/button';\nimport { shellui } from '@shellui/sdk';\n\nexport const Advanced = () => {\n const { t } = useTranslation('settings');\n const { config } = useConfig();\n const { settings, updateSetting, resetAllData } = useSettings();\n const errorReportingConfigured = Boolean(config?.sentry?.dsn);\n\n const handleErrorReportingChange = (checked: boolean) => {\n updateSetting('errorReporting', { enabled: checked });\n if (checked) {\n initSentry();\n } else {\n closeSentry();\n }\n };\n\n const handleResetClick = () => {\n shellui.dialog({\n title: t('advanced.dangerZone.reset.toast.title'),\n description: t('advanced.dangerZone.reset.toast.description'),\n mode: 'delete',\n size: 'sm',\n okLabel: t('advanced.dangerZone.reset.toast.confirm'),\n cancelLabel: t('advanced.dangerZone.reset.toast.cancel'),\n onOk: () => {\n resetAllData();\n shellui.toast({\n title: t('advanced.dangerZone.reset.toast.success.title'),\n description: t('advanced.dangerZone.reset.toast.success.description'),\n type: 'success',\n });\n shellui.navigate('/');\n },\n onCancel: () => {\n // User cancelled, no action needed\n },\n });\n };\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <span\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('advanced.errorReporting.label')}\n </span>\n <p className=\"text-sm text-muted-foreground\">\n {errorReportingConfigured\n ? t('advanced.errorReporting.statusConfigured')\n : t('advanced.errorReporting.statusNotConfigured')}\n </p>\n </div>\n {errorReportingConfigured && (\n <Switch\n id=\"error-reporting\"\n checked={settings.errorReporting.enabled}\n onCheckedChange={handleErrorReportingChange}\n />\n )}\n </div>\n\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <label\n htmlFor=\"developer-features\"\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('advanced.developerFeatures.label')}\n </label>\n <p className=\"text-sm text-muted-foreground\">\n {t('advanced.developerFeatures.description')}\n </p>\n </div>\n <Switch\n id=\"developer-features\"\n checked={settings.developerFeatures.enabled}\n onCheckedChange={(checked) => updateSetting('developerFeatures', { enabled: checked })}\n />\n </div>\n\n <div className=\"border-t pt-6 mt-6\">\n <div className=\"space-y-4\">\n <div className=\"space-y-0.5\">\n <h3\n className=\"text-sm font-semibold leading-none text-destructive\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('advanced.dangerZone.title')}\n </h3>\n <p className=\"text-sm text-muted-foreground\">{t('advanced.dangerZone.description')}</p>\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"space-y-0.5\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('advanced.dangerZone.reset.title')}\n </label>\n <p className=\"text-sm text-muted-foreground\">\n {t('advanced.dangerZone.reset.warning')}\n </p>\n </div>\n <Button\n variant=\"destructive\"\n onClick={handleResetClick}\n className=\"w-full sm:w-auto\"\n >\n {t('advanced.dangerZone.reset.button')}\n </Button>\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { Button } from '@/components/ui/button';\nimport { shellui } from '@shellui/sdk';\n\nexport const ToastTestButtons = () => {\n const { t } = useTranslation('settings');\n\n return (\n <div>\n <h4\n className=\"text-sm font-medium mb-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.testing.toastNotifications.title')}\n </h4>\n <div className=\"flex flex-wrap gap-2\">\n <Button\n onClick={() => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.success.title'),\n description: t('develop.testing.toastNotifications.messages.success.description'),\n type: 'success',\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.success')}\n </Button>\n <Button\n onClick={() => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.error.title'),\n description: t('develop.testing.toastNotifications.messages.error.description'),\n type: 'error',\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.error')}\n </Button>\n <Button\n onClick={() => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.warning.title'),\n description: t('develop.testing.toastNotifications.messages.warning.description'),\n type: 'warning',\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.warning')}\n </Button>\n <Button\n onClick={() => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.info.title'),\n description: t('develop.testing.toastNotifications.messages.info.description'),\n type: 'info',\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.info')}\n </Button>\n <Button\n onClick={() => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.default.title'),\n description: t('develop.testing.toastNotifications.messages.default.description'),\n type: 'default',\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.default')}\n </Button>\n <Button\n onClick={() => {\n const toastId = shellui.toast({\n title: t('develop.testing.toastNotifications.messages.processing.title'),\n description: t('develop.testing.toastNotifications.messages.processing.description'),\n type: 'loading',\n });\n\n // Simulate async operation and update toast\n if (typeof toastId === 'string') {\n setTimeout(() => {\n shellui.toast({\n id: toastId,\n type: 'success',\n title: t('develop.testing.toastNotifications.messages.uploadComplete.title'),\n description: t(\n 'develop.testing.toastNotifications.messages.uploadComplete.description',\n ),\n });\n }, 2000);\n }\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.loadingSuccess')}\n </Button>\n <Button\n onClick={() => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.withAction.title'),\n description: t('develop.testing.toastNotifications.messages.withAction.description'),\n type: 'success',\n action: {\n label: t('develop.testing.toastNotifications.messages.actionLabels.undo'),\n onClick: () => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.undone.title'),\n description: t(\n 'develop.testing.toastNotifications.messages.undone.description',\n ),\n type: 'info',\n });\n },\n },\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.withAction')}\n </Button>\n <Button\n onClick={() => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.withAction.title'),\n description: t('develop.testing.toastNotifications.messages.withAction.description'),\n type: 'success',\n action: {\n label: t('develop.testing.toastNotifications.messages.actionLabels.undo'),\n onClick: () => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.undone.title'),\n description: t(\n 'develop.testing.toastNotifications.messages.undone.description',\n ),\n type: 'info',\n });\n },\n },\n cancel: {\n label: t('develop.testing.toastNotifications.messages.actionLabels.cancel'),\n onClick: () => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.cancelled.title'),\n description: t(\n 'develop.testing.toastNotifications.messages.cancelled.description',\n ),\n type: 'info',\n });\n },\n },\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.withActionAndCancel')}\n </Button>\n <Button\n onClick={() => {\n shellui.toast({\n title: t('develop.testing.toastNotifications.messages.persistent.title'),\n description: t('develop.testing.toastNotifications.messages.persistent.description'),\n type: 'info',\n duration: 10000,\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.toastNotifications.buttons.longDuration')}\n </Button>\n </div>\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { Button } from '@/components/ui/button';\nimport { shellui } from '@shellui/sdk';\n\nexport const DialogTestButtons = () => {\n const { t } = useTranslation('settings');\n\n return (\n <div>\n <h4\n className=\"text-sm font-medium mb-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.testing.dialogTesting.title')}\n </h4>\n <div className=\"flex flex-wrap gap-2\">\n <Button\n onClick={() => {\n shellui.dialog({\n title: t('develop.testing.dialogTesting.dialogs.ok.title'),\n description: t('develop.testing.dialogTesting.dialogs.ok.description'),\n mode: 'ok',\n onOk: () => {\n shellui.toast({\n title: t('develop.testing.dialogTesting.toasts.okClicked'),\n type: 'success',\n });\n },\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.dialogTesting.buttons.okDialog')}\n </Button>\n <Button\n onClick={() => {\n shellui.dialog({\n title: t('develop.testing.dialogTesting.dialogs.okCancel.title'),\n description: t('develop.testing.dialogTesting.dialogs.okCancel.description'),\n mode: 'okCancel',\n size: 'sm',\n onOk: () => {\n shellui.toast({\n title: t('develop.testing.dialogTesting.toasts.okClicked'),\n type: 'success',\n });\n },\n onCancel: () => {\n shellui.toast({\n title: t('develop.testing.dialogTesting.toasts.cancelClicked'),\n type: 'info',\n });\n },\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.dialogTesting.buttons.okCancelDialog')}\n </Button>\n <Button\n onClick={() => {\n shellui.dialog({\n title: t('develop.testing.dialogTesting.dialogs.delete.title'),\n description: t('develop.testing.dialogTesting.dialogs.delete.description'),\n mode: 'delete',\n okLabel: t('develop.testing.dialogTesting.dialogs.delete.okLabel'),\n cancelLabel: t('develop.testing.dialogTesting.dialogs.delete.cancelLabel'),\n size: 'sm',\n onOk: () => {\n shellui.toast({\n title: t('develop.testing.dialogTesting.toasts.itemDeleted'),\n type: 'success',\n });\n },\n onCancel: () => {\n shellui.toast({\n title: t('develop.testing.dialogTesting.toasts.deletionCancelled'),\n type: 'info',\n });\n },\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.dialogTesting.buttons.deleteDialog')}\n </Button>\n <Button\n onClick={() => {\n shellui.dialog({\n title: t('develop.testing.dialogTesting.dialogs.confirm.title'),\n description: t('develop.testing.dialogTesting.dialogs.confirm.description'),\n mode: 'confirm',\n okLabel: t('develop.testing.dialogTesting.dialogs.confirm.okLabel'),\n cancelLabel: t('develop.testing.dialogTesting.dialogs.confirm.cancelLabel'),\n size: 'sm',\n onOk: () => {\n shellui.toast({\n title: t('develop.testing.dialogTesting.toasts.actionConfirmed'),\n type: 'success',\n });\n },\n onCancel: () => {\n shellui.toast({\n title: t('develop.testing.dialogTesting.toasts.actionCancelled'),\n type: 'info',\n });\n },\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.dialogTesting.buttons.confirmDialog')}\n </Button>\n <Button\n onClick={() => {\n shellui.dialog({\n title: t('develop.testing.dialogTesting.dialogs.onlyCancel.title'),\n description: t('develop.testing.dialogTesting.dialogs.onlyCancel.description'),\n mode: 'onlyCancel',\n cancelLabel: t('develop.testing.dialogTesting.dialogs.onlyCancel.cancelLabel'),\n size: 'sm',\n onCancel: () => {\n shellui.toast({\n title: t('develop.testing.dialogTesting.toasts.dialogClosed'),\n type: 'info',\n });\n },\n });\n }}\n variant=\"outline\"\n >\n {t('develop.testing.dialogTesting.buttons.onlyCancelDialog')}\n </Button>\n </div>\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { Button } from '@/components/ui/button';\nimport { shellui } from '@shellui/sdk';\nimport urls from '@/constants/urls';\n\nexport const ModalTestButtons = () => {\n const { t } = useTranslation('settings');\n\n return (\n <div>\n <h4\n className=\"text-sm font-medium mb-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.testing.modalTesting.title')}\n </h4>\n <div className=\"flex flex-wrap gap-2\">\n <Button\n onClick={() => shellui.openModal(urls.settings)}\n variant=\"outline\"\n >\n {t('develop.testing.modalTesting.buttons.openModal')}\n </Button>\n </div>\n <p className=\"text-xs text-muted-foreground mt-2\">\n {t('develop.testing.modalTesting.description')}\n </p>\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { Button } from '@/components/ui/button';\nimport { shellui, type OpenDrawerOptions } from '@shellui/sdk';\nimport urls from '@/constants/urls';\n\nexport const DrawerTestButtons = () => {\n const { t } = useTranslation('settings');\n\n const openDrawer = (options: OpenDrawerOptions) => {\n shellui.openDrawer({ url: urls.settings, ...options });\n };\n\n return (\n <div>\n <h4\n className=\"text-sm font-medium mb-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.testing.drawerTesting.title')}\n </h4>\n <div className=\"flex flex-wrap gap-2\">\n <Button\n onClick={() => openDrawer({ position: 'right' })}\n variant=\"outline\"\n >\n {t('develop.testing.drawerTesting.buttons.drawerRight')}\n </Button>\n <Button\n onClick={() => openDrawer({ position: 'left' })}\n variant=\"outline\"\n >\n {t('develop.testing.drawerTesting.buttons.drawerLeft')}\n </Button>\n <Button\n onClick={() => openDrawer({ position: 'top' })}\n variant=\"outline\"\n >\n {t('develop.testing.drawerTesting.buttons.drawerTop')}\n </Button>\n <Button\n onClick={() => openDrawer({ position: 'bottom' })}\n variant=\"outline\"\n >\n {t('develop.testing.drawerTesting.buttons.drawerBottom')}\n </Button>\n <Button\n onClick={() => openDrawer({ position: 'right', size: '400px' })}\n variant=\"outline\"\n >\n {t('develop.testing.drawerTesting.buttons.drawerRightNarrow')}\n </Button>\n <Button\n onClick={() => openDrawer({ position: 'bottom', size: '60vh' })}\n variant=\"outline\"\n >\n {t('develop.testing.drawerTesting.buttons.drawerBottomHalf')}\n </Button>\n <Button\n onClick={() => shellui.closeDrawer()}\n variant=\"outline\"\n >\n {t('develop.testing.drawerTesting.buttons.closeDrawer')}\n </Button>\n </div>\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { shellui } from '@shellui/sdk';\nimport { useSettings } from '../hooks/useSettings';\nimport { useConfig } from '../../config/useConfig';\nimport { flattenNavigationItems, resolveLocalizedString } from '../../layouts/utils';\nimport { Switch } from '@/components/ui/switch';\nimport { Select } from '@/components/ui/select';\nimport { Button } from '@/components/ui/button';\nimport { ToastTestButtons } from './develop/ToastTestButtons';\nimport { DialogTestButtons } from './develop/DialogTestButtons';\nimport { ModalTestButtons } from './develop/ModalTestButtons';\nimport { DrawerTestButtons } from './develop/DrawerTestButtons';\nimport type { LayoutType } from '../../config/types';\n\nexport const Develop = () => {\n const { t } = useTranslation('settings');\n const { settings, updateSetting } = useSettings();\n const { config } = useConfig();\n const currentLanguage = settings.language?.code || 'en';\n const effectiveLayout: LayoutType = settings.layout ?? config?.layout ?? 'sidebar';\n const navItems = config?.navigation?.length\n ? flattenNavigationItems(config?.navigation ?? []).filter(\n (item, index, self) => index === self.findIndex((i) => i.path === item.path),\n )\n : [];\n\n return (\n <div className=\"space-y-6\">\n <div>\n <h3\n className=\"text-lg font-semibold mb-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.logging.title')}\n </h3>\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <label\n htmlFor=\"log-shellsdk\"\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.logging.shellsdk.label')}\n </label>\n <p className=\"text-sm text-muted-foreground\">\n {t('develop.logging.shellsdk.description')}\n </p>\n </div>\n <Switch\n id=\"log-shellsdk\"\n checked={settings.logging?.namespaces?.shellsdk || false}\n onCheckedChange={(checked) =>\n updateSetting('logging', {\n namespaces: {\n ...settings.logging?.namespaces,\n shellsdk: checked,\n },\n })\n }\n />\n </div>\n\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <label\n htmlFor=\"log-shellcore\"\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.logging.shellcore.label')}\n </label>\n <p className=\"text-sm text-muted-foreground\">\n {t('develop.logging.shellcore.description')}\n </p>\n </div>\n <Switch\n id=\"log-shellcore\"\n checked={settings.logging?.namespaces?.shellcore || false}\n onCheckedChange={(checked) =>\n updateSetting('logging', {\n namespaces: {\n ...settings.logging?.namespaces,\n shellcore: checked,\n },\n })\n }\n />\n </div>\n </div>\n </div>\n\n <div>\n <h3\n className=\"text-lg font-semibold mb-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.navigation.title')}\n </h3>\n {navItems.length ? (\n <div className=\"space-y-2\">\n <label\n htmlFor=\"develop-nav-select\"\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.navigation.selectLabel')}\n </label>\n <div className=\"mt-2\">\n <Select\n id=\"develop-nav-select\"\n defaultValue=\"\"\n onChange={(e) => {\n const path = e.target.value;\n if (path) {\n shellui.navigate(path.startsWith('/') ? path : `/${path}`);\n }\n }}\n >\n <option value=\"\">{t('develop.navigation.placeholder')}</option>\n {navItems.map((item) => (\n <option\n key={item.path}\n value={`/${item.path}`}\n >\n {resolveLocalizedString(item.label, currentLanguage) || item.path}\n </option>\n ))}\n </Select>\n </div>\n </div>\n ) : (\n <p className=\"text-sm text-muted-foreground\">{t('develop.navigation.empty')}</p>\n )}\n </div>\n\n <div>\n <h3\n className=\"text-lg font-semibold mb-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.layout.title')}\n </h3>\n <div className=\"flex flex-wrap gap-2\">\n {(['sidebar', 'windows'] as const).map((layoutMode) => (\n <Button\n key={layoutMode}\n variant={effectiveLayout === layoutMode ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => updateSetting('layout', layoutMode as LayoutType)}\n >\n {t(`develop.layout.${layoutMode}`)}\n </Button>\n ))}\n </div>\n </div>\n\n <div>\n <h3\n className=\"text-lg font-semibold mb-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('develop.testing.title')}\n </h3>\n <div className=\"space-y-4\">\n <ToastTestButtons />\n <DialogTestButtons />\n <ModalTestButtons />\n <DrawerTestButtons />\n </div>\n </div>\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { useSettings } from '../hooks/useSettings';\nimport { useConfig } from '@/features/config/useConfig';\nimport { Button } from '@/components/ui/button';\nimport { shellui } from '@shellui/sdk';\nimport urls from '@/constants/urls';\nimport { cn } from '@/lib/utils';\n\nexport const DataPrivacy = () => {\n const { t } = useTranslation('settings');\n const { config } = useConfig();\n const { settings, updateSetting } = useSettings();\n\n const cookies = config?.cookieConsent?.cookies ?? [];\n const hasCookieConsent = cookies.length > 0;\n const hasConsented = Boolean(settings?.cookieConsent?.consentedCookieHosts?.length);\n\n // Determine consent status\n const acceptedHosts = settings?.cookieConsent?.acceptedHosts ?? [];\n const allHosts = cookies.map((c) => c.host);\n const strictNecessaryHosts = cookies\n .filter((c) => c.category === 'strict_necessary')\n .map((c) => c.host);\n\n const acceptedAll =\n hasConsented &&\n acceptedHosts.length === allHosts.length &&\n allHosts.every((h) => acceptedHosts.includes(h));\n // \"Rejected all\" means only strictly necessary cookies are accepted\n const rejectedAll =\n hasConsented &&\n acceptedHosts.length === strictNecessaryHosts.length &&\n strictNecessaryHosts.every((h) => acceptedHosts.includes(h)) &&\n !acceptedHosts.some((h) => !strictNecessaryHosts.includes(h));\n const isCustom = hasConsented && !acceptedAll && !rejectedAll;\n\n const handleResetCookieConsent = () => {\n updateSetting('cookieConsent', {\n acceptedHosts: [],\n consentedCookieHosts: [],\n });\n };\n\n return (\n <div className=\"space-y-6\">\n {!hasCookieConsent ? (\n <div className=\"rounded-lg border bg-card p-4 space-y-3\">\n <div className=\"space-y-1\">\n <h3\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('dataPrivacy.noCookiesConfigured.title')}\n </h3>\n <p className=\"text-sm text-muted-foreground\">\n {t('dataPrivacy.noCookiesConfigured.description')}\n </p>\n </div>\n <div className=\"flex items-start gap-2 text-sm\">\n <span className=\"text-green-600 dark:text-green-400 mt-0.5\">✓</span>\n <span className=\"text-muted-foreground\">\n {t('dataPrivacy.noCookiesConfigured.info')}\n </span>\n </div>\n </div>\n ) : (\n <div className=\"space-y-2\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('dataPrivacy.cookieConsent.title')}\n </label>\n <div className=\"mt-2 space-y-3\">\n <p className=\"text-sm text-muted-foreground\">\n {!hasConsented\n ? t('dataPrivacy.cookieConsent.descriptionNotConsented')\n : acceptedAll\n ? t('dataPrivacy.cookieConsent.statusAcceptedAll')\n : rejectedAll\n ? t('dataPrivacy.cookieConsent.statusRejectedAll')\n : t('dataPrivacy.cookieConsent.statusCustom')}\n </p>\n {hasConsented && (\n <div className=\"flex items-center gap-2 text-sm mt-2\">\n <span\n className={cn(\n 'px-2 py-1 rounded-md text-xs font-medium transition-colors',\n acceptedAll\n ? 'bg-primary/10 text-primary border border-primary/20'\n : 'text-muted-foreground',\n )}\n >\n {t('dataPrivacy.cookieConsent.labelAcceptedAll')}\n </span>\n <span className=\"text-muted-foreground/30\">|</span>\n <span\n className={cn(\n 'px-2 py-1 rounded-md text-xs font-medium transition-colors',\n isCustom\n ? 'bg-muted text-muted-foreground border border-border'\n : 'text-muted-foreground',\n )}\n >\n {t('dataPrivacy.cookieConsent.labelCustom')}\n </span>\n <span className=\"text-muted-foreground/30\">|</span>\n <span\n className={cn(\n 'px-2 py-1 rounded-md text-xs font-medium transition-colors',\n rejectedAll\n ? 'bg-muted text-muted-foreground border border-border'\n : 'text-muted-foreground',\n )}\n >\n {t('dataPrivacy.cookieConsent.labelRejectedAll')}\n </span>\n </div>\n )}\n <div className=\"flex flex-wrap gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => shellui.openDrawer({ url: urls.cookiePreferences, size: '420px' })}\n className=\"w-full sm:w-auto\"\n >\n {t('dataPrivacy.cookieConsent.manageButton')}\n </Button>\n <Button\n variant=\"ghost\"\n onClick={handleResetCookieConsent}\n disabled={!hasConsented}\n className=\"w-full sm:w-auto\"\n >\n {t('dataPrivacy.cookieConsent.button')}\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { useSettings } from '../hooks/useSettings';\nimport { Button } from '@/components/ui/button';\nimport { Switch } from '@/components/ui/switch';\nimport {\n isServiceWorkerRegistered,\n updateServiceWorker,\n getServiceWorkerStatus,\n addStatusListener,\n serviceWorkerFileExists,\n} from '@/service-worker/register';\nimport { shellui } from '@shellui/sdk';\nimport { useState, useEffect } from 'react';\n\nexport const ServiceWorker = () => {\n const { t } = useTranslation('settings');\n const { settings, updateSetting } = useSettings();\n const [isRegistered, setIsRegistered] = useState(false);\n const [updateAvailable, setUpdateAvailable] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n const [swFileExists, setSwFileExists] = useState(true); // Track if service worker file exists\n\n const serviceWorkerEnabled = settings?.serviceWorker?.enabled ?? true;\n\n useEffect(() => {\n // Don't check service worker status if disabled\n if (!serviceWorkerEnabled) {\n // Immediately clear all state and hide error messages\n setIsRegistered(false);\n setUpdateAvailable(false);\n setIsLoading(false);\n setSwFileExists(true); // Set to true to prevent error messages from showing\n return;\n }\n\n // Initial check with loading state\n const initialCheck = async () => {\n // Double-check service worker is still enabled before proceeding\n const stillEnabled = settings?.serviceWorker?.enabled ?? true;\n if (!stillEnabled) {\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n\n // First check if service worker file exists\n const exists = await serviceWorkerFileExists();\n\n // Check again if service worker was disabled during the async operation\n const currentEnabled = settings?.serviceWorker?.enabled ?? true;\n if (!currentEnabled) {\n setIsLoading(false);\n return;\n }\n\n setSwFileExists(exists);\n\n if (exists) {\n // Check service worker status only if file exists\n const status = await getServiceWorkerStatus();\n\n // Final check before updating state\n const finalCheck = settings?.serviceWorker?.enabled ?? true;\n if (finalCheck) {\n setIsRegistered(status.registered);\n setUpdateAvailable(status.updateAvailable);\n }\n } else {\n // File doesn't exist, so service worker can't be registered\n // Only update if service worker is still enabled\n const finalCheck = settings?.serviceWorker?.enabled ?? true;\n if (finalCheck) {\n setIsRegistered(false);\n setUpdateAvailable(false);\n }\n }\n\n setIsLoading(false);\n };\n\n // Background refresh without affecting loading state\n const refreshStatus = async () => {\n // Skip if service worker was disabled (check current setting value)\n const currentEnabled = settings?.serviceWorker?.enabled ?? true;\n if (!currentEnabled) {\n return;\n }\n\n // Check if file exists first\n const exists = await serviceWorkerFileExists();\n\n // Check again if service worker was disabled during the async operation\n const currentEnabledAfter = settings?.serviceWorker?.enabled ?? true;\n if (!currentEnabledAfter) {\n return;\n }\n\n setSwFileExists(exists);\n\n if (exists) {\n // Check service worker status only if file exists\n const status = await getServiceWorkerStatus();\n\n // Final check before updating state\n const finalCheck = settings?.serviceWorker?.enabled ?? true;\n if (finalCheck) {\n setIsRegistered(status.registered);\n setUpdateAvailable(status.updateAvailable);\n }\n } else {\n // File doesn't exist, so service worker can't be registered\n // Only update if service worker is still enabled\n const finalCheck = settings?.serviceWorker?.enabled ?? true;\n if (finalCheck) {\n setIsRegistered(false);\n setUpdateAvailable(false);\n }\n }\n };\n\n // Initial check immediately\n initialCheck();\n\n // Listen for status changes\n const unsubscribe = addStatusListener((status) => {\n // Only update if service worker is still enabled (check current setting value)\n const currentEnabled = settings?.serviceWorker?.enabled ?? true;\n if (currentEnabled) {\n setIsRegistered(status.registered);\n setUpdateAvailable(status.updateAvailable);\n setIsLoading(false);\n }\n });\n\n // Also check periodically as fallback (background refresh) - less frequent to avoid excessive fetches\n const interval = setInterval(refreshStatus, 30000); // Check every 30 seconds instead of 5\n\n return () => {\n unsubscribe();\n clearInterval(interval);\n };\n }, [serviceWorkerEnabled]);\n\n const handleToggleServiceWorker = async (enabled: boolean) => {\n // Immediately clear all state before updating setting to prevent error flashes\n if (!enabled) {\n setIsRegistered(false);\n setUpdateAvailable(false);\n setSwFileExists(true); // Set to true to hide error messages immediately\n setIsLoading(false);\n }\n\n updateSetting('serviceWorker', { enabled });\n\n if (!enabled) {\n // Already cleared above, just return\n return;\n }\n\n // Give it a moment to register/unregister\n setTimeout(async () => {\n // Double-check service worker is still enabled before updating state\n const currentEnabled = settings?.serviceWorker?.enabled ?? true;\n if (enabled && currentEnabled) {\n const registered = await isServiceWorkerRegistered();\n setIsRegistered(registered);\n }\n }, 1000);\n };\n\n const handleUpdateNow = async () => {\n try {\n await updateServiceWorker();\n // Don't show toast here - updateServiceWorker() will handle the reload\n // and the update process already provides feedback through the UI\n } catch (_error) {\n shellui.toast({\n title: t('caching.updateError.title'),\n description: t('caching.updateError.description'),\n type: 'error',\n });\n }\n };\n\n const handleResetToLatest = async () => {\n try {\n // Clear all caches and reload\n if ('caches' in window) {\n const cacheNames = await caches.keys();\n await Promise.all(cacheNames.map((name) => caches.delete(name)));\n }\n\n shellui.toast({\n title: t('caching.resetSuccess.title'),\n description: t('caching.resetSuccess.description'),\n type: 'success',\n });\n\n // Reload the app using shellUI refresh message (refreshes entire app, not just iframe)\n setTimeout(() => {\n const sent = shellui.sendMessageToParent({\n type: 'SHELLUI_REFRESH_PAGE',\n payload: {},\n });\n if (!sent) {\n // Fallback to window.location.reload if message can't be sent\n window.location.reload();\n }\n }, 1000);\n } catch (_error) {\n shellui.toast({\n title: t('caching.resetError.title'),\n description: t('caching.resetError.description'),\n type: 'error',\n });\n }\n };\n\n return (\n <div className=\"space-y-6\">\n {isLoading ? (\n <div className=\"text-sm text-muted-foreground\">{t('caching.loading')}</div>\n ) : null}\n\n {!isLoading && (\n <div className=\"space-y-6\">\n {/* Enable/Disable service worker */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('caching.enabled.title')}\n </label>\n <p className=\"text-sm text-muted-foreground\">\n {serviceWorkerEnabled\n ? t('caching.enabled.descriptionEnabled')\n : t('caching.enabled.descriptionDisabled')}\n </p>\n </div>\n <Switch\n checked={serviceWorkerEnabled}\n onCheckedChange={handleToggleServiceWorker}\n />\n </div>\n </div>\n\n {/* Status – always visible; shows Disabled when off */}\n <div className=\"space-y-2\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('caching.status.title')}\n </label>\n <div className=\"flex items-center gap-2 text-sm mt-2\">\n {!serviceWorkerEnabled ? (\n <span className=\"text-muted-foreground\">○ {t('caching.status.disabled')}</span>\n ) : !swFileExists ? (\n <span className=\"text-red-600 dark:text-red-400\">\n ✗ {t('caching.status.fileNotFound')}\n </span>\n ) : (\n <>\n <span\n className={\n isRegistered\n ? 'text-green-600 dark:text-green-400'\n : 'text-orange-600 dark:text-orange-400'\n }\n >\n {isRegistered ? '●' : '○'}{' '}\n {isRegistered ? t('caching.status.registered') : t('caching.status.notRunning')}\n </span>\n {updateAvailable && (\n <>\n <span className=\"text-muted-foreground/50\">|</span>\n <span className=\"text-blue-600 dark:text-blue-400\">\n ● {t('caching.status.updateAvailable')}\n </span>\n </>\n )}\n </>\n )}\n </div>\n </div>\n\n {serviceWorkerEnabled && (\n <>\n {/* Error Message when file missing */}\n {!swFileExists && (\n <div className=\"rounded-lg border border-red-200 dark:border-red-800 bg-red-50 dark:bg-red-950/30 p-4 space-y-3\">\n <div className=\"space-y-1\">\n <h3\n className=\"text-sm font-medium leading-none text-red-600 dark:text-red-400\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('caching.status.fileNotFound')}\n </h3>\n <p className=\"text-sm text-red-700 dark:text-red-300\">\n {t('caching.status.fileNotFoundDescription')}\n </p>\n </div>\n </div>\n )}\n\n {/* Update Available */}\n {updateAvailable && (\n <div className=\"space-y-2\">\n <div className=\"space-y-0.5\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('caching.update.title')}\n </label>\n <p className=\"text-sm text-muted-foreground\">\n {t('caching.update.description')}\n </p>\n </div>\n <div className=\"mt-2\">\n <Button\n variant=\"outline\"\n onClick={handleUpdateNow}\n className=\"w-full sm:w-auto\"\n >\n {t('caching.update.button')}\n </Button>\n </div>\n </div>\n )}\n\n {/* Reset Cache */}\n <div className=\"space-y-2\">\n <div className=\"space-y-0.5\">\n <label\n className=\"text-sm font-medium leading-none\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {t('caching.reset.title')}\n </label>\n <p className=\"text-sm text-muted-foreground\">{t('caching.reset.description')}</p>\n </div>\n <div className=\"mt-2\">\n <Button\n variant=\"outline\"\n onClick={handleResetToLatest}\n className=\"w-full sm:w-auto\"\n >\n {t('caching.reset.button')}\n </Button>\n </div>\n </div>\n </>\n )}\n </div>\n )}\n </div>\n );\n};\n","import {\n PaintbrushIcon,\n GlobeIcon,\n SettingsIcon,\n CodeIcon,\n ShieldIcon,\n PackageIcon,\n RefreshDoubleIcon,\n} from './SettingsIcons';\nimport { Appearance } from './components/Appearance';\nimport { LanguageAndRegion } from './components/LanguageAndRegion';\nimport { UpdateApp } from './components/UpdateApp';\nimport { Advanced } from './components/Advanced';\nimport { Develop } from './components/Develop';\nimport { DataPrivacy } from './components/DataPrivacy';\nimport { ServiceWorker } from './components/ServiceWorker';\nimport { isTauri } from '../../service-worker/register';\n\nexport const createSettingsRoutes = (t: (key: string) => string) => [\n {\n name: t('routes.appearance'),\n icon: PaintbrushIcon,\n path: 'appearance',\n element: <Appearance />,\n },\n {\n name: t('routes.languageAndRegion'),\n icon: GlobeIcon,\n path: 'language-and-region',\n element: <LanguageAndRegion />,\n },\n {\n name: t('routes.updateApp'),\n icon: RefreshDoubleIcon,\n path: 'update-app',\n element: <UpdateApp />,\n },\n {\n name: t('routes.advanced'),\n icon: SettingsIcon,\n path: 'advanced',\n element: <Advanced />,\n },\n {\n name: t('routes.dataPrivacy'),\n icon: ShieldIcon,\n path: 'data-privacy',\n element: <DataPrivacy />,\n },\n {\n name: t('routes.develop'),\n icon: CodeIcon,\n path: 'developpers',\n element: <Develop />,\n },\n ...(isTauri()\n ? []\n : [\n {\n name: t('routes.serviceWorker'),\n icon: PackageIcon,\n path: 'service-worker',\n element: <ServiceWorker />,\n },\n ]),\n];\n","import { useState, useEffect, useMemo, useCallback } from 'react';\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '@/components/ui/breadcrumb';\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '@/components/ui/sidebar';\nimport { Route, Routes, useLocation, useNavigate, Navigate } from 'react-router';\nimport { useTranslation } from 'react-i18next';\nimport urls from '@/constants/urls';\nimport { createSettingsRoutes } from './SettingsRoutes';\nimport { useSettings } from './hooks/useSettings';\nimport { useConfig } from '../config/useConfig';\nimport { isTauri } from '@/service-worker/register';\nimport { Button } from '@/components/ui/button';\nimport { ChevronRightIcon, ChevronLeftIcon } from './SettingsIcons';\n\nexport const SettingsView = () => {\n const location = useLocation();\n const navigate = useNavigate();\n const { settings } = useSettings();\n const { config } = useConfig();\n const { t } = useTranslation('settings');\n // Re-check isTauri after mount and after a short delay so we catch late-injected __TAURI__ in dev\n const [isTauriEnv, setIsTauriEnv] = useState(() => isTauri());\n\n useEffect(() => {\n setIsTauriEnv(isTauri());\n const tid = window.setTimeout(() => setIsTauriEnv(isTauri()), 200);\n return () => window.clearTimeout(tid);\n }, []);\n\n useEffect(() => {\n if (config?.title) {\n const settingsLabel = t('settings', { ns: 'common' });\n document.title = `${settingsLabel} | ${config.title}`;\n }\n }, [config?.title, t]);\n\n // Create routes with translations (service-worker route is already omitted in Tauri by createSettingsRoutes)\n const settingsRoutes = useMemo(() => createSettingsRoutes(t), [t]);\n\n // In Tauri, hide service worker route; use reactive isTauriEnv so we catch late injection (e.g. dev)\n const routesWithoutTauriSw = useMemo(() => {\n if (isTauriEnv) {\n return settingsRoutes.filter((route) => route.path !== 'service-worker');\n }\n return settingsRoutes;\n }, [settingsRoutes, isTauriEnv]);\n\n // Filter routes based on developer features setting\n const filteredRoutes = useMemo(() => {\n if (settings.developerFeatures.enabled) {\n return routesWithoutTauriSw;\n }\n return routesWithoutTauriSw.filter(\n (route) => route.path !== 'developpers' && route.path !== 'service-worker',\n );\n }, [settings.developerFeatures.enabled, routesWithoutTauriSw]);\n\n // Group routes by category\n const groupedRoutes = useMemo(() => {\n const developerOnlyPaths = ['developpers', 'service-worker'];\n const groups = [\n {\n title: t('categories.preferences'),\n routes: filteredRoutes.filter((route) =>\n ['appearance', 'language-and-region', 'data-privacy'].includes(route.path),\n ),\n },\n {\n title: t('categories.system'),\n routes: filteredRoutes.filter((route) => ['update-app', 'advanced'].includes(route.path)),\n },\n {\n title: t('categories.developer'),\n routes: filteredRoutes.filter((route) => developerOnlyPaths.includes(route.path)),\n },\n ];\n return groups.filter((group) => group.routes.length > 0);\n }, [filteredRoutes, t]);\n\n // Find matching nav item by checking if URL contains or ends with the item path\n const getSelectedItemFromUrl = useCallback(() => {\n const pathname = location.pathname;\n\n // Find matching nav item by checking if pathname contains the item path\n // This works regardless of the URL structure/prefix\n const matchedItem = filteredRoutes.find((item) => {\n // Normalize paths for comparison (remove leading/trailing slashes)\n const normalizedPathname = pathname.replace(/^\\/+|\\/+$/g, '');\n const normalizedItemPath = item.path.replace(/^\\/+|\\/+$/g, '');\n\n // Check if pathname ends with the item path, or contains it as a path segment\n return (\n normalizedPathname === normalizedItemPath ||\n normalizedPathname.endsWith(`/${normalizedItemPath}`) ||\n normalizedPathname.includes(`/${normalizedItemPath}/`)\n );\n });\n\n return matchedItem;\n }, [location.pathname, filteredRoutes]);\n\n const selectedItem = useMemo(() => getSelectedItemFromUrl(), [getSelectedItemFromUrl]);\n\n // Check if we're at the settings root (no specific route selected)\n const isSettingsRoot = useMemo(() => {\n const pathname = location.pathname;\n // Normalize the settings URL (remove leading/trailing slashes)\n const normalizedSettingsPath = urls.settings.replace(/^\\/+|\\/+$/g, '');\n // Normalize the current pathname (remove leading/trailing slashes)\n const normalizedPathname = pathname.replace(/^\\/+|\\/+$/g, '');\n\n // Check if we're exactly at the settings root\n // This handles both \"/__settings\" and \"/__settings/\" cases\n if (normalizedPathname === normalizedSettingsPath) {\n return true;\n }\n\n // If pathname starts with settings path followed by a slash, we're at a subpage\n // e.g., \"__settings/appearance\" means we're NOT at root\n const settingsPathWithSlash = `${normalizedSettingsPath}/`;\n if (normalizedPathname.startsWith(settingsPathWithSlash)) {\n return false;\n }\n\n // Pathname doesn't match settings path structure - not in settings\n return false;\n }, [location.pathname, filteredRoutes]);\n\n // Navigate back to settings root\n const handleBackToSettings = useCallback(() => {\n // Navigate to settings root, replacing current history entry\n navigate(urls.settings, { replace: true });\n }, [navigate]);\n\n return (\n <SidebarProvider>\n <div className=\"flex h-full w-full overflow-hidden items-start\">\n {/* Desktop Sidebar */}\n <Sidebar className=\"hidden md:flex\">\n <SidebarContent>\n {groupedRoutes.map((group) => (\n <SidebarGroup key={group.title}>\n <SidebarGroupLabel>{group.title}</SidebarGroupLabel>\n <SidebarGroupContent>\n <SidebarMenu>\n {group.routes.map((item) => (\n <SidebarMenuItem key={item.name}>\n <SidebarMenuButton\n asChild\n isActive={item.name === selectedItem?.name}\n >\n <button\n onClick={() => navigate(`${urls.settings}/${item.path}`)}\n className=\"cursor-pointer\"\n >\n <item.icon />\n <span>{item.name}</span>\n </button>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n ))}\n </SidebarContent>\n </Sidebar>\n\n {/* Mobile List View */}\n <div className=\"md:hidden flex h-full w-full flex-col overflow-hidden\">\n {isSettingsRoot ? (\n // Show list of settings pages\n <div className=\"flex flex-1 flex-col overflow-y-auto bg-background\">\n <header className=\"flex h-16 shrink-0 items-center justify-center px-4 border-b\">\n <h1 className=\"text-lg font-semibold\">{t('title')}</h1>\n </header>\n <div className=\"flex flex-1 flex-col p-4 gap-6\">\n {groupedRoutes.map((group) => (\n <div\n key={group.title}\n className=\"flex flex-col gap-2\"\n >\n <h2\n className=\"text-xs font-semibold text-foreground/60 uppercase tracking-wider px-2\"\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n >\n {group.title}\n </h2>\n <div className=\"flex flex-col bg-card rounded-lg overflow-hidden border border-border\">\n {group.routes.map((item, itemIndex) => {\n const Icon = item.icon;\n const isLast = itemIndex === group.routes.length - 1;\n return (\n <div\n key={item.name}\n className=\"relative\"\n >\n {!isLast && (\n <div className=\"absolute left-0 right-0 bottom-0 h-[1px] bg-border\" />\n )}\n <button\n onClick={() => navigate(`${urls.settings}/${item.path}`)}\n className=\"w-full flex items-center justify-between px-4 py-3 bg-transparent hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground transition-colors cursor-pointer rounded-none\"\n >\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\n <div className=\"flex-shrink-0 text-foreground/70\">\n <Icon />\n </div>\n <span className=\"text-sm font-normal text-foreground\">\n {item.name}\n </span>\n </div>\n <div className=\"flex-shrink-0 ml-2 text-foreground/40\">\n <ChevronRightIcon />\n </div>\n </button>\n </div>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n </div>\n ) : (\n // Show selected settings page with back button\n <div className=\"flex h-full flex-1 flex-col overflow-hidden\">\n <header className=\"flex h-16 shrink-0 items-center gap-2 px-4 border-b\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleBackToSettings}\n className=\"mr-2\"\n >\n <ChevronLeftIcon />\n </Button>\n <h1 className=\"text-lg font-semibold\">{selectedItem?.name}</h1>\n </header>\n <div className=\"flex flex-1 flex-col gap-4 overflow-y-auto p-4 pt-4\">\n <Routes>\n <Route\n index\n element={\n filteredRoutes.length > 0 ? (\n <Navigate\n to={`${urls.settings}/${filteredRoutes[0].path}`}\n replace\n />\n ) : null\n }\n />\n {filteredRoutes.map((item) => (\n <Route\n key={item.path}\n path={item.path}\n element={item.element}\n />\n ))}\n </Routes>\n </div>\n </div>\n )}\n </div>\n\n {/* Desktop Main Content */}\n <main className=\"hidden md:flex h-full flex-1 flex-col overflow-hidden\">\n {selectedItem && (\n <header className=\"flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear\">\n <div className=\"flex items-center gap-2 px-4\">\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>{t('title')}</BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>{selectedItem.name}</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n </header>\n )}\n <div className=\"flex flex-1 flex-col gap-4 overflow-y-auto p-4 pt-0\">\n <Routes>\n <Route\n index\n element={\n <div className=\"flex flex-1 flex-col items-center justify-center p-8 text-center\">\n <div className=\"max-w-md\">\n <h2 className=\"text-lg font-semibold mb-2\">{t('title')}</h2>\n <p className=\"text-sm text-muted-foreground\">\n {t('selectCategory', {\n defaultValue: 'Select a category from the sidebar to get started.',\n })}\n </p>\n </div>\n </div>\n }\n />\n {filteredRoutes.map((item) => (\n <Route\n key={item.path}\n path={item.path}\n element={item.element}\n />\n ))}\n </Routes>\n </div>\n </main>\n </div>\n </SidebarProvider>\n );\n};\n"],"names":["Breadcrumb","forwardRef","props","ref","jsx","BreadcrumbList","className","cn","BreadcrumbItem","BreadcrumbLink","asChild","Slot","BreadcrumbPage","BreadcrumbSeparator","children","PaintbrushIcon","GlobeIcon","jsxs","CheckIcon","SettingsIcon","CodeIcon","ChevronRightIcon","ChevronLeftIcon","ShieldIcon","RefreshDoubleIcon","PackageIcon","ButtonGroup","Children","child","index","isValidElement","isFirst","isLast","cloneElement","SunIcon","MoonIcon","MonitorIcon","ThemePreview","theme","isSelected","isDark","colors","Appearance","useTranslation","settings","updateSetting","useSettings","config","useConfig","currentTheme","currentThemeName","availableThemes","setAvailableThemes","useState","useEffect","themeDef","registerTheme","getAllThemes","isDarkForPreview","setIsDarkForPreview","updatePreview","mediaQuery","handleChange","modeThemes","Icon","Button","Select","ClockIcon","TIMEZONE_GROUPS","formatDate","date","timezone","lang","formatTime","getBrowserTimezone","getTimezoneDisplayName","timeZoneName","part","LanguageAndRegion","currentLanguage","browserTimezone","currentTimezone","isUsingBrowserTimezone","supportedLanguages","getSupportedLanguages","handleResetRegion","currentDateTime","setCurrentDateTime","now","updateDateTime","interval","e","group","tz","isBrowserTimezone","logger","getLogger","UpdateApp","updateAvailable","setUpdateAvailable","checking","setChecking","showUpToDateInButton","setShowUpToDateInButton","checkError","setCheckError","serviceWorkerEnabled","isTauri","status","getServiceWorkerStatus","addStatusListener","handleCheckForUpdate","checkForServiceWorkerUpdate","resolve","error","version","Fragment","updateServiceWorker","shellui","Advanced","resetAllData","errorReportingConfigured","handleErrorReportingChange","checked","initSentry","closeSentry","handleResetClick","Switch","ToastTestButtons","toastId","DialogTestButtons","ModalTestButtons","urls","DrawerTestButtons","openDrawer","options","Develop","effectiveLayout","navItems","flattenNavigationItems","item","self","i","path","resolveLocalizedString","layoutMode","DataPrivacy","cookies","hasCookieConsent","hasConsented","acceptedHosts","allHosts","c","strictNecessaryHosts","acceptedAll","h","rejectedAll","isCustom","handleResetCookieConsent","ServiceWorker","isRegistered","setIsRegistered","isLoading","setIsLoading","swFileExists","setSwFileExists","initialCheck","exists","serviceWorkerFileExists","refreshStatus","unsubscribe","handleToggleServiceWorker","enabled","currentEnabled","registered","isServiceWorkerRegistered","handleUpdateNow","handleResetToLatest","cacheNames","name","createSettingsRoutes","SettingsView","location","useLocation","navigate","useNavigate","t","isTauriEnv","setIsTauriEnv","tid","settingsLabel","settingsRoutes","useMemo","routesWithoutTauriSw","route","filteredRoutes","groupedRoutes","developerOnlyPaths","getSelectedItemFromUrl","useCallback","pathname","normalizedPathname","normalizedItemPath","selectedItem","isSettingsRoot","normalizedSettingsPath","settingsPathWithSlash","handleBackToSettings","SidebarProvider","Sidebar","SidebarContent","SidebarGroup","SidebarGroupLabel","SidebarGroupContent","SidebarMenu","SidebarMenuItem","SidebarMenuButton","itemIndex","Routes","Route","Navigate"],"mappings":"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"}
|