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