@owp/core 2.5.4 → 2.5.5
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/_virtual/index10.js +2 -2
- package/dist/_virtual/index11.js +2 -2
- package/dist/_virtual/index12.js +2 -2
- package/dist/_virtual/index13.js +2 -2
- package/dist/_virtual/index15.js +2 -2
- package/dist/_virtual/index16.js +4 -4
- package/dist/_virtual/index17.js +4 -4
- package/dist/_virtual/index18.js +4 -4
- package/dist/_virtual/index19.js +4 -4
- package/dist/_virtual/index5.js +2 -2
- package/dist/components/OwpPageSkeleton/OwpPageSkeleton.js +4 -4
- package/dist/components/OwpTable/OwpDataTable.js +293 -327
- package/dist/components/OwpTable/OwpDataTable.js.map +1 -1
- package/dist/components/OwpTable/OwpTable.js +102 -117
- package/dist/components/OwpTable/OwpTable.js.map +1 -1
- package/dist/components/OwpTable/internal/defaultTableStyle.js +50 -0
- package/dist/components/OwpTable/internal/defaultTableStyle.js.map +1 -0
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js +47 -45
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +179 -161
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
- package/dist/contexts/OwpAppProvider.js.map +1 -1
- package/dist/features/themePreview/components/ThemePreviewCanvas.js +492 -0
- package/dist/features/themePreview/components/ThemePreviewCanvas.js.map +1 -0
- package/dist/features/themePreview/components/ThemePreviewCanvasSections.js +678 -0
- package/dist/features/themePreview/components/ThemePreviewCanvasSections.js.map +1 -0
- package/dist/features/themePreview/components/ThemePreviewColorField.js +301 -0
- package/dist/features/themePreview/components/ThemePreviewColorField.js.map +1 -0
- package/dist/features/themePreview/components/ThemePreviewControls.js +306 -0
- package/dist/features/themePreview/components/ThemePreviewControls.js.map +1 -0
- package/dist/features/themePreview/components/themePreviewCanvas.icons.js +17 -0
- package/dist/features/themePreview/components/themePreviewCanvas.icons.js.map +1 -0
- package/dist/features/themePreview/components/themePreviewCanvas.shared.js +296 -0
- package/dist/features/themePreview/components/themePreviewCanvas.shared.js.map +1 -0
- package/dist/features/themePreview/configs/grid.js +45 -0
- package/dist/features/themePreview/configs/grid.js.map +1 -0
- package/dist/features/themePreview/configs/presets.js +1106 -0
- package/dist/features/themePreview/configs/presets.js.map +1 -0
- package/dist/features/themePreview/configs/previewStorage.js +93 -0
- package/dist/features/themePreview/configs/previewStorage.js.map +1 -0
- package/dist/features/themePreview/configs/settings.js +148 -0
- package/dist/features/themePreview/configs/settings.js.map +1 -0
- package/dist/features/themePreview/configs/snackbar.js +39 -0
- package/dist/features/themePreview/configs/snackbar.js.map +1 -0
- package/dist/features/themePreview/configs/surface.js +10 -0
- package/dist/features/themePreview/configs/surface.js.map +1 -0
- package/dist/features/themePreview/configs/table.js +30 -0
- package/dist/features/themePreview/configs/table.js.map +1 -0
- package/dist/features/themePreview/defs/ThemePreviewGridDef.xml.js +43 -0
- package/dist/features/themePreview/defs/ThemePreviewGridDef.xml.js.map +1 -0
- package/dist/features/themePreview/defs/ThemePreviewReadonlyGridDef.xml.js +43 -0
- package/dist/features/themePreview/defs/ThemePreviewReadonlyGridDef.xml.js.map +1 -0
- package/dist/features/themePreview/dialogs/ThemePreviewDialog.js +429 -0
- package/dist/features/themePreview/dialogs/ThemePreviewDialog.js.map +1 -0
- package/dist/features/themePreview/hooks/useThemePreview.js +235 -0
- package/dist/features/themePreview/hooks/useThemePreview.js.map +1 -0
- package/dist/features/themePreview/utils/color.js +79 -0
- package/dist/features/themePreview/utils/color.js.map +1 -0
- package/dist/features/themePreview/utils/themePreviewDefinitions.js +526 -0
- package/dist/features/themePreview/utils/themePreviewDefinitions.js.map +1 -0
- package/dist/features/themePreview/utils/themePreviewExport.js +111 -0
- package/dist/features/themePreview/utils/themePreviewExport.js.map +1 -0
- package/dist/features/themePreview/utils/themePreviewSettings.js +211 -0
- package/dist/features/themePreview/utils/themePreviewSettings.js.map +1 -0
- package/dist/features/themePreview.js +75 -0
- package/dist/features/themePreview.js.map +1 -0
- package/dist/layout/components/logo/Logo.js +49 -45
- package/dist/layout/components/logo/Logo.js.map +1 -1
- package/dist/layout/components/toggles/NavigationSearchToggle.js +3 -3
- package/dist/layout/components/toggles/ThemePreviewToggle.js +51 -0
- package/dist/layout/components/toggles/ThemePreviewToggle.js.map +1 -0
- package/dist/layout/components/toolbar/ToolbarLayout.js +8 -6
- package/dist/layout/components/toolbar/ToolbarLayout.js.map +1 -1
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/CheckCircleOutline.js +9 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/CheckCircleOutline.js.map +1 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/DownloadOutlined.js +9 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/DownloadOutlined.js.map +1 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/ErrorOutline.js +9 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/ErrorOutline.js.map +1 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/InfoOutlined.js +9 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/InfoOutlined.js.map +1 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/KeyboardArrowUpRounded.js +9 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/KeyboardArrowUpRounded.js.map +1 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/MenuRounded.js +9 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/MenuRounded.js.map +1 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/NotificationsNoneOutlined.js +9 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/NotificationsNoneOutlined.js.map +1 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/PaletteOutlined.js +25 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/PaletteOutlined.js.map +1 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/RestoreOutlined.js +9 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/RestoreOutlined.js.map +1 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/SaveOutlined.js +9 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/SaveOutlined.js.map +1 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/SpaceDashboardOutlined.js +9 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/SpaceDashboardOutlined.js.map +1 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/UploadFileOutlined.js +9 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/UploadFileOutlined.js.map +1 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/WarningAmberRounded.js +9 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/WarningAmberRounded.js.map +1 -0
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE39/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/GenericBarcode/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/MSI/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/codabar/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/pharmacode/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/renderers/index.js +1 -1
- package/dist/node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js +1 -1
- package/dist/node_modules/.pnpm/react-overlays@5.2.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-overlays/esm/Portal.js +1 -1
- package/dist/owp-app.css +1 -1
- package/dist/types/components/OwpTable/internal/defaultTableStyle.d.ts +49 -0
- package/dist/types/components/OwpTreeGrid/OwpTreeGrid.d.ts +2 -1
- package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +6 -1
- package/dist/types/contexts/OwpAppProvider.d.ts +2 -0
- package/dist/types/features/themePreview/components/ThemePreviewCanvas.d.ts +8 -0
- package/dist/types/features/themePreview/components/ThemePreviewCanvasSections.d.ts +82 -0
- package/dist/types/features/themePreview/components/ThemePreviewColorField.d.ts +10 -0
- package/dist/types/features/themePreview/components/ThemePreviewControls.d.ts +18 -0
- package/dist/types/features/themePreview/components/index.d.ts +3 -0
- package/dist/types/features/themePreview/components/themePreviewCanvas.icons.d.ts +3 -0
- package/dist/types/features/themePreview/components/themePreviewCanvas.shared.d.ts +121 -0
- package/dist/types/features/themePreview/configs/grid.d.ts +41 -0
- package/dist/types/features/themePreview/configs/index.d.ts +7 -0
- package/dist/types/features/themePreview/configs/presets.d.ts +1153 -0
- package/dist/types/features/themePreview/configs/previewStorage.d.ts +34 -0
- package/dist/types/features/themePreview/configs/settings.d.ts +271 -0
- package/dist/types/features/themePreview/configs/snackbar.d.ts +43 -0
- package/dist/types/features/themePreview/configs/surface.d.ts +6 -0
- package/dist/types/features/themePreview/configs/table.d.ts +47 -0
- package/dist/types/features/themePreview/dialogs/ThemePreviewDialog.d.ts +3 -0
- package/dist/types/features/themePreview/dialogs/index.d.ts +1 -0
- package/dist/types/features/themePreview/hooks/index.d.ts +1 -0
- package/dist/types/features/themePreview/hooks/useThemePreview.d.ts +60 -0
- package/dist/types/features/themePreview/index.d.ts +6 -0
- package/dist/types/features/themePreview/types/index.d.ts +1 -0
- package/dist/types/features/themePreview/types/themePreview.d.ts +44 -0
- package/dist/types/features/themePreview/utils/color.d.ts +14 -0
- package/dist/types/features/themePreview/utils/index.d.ts +4 -0
- package/dist/types/features/themePreview/utils/themePreviewDefinitions.d.ts +10 -0
- package/dist/types/features/themePreview/utils/themePreviewExport.d.ts +1091 -0
- package/dist/types/features/themePreview/utils/themePreviewSettings.d.ts +54 -0
- package/dist/types/layout/components/toggles/ThemePreviewToggle.d.ts +5 -0
- package/features/themePreview.d.ts +3 -0
- package/features/themePreview.js +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
var pe = Object.defineProperty;
|
|
2
|
+
var n = (a, r) => pe(a, "name", { value: r, configurable: !0 });
|
|
3
|
+
import { jsx as t, jsxs as f } from "../../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
|
|
4
|
+
import { defaultSnackbarTheme as ve } from "../configs/snackbar.js";
|
|
5
|
+
import { themesConfig as ge } from "../configs/presets.js";
|
|
6
|
+
import { defaultSettingsConfig as we } from "../configs/settings.js";
|
|
7
|
+
import { useConfirm as xe } from "../../../hooks/useConfirm.js";
|
|
8
|
+
import { readZipEntryJson as Ce, saveAsZipFile as Se } from "../../../utils/zipUtil.js";
|
|
9
|
+
import Te from "../../../node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/DownloadOutlined.js";
|
|
10
|
+
import Pe from "../../../node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/RestoreOutlined.js";
|
|
11
|
+
import Ee from "../../../node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/SaveOutlined.js";
|
|
12
|
+
import be from "../../../node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/UploadFileOutlined.js";
|
|
13
|
+
import { Button as h, Typography as W, TextField as ye } from "@mui/material";
|
|
14
|
+
import { useDialogs as Ae } from "@toolpad/core/useDialogs";
|
|
15
|
+
import { enqueueSnackbar as d } from "notistack";
|
|
16
|
+
import { useState as _, useRef as m, useEffect as p } from "react";
|
|
17
|
+
import { useThemePreview as Le } from "../hooks/useThemePreview.js";
|
|
18
|
+
import { ThemePreviewControls as Fe } from "../components/ThemePreviewControls.js";
|
|
19
|
+
import { ThemePreviewCanvas as _e } from "../components/ThemePreviewCanvas.js";
|
|
20
|
+
import { resetThemePreviewSessionState as ke } from "../utils/themePreviewSettings.js";
|
|
21
|
+
import { createThemePreviewExportData as Ie } from "../utils/themePreviewExport.js";
|
|
22
|
+
import { OwpDialog as j } from "../../../components/OwpDialog/OwpDialog.js";
|
|
23
|
+
const Me = ge, De = ".owp,.zip,application/zip", V = 300 * 1e3, Ne = 2 * 1e3, Re = 15 * 1e3;
|
|
24
|
+
function Oe(a) {
|
|
25
|
+
return Object.entries(a).map(([r, u]) => ({
|
|
26
|
+
fileName: r,
|
|
27
|
+
blob: new Blob([JSON.stringify(u, null, 2)], {
|
|
28
|
+
type: "application/json"
|
|
29
|
+
})
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
n(Oe, "createThemePreviewArchiveFiles");
|
|
33
|
+
function Ve(a) {
|
|
34
|
+
const r = a.trim().replace(/[^0-9A-Za-z가-힣 _-]+/g, "").replace(/\s+/g, "-").replace(/-+/g, "-").replace(/^[-_]+|[-_]+$/g, "");
|
|
35
|
+
return r ? `theme-preview-config-${r}` : "theme-preview-config";
|
|
36
|
+
}
|
|
37
|
+
n(Ve, "getThemePreviewConfigFileTitle");
|
|
38
|
+
const v = {
|
|
39
|
+
"&.MuiButton-root": {
|
|
40
|
+
fontSize: "1.3rem",
|
|
41
|
+
letterSpacing: "0.04rem"
|
|
42
|
+
},
|
|
43
|
+
"&.MuiButton-sizeSmall": {
|
|
44
|
+
fontSize: "1.3rem",
|
|
45
|
+
letterSpacing: "0.04rem",
|
|
46
|
+
minHeight: 42,
|
|
47
|
+
px: 2.25
|
|
48
|
+
},
|
|
49
|
+
"& .MuiButton-startIcon": {
|
|
50
|
+
mr: 0.75
|
|
51
|
+
},
|
|
52
|
+
fontWeight: 800,
|
|
53
|
+
lineHeight: 1.2,
|
|
54
|
+
minHeight: 42,
|
|
55
|
+
px: 2.25,
|
|
56
|
+
whiteSpace: "nowrap"
|
|
57
|
+
}, L = {
|
|
58
|
+
"&.Mui-disabled": {
|
|
59
|
+
backgroundColor: "#e5e7eb",
|
|
60
|
+
borderColor: "#e5e7eb",
|
|
61
|
+
color: "#a1a1aa"
|
|
62
|
+
},
|
|
63
|
+
"&:hover": {
|
|
64
|
+
backgroundColor: "#1696d5",
|
|
65
|
+
borderColor: "#1696d5"
|
|
66
|
+
},
|
|
67
|
+
backgroundColor: "#1ea3e6",
|
|
68
|
+
border: "1px solid #1ea3e6",
|
|
69
|
+
color: "#ffffff"
|
|
70
|
+
}, F = {
|
|
71
|
+
"&.Mui-disabled": {
|
|
72
|
+
backgroundColor: "#ffffff",
|
|
73
|
+
borderColor: "#d1d5db",
|
|
74
|
+
color: "#9ca3af"
|
|
75
|
+
},
|
|
76
|
+
"&:hover": {
|
|
77
|
+
backgroundColor: "#f8fafc",
|
|
78
|
+
borderColor: "#111827"
|
|
79
|
+
},
|
|
80
|
+
backgroundColor: "#ffffff",
|
|
81
|
+
border: "1px solid #111827",
|
|
82
|
+
color: "#111827"
|
|
83
|
+
}, We = "#111827", je = /* @__PURE__ */ n(({
|
|
84
|
+
open: a,
|
|
85
|
+
payload: r,
|
|
86
|
+
onClose: u
|
|
87
|
+
}) => {
|
|
88
|
+
const [g, S] = _((r == null ? void 0 : r.initialFileName) ?? "");
|
|
89
|
+
return /* @__PURE__ */ t(
|
|
90
|
+
j,
|
|
91
|
+
{
|
|
92
|
+
title: "설정파일 저장",
|
|
93
|
+
open: a,
|
|
94
|
+
maxWidth: "xs",
|
|
95
|
+
onClose: /* @__PURE__ */ n(() => u(void 0), "onClose"),
|
|
96
|
+
onConfirm: /* @__PURE__ */ n(() => u(g), "onConfirm"),
|
|
97
|
+
contentProps: {
|
|
98
|
+
sx: {
|
|
99
|
+
minWidth: 360,
|
|
100
|
+
p: 3
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
children: /* @__PURE__ */ f("div", { className: "flex flex-col gap-12", children: [
|
|
104
|
+
/* @__PURE__ */ t(
|
|
105
|
+
ye,
|
|
106
|
+
{
|
|
107
|
+
label: "저장 이름",
|
|
108
|
+
value: g,
|
|
109
|
+
placeholder: "저장 이름 입력",
|
|
110
|
+
onChange: /* @__PURE__ */ n((T) => {
|
|
111
|
+
S(T.target.value);
|
|
112
|
+
}, "onChange")
|
|
113
|
+
}
|
|
114
|
+
),
|
|
115
|
+
/* @__PURE__ */ t(W, { variant: "body2", color: "text.secondary", children: "저장 확장자는 `.owp`로 고정됩니다." })
|
|
116
|
+
] })
|
|
117
|
+
}
|
|
118
|
+
);
|
|
119
|
+
}, "ThemePreviewSaveDialog"), cn = /* @__PURE__ */ n(({
|
|
120
|
+
open: a,
|
|
121
|
+
payload: r,
|
|
122
|
+
onClose: u
|
|
123
|
+
}) => {
|
|
124
|
+
const [g, S] = _(""), [T, k] = _(!1), I = m(null), M = m(null), w = m(null), P = m(!1), D = m(Date.now()), N = m(!1), E = m(() => {
|
|
125
|
+
}), l = m(null), z = Ae(), { confirmSave: U } = xe(), {
|
|
126
|
+
activeSection: c,
|
|
127
|
+
canApplyToMain: B,
|
|
128
|
+
draftSettings: b,
|
|
129
|
+
hasTemporaryChanges: y,
|
|
130
|
+
hasTemporarySnapshot: H,
|
|
131
|
+
presetOptions: K,
|
|
132
|
+
selectedModes: Z,
|
|
133
|
+
selectedPresetKeys: q,
|
|
134
|
+
setActiveSection: J,
|
|
135
|
+
handlePaletteValueChange: $,
|
|
136
|
+
handlePaletteValuesChange: Y,
|
|
137
|
+
handleApplyToMain: G,
|
|
138
|
+
handleLoadSettings: Q,
|
|
139
|
+
handlePresetKeyChange: X,
|
|
140
|
+
handlePresetModeChange: ee,
|
|
141
|
+
handleReset: ne,
|
|
142
|
+
handleTemporaryLoad: te,
|
|
143
|
+
handleTemporarySave: x
|
|
144
|
+
} = Le({
|
|
145
|
+
initialSection: r == null ? void 0 : r.initialSection,
|
|
146
|
+
initialPresetKeys: {
|
|
147
|
+
main: "light1",
|
|
148
|
+
navbar: "light2",
|
|
149
|
+
toolbar: "surfaceDark"
|
|
150
|
+
},
|
|
151
|
+
presetThemes: Me,
|
|
152
|
+
resetTheme: we.theme
|
|
153
|
+
}), R = c === "main" || c === "navbar" || c === "toolbar", re = R ? Z[c] : "light", ie = R ? q[c] : "", o = /* @__PURE__ */ n(() => {
|
|
154
|
+
D.current = Date.now();
|
|
155
|
+
}, "handleThemePreviewInteraction"), oe = /* @__PURE__ */ n(async (e) => {
|
|
156
|
+
const i = Ie(b);
|
|
157
|
+
await Se(Oe(i), {
|
|
158
|
+
type: "application/json",
|
|
159
|
+
fileExtension: "json",
|
|
160
|
+
fileTitle: Ve(e),
|
|
161
|
+
archiveExtension: "owp"
|
|
162
|
+
});
|
|
163
|
+
}, "handleSaveConfigFiles"), ae = /* @__PURE__ */ n(async () => {
|
|
164
|
+
const e = await z.open(je, {
|
|
165
|
+
initialFileName: g
|
|
166
|
+
});
|
|
167
|
+
e !== void 0 && (S(e), await oe(e));
|
|
168
|
+
}, "handleOpenSaveDialog"), se = /* @__PURE__ */ n(() => {
|
|
169
|
+
var e;
|
|
170
|
+
(e = M.current) == null || e.click();
|
|
171
|
+
}, "handleOpenZipFile"), le = /* @__PURE__ */ n(() => {
|
|
172
|
+
x("manual"), d("임시 저장을 완료했습니다.", {
|
|
173
|
+
variant: "success"
|
|
174
|
+
});
|
|
175
|
+
}, "handleManualTemporarySave"), ce = /* @__PURE__ */ n(() => {
|
|
176
|
+
if (!te()) {
|
|
177
|
+
d("불러올 임시 저장 데이터가 없습니다.", {
|
|
178
|
+
variant: "warning"
|
|
179
|
+
});
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
d("임시 저장 데이터를 불러왔습니다.", {
|
|
183
|
+
variant: "success"
|
|
184
|
+
});
|
|
185
|
+
}, "handleManualTemporaryLoad"), de = /* @__PURE__ */ n(async () => {
|
|
186
|
+
y && (await U({
|
|
187
|
+
title: "변경된 값을 저장하겠습니까?"
|
|
188
|
+
}) ? (x("manual"), d("임시 저장되었습니다. 다시 실행하면 저장된 데이터를 불러옵니다.", {
|
|
189
|
+
variant: "info"
|
|
190
|
+
})) : ke()), u(void 0);
|
|
191
|
+
}, "handleDialogClose"), me = /* @__PURE__ */ n(async (e) => {
|
|
192
|
+
var s, C;
|
|
193
|
+
const i = (s = e.target.files) == null ? void 0 : s[0];
|
|
194
|
+
if (i)
|
|
195
|
+
try {
|
|
196
|
+
const A = await Ce(
|
|
197
|
+
i,
|
|
198
|
+
(he) => he.endsWith("settings.json")
|
|
199
|
+
);
|
|
200
|
+
if (!A) {
|
|
201
|
+
d("settings.json 파일이 없습니다.", {
|
|
202
|
+
variant: "warning"
|
|
203
|
+
});
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
const O = (C = A.defaultSettingsConfig) == null ? void 0 : C.theme, ue = A.defaultSnackbarTheme ?? ve;
|
|
207
|
+
if (!O) {
|
|
208
|
+
d("theme 설정을 읽지 못했습니다.", {
|
|
209
|
+
variant: "warning"
|
|
210
|
+
});
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
Q(O, ue), d("설정 파일을 로드하고 메인 화면에 적용했습니다.", {
|
|
214
|
+
variant: "success"
|
|
215
|
+
});
|
|
216
|
+
} catch {
|
|
217
|
+
d("설정 파일을 불러오는 중 오류가 발생했습니다.", {
|
|
218
|
+
variant: "error"
|
|
219
|
+
});
|
|
220
|
+
} finally {
|
|
221
|
+
e.target.value = "";
|
|
222
|
+
}
|
|
223
|
+
}, "handleZipFileChange"), fe = /* @__PURE__ */ n((e) => {
|
|
224
|
+
e !== c && (l.current && (cancelAnimationFrame(l.current), l.current = null), k(!0), l.current = requestAnimationFrame(() => {
|
|
225
|
+
J(e), l.current = requestAnimationFrame(() => {
|
|
226
|
+
k(!1), l.current = null;
|
|
227
|
+
});
|
|
228
|
+
}));
|
|
229
|
+
}, "handleSectionChange");
|
|
230
|
+
return p(() => {
|
|
231
|
+
E.current = x;
|
|
232
|
+
}, [x]), p(() => {
|
|
233
|
+
N.current = y;
|
|
234
|
+
}, [y]), p(() => {
|
|
235
|
+
const e = I.current;
|
|
236
|
+
if (!e)
|
|
237
|
+
return;
|
|
238
|
+
const i = /* @__PURE__ */ n(() => {
|
|
239
|
+
P.current = !0, o();
|
|
240
|
+
}, "handlePointerDown"), s = /* @__PURE__ */ n(() => {
|
|
241
|
+
P.current = !1, o();
|
|
242
|
+
}, "handlePointerUp");
|
|
243
|
+
return e.addEventListener("pointerdown", i), e.addEventListener("pointerup", s), e.addEventListener("pointercancel", s), e.addEventListener("keydown", o), e.addEventListener("input", o), e.addEventListener("change", o), e.addEventListener("focusin", o), () => {
|
|
244
|
+
e.removeEventListener("pointerdown", i), e.removeEventListener("pointerup", s), e.removeEventListener("pointercancel", s), e.removeEventListener("keydown", o), e.removeEventListener("input", o), e.removeEventListener("change", o), e.removeEventListener("focusin", o);
|
|
245
|
+
};
|
|
246
|
+
}, []), p(() => {
|
|
247
|
+
const e = /* @__PURE__ */ n(() => {
|
|
248
|
+
w.current && (window.clearTimeout(w.current), w.current = null);
|
|
249
|
+
}, "clearAutoSaveTimeout"), i = /* @__PURE__ */ n((s) => {
|
|
250
|
+
e(), w.current = window.setTimeout(() => {
|
|
251
|
+
const C = P.current || Date.now() - D.current < Ne;
|
|
252
|
+
if (document.hidden || C) {
|
|
253
|
+
i(Re);
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
E.current("auto"), i(V);
|
|
257
|
+
}, s);
|
|
258
|
+
}, "scheduleAutoSave");
|
|
259
|
+
return i(V), () => {
|
|
260
|
+
e();
|
|
261
|
+
};
|
|
262
|
+
}, []), p(() => {
|
|
263
|
+
const e = /* @__PURE__ */ n(() => {
|
|
264
|
+
N.current && E.current("manual");
|
|
265
|
+
}, "handlePageExit");
|
|
266
|
+
return window.addEventListener("pagehide", e), window.addEventListener("beforeunload", e), () => {
|
|
267
|
+
window.removeEventListener("pagehide", e), window.removeEventListener("beforeunload", e);
|
|
268
|
+
};
|
|
269
|
+
}, []), p(() => () => {
|
|
270
|
+
l.current && cancelAnimationFrame(l.current);
|
|
271
|
+
}, []), /* @__PURE__ */ t(
|
|
272
|
+
j,
|
|
273
|
+
{
|
|
274
|
+
title: /* @__PURE__ */ f("div", { className: "flex w-full flex-wrap items-center justify-between gap-12", children: [
|
|
275
|
+
/* @__PURE__ */ t(W, { variant: "h6", fontWeight: 700, sx: { color: We }, children: "OWP Theme Preview" }),
|
|
276
|
+
/* @__PURE__ */ f("div", { className: "flex flex-wrap items-center gap-8", children: [
|
|
277
|
+
/* @__PURE__ */ t(
|
|
278
|
+
h,
|
|
279
|
+
{
|
|
280
|
+
size: "small",
|
|
281
|
+
variant: "outlined",
|
|
282
|
+
sx: {
|
|
283
|
+
...v,
|
|
284
|
+
...F
|
|
285
|
+
},
|
|
286
|
+
onClick: ne,
|
|
287
|
+
children: "초기 상태로 초기화"
|
|
288
|
+
}
|
|
289
|
+
),
|
|
290
|
+
/* @__PURE__ */ t(
|
|
291
|
+
h,
|
|
292
|
+
{
|
|
293
|
+
size: "small",
|
|
294
|
+
variant: "contained",
|
|
295
|
+
disabled: !B,
|
|
296
|
+
sx: {
|
|
297
|
+
...v,
|
|
298
|
+
...L
|
|
299
|
+
},
|
|
300
|
+
onClick: G,
|
|
301
|
+
children: "메인에 적용해보기"
|
|
302
|
+
}
|
|
303
|
+
)
|
|
304
|
+
] })
|
|
305
|
+
] }),
|
|
306
|
+
open: a,
|
|
307
|
+
maxWidth: "xl",
|
|
308
|
+
canConfirm: !1,
|
|
309
|
+
onClose: de,
|
|
310
|
+
actions: /* @__PURE__ */ f("div", { className: "grid min-w-0 flex-1 grid-cols-[1fr_auto_1fr] items-center gap-y-8", children: [
|
|
311
|
+
/* @__PURE__ */ f("div", { className: "flex flex-wrap items-center justify-start gap-8", children: [
|
|
312
|
+
/* @__PURE__ */ t(
|
|
313
|
+
h,
|
|
314
|
+
{
|
|
315
|
+
variant: "contained",
|
|
316
|
+
startIcon: /* @__PURE__ */ t(Ee, {}),
|
|
317
|
+
sx: {
|
|
318
|
+
...v,
|
|
319
|
+
...L
|
|
320
|
+
},
|
|
321
|
+
onClick: le,
|
|
322
|
+
children: "임시 저장하기"
|
|
323
|
+
}
|
|
324
|
+
),
|
|
325
|
+
/* @__PURE__ */ t(
|
|
326
|
+
h,
|
|
327
|
+
{
|
|
328
|
+
variant: "outlined",
|
|
329
|
+
startIcon: /* @__PURE__ */ t(Pe, {}),
|
|
330
|
+
disabled: !H,
|
|
331
|
+
sx: {
|
|
332
|
+
...v,
|
|
333
|
+
...F
|
|
334
|
+
},
|
|
335
|
+
onClick: ce,
|
|
336
|
+
children: "임시 저장 불러오기"
|
|
337
|
+
}
|
|
338
|
+
)
|
|
339
|
+
] }),
|
|
340
|
+
/* @__PURE__ */ f("div", { className: "flex flex-wrap items-center justify-center gap-8", children: [
|
|
341
|
+
/* @__PURE__ */ t(
|
|
342
|
+
h,
|
|
343
|
+
{
|
|
344
|
+
variant: "contained",
|
|
345
|
+
startIcon: /* @__PURE__ */ t(Te, {}),
|
|
346
|
+
sx: {
|
|
347
|
+
...v,
|
|
348
|
+
...L
|
|
349
|
+
},
|
|
350
|
+
onClick: ae,
|
|
351
|
+
children: "설정파일 저장하기"
|
|
352
|
+
}
|
|
353
|
+
),
|
|
354
|
+
/* @__PURE__ */ t(
|
|
355
|
+
h,
|
|
356
|
+
{
|
|
357
|
+
variant: "outlined",
|
|
358
|
+
startIcon: /* @__PURE__ */ t(be, {}),
|
|
359
|
+
sx: {
|
|
360
|
+
...v,
|
|
361
|
+
...F
|
|
362
|
+
},
|
|
363
|
+
onClick: se,
|
|
364
|
+
children: "설정파일 불러오기"
|
|
365
|
+
}
|
|
366
|
+
)
|
|
367
|
+
] }),
|
|
368
|
+
/* @__PURE__ */ t("div", {})
|
|
369
|
+
] }),
|
|
370
|
+
slotProps: {
|
|
371
|
+
paper: {
|
|
372
|
+
sx: {
|
|
373
|
+
width: "min(1680px, calc(100vw - 48px))",
|
|
374
|
+
maxWidth: "none",
|
|
375
|
+
height: "calc(100vh - 48px)",
|
|
376
|
+
m: 3
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
contentProps: {
|
|
381
|
+
sx: {
|
|
382
|
+
height: "100%",
|
|
383
|
+
p: 3
|
|
384
|
+
}
|
|
385
|
+
},
|
|
386
|
+
children: /* @__PURE__ */ f("div", { ref: I, className: "flex h-full min-h-0 flex-col gap-12", children: [
|
|
387
|
+
/* @__PURE__ */ t(
|
|
388
|
+
"input",
|
|
389
|
+
{
|
|
390
|
+
ref: M,
|
|
391
|
+
type: "file",
|
|
392
|
+
accept: De,
|
|
393
|
+
className: "hidden",
|
|
394
|
+
onChange: me
|
|
395
|
+
}
|
|
396
|
+
),
|
|
397
|
+
/* @__PURE__ */ f("div", { className: "grid min-h-0 flex-1 gap-20 xl:grid-cols-[420px_minmax(0,1fr)]", children: [
|
|
398
|
+
/* @__PURE__ */ t(
|
|
399
|
+
Fe,
|
|
400
|
+
{
|
|
401
|
+
activeSection: c,
|
|
402
|
+
presetOptions: K,
|
|
403
|
+
selectedMode: re,
|
|
404
|
+
selectedPresetKey: ie,
|
|
405
|
+
settings: b,
|
|
406
|
+
onSectionChange: fe,
|
|
407
|
+
onPaletteValueChange: $,
|
|
408
|
+
onPaletteValuesChange: Y,
|
|
409
|
+
onPresetKeyChange: X,
|
|
410
|
+
onPresetModeChange: ee
|
|
411
|
+
}
|
|
412
|
+
),
|
|
413
|
+
/* @__PURE__ */ t(
|
|
414
|
+
_e,
|
|
415
|
+
{
|
|
416
|
+
activeSection: c,
|
|
417
|
+
isLoading: T,
|
|
418
|
+
settings: b
|
|
419
|
+
}
|
|
420
|
+
)
|
|
421
|
+
] })
|
|
422
|
+
] })
|
|
423
|
+
}
|
|
424
|
+
);
|
|
425
|
+
}, "ThemePreviewDialog");
|
|
426
|
+
export {
|
|
427
|
+
cn as ThemePreviewDialog
|
|
428
|
+
};
|
|
429
|
+
//# sourceMappingURL=ThemePreviewDialog.js.map
|
|
@@ -0,0 +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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"}
|