@owp/core 2.5.5 → 2.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/configs/theme.d.ts +3 -0
  2. package/configs/theme.js +1 -0
  3. package/dist/_virtual/index10.js +2 -2
  4. package/dist/_virtual/index12.js +2 -2
  5. package/dist/_virtual/index13.js +2 -2
  6. package/dist/_virtual/index14.js +2 -2
  7. package/dist/_virtual/index15.js +2 -2
  8. package/dist/_virtual/index5.js +2 -2
  9. package/dist/configs/defaultConfig.js +1 -1
  10. package/dist/configs/theme.js +28 -0
  11. package/dist/configs/theme.js.map +1 -0
  12. package/dist/features/themePreview/components/ThemePreviewColorField.js +279 -208
  13. package/dist/features/themePreview/components/ThemePreviewColorField.js.map +1 -1
  14. package/dist/features/themePreview/configs/presets.js +6 -38
  15. package/dist/features/themePreview/configs/presets.js.map +1 -1
  16. package/dist/features/themePreview/configs/previewStorage.js +28 -27
  17. package/dist/features/themePreview/configs/previewStorage.js.map +1 -1
  18. package/dist/features/themePreview/dialogs/ThemePreviewDialog.js +166 -154
  19. package/dist/features/themePreview/dialogs/ThemePreviewDialog.js.map +1 -1
  20. package/dist/features/themePreview/hooks/useThemePreview.js +202 -157
  21. package/dist/features/themePreview/hooks/useThemePreview.js.map +1 -1
  22. package/dist/features/themePreview/utils/themePreviewExport.js +276 -67
  23. package/dist/features/themePreview/utils/themePreviewExport.js.map +1 -1
  24. package/dist/features/themePreview.js +52 -52
  25. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/constants.js +1 -1
  26. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/index.js +1 -1
  27. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE39/index.js +1 -1
  28. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/constants.js +1 -1
  29. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/index.js +1 -1
  30. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/index.js +1 -1
  31. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/GenericBarcode/index.js +1 -1
  32. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/constants.js +1 -1
  33. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/index.js +1 -1
  34. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/MSI/index.js +1 -1
  35. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/codabar/index.js +1 -1
  36. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/pharmacode/index.js +1 -1
  37. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/renderers/index.js +1 -1
  38. package/dist/node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js +1 -1
  39. package/dist/owp-app.css +1 -1
  40. package/dist/types/configs/theme/index.d.ts +6 -0
  41. package/dist/types/features/themePreview/configs/index.d.ts +1 -1
  42. package/dist/types/features/themePreview/configs/presets.d.ts +0 -1
  43. package/dist/types/features/themePreview/configs/previewStorage.d.ts +1 -0
  44. package/dist/types/features/themePreview/hooks/useThemePreview.d.ts +2 -1
  45. package/dist/types/features/themePreview/utils/index.d.ts +1 -1
  46. package/dist/types/features/themePreview/utils/themePreviewExport.d.ts +38 -1083
  47. package/dist/types/utils/zipUtil.d.ts +1 -0
  48. package/dist/utils/zipUtil.js +38 -36
  49. package/dist/utils/zipUtil.js.map +1 -1
  50. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ThemePreviewDialog.js","sources":["../../../../src/features/themePreview/dialogs/ThemePreviewDialog.tsx"],"sourcesContent":["import { OwpDialog } from '@/components/OwpDialog';\nimport {\n defaultSnackbarTheme,\n type SnackbarTheme,\n} from '@/features/themePreview/configs/snackbar';\nimport themesConfig from '@/features/themePreview/configs/presets';\nimport { defaultSettingsConfig } from '@/features/themePreview/configs/settings';\nimport { useConfirm } from '@/hooks/useConfirm';\nimport { readZipEntryJson, saveAsZipFile } from '@/utils';\nimport DownloadOutlinedIcon from '@mui/icons-material/DownloadOutlined';\nimport RestoreOutlinedIcon from '@mui/icons-material/RestoreOutlined';\nimport SaveOutlinedIcon from '@mui/icons-material/SaveOutlined';\nimport UploadFileOutlinedIcon from '@mui/icons-material/UploadFileOutlined';\nimport { Button, TextField, Typography } from '@mui/material';\nimport { useDialogs, type DialogComponent, type DialogProps } from '@toolpad/core/useDialogs';\nimport { enqueueSnackbar } from 'notistack';\nimport { ChangeEvent, useEffect, useRef, useState } from 'react';\nimport { ThemePreviewCanvas, ThemePreviewControls } from '../components';\nimport { useThemePreview } from '../hooks';\nimport type {\n ThemePreviewDialogPayload,\n ThemePreviewPresetThemes,\n ThemePreviewSectionKey,\n} from '../types';\nimport { createThemePreviewExportData, resetThemePreviewSessionState } from '../utils';\n\nconst themePreviewPresetThemes = themesConfig as ThemePreviewPresetThemes;\nconst themePreviewArchiveAccept = '.owp,.zip,application/zip';\nconst THEME_PREVIEW_AUTO_SAVE_INTERVAL_MS = 5 * 60 * 1000;\nconst THEME_PREVIEW_AUTO_SAVE_IDLE_WAIT_MS = 2 * 1000;\nconst THEME_PREVIEW_AUTO_SAVE_RETRY_MS = 15 * 1000;\n\ntype ThemePreviewSettingsArchive = {\n defaultSettingsConfig?: {\n theme?: typeof defaultSettingsConfig.theme;\n };\n defaultSnackbarTheme?: SnackbarTheme;\n};\ntype ThemePreviewSaveDialogPayload = {\n initialFileName: string;\n};\n\nfunction createThemePreviewArchiveFiles(\n exportData: ReturnType<typeof createThemePreviewExportData>,\n) {\n return Object.entries(exportData).map(([fileName, fileData]) => ({\n fileName,\n blob: new Blob([JSON.stringify(fileData, null, 2)], {\n type: 'application/json',\n }),\n }));\n}\n\nfunction getThemePreviewConfigFileTitle(value: string) {\n const sanitizedValue = value\n .trim()\n .replace(/[^0-9A-Za-z가-힣 _-]+/g, '')\n .replace(/\\s+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^[-_]+|[-_]+$/g, '');\n\n return sanitizedValue ? `theme-preview-config-${sanitizedValue}` : 'theme-preview-config';\n}\n\nconst themePreviewActionButtonSx = {\n '&.MuiButton-root': {\n fontSize: '1.3rem',\n letterSpacing: '0.04rem',\n },\n '&.MuiButton-sizeSmall': {\n fontSize: '1.3rem',\n letterSpacing: '0.04rem',\n minHeight: 42,\n px: 2.25,\n },\n '& .MuiButton-startIcon': {\n mr: 0.75,\n },\n fontWeight: 800,\n lineHeight: 1.2,\n minHeight: 42,\n px: 2.25,\n whiteSpace: 'nowrap',\n} as const;\nconst themePreviewFixedContainedActionSx = {\n '&.Mui-disabled': {\n backgroundColor: '#e5e7eb',\n borderColor: '#e5e7eb',\n color: '#a1a1aa',\n },\n '&:hover': {\n backgroundColor: '#1696d5',\n borderColor: '#1696d5',\n },\n backgroundColor: '#1ea3e6',\n border: '1px solid #1ea3e6',\n color: '#ffffff',\n} as const;\nconst themePreviewFixedOutlinedActionSx = {\n '&.Mui-disabled': {\n backgroundColor: '#ffffff',\n borderColor: '#d1d5db',\n color: '#9ca3af',\n },\n '&:hover': {\n backgroundColor: '#f8fafc',\n borderColor: '#111827',\n },\n backgroundColor: '#ffffff',\n border: '1px solid #111827',\n color: '#111827',\n} as const;\nconst themePreviewDialogTitleColor = '#111827';\n\nconst ThemePreviewSaveDialog: DialogComponent<\n ThemePreviewSaveDialogPayload,\n string | undefined\n> = ({\n open,\n payload,\n onClose,\n}: DialogProps<ThemePreviewSaveDialogPayload, string | undefined>) => {\n const [fileName, setFileName] = useState(payload?.initialFileName ?? '');\n\n return (\n <OwpDialog\n title=\"설정파일 저장\"\n open={open}\n maxWidth=\"xs\"\n onClose={() => onClose(undefined)}\n onConfirm={() => onClose(fileName)}\n contentProps={{\n sx: {\n minWidth: 360,\n p: 3,\n },\n }}\n >\n <div className=\"flex flex-col gap-12\">\n <TextField\n label=\"저장 이름\"\n value={fileName}\n placeholder=\"저장 이름 입력\"\n onChange={(event) => {\n setFileName(event.target.value);\n }}\n />\n <Typography variant=\"body2\" color=\"text.secondary\">\n 저장 확장자는 `.owp`로 고정됩니다.\n </Typography>\n </div>\n </OwpDialog>\n );\n};\n\nexport const ThemePreviewDialog: DialogComponent<ThemePreviewDialogPayload, undefined> = ({\n open,\n payload,\n onClose,\n}: DialogProps<ThemePreviewDialogPayload, undefined>) => {\n const [configFileName, setConfigFileName] = useState('');\n const [isPreviewCanvasLoading, setIsPreviewCanvasLoading] = useState(false);\n const previewDialogContentRef = useRef<HTMLDivElement | null>(null);\n const zipFileInputRef = useRef<HTMLInputElement | null>(null);\n const autoSaveTimeoutRef = useRef<number | null>(null);\n const isPointerDownRef = useRef(false);\n const lastUserInteractionAtRef = useRef(Date.now());\n const hasTemporaryChangesRef = useRef(false);\n const handleTemporarySaveRef = useRef<(saveType?: 'auto' | 'manual') => void>(() => undefined);\n const previewCanvasTransitionFrameRef = useRef<number | null>(null);\n const dialogs = useDialogs();\n const { confirmSave } = useConfirm();\n const {\n activeSection,\n canApplyToMain,\n draftSettings,\n hasTemporaryChanges,\n hasTemporarySnapshot,\n presetOptions,\n selectedModes,\n selectedPresetKeys,\n setActiveSection,\n handlePaletteValueChange,\n handlePaletteValuesChange,\n handleApplyToMain,\n handleLoadSettings,\n handlePresetKeyChange,\n handlePresetModeChange,\n handleReset,\n handleTemporaryLoad,\n handleTemporarySave,\n } = useThemePreview({\n initialSection: payload?.initialSection,\n initialPresetKeys: {\n main: 'light1',\n navbar: 'light2',\n toolbar: 'surfaceDark',\n },\n presetThemes: themePreviewPresetThemes,\n resetTheme: defaultSettingsConfig.theme,\n });\n const isPresetThemeSection =\n activeSection === 'main' || activeSection === 'navbar' || activeSection === 'toolbar';\n const resolvedSelectedMode = isPresetThemeSection ? selectedModes[activeSection] : 'light';\n const resolvedSelectedPresetKey = isPresetThemeSection ? selectedPresetKeys[activeSection] : '';\n\n const handleThemePreviewInteraction = () => {\n lastUserInteractionAtRef.current = Date.now();\n };\n\n const handleSaveConfigFiles = async (fileName: string) => {\n const exportData = createThemePreviewExportData(draftSettings);\n\n await saveAsZipFile(createThemePreviewArchiveFiles(exportData), {\n type: 'application/json',\n fileExtension: 'json',\n fileTitle: getThemePreviewConfigFileTitle(fileName),\n archiveExtension: 'owp',\n });\n };\n\n const handleOpenSaveDialog = async () => {\n const nextFileName = await dialogs.open(ThemePreviewSaveDialog, {\n initialFileName: configFileName,\n });\n\n if (nextFileName === undefined) {\n return;\n }\n\n setConfigFileName(nextFileName);\n await handleSaveConfigFiles(nextFileName);\n };\n\n const handleOpenZipFile = () => {\n zipFileInputRef.current?.click();\n };\n\n const handleManualTemporarySave = () => {\n handleTemporarySave('manual');\n enqueueSnackbar('임시 저장을 완료했습니다.', {\n variant: 'success',\n });\n };\n\n const handleManualTemporaryLoad = () => {\n if (!handleTemporaryLoad()) {\n enqueueSnackbar('불러올 임시 저장 데이터가 없습니다.', {\n variant: 'warning',\n });\n return;\n }\n\n enqueueSnackbar('임시 저장 데이터를 불러왔습니다.', {\n variant: 'success',\n });\n };\n\n const handleDialogClose = async () => {\n if (hasTemporaryChanges) {\n const isConfirmed = await confirmSave({\n title: '변경된 값을 저장하겠습니까?',\n });\n\n if (isConfirmed) {\n handleTemporarySave('manual');\n enqueueSnackbar('임시 저장되었습니다. 다시 실행하면 저장된 데이터를 불러옵니다.', {\n variant: 'info',\n });\n } else {\n resetThemePreviewSessionState();\n }\n }\n\n onClose(undefined);\n };\n\n const handleZipFileChange = async (event: ChangeEvent<HTMLInputElement>) => {\n const selectedFile = event.target.files?.[0];\n\n if (!selectedFile) {\n return;\n }\n\n try {\n const parsedSettings = await readZipEntryJson<ThemePreviewSettingsArchive>(\n selectedFile,\n (fileName) => fileName.endsWith('settings.json'),\n );\n\n if (!parsedSettings) {\n enqueueSnackbar('settings.json 파일이 없습니다.', {\n variant: 'warning',\n });\n return;\n }\n\n const nextTheme = parsedSettings.defaultSettingsConfig?.theme;\n const nextSnackbarTheme = parsedSettings.defaultSnackbarTheme ?? defaultSnackbarTheme;\n\n if (!nextTheme) {\n enqueueSnackbar('theme 설정을 읽지 못했습니다.', {\n variant: 'warning',\n });\n return;\n }\n\n handleLoadSettings(nextTheme, nextSnackbarTheme);\n enqueueSnackbar('설정 파일을 로드하고 메인 화면에 적용했습니다.', {\n variant: 'success',\n });\n } catch {\n enqueueSnackbar('설정 파일을 불러오는 중 오류가 발생했습니다.', {\n variant: 'error',\n });\n } finally {\n event.target.value = '';\n }\n };\n\n const handleSectionChange = (sectionKey: ThemePreviewSectionKey) => {\n if (sectionKey === activeSection) {\n return;\n }\n\n if (previewCanvasTransitionFrameRef.current) {\n cancelAnimationFrame(previewCanvasTransitionFrameRef.current);\n previewCanvasTransitionFrameRef.current = null;\n }\n\n setIsPreviewCanvasLoading(true);\n\n previewCanvasTransitionFrameRef.current = requestAnimationFrame(() => {\n setActiveSection(sectionKey);\n\n previewCanvasTransitionFrameRef.current = requestAnimationFrame(() => {\n setIsPreviewCanvasLoading(false);\n previewCanvasTransitionFrameRef.current = null;\n });\n });\n };\n\n useEffect(() => {\n handleTemporarySaveRef.current = handleTemporarySave;\n }, [handleTemporarySave]);\n\n useEffect(() => {\n hasTemporaryChangesRef.current = hasTemporaryChanges;\n }, [hasTemporaryChanges]);\n\n useEffect(() => {\n const previewContentElement = previewDialogContentRef.current;\n\n if (!previewContentElement) {\n return;\n }\n\n const handlePointerDown = () => {\n isPointerDownRef.current = true;\n handleThemePreviewInteraction();\n };\n const handlePointerUp = () => {\n isPointerDownRef.current = false;\n handleThemePreviewInteraction();\n };\n\n previewContentElement.addEventListener('pointerdown', handlePointerDown);\n previewContentElement.addEventListener('pointerup', handlePointerUp);\n previewContentElement.addEventListener('pointercancel', handlePointerUp);\n previewContentElement.addEventListener('keydown', handleThemePreviewInteraction);\n previewContentElement.addEventListener('input', handleThemePreviewInteraction);\n previewContentElement.addEventListener('change', handleThemePreviewInteraction);\n previewContentElement.addEventListener('focusin', handleThemePreviewInteraction);\n\n return () => {\n previewContentElement.removeEventListener('pointerdown', handlePointerDown);\n previewContentElement.removeEventListener('pointerup', handlePointerUp);\n previewContentElement.removeEventListener('pointercancel', handlePointerUp);\n previewContentElement.removeEventListener('keydown', handleThemePreviewInteraction);\n previewContentElement.removeEventListener('input', handleThemePreviewInteraction);\n previewContentElement.removeEventListener('change', handleThemePreviewInteraction);\n previewContentElement.removeEventListener('focusin', handleThemePreviewInteraction);\n };\n }, []);\n\n useEffect(() => {\n const clearAutoSaveTimeout = () => {\n if (!autoSaveTimeoutRef.current) {\n return;\n }\n\n window.clearTimeout(autoSaveTimeoutRef.current);\n autoSaveTimeoutRef.current = null;\n };\n const scheduleAutoSave = (delay: number) => {\n clearAutoSaveTimeout();\n autoSaveTimeoutRef.current = window.setTimeout(() => {\n const isUserInteracting =\n isPointerDownRef.current ||\n Date.now() - lastUserInteractionAtRef.current < THEME_PREVIEW_AUTO_SAVE_IDLE_WAIT_MS;\n\n if (document.hidden || isUserInteracting) {\n scheduleAutoSave(THEME_PREVIEW_AUTO_SAVE_RETRY_MS);\n return;\n }\n\n handleTemporarySaveRef.current('auto');\n scheduleAutoSave(THEME_PREVIEW_AUTO_SAVE_INTERVAL_MS);\n }, delay);\n };\n\n scheduleAutoSave(THEME_PREVIEW_AUTO_SAVE_INTERVAL_MS);\n\n return () => {\n clearAutoSaveTimeout();\n };\n }, []);\n\n useEffect(() => {\n const handlePageExit = () => {\n if (!hasTemporaryChangesRef.current) {\n return;\n }\n\n handleTemporarySaveRef.current('manual');\n };\n\n window.addEventListener('pagehide', handlePageExit);\n window.addEventListener('beforeunload', handlePageExit);\n\n return () => {\n window.removeEventListener('pagehide', handlePageExit);\n window.removeEventListener('beforeunload', handlePageExit);\n };\n }, []);\n\n useEffect(() => {\n return () => {\n if (!previewCanvasTransitionFrameRef.current) {\n return;\n }\n\n cancelAnimationFrame(previewCanvasTransitionFrameRef.current);\n };\n }, []);\n\n return (\n <OwpDialog\n title={\n <div className=\"flex w-full flex-wrap items-center justify-between gap-12\">\n <Typography variant=\"h6\" fontWeight={700} sx={{ color: themePreviewDialogTitleColor }}>\n OWP Theme Preview\n </Typography>\n <div className=\"flex flex-wrap items-center gap-8\">\n <Button\n size=\"small\"\n variant=\"outlined\"\n sx={{\n ...themePreviewActionButtonSx,\n ...themePreviewFixedOutlinedActionSx,\n }}\n onClick={handleReset}\n >\n 초기 상태로 초기화\n </Button>\n <Button\n size=\"small\"\n variant=\"contained\"\n disabled={!canApplyToMain}\n sx={{\n ...themePreviewActionButtonSx,\n ...themePreviewFixedContainedActionSx,\n }}\n onClick={handleApplyToMain}\n >\n 메인에 적용해보기\n </Button>\n </div>\n </div>\n }\n open={open}\n maxWidth=\"xl\"\n canConfirm={false}\n onClose={handleDialogClose}\n actions={\n <div className=\"grid min-w-0 flex-1 grid-cols-[1fr_auto_1fr] items-center gap-y-8\">\n <div className=\"flex flex-wrap items-center justify-start gap-8\">\n <Button\n variant=\"contained\"\n startIcon={<SaveOutlinedIcon />}\n sx={{\n ...themePreviewActionButtonSx,\n ...themePreviewFixedContainedActionSx,\n }}\n onClick={handleManualTemporarySave}\n >\n 임시 저장하기\n </Button>\n <Button\n variant=\"outlined\"\n startIcon={<RestoreOutlinedIcon />}\n disabled={!hasTemporarySnapshot}\n sx={{\n ...themePreviewActionButtonSx,\n ...themePreviewFixedOutlinedActionSx,\n }}\n onClick={handleManualTemporaryLoad}\n >\n 임시 저장 불러오기\n </Button>\n </div>\n <div className=\"flex flex-wrap items-center justify-center gap-8\">\n <Button\n variant=\"contained\"\n startIcon={<DownloadOutlinedIcon />}\n sx={{\n ...themePreviewActionButtonSx,\n ...themePreviewFixedContainedActionSx,\n }}\n onClick={handleOpenSaveDialog}\n >\n 설정파일 저장하기\n </Button>\n <Button\n variant=\"outlined\"\n startIcon={<UploadFileOutlinedIcon />}\n sx={{\n ...themePreviewActionButtonSx,\n ...themePreviewFixedOutlinedActionSx,\n }}\n onClick={handleOpenZipFile}\n >\n 설정파일 불러오기\n </Button>\n </div>\n <div />\n </div>\n }\n slotProps={{\n paper: {\n sx: {\n width: 'min(1680px, calc(100vw - 48px))',\n maxWidth: 'none',\n height: 'calc(100vh - 48px)',\n m: 3,\n },\n },\n }}\n contentProps={{\n sx: {\n height: '100%',\n p: 3,\n },\n }}\n >\n <div ref={previewDialogContentRef} className=\"flex h-full min-h-0 flex-col gap-12\">\n <input\n ref={zipFileInputRef}\n type=\"file\"\n accept={themePreviewArchiveAccept}\n className=\"hidden\"\n onChange={handleZipFileChange}\n />\n <div className=\"grid min-h-0 flex-1 gap-20 xl:grid-cols-[420px_minmax(0,1fr)]\">\n <ThemePreviewControls\n activeSection={activeSection}\n presetOptions={presetOptions}\n selectedMode={resolvedSelectedMode}\n selectedPresetKey={resolvedSelectedPresetKey}\n settings={draftSettings}\n onSectionChange={handleSectionChange}\n onPaletteValueChange={handlePaletteValueChange}\n onPaletteValuesChange={handlePaletteValuesChange}\n onPresetKeyChange={handlePresetKeyChange}\n onPresetModeChange={handlePresetModeChange}\n />\n <ThemePreviewCanvas\n activeSection={activeSection}\n isLoading={isPreviewCanvasLoading}\n settings={draftSettings}\n />\n </div>\n </div>\n </OwpDialog>\n );\n};\n"],"names":["themePreviewPresetThemes","themesConfig","themePreviewArchiveAccept","THEME_PREVIEW_AUTO_SAVE_INTERVAL_MS","THEME_PREVIEW_AUTO_SAVE_IDLE_WAIT_MS","THEME_PREVIEW_AUTO_SAVE_RETRY_MS","createThemePreviewArchiveFiles","exportData","fileName","fileData","__name","getThemePreviewConfigFileTitle","value","sanitizedValue","themePreviewActionButtonSx","themePreviewFixedContainedActionSx","themePreviewFixedOutlinedActionSx","themePreviewDialogTitleColor","ThemePreviewSaveDialog","open","payload","onClose","setFileName","useState","jsx","OwpDialog","jsxs","TextField","event","Typography","ThemePreviewDialog","configFileName","setConfigFileName","isPreviewCanvasLoading","setIsPreviewCanvasLoading","previewDialogContentRef","useRef","zipFileInputRef","autoSaveTimeoutRef","isPointerDownRef","lastUserInteractionAtRef","hasTemporaryChangesRef","handleTemporarySaveRef","previewCanvasTransitionFrameRef","dialogs","useDialogs","confirmSave","useConfirm","activeSection","canApplyToMain","draftSettings","hasTemporaryChanges","hasTemporarySnapshot","presetOptions","selectedModes","selectedPresetKeys","setActiveSection","handlePaletteValueChange","handlePaletteValuesChange","handleApplyToMain","handleLoadSettings","handlePresetKeyChange","handlePresetModeChange","handleReset","handleTemporaryLoad","handleTemporarySave","useThemePreview","defaultSettingsConfig","isPresetThemeSection","resolvedSelectedMode","resolvedSelectedPresetKey","handleThemePreviewInteraction","handleSaveConfigFiles","createThemePreviewExportData","saveAsZipFile","handleOpenSaveDialog","nextFileName","handleOpenZipFile","_a","handleManualTemporarySave","enqueueSnackbar","handleManualTemporaryLoad","handleDialogClose","resetThemePreviewSessionState","handleZipFileChange","selectedFile","parsedSettings","readZipEntryJson","nextTheme","_b","nextSnackbarTheme","defaultSnackbarTheme","handleSectionChange","sectionKey","useEffect","previewContentElement","handlePointerDown","handlePointerUp","clearAutoSaveTimeout","scheduleAutoSave","delay","isUserInteracting","handlePageExit","Button","SaveOutlinedIcon","RestoreOutlinedIcon","DownloadOutlinedIcon","UploadFileOutlinedIcon","ThemePreviewControls","ThemePreviewCanvas"],"mappings":"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"}
1
+ {"version":3,"file":"ThemePreviewDialog.js","sources":["../../../../src/features/themePreview/dialogs/ThemePreviewDialog.tsx"],"sourcesContent":["import { OwpDialog } from '@/components/OwpDialog';\nimport {\n defaultSnackbarTheme,\n type SnackbarProviderTheme,\n type SnackbarTheme,\n} from '@/features/themePreview/configs/snackbar';\nimport themesConfig from '@/features/themePreview/configs/presets';\nimport { defaultSettingsConfig } from '@/features/themePreview/configs/settings';\nimport { useConfirm } from '@/hooks/useConfirm';\nimport { readZipEntryJson, saveAsZipFile } from '@/utils';\nimport DownloadOutlinedIcon from '@mui/icons-material/DownloadOutlined';\nimport RestoreOutlinedIcon from '@mui/icons-material/RestoreOutlined';\nimport SaveOutlinedIcon from '@mui/icons-material/SaveOutlined';\nimport UploadFileOutlinedIcon from '@mui/icons-material/UploadFileOutlined';\nimport { Button, TextField, Typography } from '@mui/material';\nimport { useDialogs, type DialogComponent, type DialogProps } from '@toolpad/core/useDialogs';\nimport { enqueueSnackbar } from 'notistack';\nimport { ChangeEvent, useEffect, useRef, useState } from 'react';\nimport { ThemePreviewCanvas, ThemePreviewControls } from '../components';\nimport { useThemePreview } from '../hooks';\nimport type {\n ThemePreviewDialogPayload,\n ThemePreviewPresetThemes,\n ThemePreviewSectionKey,\n} from '../types';\nimport {\n createThemePreviewAppConfigFiles,\n createThemePreviewExportData,\n resetThemePreviewSessionState,\n} from '../utils';\n\nconst themePreviewPresetThemes = themesConfig as ThemePreviewPresetThemes;\nconst themePreviewArchiveAccept = '.owp,.zip,application/zip';\nconst THEME_PREVIEW_AUTO_SAVE_INTERVAL_MS = 5 * 60 * 1000;\nconst THEME_PREVIEW_AUTO_SAVE_IDLE_WAIT_MS = 2 * 1000;\nconst THEME_PREVIEW_AUTO_SAVE_RETRY_MS = 15 * 1000;\n\ntype ThemePreviewSettingsArchive = {\n defaultSettingsConfig?: {\n snackbarProviderProps?: SnackbarProviderTheme;\n theme?: typeof defaultSettingsConfig.theme;\n };\n defaultSnackbarProviderProps?: SnackbarProviderTheme;\n defaultSnackbarTheme?: SnackbarTheme;\n};\ntype ThemePreviewSaveDialogPayload = {\n initialFileName: string;\n};\n\nfunction createThemePreviewArchiveFiles(draftSettings: Parameters<typeof createThemePreviewExportData>[0]) {\n const exportData = createThemePreviewExportData(draftSettings);\n const appConfigFiles = createThemePreviewAppConfigFiles(draftSettings);\n\n return [\n ...appConfigFiles.map(({ fileName, content }) => ({\n fileName,\n blob: new Blob([content], {\n type: 'text/plain;charset=utf-8',\n }),\n })),\n ...Object.entries(exportData).map(([fileName, fileData]) => ({\n fileName: `preview/${fileName}.json`,\n blob: new Blob([JSON.stringify(fileData, null, 2)], {\n type: 'application/json',\n }),\n })),\n ];\n}\n\nfunction getThemePreviewArchiveProviderProps(\n archiveSettings: ThemePreviewSettingsArchive | null,\n) {\n return (\n archiveSettings?.defaultSnackbarProviderProps ??\n archiveSettings?.defaultSettingsConfig?.snackbarProviderProps\n );\n}\n\nfunction getThemePreviewConfigFileTitle(value: string) {\n const sanitizedValue = value\n .trim()\n .replace(/[^0-9A-Za-z가-힣 _-]+/g, '')\n .replace(/\\s+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^[-_]+|[-_]+$/g, '');\n\n return sanitizedValue ? `theme-preview-config-${sanitizedValue}` : 'theme-preview-config';\n}\n\nconst themePreviewActionButtonSx = {\n '&.MuiButton-root': {\n fontSize: '1.3rem',\n letterSpacing: '0.04rem',\n },\n '&.MuiButton-sizeSmall': {\n fontSize: '1.3rem',\n letterSpacing: '0.04rem',\n minHeight: 42,\n px: 2.25,\n },\n '& .MuiButton-startIcon': {\n mr: 0.75,\n },\n fontWeight: 800,\n lineHeight: 1.2,\n minHeight: 42,\n px: 2.25,\n whiteSpace: 'nowrap',\n} as const;\nconst themePreviewFixedContainedActionSx = {\n '&.Mui-disabled': {\n backgroundColor: '#e5e7eb',\n borderColor: '#e5e7eb',\n color: '#a1a1aa',\n },\n '&:hover': {\n backgroundColor: '#1696d5',\n borderColor: '#1696d5',\n },\n backgroundColor: '#1ea3e6',\n border: '1px solid #1ea3e6',\n color: '#ffffff',\n} as const;\nconst themePreviewFixedOutlinedActionSx = {\n '&.Mui-disabled': {\n backgroundColor: '#ffffff',\n borderColor: '#d1d5db',\n color: '#9ca3af',\n },\n '&:hover': {\n backgroundColor: '#f8fafc',\n borderColor: '#111827',\n },\n backgroundColor: '#ffffff',\n border: '1px solid #111827',\n color: '#111827',\n} as const;\nconst themePreviewDialogTitleColor = '#111827';\n\nconst ThemePreviewSaveDialog: DialogComponent<\n ThemePreviewSaveDialogPayload,\n string | undefined\n> = ({\n open,\n payload,\n onClose,\n}: DialogProps<ThemePreviewSaveDialogPayload, string | undefined>) => {\n const [fileName, setFileName] = useState(payload?.initialFileName ?? '');\n\n return (\n <OwpDialog\n title=\"설정파일 저장\"\n open={open}\n maxWidth=\"xs\"\n onClose={() => onClose(undefined)}\n onConfirm={() => onClose(fileName)}\n contentProps={{\n sx: {\n minWidth: 360,\n p: 3,\n },\n }}\n >\n <div className=\"flex flex-col gap-12\">\n <TextField\n label=\"저장 이름\"\n value={fileName}\n placeholder=\"저장 이름 입력\"\n onChange={(event) => {\n setFileName(event.target.value);\n }}\n />\n <Typography variant=\"body2\" color=\"text.secondary\">\n 저장 확장자는 `.owp`로 고정됩니다.\n </Typography>\n </div>\n </OwpDialog>\n );\n};\n\nexport const ThemePreviewDialog: DialogComponent<ThemePreviewDialogPayload, undefined> = ({\n open,\n payload,\n onClose,\n}: DialogProps<ThemePreviewDialogPayload, undefined>) => {\n const [configFileName, setConfigFileName] = useState('');\n const [isPreviewCanvasLoading, setIsPreviewCanvasLoading] = useState(false);\n const previewDialogContentRef = useRef<HTMLDivElement | null>(null);\n const zipFileInputRef = useRef<HTMLInputElement | null>(null);\n const autoSaveTimeoutRef = useRef<number | null>(null);\n const isPointerDownRef = useRef(false);\n const lastUserInteractionAtRef = useRef(Date.now());\n const hasTemporaryChangesRef = useRef(false);\n const handleTemporarySaveRef = useRef<(saveType?: 'auto' | 'manual') => void>(() => undefined);\n const previewCanvasTransitionFrameRef = useRef<number | null>(null);\n const dialogs = useDialogs();\n const { confirmSave } = useConfirm();\n const {\n activeSection,\n canApplyToMain,\n draftSettings,\n hasTemporaryChanges,\n hasTemporarySnapshot,\n presetOptions,\n selectedModes,\n selectedPresetKeys,\n setActiveSection,\n handlePaletteValueChange,\n handlePaletteValuesChange,\n handleApplyToMain,\n handleLoadSettings,\n handlePresetKeyChange,\n handlePresetModeChange,\n handleReset,\n handleTemporaryLoad,\n handleTemporarySave,\n } = useThemePreview({\n initialSection: payload?.initialSection,\n initialPresetKeys: {\n main: 'light1',\n navbar: 'light2',\n toolbar: 'surfaceDark',\n },\n presetThemes: themePreviewPresetThemes,\n resetTheme: defaultSettingsConfig.theme,\n });\n const isPresetThemeSection =\n activeSection === 'main' || activeSection === 'navbar' || activeSection === 'toolbar';\n const resolvedSelectedMode = isPresetThemeSection ? selectedModes[activeSection] : 'light';\n const resolvedSelectedPresetKey = isPresetThemeSection ? selectedPresetKeys[activeSection] : '';\n\n const handleThemePreviewInteraction = () => {\n lastUserInteractionAtRef.current = Date.now();\n };\n\n const handleSaveConfigFiles = async (fileName: string) => {\n await saveAsZipFile(createThemePreviewArchiveFiles(draftSettings), {\n fileTitle: getThemePreviewConfigFileTitle(fileName),\n archiveExtension: 'owp',\n preserveFileNames: true,\n });\n };\n\n const handleOpenSaveDialog = async () => {\n const nextFileName = await dialogs.open(ThemePreviewSaveDialog, {\n initialFileName: configFileName,\n });\n\n if (nextFileName === undefined) {\n return;\n }\n\n setConfigFileName(nextFileName);\n await handleSaveConfigFiles(nextFileName);\n };\n\n const handleOpenZipFile = () => {\n zipFileInputRef.current?.click();\n };\n\n const handleManualTemporarySave = () => {\n handleTemporarySave('manual');\n enqueueSnackbar('임시 저장을 완료했습니다.', {\n variant: 'success',\n });\n };\n\n const handleManualTemporaryLoad = () => {\n if (!handleTemporaryLoad()) {\n enqueueSnackbar('불러올 임시 저장 데이터가 없습니다.', {\n variant: 'warning',\n });\n return;\n }\n\n enqueueSnackbar('임시 저장 데이터를 불러왔습니다.', {\n variant: 'success',\n });\n };\n\n const handleDialogClose = async () => {\n if (hasTemporaryChanges) {\n const isConfirmed = await confirmSave({\n title: '변경된 값을 저장하겠습니까?',\n });\n\n if (isConfirmed) {\n handleTemporarySave('manual');\n enqueueSnackbar('임시 저장되었습니다. 다시 실행하면 저장된 데이터를 불러옵니다.', {\n variant: 'info',\n });\n } else {\n resetThemePreviewSessionState();\n }\n }\n\n onClose(undefined);\n };\n\n const handleZipFileChange = async (event: ChangeEvent<HTMLInputElement>) => {\n const selectedFile = event.target.files?.[0];\n\n if (!selectedFile) {\n return;\n }\n\n try {\n const parsedSettings = await readZipEntryJson<ThemePreviewSettingsArchive>(\n selectedFile,\n (fileName) => fileName.endsWith('settings.json'),\n );\n\n if (!parsedSettings) {\n enqueueSnackbar('settings.json 파일이 없습니다.', {\n variant: 'warning',\n });\n return;\n }\n\n const nextTheme = parsedSettings.defaultSettingsConfig?.theme;\n const nextSnackbarTheme = parsedSettings.defaultSnackbarTheme ?? defaultSnackbarTheme;\n const nextSnackbarProviderProps = getThemePreviewArchiveProviderProps(parsedSettings);\n\n if (!nextTheme) {\n enqueueSnackbar('theme 설정을 읽지 못했습니다.', {\n variant: 'warning',\n });\n return;\n }\n\n handleLoadSettings(nextTheme, nextSnackbarTheme, nextSnackbarProviderProps);\n enqueueSnackbar('설정 파일을 로드하고 메인 화면에 적용했습니다.', {\n variant: 'success',\n });\n } catch {\n enqueueSnackbar('설정 파일을 불러오는 중 오류가 발생했습니다.', {\n variant: 'error',\n });\n } finally {\n event.target.value = '';\n }\n };\n\n const handleSectionChange = (sectionKey: ThemePreviewSectionKey) => {\n if (sectionKey === activeSection) {\n return;\n }\n\n if (previewCanvasTransitionFrameRef.current) {\n cancelAnimationFrame(previewCanvasTransitionFrameRef.current);\n previewCanvasTransitionFrameRef.current = null;\n }\n\n setIsPreviewCanvasLoading(true);\n\n previewCanvasTransitionFrameRef.current = requestAnimationFrame(() => {\n setActiveSection(sectionKey);\n\n previewCanvasTransitionFrameRef.current = requestAnimationFrame(() => {\n setIsPreviewCanvasLoading(false);\n previewCanvasTransitionFrameRef.current = null;\n });\n });\n };\n\n useEffect(() => {\n handleTemporarySaveRef.current = handleTemporarySave;\n }, [handleTemporarySave]);\n\n useEffect(() => {\n hasTemporaryChangesRef.current = hasTemporaryChanges;\n }, [hasTemporaryChanges]);\n\n useEffect(() => {\n const previewContentElement = previewDialogContentRef.current;\n\n if (!previewContentElement) {\n return;\n }\n\n const handlePointerDown = () => {\n isPointerDownRef.current = true;\n handleThemePreviewInteraction();\n };\n const handlePointerUp = () => {\n isPointerDownRef.current = false;\n handleThemePreviewInteraction();\n };\n\n previewContentElement.addEventListener('pointerdown', handlePointerDown);\n previewContentElement.addEventListener('pointerup', handlePointerUp);\n previewContentElement.addEventListener('pointercancel', handlePointerUp);\n previewContentElement.addEventListener('keydown', handleThemePreviewInteraction);\n previewContentElement.addEventListener('input', handleThemePreviewInteraction);\n previewContentElement.addEventListener('change', handleThemePreviewInteraction);\n previewContentElement.addEventListener('focusin', handleThemePreviewInteraction);\n\n return () => {\n previewContentElement.removeEventListener('pointerdown', handlePointerDown);\n previewContentElement.removeEventListener('pointerup', handlePointerUp);\n previewContentElement.removeEventListener('pointercancel', handlePointerUp);\n previewContentElement.removeEventListener('keydown', handleThemePreviewInteraction);\n previewContentElement.removeEventListener('input', handleThemePreviewInteraction);\n previewContentElement.removeEventListener('change', handleThemePreviewInteraction);\n previewContentElement.removeEventListener('focusin', handleThemePreviewInteraction);\n };\n }, []);\n\n useEffect(() => {\n const clearAutoSaveTimeout = () => {\n if (!autoSaveTimeoutRef.current) {\n return;\n }\n\n window.clearTimeout(autoSaveTimeoutRef.current);\n autoSaveTimeoutRef.current = null;\n };\n const scheduleAutoSave = (delay: number) => {\n clearAutoSaveTimeout();\n autoSaveTimeoutRef.current = window.setTimeout(() => {\n const isUserInteracting =\n isPointerDownRef.current ||\n Date.now() - lastUserInteractionAtRef.current < THEME_PREVIEW_AUTO_SAVE_IDLE_WAIT_MS;\n\n if (document.hidden || isUserInteracting) {\n scheduleAutoSave(THEME_PREVIEW_AUTO_SAVE_RETRY_MS);\n return;\n }\n\n handleTemporarySaveRef.current('auto');\n scheduleAutoSave(THEME_PREVIEW_AUTO_SAVE_INTERVAL_MS);\n }, delay);\n };\n\n scheduleAutoSave(THEME_PREVIEW_AUTO_SAVE_INTERVAL_MS);\n\n return () => {\n clearAutoSaveTimeout();\n };\n }, []);\n\n useEffect(() => {\n const handlePageExit = () => {\n if (!hasTemporaryChangesRef.current) {\n return;\n }\n\n handleTemporarySaveRef.current('manual');\n };\n\n window.addEventListener('pagehide', handlePageExit);\n window.addEventListener('beforeunload', handlePageExit);\n\n return () => {\n window.removeEventListener('pagehide', handlePageExit);\n window.removeEventListener('beforeunload', handlePageExit);\n };\n }, []);\n\n useEffect(() => {\n return () => {\n if (!previewCanvasTransitionFrameRef.current) {\n return;\n }\n\n cancelAnimationFrame(previewCanvasTransitionFrameRef.current);\n };\n }, []);\n\n return (\n <OwpDialog\n title={\n <div className=\"flex w-full flex-wrap items-center justify-between gap-12\">\n <Typography variant=\"h6\" fontWeight={700} sx={{ color: themePreviewDialogTitleColor }}>\n OWP Theme Preview\n </Typography>\n <div className=\"flex flex-wrap items-center gap-8\">\n <Button\n size=\"small\"\n variant=\"outlined\"\n sx={{\n ...themePreviewActionButtonSx,\n ...themePreviewFixedOutlinedActionSx,\n }}\n onClick={handleReset}\n >\n 기본 설정으로 되돌리기\n </Button>\n <Button\n size=\"small\"\n variant=\"contained\"\n disabled={!canApplyToMain}\n sx={{\n ...themePreviewActionButtonSx,\n ...themePreviewFixedContainedActionSx,\n }}\n onClick={handleApplyToMain}\n >\n 메인에 적용해보기\n </Button>\n </div>\n </div>\n }\n open={open}\n maxWidth=\"xl\"\n canConfirm={false}\n onClose={handleDialogClose}\n actions={\n <div className=\"grid min-w-0 flex-1 grid-cols-[1fr_auto_1fr] items-center gap-y-8\">\n <div className=\"flex flex-wrap items-center justify-start gap-8\">\n <Button\n variant=\"contained\"\n startIcon={<SaveOutlinedIcon />}\n sx={{\n ...themePreviewActionButtonSx,\n ...themePreviewFixedContainedActionSx,\n }}\n onClick={handleManualTemporarySave}\n >\n 임시 저장하기\n </Button>\n <Button\n variant=\"outlined\"\n startIcon={<RestoreOutlinedIcon />}\n disabled={!hasTemporarySnapshot}\n sx={{\n ...themePreviewActionButtonSx,\n ...themePreviewFixedOutlinedActionSx,\n }}\n onClick={handleManualTemporaryLoad}\n >\n 임시 저장 불러오기\n </Button>\n </div>\n <div className=\"flex flex-wrap items-center justify-center gap-8\">\n <Button\n variant=\"contained\"\n startIcon={<DownloadOutlinedIcon />}\n sx={{\n ...themePreviewActionButtonSx,\n ...themePreviewFixedContainedActionSx,\n }}\n onClick={handleOpenSaveDialog}\n >\n 설정파일 저장하기\n </Button>\n <Button\n variant=\"outlined\"\n startIcon={<UploadFileOutlinedIcon />}\n sx={{\n ...themePreviewActionButtonSx,\n ...themePreviewFixedOutlinedActionSx,\n }}\n onClick={handleOpenZipFile}\n >\n 설정파일 불러오기\n </Button>\n </div>\n <div />\n </div>\n }\n slotProps={{\n paper: {\n sx: {\n width: 'min(1680px, calc(100vw - 48px))',\n maxWidth: 'none',\n height: 'calc(100vh - 48px)',\n m: 3,\n },\n },\n }}\n contentProps={{\n sx: {\n height: '100%',\n p: 3,\n },\n }}\n >\n <div ref={previewDialogContentRef} className=\"flex h-full min-h-0 flex-col gap-12\">\n <input\n ref={zipFileInputRef}\n type=\"file\"\n accept={themePreviewArchiveAccept}\n className=\"hidden\"\n onChange={handleZipFileChange}\n />\n <div className=\"grid min-h-0 flex-1 gap-20 xl:grid-cols-[420px_minmax(0,1fr)]\">\n <ThemePreviewControls\n activeSection={activeSection}\n presetOptions={presetOptions}\n selectedMode={resolvedSelectedMode}\n selectedPresetKey={resolvedSelectedPresetKey}\n settings={draftSettings}\n onSectionChange={handleSectionChange}\n onPaletteValueChange={handlePaletteValueChange}\n onPaletteValuesChange={handlePaletteValuesChange}\n onPresetKeyChange={handlePresetKeyChange}\n onPresetModeChange={handlePresetModeChange}\n />\n <ThemePreviewCanvas\n activeSection={activeSection}\n isLoading={isPreviewCanvasLoading}\n settings={draftSettings}\n />\n </div>\n </div>\n </OwpDialog>\n );\n};\n"],"names":["themePreviewPresetThemes","themesConfig","themePreviewArchiveAccept","THEME_PREVIEW_AUTO_SAVE_INTERVAL_MS","THEME_PREVIEW_AUTO_SAVE_IDLE_WAIT_MS","THEME_PREVIEW_AUTO_SAVE_RETRY_MS","createThemePreviewArchiveFiles","draftSettings","exportData","createThemePreviewExportData","createThemePreviewAppConfigFiles","fileName","content","fileData","__name","getThemePreviewArchiveProviderProps","archiveSettings","_a","getThemePreviewConfigFileTitle","value","sanitizedValue","themePreviewActionButtonSx","themePreviewFixedContainedActionSx","themePreviewFixedOutlinedActionSx","themePreviewDialogTitleColor","ThemePreviewSaveDialog","open","payload","onClose","setFileName","useState","jsx","OwpDialog","jsxs","TextField","event","Typography","ThemePreviewDialog","configFileName","setConfigFileName","isPreviewCanvasLoading","setIsPreviewCanvasLoading","previewDialogContentRef","useRef","zipFileInputRef","autoSaveTimeoutRef","isPointerDownRef","lastUserInteractionAtRef","hasTemporaryChangesRef","handleTemporarySaveRef","previewCanvasTransitionFrameRef","dialogs","useDialogs","confirmSave","useConfirm","activeSection","canApplyToMain","hasTemporaryChanges","hasTemporarySnapshot","presetOptions","selectedModes","selectedPresetKeys","setActiveSection","handlePaletteValueChange","handlePaletteValuesChange","handleApplyToMain","handleLoadSettings","handlePresetKeyChange","handlePresetModeChange","handleReset","handleTemporaryLoad","handleTemporarySave","useThemePreview","defaultSettingsConfig","isPresetThemeSection","resolvedSelectedMode","resolvedSelectedPresetKey","handleThemePreviewInteraction","handleSaveConfigFiles","saveAsZipFile","handleOpenSaveDialog","nextFileName","handleOpenZipFile","handleManualTemporarySave","enqueueSnackbar","handleManualTemporaryLoad","handleDialogClose","resetThemePreviewSessionState","handleZipFileChange","selectedFile","parsedSettings","readZipEntryJson","nextTheme","_b","nextSnackbarTheme","defaultSnackbarTheme","nextSnackbarProviderProps","handleSectionChange","sectionKey","useEffect","previewContentElement","handlePointerDown","handlePointerUp","clearAutoSaveTimeout","scheduleAutoSave","delay","isUserInteracting","handlePageExit","Button","SaveOutlinedIcon","RestoreOutlinedIcon","DownloadOutlinedIcon","UploadFileOutlinedIcon","ThemePreviewControls","ThemePreviewCanvas"],"mappings":"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"}
@@ -1,235 +1,280 @@
1
- var Q = Object.defineProperty;
2
- var a = (o, S) => Q(o, "name", { value: S, configurable: !0 });
3
- import { getThemePreviewTemporaryState as L, persistThemePreviewTemporaryState as B, clearThemePreviewAppliedSettings as X, persistThemePreviewAppliedSettings as I } from "../configs/previewStorage.js";
4
- import { defaultSnackbarTheme as T } from "../configs/snackbar.js";
5
- import { useGetCurrentSettings as Z, useSetDefaultSettings as $ } from "../../../hooks/useOwpSettings.js";
6
- import { useMemo as k, useState as v } from "react";
7
- import { getThemePreviewPresetOptions as ee, getThemePreviewResetSettings as te, getThemePreviewDraftSettings as ne, getThemePreviewSelectionState as ae, cloneThemePreviewSettings as C, getThemePreviewPresetOptionsByMode as re, applyThemePreviewPreset as _, THEME_PREVIEW_CUSTOM_PRESET_KEY as f, setThemePreviewDraftSettings as q, setThemePreviewPaletteValues as se, setThemePreviewPaletteValue as oe, isThemePreviewCustomSection as ie, setThemePreviewSelectionState as ce } from "../utils/themePreviewSettings.js";
8
- import { merge as u } from "../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/merge.js";
9
- import { isEqual as x } from "../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/predicate/isEqual.js";
10
- const le = {
11
- main: f,
12
- navbar: f,
13
- toolbar: f
1
+ var ae = Object.defineProperty;
2
+ var n = (o, d) => ae(o, "name", { value: d, configurable: !0 });
3
+ import { getThemePreviewTemporaryState as j, persistThemePreviewTemporaryState as q, clearThemePreviewAppliedSettings as ne, persistThemePreviewAppliedSettings as G } from "../configs/previewStorage.js";
4
+ import { defaultSnackbarTheme as f, defaultSnackbarProviderProps as T } from "../configs/snackbar.js";
5
+ import { useGetCurrentSettings as se, useSetDefaultSettings as oe } from "../../../hooks/useOwpSettings.js";
6
+ import { useMemo as y, useState as g } from "react";
7
+ import ce from "dayjs";
8
+ import { getThemePreviewPresetOptions as ie, getThemePreviewDraftSettings as le, getThemePreviewSelectionState as de, getThemePreviewResetSettings as me, cloneThemePreviewSettings as A, getThemePreviewPresetOptionsByMode as Se, applyThemePreviewPreset as H, THEME_PREVIEW_CUSTOM_PRESET_KEY as k, setThemePreviewDraftSettings as U, setThemePreviewPaletteValues as Pe, setThemePreviewPaletteValue as pe, isThemePreviewCustomSection as he, setThemePreviewSelectionState as ve } from "../utils/themePreviewSettings.js";
9
+ import { merge as h } from "../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/merge.js";
10
+ import { isEqual as M } from "../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/predicate/isEqual.js";
11
+ const W = {
12
+ main: k,
13
+ navbar: k,
14
+ toolbar: k
14
15
  };
15
- function b(o) {
16
- return !ie(o);
16
+ function C(o) {
17
+ return !he(o);
17
18
  }
18
- a(b, "isThemePreviewPresetSectionKey");
19
- function de(o) {
19
+ n(C, "isThemePreviewPresetSectionKey");
20
+ function ue(o) {
20
21
  return {
21
22
  main: o.theme.main.palette.mode === "dark" ? "dark" : "light",
22
23
  navbar: o.theme.navbar.palette.mode === "dark" ? "dark" : "light",
23
24
  toolbar: o.theme.toolbar.palette.mode === "dark" ? "dark" : "light"
24
25
  };
25
26
  }
26
- a(de, "getThemePreviewSelectedModes");
27
- function G(o, S, p, d, i) {
27
+ n(ue, "getThemePreviewSelectedModes");
28
+ function Y(o, d, v, m, c) {
28
29
  return {
29
- draftSettings: C(S),
30
- savedAt: (/* @__PURE__ */ new Date()).toISOString(),
31
- saveType: i,
30
+ draftSettings: A(d),
31
+ savedAt: ce().toISOString(),
32
+ saveType: c,
32
33
  selectionState: {
33
34
  activeSection: o,
34
- selectedModes: d,
35
- selectedPresetKeys: p
35
+ selectedModes: m,
36
+ selectedPresetKeys: v
36
37
  },
37
38
  version: 1
38
39
  };
39
40
  }
40
- a(G, "createThemePreviewTemporaryState");
41
- function me(o, S, p, d) {
41
+ n(Y, "createThemePreviewTemporaryState");
42
+ function x(o, d, v, m) {
42
43
  return {
43
- draftSettings: S,
44
+ draftSettings: d,
44
45
  selectionState: {
45
46
  activeSection: o,
46
- selectedModes: d,
47
- selectedPresetKeys: p
47
+ selectedModes: m,
48
+ selectedPresetKeys: v
48
49
  }
49
50
  };
50
51
  }
51
- a(me, "createThemePreviewTemporaryComparableState");
52
- function De({
52
+ n(x, "createThemePreviewTemporaryComparableState");
53
+ function Be({
53
54
  initialSection: o = "main",
54
- initialPresetKeys: S,
55
- presetThemes: p,
56
- resetTheme: d
55
+ initialPresetKeys: d,
56
+ presetThemes: v,
57
+ resetTheme: m
57
58
  }) {
58
- const i = Z(), w = $(), K = k(() => ee(p), [p]), H = k(
59
- () => te(i, d, T),
60
- [i, d]
61
- ), U = k(
62
- () => u({}, T, i.snackbar),
63
- [i]
64
- ), [n, D] = v(o), [s, W] = v(
65
- () => ne(i)
66
- ), A = k(
67
- () => ae(i, S),
68
- [i, S]
69
- ), [c, Y] = v(
70
- A.selectedPresetKeys
71
- ), [m, j] = v(A.selectedModes), [y, M] = v(() => L()), z = !!y, F = !y || !x(
72
- me(
73
- n,
74
- s,
75
- c,
76
- m
59
+ const c = se(), K = oe(), E = y(() => ie(v), [v]), V = le(c), w = y(
60
+ () => de(c, d),
61
+ [c, d]
62
+ ), _ = y(
63
+ () => me(c, m, f),
64
+ [c, m]
65
+ ), z = y(
66
+ () => h({}, f, c.snackbar),
67
+ [c]
68
+ ), F = y(
69
+ () => h(
70
+ {},
71
+ T,
72
+ c.snackbarProviderProps
77
73
  ),
78
- {
79
- draftSettings: y.draftSettings,
80
- selectionState: y.selectionState
81
- }
82
- ), J = !x(i.theme, s.theme) || !x(U, s.snackbar), E = /* @__PURE__ */ a((e, t) => {
83
- ce({
74
+ [c]
75
+ ), [r, O] = g(o), [a, J] = g(() => V), [l, N] = g(
76
+ w.selectedPresetKeys
77
+ ), [S, Q] = g(w.selectedModes), [X, D] = g(() => j()), [Z, b] = g(
78
+ () => x(
79
+ o,
80
+ V,
81
+ w.selectedPresetKeys,
82
+ w.selectedModes
83
+ )
84
+ ), $ = !!X, ee = !M(
85
+ x(
86
+ r,
87
+ a,
88
+ l,
89
+ S
90
+ ),
91
+ Z
92
+ ), te = !M(c.theme, a.theme) || !M(z, a.snackbar) || !M(F, a.snackbarProviderProps), R = /* @__PURE__ */ n((e, t) => {
93
+ ve({
84
94
  selectedPresetKeys: e,
85
95
  selectedModes: t
86
96
  });
87
- }, "persistSelectionState"), N = /* @__PURE__ */ a((e) => (q(e), e), "persistDraftSettings"), P = /* @__PURE__ */ a((e) => (W(e), N(e)), "commitDraftSettings"), h = /* @__PURE__ */ a((e, t) => {
88
- Y(e), j(t), E(e, t);
97
+ }, "persistSelectionState"), re = /* @__PURE__ */ n((e) => (U(e), e), "persistDraftSettings"), u = /* @__PURE__ */ n((e) => (J(e), re(e)), "commitDraftSettings"), P = /* @__PURE__ */ n((e, t) => {
98
+ N(e), Q(t), R(e, t);
89
99
  }, "commitSelectionState");
90
100
  return {
91
- activeSection: n,
92
- canApplyToMain: J,
93
- draftSettings: s,
94
- hasTemporaryChanges: F,
95
- hasTemporarySnapshot: z,
96
- presetOptions: K,
97
- selectedModes: m,
98
- selectedPresetKeys: c,
99
- setActiveSection: D,
100
- handlePaletteValueChange: /* @__PURE__ */ a((e, t) => {
101
- if (P(oe(s, n, e, t)), !b(n))
101
+ activeSection: r,
102
+ canApplyToMain: te,
103
+ draftSettings: a,
104
+ hasTemporaryChanges: ee,
105
+ hasTemporarySnapshot: $,
106
+ presetOptions: E,
107
+ selectedModes: S,
108
+ selectedPresetKeys: l,
109
+ setActiveSection: O,
110
+ handlePaletteValueChange: /* @__PURE__ */ n((e, t) => {
111
+ if (u(pe(a, r, e, t)), !C(r))
102
112
  return;
103
- const r = {
104
- ...c,
105
- [n]: f
113
+ const i = {
114
+ ...l,
115
+ [r]: k
106
116
  };
107
- h(r, m);
117
+ P(i, S);
108
118
  }, "handlePaletteValueChange"),
109
- handlePaletteValuesChange: /* @__PURE__ */ a((e) => {
110
- if (!e.length || (P(se(s, n, e)), !b(n)))
119
+ handlePaletteValuesChange: /* @__PURE__ */ n((e) => {
120
+ if (!e.length || (u(Pe(a, r, e)), !C(r)))
111
121
  return;
112
122
  const t = {
113
- ...c,
114
- [n]: f
123
+ ...l,
124
+ [r]: k
115
125
  };
116
- h(t, m);
126
+ P(t, S);
117
127
  }, "handlePaletteValuesChange"),
118
- handleApplyToMain: /* @__PURE__ */ a(() => {
119
- const e = G(
120
- n,
121
- s,
122
- c,
123
- m,
128
+ handleApplyToMain: /* @__PURE__ */ n(() => {
129
+ const e = Y(
130
+ r,
131
+ a,
132
+ l,
133
+ S,
124
134
  "manual"
125
135
  );
126
- q(s), E(c, m), B(e), I({
127
- theme: s.theme,
128
- snackbar: s.snackbar
129
- }), M(e), w({
130
- theme: s.theme,
131
- snackbar: s.snackbar
136
+ U(a), R(l, S), q(e), G({
137
+ theme: a.theme,
138
+ snackbar: a.snackbar,
139
+ snackbarProviderProps: a.snackbarProviderProps
140
+ }), D(e), b({
141
+ draftSettings: a,
142
+ selectionState: e.selectionState
143
+ }), K({
144
+ theme: a.theme,
145
+ snackbar: a.snackbar,
146
+ snackbarProviderProps: a.snackbarProviderProps
132
147
  });
133
148
  }, "handleApplyToMain"),
134
- handleLoadSettings: /* @__PURE__ */ a((e, t = T) => {
135
- const r = u({}, i, {
149
+ handleLoadSettings: /* @__PURE__ */ n((e, t = f, i = T) => {
150
+ const s = h({}, c, {
136
151
  theme: e,
137
- snackbar: u({}, T, t)
138
- }), l = de(r);
139
- P(r), h(le, l), I({
152
+ snackbar: h({}, f, t),
153
+ snackbarProviderProps: h(
154
+ {},
155
+ T,
156
+ i
157
+ )
158
+ }), p = ue(s);
159
+ u(s), P(W, p), b(
160
+ x(
161
+ r,
162
+ s,
163
+ W,
164
+ p
165
+ )
166
+ ), G({
140
167
  theme: e,
141
- snackbar: r.snackbar
142
- }), w({
168
+ snackbar: s.snackbar,
169
+ snackbarProviderProps: s.snackbarProviderProps
170
+ }), K({
143
171
  theme: e,
144
- snackbar: r.snackbar
172
+ snackbar: s.snackbar,
173
+ snackbarProviderProps: s.snackbarProviderProps
145
174
  });
146
175
  }, "handleLoadSettings"),
147
- handlePresetKeyChange: /* @__PURE__ */ a((e) => {
148
- if (!b(n) || e === f)
176
+ handlePresetKeyChange: /* @__PURE__ */ n((e) => {
177
+ if (!C(r) || e === k)
149
178
  return;
150
- const t = p[e];
179
+ const t = v[e];
151
180
  if (!t)
152
181
  return;
153
- P(_(s, n, t));
154
- const r = {
155
- ...m,
156
- [n]: t.palette.mode === "dark" ? "dark" : "light"
157
- }, l = {
158
- ...c,
159
- [n]: e
182
+ u(H(a, r, t));
183
+ const i = {
184
+ ...S,
185
+ [r]: t.palette.mode === "dark" ? "dark" : "light"
186
+ }, s = {
187
+ ...l,
188
+ [r]: e
160
189
  };
161
- h(l, r);
190
+ P(s, i);
162
191
  }, "handlePresetKeyChange"),
163
- handlePresetModeChange: /* @__PURE__ */ a((e) => {
164
- if (!b(n))
192
+ handlePresetModeChange: /* @__PURE__ */ n((e) => {
193
+ if (!C(r))
165
194
  return;
166
195
  const t = {
167
- ...m,
168
- [n]: e
169
- }, r = re(
170
- K,
171
- n,
196
+ ...S,
197
+ [r]: e
198
+ }, i = Se(
199
+ E,
200
+ r,
172
201
  e
173
202
  )[0];
174
- if (!r) {
175
- h(c, t);
203
+ if (!i) {
204
+ P(l, t);
176
205
  return;
177
206
  }
178
- const l = p[r.key];
179
- if (!l) {
180
- h(c, t);
207
+ const s = v[i.key];
208
+ if (!s) {
209
+ P(l, t);
181
210
  return;
182
211
  }
183
- P(_(s, n, l));
184
- const g = {
185
- ...c,
186
- [n]: r.key
212
+ u(H(a, r, s));
213
+ const p = {
214
+ ...l,
215
+ [r]: i.key
187
216
  };
188
- h(g, t);
217
+ P(p, t);
189
218
  }, "handlePresetModeChange"),
190
- handleReset: /* @__PURE__ */ a(() => {
191
- var r, l, g, V, O, R;
192
- const e = C(H), t = {
193
- main: ((l = (r = d.main) == null ? void 0 : r.palette) == null ? void 0 : l.mode) === "dark" ? "dark" : "light",
194
- navbar: ((V = (g = d.navbar) == null ? void 0 : g.palette) == null ? void 0 : V.mode) === "dark" ? "dark" : "light",
195
- toolbar: ((R = (O = d.toolbar) == null ? void 0 : O.palette) == null ? void 0 : R.mode) === "dark" ? "dark" : "light"
219
+ handleReset: /* @__PURE__ */ n(() => {
220
+ var i, s, p, L, B, I;
221
+ const e = h({}, A(_), {
222
+ snackbarProviderProps: T
223
+ }), t = {
224
+ main: ((s = (i = m.main) == null ? void 0 : i.palette) == null ? void 0 : s.mode) === "dark" ? "dark" : "light",
225
+ navbar: ((L = (p = m.navbar) == null ? void 0 : p.palette) == null ? void 0 : L.mode) === "dark" ? "dark" : "light",
226
+ toolbar: ((I = (B = m.toolbar) == null ? void 0 : B.palette) == null ? void 0 : I.mode) === "dark" ? "dark" : "light"
196
227
  };
197
- P(e), h(S, t), X(), w({
198
- theme: d,
199
- snackbar: T
228
+ u(e), P(d, t), b(
229
+ x(
230
+ r,
231
+ e,
232
+ d,
233
+ t
234
+ )
235
+ ), ne(), K({
236
+ theme: m,
237
+ snackbar: f,
238
+ snackbarProviderProps: T
200
239
  });
201
240
  }, "handleReset"),
202
- handleTemporaryLoad: /* @__PURE__ */ a(() => {
203
- const e = L();
241
+ handleTemporaryLoad: /* @__PURE__ */ n(() => {
242
+ const e = j();
204
243
  if (!e)
205
244
  return !1;
206
- const t = C(
207
- u({}, i, e.draftSettings)
208
- ), r = u(
245
+ const t = A(
246
+ h({}, c, e.draftSettings)
247
+ ), i = h(
209
248
  {},
210
- c,
249
+ l,
211
250
  e.selectionState.selectedPresetKeys
212
- ), l = u(
251
+ ), s = h(
213
252
  {},
214
- m,
253
+ S,
215
254
  e.selectionState.selectedModes
216
- ), g = e.selectionState.activeSection;
217
- return P(t), D(g), h(r, l), M(e), !0;
255
+ ), p = e.selectionState.activeSection;
256
+ return u(t), O(p), P(i, s), D(e), b({
257
+ draftSettings: t,
258
+ selectionState: e.selectionState
259
+ }), !0;
218
260
  }, "handleTemporaryLoad"),
219
- handleTemporarySave: /* @__PURE__ */ a((e = "manual") => {
220
- const t = G(
221
- n,
222
- s,
223
- c,
224
- m,
261
+ handleTemporarySave: /* @__PURE__ */ n((e = "manual") => {
262
+ const t = Y(
263
+ r,
264
+ a,
265
+ l,
266
+ S,
225
267
  e
226
268
  );
227
- B(t), M(t);
269
+ q(t), D(t), b({
270
+ draftSettings: a,
271
+ selectionState: t.selectionState
272
+ });
228
273
  }, "handleTemporarySave")
229
274
  };
230
275
  }
231
- a(De, "useThemePreview");
276
+ n(Be, "useThemePreview");
232
277
  export {
233
- De as useThemePreview
278
+ Be as useThemePreview
234
279
  };
235
280
  //# sourceMappingURL=useThemePreview.js.map