@owp/core 2.5.34 → 2.5.35
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/index3.js +2 -2
- package/dist/_virtual/index4.js +2 -2
- package/dist/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.js +68 -62
- package/dist/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.js.map +1 -1
- package/dist/components/OwpDialog/OwpAlertDialog.js +19 -18
- package/dist/components/OwpDialog/OwpAlertDialog.js.map +1 -1
- package/dist/components/OwpDialog/OwpDialog.js +34 -31
- package/dist/components/OwpDialog/OwpDialog.js.map +1 -1
- package/dist/components/OwpDialog/internal/useDialogOpenFocusCleanup.js +18 -0
- package/dist/components/OwpDialog/internal/useDialogOpenFocusCleanup.js.map +1 -0
- package/dist/components/OwpErrorBoundary/OwpErrorBoundary.js +25 -15
- package/dist/components/OwpErrorBoundary/OwpErrorBoundary.js.map +1 -1
- package/dist/components/OwpLayout/OwpLayout.js.map +1 -1
- package/dist/components/OwpNumberField/OwpNumberField.js +45 -24
- package/dist/components/OwpNumberField/OwpNumberField.js.map +1 -1
- package/dist/components/OwpScrollbars/OwpScrollbars.js +79 -52
- package/dist/components/OwpScrollbars/OwpScrollbars.js.map +1 -1
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +157 -157
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -1
- package/dist/components/OwpTable/OwpDataTable.js +377 -342
- package/dist/components/OwpTable/OwpDataTable.js.map +1 -1
- package/dist/components/OwpTable/OwpTable.js +20 -19
- package/dist/components/OwpTable/OwpTable.js.map +1 -1
- package/dist/components/OwpTable/internal/OwpTableBase.js +81 -78
- package/dist/components/OwpTable/internal/OwpTableBase.js.map +1 -1
- package/dist/components/OwpTable/internal/treeGridTableStyle.js +88 -31
- package/dist/components/OwpTable/internal/treeGridTableStyle.js.map +1 -1
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js +304 -262
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +282 -277
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -1
- package/dist/configs/layoutConfig.js +0 -6
- package/dist/configs/layoutConfig.js.map +1 -1
- package/dist/constants/treeGrid.js +59 -46
- package/dist/constants/treeGrid.js.map +1 -1
- package/dist/constants.js +18 -18
- package/dist/constants.js.map +1 -1
- package/dist/features/themePreview/dialogs/ThemePreviewDialog.js +15 -15
- package/dist/features/themePreview/dialogs/ThemePreviewDialog.js.map +1 -1
- package/dist/hooks/internal/useNavbar.js +4 -4
- package/dist/hooks/useConfirm.js +1 -1
- package/dist/hooks/useConfirm.js.map +1 -1
- package/dist/hooks/useOwpDialogs.js +19 -0
- package/dist/hooks/useOwpDialogs.js.map +1 -0
- package/dist/hooks.js +34 -32
- package/dist/hooks.js.map +1 -1
- package/dist/index.js +69 -71
- package/dist/index.js.map +1 -1
- package/dist/layout/Layout.js +23 -27
- package/dist/layout/Layout.js.map +1 -1
- package/dist/layout/components/layouts/FooterLayout.js.map +1 -1
- package/dist/layout/components/menus/PasswordChangeMenu.js +25 -25
- package/dist/layout/components/menus/PasswordChangeMenu.js.map +1 -1
- package/dist/layout/components/toggles/NavigationSearchToggle.js +1 -1
- package/dist/layout/components/toggles/NavigationSearchToggle.js.map +1 -1
- package/dist/layout/components/toggles/NavigationShortcutsToggle.js +1 -1
- package/dist/layout/components/toggles/NavigationShortcutsToggle.js.map +1 -1
- package/dist/layout/components/toggles/ThemePreviewToggle.js +14 -14
- package/dist/layout/components/toggles/ThemePreviewToggle.js.map +1 -1
- package/dist/node_modules/.pnpm/inko@1.1.1/node_modules/inko/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/index.js +1 -1
- package/dist/owp-app.css +1 -1
- package/dist/types/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.d.ts +5 -3
- package/dist/types/components/OwpDialog/OwpAlertDialog.d.ts +1 -1
- package/dist/types/components/OwpDialog/internal/useDialogOpenFocusCleanup.d.ts +5 -0
- package/dist/types/components/OwpErrorBoundary/OwpErrorBoundary.d.ts +8 -14
- package/dist/types/components/OwpNumberField/OwpNumberField.d.ts +18 -4
- package/dist/types/components/OwpScrollbars/OwpScrollbars.d.ts +28 -14
- package/dist/types/components/OwpTable/internal/OwpTableBase.d.ts +3 -1
- package/dist/types/components/OwpTable/internal/treeGridTableStyle.d.ts +61 -2
- package/dist/types/components/OwpTreeGrid/internal/treeGridTheme.d.ts +2 -1
- package/dist/types/configs/layoutConfig.d.ts +0 -6
- package/dist/types/constants/index.d.ts +0 -1
- package/dist/types/constants/treeGrid.d.ts +9 -0
- package/dist/types/features/themePreview/dialogs/ThemePreviewDialog.d.ts +1 -1
- package/dist/types/hooks/index.d.ts +1 -0
- package/dist/types/hooks/useOwpDialogs.d.ts +5 -0
- package/dist/types/hooks/useOwpSettings.d.ts +0 -6
- package/dist/types/index.d.ts +0 -1
- package/dist/types/store/atoms/owpSettingsAtoms.d.ts +0 -6
- package/dist/types/types/OwpDialogTypes.d.ts +1 -0
- package/dist/types/types/OwpRouteTypes.d.ts +25 -0
- package/dist/types/types/index.d.ts +2 -0
- package/dist/types/utils/index.d.ts +0 -1
- package/dist/types/utils/internal/blurActiveElement.d.ts +4 -0
- package/dist/utils/internal/blurActiveElement.js +12 -0
- package/dist/utils/internal/blurActiveElement.js.map +1 -0
- package/dist/utils/{navigationUtils.js → internal/navigationUtils.js} +3 -3
- package/dist/utils/internal/navigationUtils.js.map +1 -0
- package/dist/utils.js +23 -25
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/OwpEventEmitter/OwpEventEmitter.js +0 -51
- package/dist/components/OwpEventEmitter/OwpEventEmitter.js.map +0 -1
- package/dist/layout/components/layouts/LeftSideLayout.js +0 -13
- package/dist/layout/components/layouts/LeftSideLayout.js.map +0 -1
- package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/array/some.js +0 -66
- package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/array/some.js.map +0 -1
- package/dist/node_modules/.pnpm/perfect-scrollbar@1.5.6/node_modules/perfect-scrollbar/css/perfect-scrollbar.css +0 -1
- package/dist/types/components/OwpEventEmitter/OwpEventEmitter.d.ts +0 -27
- package/dist/types/components/OwpEventEmitter/index.d.ts +0 -1
- package/dist/types/layout/components/layouts/LeftSideLayout.d.ts +0 -6
- package/dist/types/utils/common/OwpUtils.d.ts +0 -119
- package/dist/types/utils/common/index.d.ts +0 -1
- package/dist/utils/common/OwpUtils.js +0 -196
- package/dist/utils/common/OwpUtils.js.map +0 -1
- package/dist/utils/navigationUtils.js.map +0 -1
- /package/dist/types/utils/{navigationUtils.d.ts → internal/navigationUtils.d.ts} +0 -0
|
@@ -1,66 +1,79 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
const
|
|
4
|
-
let
|
|
5
|
-
const
|
|
1
|
+
var L = Object.defineProperty;
|
|
2
|
+
var s = (e, t) => L(e, "name", { value: t, configurable: !0 });
|
|
3
|
+
const u = "/assets/vendors/Grid", I = "__OWP_TREE_GRID_ASSET_BASE_PATH__", f = "Styles/Roboto-Light.ttf";
|
|
4
|
+
let T, a;
|
|
5
|
+
const p = "#f44336", S = "#ffe0b2", P = "#c00000", B = "OwpTreeGridChangedCell", F = "#ffa726", b = "#ffffff", x = 600, A = "RobotoLight", O = "#6F7F94", $ = "#CDD8E4", v = [
|
|
6
6
|
"Pretendard",
|
|
7
7
|
"Roboto",
|
|
8
8
|
'"Helvetica"',
|
|
9
9
|
"Arial",
|
|
10
10
|
"sans-serif"
|
|
11
|
-
].join(", "),
|
|
12
|
-
const
|
|
13
|
-
return (
|
|
14
|
-
}, "normalizeTreeGridAssetBasePath"),
|
|
15
|
-
const
|
|
16
|
-
return
|
|
17
|
-
|
|
11
|
+
].join(", "), c = 32, C = /^#?(?<hex>[0-9a-f]{3}|[0-9a-f]{6})$/i, m = /^rgba?\(\s*(?<r>\d{1,3})\s*,\s*(?<g>\d{1,3})\s*,\s*(?<b>\d{1,3})(?:\s*,\s*(?<a>[\d.]+))?\s*\)$/i, D = /* @__PURE__ */ s((e) => {
|
|
12
|
+
const t = e.trim();
|
|
13
|
+
return (t.startsWith("/") ? t : `/${t}`).replace(/\/+$/, "");
|
|
14
|
+
}, "normalizeTreeGridAssetBasePath"), g = /* @__PURE__ */ s(() => {
|
|
15
|
+
const e = typeof window > "u" ? void 0 : window, t = e == null ? void 0 : e[I];
|
|
16
|
+
return D(
|
|
17
|
+
t || u
|
|
18
18
|
);
|
|
19
|
-
}, "getTreeGridAssetBasePath"),
|
|
20
|
-
const
|
|
21
|
-
return `${
|
|
22
|
-
}, "resolveTreeGridAssetUrl"),
|
|
19
|
+
}, "getTreeGridAssetBasePath"), G = /* @__PURE__ */ s((e) => {
|
|
20
|
+
const t = e.replace(/^\/+/, "");
|
|
21
|
+
return `${g()}/${t}`;
|
|
22
|
+
}, "resolveTreeGridAssetUrl"), y = /* @__PURE__ */ s((e) => G(e === "kr" ? "TextKR.xml" : "TextEN.xml"), "getTreeGridTextResourceUrl"), h = /* @__PURE__ */ s((e) => {
|
|
23
23
|
var R;
|
|
24
|
-
if (!
|
|
24
|
+
if (!e)
|
|
25
25
|
return;
|
|
26
|
-
const
|
|
26
|
+
const t = e.trim(), r = t.match(C);
|
|
27
27
|
if ((R = r == null ? void 0 : r.groups) != null && R.hex) {
|
|
28
|
-
const
|
|
29
|
-
return Number.parseInt(
|
|
28
|
+
const n = r.groups.hex.length === 3 ? r.groups.hex.split("").map((_) => `${_}${_}`).join("") : r.groups.hex;
|
|
29
|
+
return Number.parseInt(n, 16);
|
|
30
30
|
}
|
|
31
|
-
const
|
|
32
|
-
if (!(
|
|
31
|
+
const o = t.match(m);
|
|
32
|
+
if (!(o != null && o.groups))
|
|
33
33
|
return;
|
|
34
|
-
const
|
|
35
|
-
(
|
|
34
|
+
const E = [o.groups.r, o.groups.g, o.groups.b].map(
|
|
35
|
+
(n) => Number.parseInt(n, 10)
|
|
36
36
|
);
|
|
37
|
-
if (!
|
|
38
|
-
return (
|
|
39
|
-
}, "resolveTreeGridColorNumber"),
|
|
40
|
-
const t =
|
|
41
|
-
|
|
37
|
+
if (!E.some((n) => Number.isNaN(n) || n < 0 || n > 255))
|
|
38
|
+
return (E[0] << 16) + (E[1] << 8) + E[2];
|
|
39
|
+
}, "resolveTreeGridColorNumber"), i = /* @__PURE__ */ s((e) => {
|
|
40
|
+
const t = h(e);
|
|
41
|
+
if (t !== void 0)
|
|
42
|
+
return [t >> 16 & 255, t >> 8 & 255, t & 255];
|
|
43
|
+
}, "getTreeGridColorChannels"), H = /* @__PURE__ */ s((e, t) => {
|
|
44
|
+
const r = i(e), o = i(t);
|
|
45
|
+
if (!r || !o)
|
|
46
|
+
return !1;
|
|
47
|
+
const [E, R, n] = r, [_, d, l] = o;
|
|
48
|
+
return Math.abs(E - _) <= c && Math.abs(R - d) <= c && Math.abs(n - l) <= c;
|
|
49
|
+
}, "isTreeGridSimilarColor"), U = /* @__PURE__ */ s((e, t = O, r = t) => H(e, t) ? e : r, "getTreeGridHeaderEdgeBorderColor"), z = /* @__PURE__ */ s(() => {
|
|
50
|
+
const e = G(f);
|
|
51
|
+
return T && a === e || (a = e, T = {
|
|
42
52
|
"@font-face": {
|
|
43
|
-
fontFamily:
|
|
53
|
+
fontFamily: A,
|
|
44
54
|
fontStyle: "normal",
|
|
45
55
|
fontWeight: "normal",
|
|
46
|
-
src: `url('${
|
|
56
|
+
src: `url('${e}') format('truetype')`
|
|
47
57
|
}
|
|
48
|
-
}),
|
|
58
|
+
}), T;
|
|
49
59
|
}, "getTreeGridFontFaceStyles");
|
|
50
60
|
export {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
61
|
+
B as TREEGRID_CELL_CHANGED_CLASS,
|
|
62
|
+
F as TREEGRID_CELL_HIGHLIGHT_COLOR,
|
|
63
|
+
x as TREEGRID_CELL_HIGHLIGHT_FONT_WEIGHT,
|
|
64
|
+
b as TREEGRID_CELL_HIGHLIGHT_TEXT_COLOR,
|
|
65
|
+
P as TREEGRID_ERROR_CELL_BORDER_COLOR,
|
|
66
|
+
A as TREEGRID_FONT_FAMILY,
|
|
67
|
+
v as TREEGRID_FONT_FAMILY_STACK,
|
|
68
|
+
S as TREEGRID_INPUT_CELL_COLOR,
|
|
69
|
+
$ as TREEGRID_TABLE_BODY_BORDER_COLOR,
|
|
70
|
+
O as TREEGRID_TABLE_HEADER_BORDER_COLOR,
|
|
71
|
+
p as TREEGRID_WARNING_CELL_COLOR,
|
|
72
|
+
g as getTreeGridAssetBasePath,
|
|
73
|
+
z as getTreeGridFontFaceStyles,
|
|
74
|
+
U as getTreeGridHeaderEdgeBorderColor,
|
|
75
|
+
y as getTreeGridTextResourceUrl,
|
|
76
|
+
G as resolveTreeGridAssetUrl,
|
|
77
|
+
h as resolveTreeGridColorNumber
|
|
65
78
|
};
|
|
66
79
|
//# sourceMappingURL=treeGrid.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treeGrid.js","sources":["../../src/constants/treeGrid.ts"],"sourcesContent":["const TREEGRID_DEFAULT_ASSET_BASE_PATH = '/assets/vendors/Grid';\nconst TREEGRID_ASSET_BASE_PATH_GLOBAL_KEY = '__OWP_TREE_GRID_ASSET_BASE_PATH__';\nconst TREEGRID_FONT_PATH = 'Styles/Roboto-Light.ttf';\nlet cachedTreeGridFontFaceStyles: { '@font-face': Record<string, string> } | undefined;\nlet cachedTreeGridFontUrl: string | undefined;\n\nexport const TREEGRID_WARNING_CELL_COLOR = '#f44336';\nexport const TREEGRID_INPUT_CELL_COLOR = '#ffe0b2';\nexport const TREEGRID_ERROR_CELL_BORDER_COLOR = '#c00000';\nexport const TREEGRID_CELL_CHANGED_CLASS = 'OwpTreeGridChangedCell';\nexport const TREEGRID_CELL_HIGHLIGHT_COLOR = '#ffa726';\nexport const TREEGRID_CELL_HIGHLIGHT_TEXT_COLOR = '#ffffff';\nexport const TREEGRID_CELL_HIGHLIGHT_FONT_WEIGHT = 600;\nexport const TREEGRID_FONT_FAMILY = 'RobotoLight';\nexport const TREEGRID_FONT_FAMILY_STACK = [\n 'Pretendard',\n 'Roboto',\n '\"Helvetica\"',\n 'Arial',\n 'sans-serif',\n].join(', ');\nconst TREEGRID_HEX_COLOR_PATTERN = /^#?(?<hex>[0-9a-f]{3}|[0-9a-f]{6})$/i;\nconst TREEGRID_RGB_COLOR_PATTERN =\n /^rgba?\\(\\s*(?<r>\\d{1,3})\\s*,\\s*(?<g>\\d{1,3})\\s*,\\s*(?<b>\\d{1,3})(?:\\s*,\\s*(?<a>[\\d.]+))?\\s*\\)$/i;\n\n/** TreeGrid 자산 base path 정규화 */\nconst normalizeTreeGridAssetBasePath = (assetBasePath: string) => {\n const trimmedPath = assetBasePath.trim();\n const normalizedPath = trimmedPath.startsWith('/') ? trimmedPath : `/${trimmedPath}`;\n\n return normalizedPath.replace(/\\/+$/, '');\n};\n\n/** TreeGrid 자산 base path 조회 */\nexport const getTreeGridAssetBasePath = () => {\n const runtimeWindow =\n typeof window === 'undefined'\n ? undefined\n : (window as Window & {\n [TREEGRID_ASSET_BASE_PATH_GLOBAL_KEY]?: string;\n });\n const runtimeAssetBasePath = runtimeWindow?.[TREEGRID_ASSET_BASE_PATH_GLOBAL_KEY];\n\n return normalizeTreeGridAssetBasePath(\n runtimeAssetBasePath || TREEGRID_DEFAULT_ASSET_BASE_PATH,\n );\n};\n\n/** TreeGrid 자산 URL 생성 */\nexport const resolveTreeGridAssetUrl = (assetPath: string) => {\n const normalizedAssetPath = assetPath.replace(/^\\/+/, '');\n\n return `${getTreeGridAssetBasePath()}/${normalizedAssetPath}`;\n};\n\n/** TreeGrid 다국어 리소스 URL 조회 */\nexport const getTreeGridTextResourceUrl = (languageId: string) => {\n return resolveTreeGridAssetUrl(languageId === 'kr' ? 'TextKR.xml' : 'TextEN.xml');\n};\n\n/**\n * TreeGrid 색상 문자열 숫자 변환\n * @param color CSS 색상 문자열\n */\nexport const resolveTreeGridColorNumber = (color?: string | null) => {\n if (!color) {\n return undefined;\n }\n\n const trimmedColor = color.trim();\n const hexMatch = trimmedColor.match(TREEGRID_HEX_COLOR_PATTERN);\n\n if (hexMatch?.groups?.hex) {\n const normalizedHex =\n hexMatch.groups.hex.length === 3\n ? hexMatch.groups.hex\n .split('')\n .map((value) => `${value}${value}`)\n .join('')\n : hexMatch.groups.hex;\n\n return Number.parseInt(normalizedHex, 16);\n }\n\n const rgbMatch = trimmedColor.match(TREEGRID_RGB_COLOR_PATTERN);\n\n if (!rgbMatch?.groups) {\n return undefined;\n }\n\n const channels = [rgbMatch.groups.r, rgbMatch.groups.g, rgbMatch.groups.b].map((value) =>\n Number.parseInt(value, 10),\n );\n\n if (channels.some((value) => Number.isNaN(value) || value < 0 || value > 255)) {\n return undefined;\n }\n\n return (channels[0] << 16) + (channels[1] << 8) + channels[2];\n};\n\n/** TreeGrid 폰트 face 스타일 조회 */\nexport const getTreeGridFontFaceStyles = () => {\n const fontUrl = resolveTreeGridAssetUrl(TREEGRID_FONT_PATH);\n\n if (cachedTreeGridFontFaceStyles && cachedTreeGridFontUrl === fontUrl) {\n return cachedTreeGridFontFaceStyles;\n }\n\n cachedTreeGridFontUrl = fontUrl;\n cachedTreeGridFontFaceStyles = {\n '@font-face': {\n fontFamily: TREEGRID_FONT_FAMILY,\n fontStyle: 'normal',\n fontWeight: 'normal',\n src: `url('${fontUrl}') format('truetype')`,\n },\n };\n\n return cachedTreeGridFontFaceStyles;\n};\n"],"names":["TREEGRID_DEFAULT_ASSET_BASE_PATH","TREEGRID_ASSET_BASE_PATH_GLOBAL_KEY","TREEGRID_FONT_PATH","cachedTreeGridFontFaceStyles","cachedTreeGridFontUrl","TREEGRID_WARNING_CELL_COLOR","TREEGRID_INPUT_CELL_COLOR","TREEGRID_ERROR_CELL_BORDER_COLOR","TREEGRID_CELL_CHANGED_CLASS","TREEGRID_CELL_HIGHLIGHT_COLOR","TREEGRID_CELL_HIGHLIGHT_TEXT_COLOR","TREEGRID_CELL_HIGHLIGHT_FONT_WEIGHT","TREEGRID_FONT_FAMILY","TREEGRID_FONT_FAMILY_STACK","TREEGRID_HEX_COLOR_PATTERN","TREEGRID_RGB_COLOR_PATTERN","normalizeTreeGridAssetBasePath","__name","assetBasePath","trimmedPath","getTreeGridAssetBasePath","runtimeWindow","runtimeAssetBasePath","resolveTreeGridAssetUrl","assetPath","normalizedAssetPath","getTreeGridTextResourceUrl","languageId","resolveTreeGridColorNumber","color","_a","trimmedColor","hexMatch","normalizedHex","value","rgbMatch","channels","getTreeGridFontFaceStyles","fontUrl"],"mappings":";;AAAA,MAAMA,IAAmC,wBACnCC,IAAsC,qCACtCC,IAAqB;AAC3B,IAAIC,GACAC;AAEG,MAAMC,IAA8B,WAC9BC,IAA4B,WAC5BC,IAAmC,WACnCC,IAA8B,0BAC9BC,IAAgC,WAChCC,IAAqC,WACrCC,IAAsC,KACtCC,IAAuB,eACvBC,IAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,IAAI,GACLC,IAA6B,wCAC7BC,IACJ,
|
|
1
|
+
{"version":3,"file":"treeGrid.js","sources":["../../src/constants/treeGrid.ts"],"sourcesContent":["const TREEGRID_DEFAULT_ASSET_BASE_PATH = '/assets/vendors/Grid';\nconst TREEGRID_ASSET_BASE_PATH_GLOBAL_KEY = '__OWP_TREE_GRID_ASSET_BASE_PATH__';\nconst TREEGRID_FONT_PATH = 'Styles/Roboto-Light.ttf';\nlet cachedTreeGridFontFaceStyles: { '@font-face': Record<string, string> } | undefined;\nlet cachedTreeGridFontUrl: string | undefined;\n\nexport const TREEGRID_WARNING_CELL_COLOR = '#f44336';\nexport const TREEGRID_INPUT_CELL_COLOR = '#ffe0b2';\nexport const TREEGRID_ERROR_CELL_BORDER_COLOR = '#c00000';\nexport const TREEGRID_CELL_CHANGED_CLASS = 'OwpTreeGridChangedCell';\nexport const TREEGRID_CELL_HIGHLIGHT_COLOR = '#ffa726';\nexport const TREEGRID_CELL_HIGHLIGHT_TEXT_COLOR = '#ffffff';\nexport const TREEGRID_CELL_HIGHLIGHT_FONT_WEIGHT = 600;\nexport const TREEGRID_FONT_FAMILY = 'RobotoLight';\nexport const TREEGRID_TABLE_HEADER_BORDER_COLOR = '#6F7F94';\nexport const TREEGRID_TABLE_BODY_BORDER_COLOR = '#CDD8E4';\nexport const TREEGRID_FONT_FAMILY_STACK = [\n 'Pretendard',\n 'Roboto',\n '\"Helvetica\"',\n 'Arial',\n 'sans-serif',\n].join(', ');\nconst TREEGRID_SIMILAR_COLOR_CHANNEL_DISTANCE = 32;\nconst TREEGRID_HEX_COLOR_PATTERN = /^#?(?<hex>[0-9a-f]{3}|[0-9a-f]{6})$/i;\nconst TREEGRID_RGB_COLOR_PATTERN =\n /^rgba?\\(\\s*(?<r>\\d{1,3})\\s*,\\s*(?<g>\\d{1,3})\\s*,\\s*(?<b>\\d{1,3})(?:\\s*,\\s*(?<a>[\\d.]+))?\\s*\\)$/i;\n\ntype TreeGridColorChannels = readonly [number, number, number];\n\n/** TreeGrid 자산 base path 정규화 */\nconst normalizeTreeGridAssetBasePath = (assetBasePath: string) => {\n const trimmedPath = assetBasePath.trim();\n const normalizedPath = trimmedPath.startsWith('/') ? trimmedPath : `/${trimmedPath}`;\n\n return normalizedPath.replace(/\\/+$/, '');\n};\n\n/** TreeGrid 자산 base path 조회 */\nexport const getTreeGridAssetBasePath = () => {\n const runtimeWindow =\n typeof window === 'undefined'\n ? undefined\n : (window as Window & {\n [TREEGRID_ASSET_BASE_PATH_GLOBAL_KEY]?: string;\n });\n const runtimeAssetBasePath = runtimeWindow?.[TREEGRID_ASSET_BASE_PATH_GLOBAL_KEY];\n\n return normalizeTreeGridAssetBasePath(\n runtimeAssetBasePath || TREEGRID_DEFAULT_ASSET_BASE_PATH,\n );\n};\n\n/** TreeGrid 자산 URL 생성 */\nexport const resolveTreeGridAssetUrl = (assetPath: string) => {\n const normalizedAssetPath = assetPath.replace(/^\\/+/, '');\n\n return `${getTreeGridAssetBasePath()}/${normalizedAssetPath}`;\n};\n\n/** TreeGrid 다국어 리소스 URL 조회 */\nexport const getTreeGridTextResourceUrl = (languageId: string) => {\n return resolveTreeGridAssetUrl(languageId === 'kr' ? 'TextKR.xml' : 'TextEN.xml');\n};\n\n/**\n * TreeGrid 색상 문자열 숫자 변환\n * @param color CSS 색상 문자열\n */\nexport const resolveTreeGridColorNumber = (color?: string | null) => {\n if (!color) {\n return undefined;\n }\n\n const trimmedColor = color.trim();\n const hexMatch = trimmedColor.match(TREEGRID_HEX_COLOR_PATTERN);\n\n if (hexMatch?.groups?.hex) {\n const normalizedHex =\n hexMatch.groups.hex.length === 3\n ? hexMatch.groups.hex\n .split('')\n .map((value) => `${value}${value}`)\n .join('')\n : hexMatch.groups.hex;\n\n return Number.parseInt(normalizedHex, 16);\n }\n\n const rgbMatch = trimmedColor.match(TREEGRID_RGB_COLOR_PATTERN);\n\n if (!rgbMatch?.groups) {\n return undefined;\n }\n\n const channels = [rgbMatch.groups.r, rgbMatch.groups.g, rgbMatch.groups.b].map((value) =>\n Number.parseInt(value, 10),\n );\n\n if (channels.some((value) => Number.isNaN(value) || value < 0 || value > 255)) {\n return undefined;\n }\n\n return (channels[0] << 16) + (channels[1] << 8) + channels[2];\n};\n\n/**\n * TreeGrid 색상 RGB 채널 조회\n * @param color CSS 색상 문자열\n */\nconst getTreeGridColorChannels = (color: string): TreeGridColorChannels | undefined => {\n const colorNumber = resolveTreeGridColorNumber(color);\n\n if (colorNumber === undefined) {\n return undefined;\n }\n\n return [(colorNumber >> 16) & 255, (colorNumber >> 8) & 255, colorNumber & 255];\n};\n\n/**\n * TreeGrid 유사 색상 여부\n * @param sourceColor 기준 색상\n * @param targetColor 비교 색상\n */\nconst isTreeGridSimilarColor = (sourceColor: string, targetColor: string) => {\n const sourceChannels = getTreeGridColorChannels(sourceColor);\n const targetChannels = getTreeGridColorChannels(targetColor);\n\n if (!sourceChannels || !targetChannels) {\n return false;\n }\n\n const [sourceRed, sourceGreen, sourceBlue] = sourceChannels;\n const [targetRed, targetGreen, targetBlue] = targetChannels;\n\n return (\n Math.abs(sourceRed - targetRed) <= TREEGRID_SIMILAR_COLOR_CHANNEL_DISTANCE &&\n Math.abs(sourceGreen - targetGreen) <= TREEGRID_SIMILAR_COLOR_CHANNEL_DISTANCE &&\n Math.abs(sourceBlue - targetBlue) <= TREEGRID_SIMILAR_COLOR_CHANNEL_DISTANCE\n );\n};\n\n/**\n * TreeGrid header 외곽선 색상 조회\n * @param headerBackgroundColor header 배경색\n * @param headerBorderColor header 기본 border 색상\n * @param fallbackBorderColor 유사 색상이 아닐 때 사용할 border 색상\n */\nexport const getTreeGridHeaderEdgeBorderColor = (\n headerBackgroundColor: string,\n headerBorderColor = TREEGRID_TABLE_HEADER_BORDER_COLOR,\n fallbackBorderColor = headerBorderColor,\n) => {\n return isTreeGridSimilarColor(headerBackgroundColor, headerBorderColor)\n ? headerBackgroundColor\n : fallbackBorderColor;\n};\n\n/** TreeGrid 폰트 face 스타일 조회 */\nexport const getTreeGridFontFaceStyles = () => {\n const fontUrl = resolveTreeGridAssetUrl(TREEGRID_FONT_PATH);\n\n if (cachedTreeGridFontFaceStyles && cachedTreeGridFontUrl === fontUrl) {\n return cachedTreeGridFontFaceStyles;\n }\n\n cachedTreeGridFontUrl = fontUrl;\n cachedTreeGridFontFaceStyles = {\n '@font-face': {\n fontFamily: TREEGRID_FONT_FAMILY,\n fontStyle: 'normal',\n fontWeight: 'normal',\n src: `url('${fontUrl}') format('truetype')`,\n },\n };\n\n return cachedTreeGridFontFaceStyles;\n};\n"],"names":["TREEGRID_DEFAULT_ASSET_BASE_PATH","TREEGRID_ASSET_BASE_PATH_GLOBAL_KEY","TREEGRID_FONT_PATH","cachedTreeGridFontFaceStyles","cachedTreeGridFontUrl","TREEGRID_WARNING_CELL_COLOR","TREEGRID_INPUT_CELL_COLOR","TREEGRID_ERROR_CELL_BORDER_COLOR","TREEGRID_CELL_CHANGED_CLASS","TREEGRID_CELL_HIGHLIGHT_COLOR","TREEGRID_CELL_HIGHLIGHT_TEXT_COLOR","TREEGRID_CELL_HIGHLIGHT_FONT_WEIGHT","TREEGRID_FONT_FAMILY","TREEGRID_TABLE_HEADER_BORDER_COLOR","TREEGRID_TABLE_BODY_BORDER_COLOR","TREEGRID_FONT_FAMILY_STACK","TREEGRID_SIMILAR_COLOR_CHANNEL_DISTANCE","TREEGRID_HEX_COLOR_PATTERN","TREEGRID_RGB_COLOR_PATTERN","normalizeTreeGridAssetBasePath","__name","assetBasePath","trimmedPath","getTreeGridAssetBasePath","runtimeWindow","runtimeAssetBasePath","resolveTreeGridAssetUrl","assetPath","normalizedAssetPath","getTreeGridTextResourceUrl","languageId","resolveTreeGridColorNumber","color","_a","trimmedColor","hexMatch","normalizedHex","value","rgbMatch","channels","getTreeGridColorChannels","colorNumber","isTreeGridSimilarColor","sourceColor","targetColor","sourceChannels","targetChannels","sourceRed","sourceGreen","sourceBlue","targetRed","targetGreen","targetBlue","getTreeGridHeaderEdgeBorderColor","headerBackgroundColor","headerBorderColor","fallbackBorderColor","getTreeGridFontFaceStyles","fontUrl"],"mappings":"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"}
|
package/dist/constants.js
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import { DEFAULT_CELL_ALIGNMENT as L, DEFAULT_HEADER_FILL as R, DEFAULT_HEADER_FONT as T, DEFAULT_THIN_BORDER as
|
|
1
|
+
import { DEFAULT_CELL_ALIGNMENT as L, DEFAULT_HEADER_FILL as R, DEFAULT_HEADER_FONT as T, DEFAULT_THIN_BORDER as e, DEFAULT_VALUE_FONT as A, DEFAULT_WRAP_CELL_ALIGNMENT as r } from "./constants/excel.js";
|
|
2
2
|
import { FALLBACK_LANGUAGE_LIST as O } from "./constants/language.js";
|
|
3
3
|
import { CURRENT_LANGUAGE as I, LOCAL_STORAGE_KEYS as C, STORAGE_ACCESS_TOKEN_KEY as o } from "./constants/localStorageKeys.js";
|
|
4
4
|
import { STORAGE_KEYS as F } from "./constants/storageKeys.js";
|
|
5
5
|
import { DEFAULT_TABLE_RADIUS as H } from "./constants/table.js";
|
|
6
|
-
import { TREEGRID_CELL_CHANGED_CLASS as S, TREEGRID_CELL_HIGHLIGHT_COLOR as B, TREEGRID_CELL_HIGHLIGHT_FONT_WEIGHT as
|
|
7
|
-
import { TREEGRID_TABLE_BODY_BORDER_COLOR as P, TREEGRID_TABLE_HEADER_BORDER_COLOR as W } from "./components/OwpTable/internal/treeGridTableStyle.js";
|
|
6
|
+
import { TREEGRID_CELL_CHANGED_CLASS as S, TREEGRID_CELL_HIGHLIGHT_COLOR as B, TREEGRID_CELL_HIGHLIGHT_FONT_WEIGHT as d, TREEGRID_CELL_HIGHLIGHT_TEXT_COLOR as s, TREEGRID_ERROR_CELL_BORDER_COLOR as l, TREEGRID_FONT_FAMILY as m, TREEGRID_FONT_FAMILY_STACK as x, TREEGRID_INPUT_CELL_COLOR as f, TREEGRID_TABLE_BODY_BORDER_COLOR as i, TREEGRID_TABLE_HEADER_BORDER_COLOR as p, TREEGRID_WARNING_CELL_COLOR as K, getTreeGridAssetBasePath as Y, getTreeGridFontFaceStyles as g, getTreeGridHeaderEdgeBorderColor as a, getTreeGridTextResourceUrl as M, resolveTreeGridAssetUrl as P, resolveTreeGridColorNumber as W } from "./constants/treeGrid.js";
|
|
8
7
|
export {
|
|
9
8
|
I as CURRENT_LANGUAGE,
|
|
10
9
|
L as DEFAULT_CELL_ALIGNMENT,
|
|
11
10
|
R as DEFAULT_HEADER_FILL,
|
|
12
11
|
T as DEFAULT_HEADER_FONT,
|
|
13
12
|
H as DEFAULT_TABLE_RADIUS,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
e as DEFAULT_THIN_BORDER,
|
|
14
|
+
A as DEFAULT_VALUE_FONT,
|
|
15
|
+
r as DEFAULT_WRAP_CELL_ALIGNMENT,
|
|
17
16
|
O as FALLBACK_LANGUAGE_LIST,
|
|
18
17
|
C as LOCAL_STORAGE_KEYS,
|
|
19
18
|
o as STORAGE_ACCESS_TOKEN_KEY,
|
|
20
19
|
F as STORAGE_KEYS,
|
|
21
20
|
S as TREEGRID_CELL_CHANGED_CLASS,
|
|
22
21
|
B as TREEGRID_CELL_HIGHLIGHT_COLOR,
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
22
|
+
d as TREEGRID_CELL_HIGHLIGHT_FONT_WEIGHT,
|
|
23
|
+
s as TREEGRID_CELL_HIGHLIGHT_TEXT_COLOR,
|
|
24
|
+
l as TREEGRID_ERROR_CELL_BORDER_COLOR,
|
|
25
|
+
m as TREEGRID_FONT_FAMILY,
|
|
26
|
+
x as TREEGRID_FONT_FAMILY_STACK,
|
|
27
|
+
f as TREEGRID_INPUT_CELL_COLOR,
|
|
28
|
+
i as TREEGRID_TABLE_BODY_BORDER_COLOR,
|
|
29
|
+
p as TREEGRID_TABLE_HEADER_BORDER_COLOR,
|
|
31
30
|
K as TREEGRID_WARNING_CELL_COLOR,
|
|
32
31
|
Y as getTreeGridAssetBasePath,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
M as
|
|
36
|
-
|
|
32
|
+
g as getTreeGridFontFaceStyles,
|
|
33
|
+
a as getTreeGridHeaderEdgeBorderColor,
|
|
34
|
+
M as getTreeGridTextResourceUrl,
|
|
35
|
+
P as resolveTreeGridAssetUrl,
|
|
36
|
+
W as resolveTreeGridColorNumber
|
|
37
37
|
};
|
|
38
38
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -5,13 +5,13 @@ import { defaultSnackbarTheme as ge } from "../configs/snackbar.js";
|
|
|
5
5
|
import { themesConfig as we } from "../configs/presets.js";
|
|
6
6
|
import { defaultSettingsConfig as xe } from "../configs/settings.js";
|
|
7
7
|
import { useConfirm as Pe } from "../../../hooks/useConfirm.js";
|
|
8
|
-
import {
|
|
9
|
-
import be from "../../../
|
|
10
|
-
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/
|
|
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/
|
|
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/
|
|
13
|
-
import
|
|
14
|
-
import {
|
|
8
|
+
import { useOwpDialogs as Ce } from "../../../hooks/useOwpDialogs.js";
|
|
9
|
+
import { readZipEntryJson as Te, saveAsZipFile as be } from "../../../utils/zipUtil.js";
|
|
10
|
+
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/DownloadOutlined.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/RestoreOutlined.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/SaveOutlined.js";
|
|
13
|
+
import Ae 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";
|
|
14
|
+
import { Button as h, Typography as M, TextField as ke } from "@mui/material";
|
|
15
15
|
import { enqueueSnackbar as d } from "notistack";
|
|
16
16
|
import { useState as I, useRef as u, useEffect as g } from "react";
|
|
17
17
|
import { useThemePreview as Le } from "../hooks/useThemePreview.js";
|
|
@@ -116,7 +116,7 @@ const p = {
|
|
|
116
116
|
},
|
|
117
117
|
children: /* @__PURE__ */ m("div", { className: "flex flex-col gap-12", children: [
|
|
118
118
|
/* @__PURE__ */ t(
|
|
119
|
-
|
|
119
|
+
ke,
|
|
120
120
|
{
|
|
121
121
|
label: "저장 이름",
|
|
122
122
|
value: s,
|
|
@@ -136,7 +136,7 @@ const p = {
|
|
|
136
136
|
onClose: v
|
|
137
137
|
}) => {
|
|
138
138
|
const [s, f] = I(""), w = u(null), L = u(null), x = u(null), b = u(!1), F = u(Date.now()), N = u(!1), S = u(() => {
|
|
139
|
-
}), O =
|
|
139
|
+
}), O = Ce(), { confirmSave: j } = Pe(), {
|
|
140
140
|
activeSection: c,
|
|
141
141
|
canApplyToMain: z,
|
|
142
142
|
draftSettings: E,
|
|
@@ -170,7 +170,7 @@ const p = {
|
|
|
170
170
|
}), _ = c === "main" || c === "navbar" || c === "toolbar", re = _ ? U[c] : "light", ie = _ ? K[c] : "", o = /* @__PURE__ */ n(() => {
|
|
171
171
|
F.current = Date.now();
|
|
172
172
|
}, "handleThemePreviewInteraction"), oe = /* @__PURE__ */ n(async (e) => {
|
|
173
|
-
await
|
|
173
|
+
await be(je(E), {
|
|
174
174
|
fileTitle: We(e),
|
|
175
175
|
archiveExtension: "owp",
|
|
176
176
|
preserveFileNames: !0
|
|
@@ -208,7 +208,7 @@ const p = {
|
|
|
208
208
|
const a = (l = e.target.files) == null ? void 0 : l[0];
|
|
209
209
|
if (a)
|
|
210
210
|
try {
|
|
211
|
-
const T = await
|
|
211
|
+
const T = await Te(
|
|
212
212
|
a,
|
|
213
213
|
(pe) => pe.endsWith("settings.json")
|
|
214
214
|
);
|
|
@@ -334,7 +334,7 @@ const p = {
|
|
|
334
334
|
h,
|
|
335
335
|
{
|
|
336
336
|
variant: "contained",
|
|
337
|
-
startIcon: /* @__PURE__ */ t(
|
|
337
|
+
startIcon: /* @__PURE__ */ t(ye, {}),
|
|
338
338
|
sx: {
|
|
339
339
|
...p,
|
|
340
340
|
...A
|
|
@@ -347,7 +347,7 @@ const p = {
|
|
|
347
347
|
h,
|
|
348
348
|
{
|
|
349
349
|
variant: "outlined",
|
|
350
|
-
startIcon: /* @__PURE__ */ t(
|
|
350
|
+
startIcon: /* @__PURE__ */ t(Ee, {}),
|
|
351
351
|
disabled: !W,
|
|
352
352
|
sx: {
|
|
353
353
|
...p,
|
|
@@ -363,7 +363,7 @@ const p = {
|
|
|
363
363
|
h,
|
|
364
364
|
{
|
|
365
365
|
variant: "contained",
|
|
366
|
-
startIcon: /* @__PURE__ */ t(
|
|
366
|
+
startIcon: /* @__PURE__ */ t(Se, {}),
|
|
367
367
|
sx: {
|
|
368
368
|
...p,
|
|
369
369
|
...A
|
|
@@ -376,7 +376,7 @@ const p = {
|
|
|
376
376
|
h,
|
|
377
377
|
{
|
|
378
378
|
variant: "outlined",
|
|
379
|
-
startIcon: /* @__PURE__ */ t(
|
|
379
|
+
startIcon: /* @__PURE__ */ t(Ae, {}),
|
|
380
380
|
sx: {
|
|
381
381
|
...p,
|
|
382
382
|
...k
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemePreviewDialog.js","sources":["../../../../src/features/themePreview/dialogs/ThemePreviewDialog.tsx"],"sourcesContent":["import { OwpDialog } from '@/components/OwpDialog';\nimport {\n defaultSnackbarTheme,\n type 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 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 dialogs = useDialogs();\n const { confirmSave } = useConfirm();\n const {\n activeSection,\n canApplyToMain,\n draftSettings,\n hasTemporaryChanges,\n hasTemporarySnapshot,\n presetOptions,\n resetVersion,\n selectedModes,\n selectedPresetKeys,\n setActiveSection,\n handlePaletteValueChange,\n handlePaletteValuesChange,\n handlePaletteValueReset,\n handlePaletteValuesReset,\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 setActiveSection(sectionKey);\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 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 fullScreen\n canConfirm={false}\n onClose={handleDialogClose}\n slotProps={{\n paper: {\n sx: {\n borderRadius: 0,\n display: 'flex',\n flexDirection: 'column',\n height: '100dvh',\n m: 0,\n maxHeight: '100dvh',\n },\n },\n }}\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 contentProps={{\n sx: {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n height: '100%',\n minHeight: 0,\n overflow: 'hidden',\n p: 3,\n },\n }}\n >\n <div\n ref={previewDialogContentRef}\n className=\"flex h-full min-h-0 flex-col gap-12 overflow-hidden\"\n >\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 overflow-hidden xl:grid-cols-[420px_minmax(0,1fr)]\">\n <div className=\"min-h-0\">\n <ThemePreviewControls\n activeSection={activeSection}\n presetOptions={presetOptions}\n selectedMode={resolvedSelectedMode}\n selectedPresetKey={resolvedSelectedPresetKey}\n settings={draftSettings}\n resetVersion={resetVersion}\n onSectionChange={handleSectionChange}\n onPaletteValueChange={handlePaletteValueChange}\n onPaletteValuesChange={handlePaletteValuesChange}\n onPaletteValueReset={handlePaletteValueReset}\n onPaletteValuesReset={handlePaletteValuesReset}\n onPresetKeyChange={handlePresetKeyChange}\n onPresetModeChange={handlePresetModeChange}\n />\n </div>\n <div className=\"flex min-h-0 min-w-0 overflow-hidden\">\n <ThemePreviewCanvas\n activeSection={activeSection}\n settings={draftSettings}\n />\n </div>\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","previewDialogContentRef","useRef","zipFileInputRef","autoSaveTimeoutRef","isPointerDownRef","lastUserInteractionAtRef","hasTemporaryChangesRef","handleTemporarySaveRef","dialogs","useDialogs","confirmSave","useConfirm","activeSection","canApplyToMain","hasTemporaryChanges","hasTemporarySnapshot","presetOptions","resetVersion","selectedModes","selectedPresetKeys","setActiveSection","handlePaletteValueChange","handlePaletteValuesChange","handlePaletteValueReset","handlePaletteValuesReset","handleApplyToMain","handleLoadSettings","handlePresetKeyChange","handlePresetModeChange","handleReset","handleTemporaryLoad","handleTemporarySave","useThemePreview","defaultSettingsConfig","isPresetThemeSection","resolvedSelectedMode","resolvedSelectedPresetKey","handleThemePreviewInteraction","handleSaveConfigFiles","saveAsZipFile","handleOpenSaveDialog","nextFileName","handleOpenZipFile","handleManualTemporarySave","enqueueSnackbar","handleManualTemporaryLoad","handleDialogClose","resetThemePreviewSessionState","handleZipFileChange","selectedFile","parsedSettings","readZipEntryJson","nextTheme","_b","nextSnackbarTheme","defaultSnackbarTheme","nextSnackbarProviderProps","handleSectionChange","sectionKey","useEffect","previewContentElement","handlePointerDown","handlePointerUp","clearAutoSaveTimeout","scheduleAutoSave","delay","isUserInteracting","handlePageExit","Button","SaveOutlinedIcon","RestoreOutlinedIcon","DownloadOutlinedIcon","UploadFileOutlinedIcon","ThemePreviewControls","ThemePreviewCanvas"],"mappings":"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"}
|
|
1
|
+
{"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 { useOwpDialogs } from '@/hooks/useOwpDialogs';\nimport { type DialogComponent, type DialogProps } from '@/types/OwpDialogTypes';\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 { 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 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 dialogs = useOwpDialogs();\n const { confirmSave } = useConfirm();\n const {\n activeSection,\n canApplyToMain,\n draftSettings,\n hasTemporaryChanges,\n hasTemporarySnapshot,\n presetOptions,\n resetVersion,\n selectedModes,\n selectedPresetKeys,\n setActiveSection,\n handlePaletteValueChange,\n handlePaletteValuesChange,\n handlePaletteValueReset,\n handlePaletteValuesReset,\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 setActiveSection(sectionKey);\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 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 fullScreen\n canConfirm={false}\n onClose={handleDialogClose}\n slotProps={{\n paper: {\n sx: {\n borderRadius: 0,\n display: 'flex',\n flexDirection: 'column',\n height: '100dvh',\n m: 0,\n maxHeight: '100dvh',\n },\n },\n }}\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 contentProps={{\n sx: {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n height: '100%',\n minHeight: 0,\n overflow: 'hidden',\n p: 3,\n },\n }}\n >\n <div\n ref={previewDialogContentRef}\n className=\"flex h-full min-h-0 flex-col gap-12 overflow-hidden\"\n >\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 overflow-hidden xl:grid-cols-[420px_minmax(0,1fr)]\">\n <div className=\"min-h-0\">\n <ThemePreviewControls\n activeSection={activeSection}\n presetOptions={presetOptions}\n selectedMode={resolvedSelectedMode}\n selectedPresetKey={resolvedSelectedPresetKey}\n settings={draftSettings}\n resetVersion={resetVersion}\n onSectionChange={handleSectionChange}\n onPaletteValueChange={handlePaletteValueChange}\n onPaletteValuesChange={handlePaletteValuesChange}\n onPaletteValueReset={handlePaletteValueReset}\n onPaletteValuesReset={handlePaletteValuesReset}\n onPresetKeyChange={handlePresetKeyChange}\n onPresetModeChange={handlePresetModeChange}\n />\n </div>\n <div className=\"flex min-h-0 min-w-0 overflow-hidden\">\n <ThemePreviewCanvas\n activeSection={activeSection}\n settings={draftSettings}\n />\n </div>\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","previewDialogContentRef","useRef","zipFileInputRef","autoSaveTimeoutRef","isPointerDownRef","lastUserInteractionAtRef","hasTemporaryChangesRef","handleTemporarySaveRef","dialogs","useOwpDialogs","confirmSave","useConfirm","activeSection","canApplyToMain","hasTemporaryChanges","hasTemporarySnapshot","presetOptions","resetVersion","selectedModes","selectedPresetKeys","setActiveSection","handlePaletteValueChange","handlePaletteValuesChange","handlePaletteValueReset","handlePaletteValuesReset","handleApplyToMain","handleLoadSettings","handlePresetKeyChange","handlePresetModeChange","handleReset","handleTemporaryLoad","handleTemporarySave","useThemePreview","defaultSettingsConfig","isPresetThemeSection","resolvedSelectedMode","resolvedSelectedPresetKey","handleThemePreviewInteraction","handleSaveConfigFiles","saveAsZipFile","handleOpenSaveDialog","nextFileName","handleOpenZipFile","handleManualTemporarySave","enqueueSnackbar","handleManualTemporaryLoad","handleDialogClose","resetThemePreviewSessionState","handleZipFileChange","selectedFile","parsedSettings","readZipEntryJson","nextTheme","_b","nextSnackbarTheme","defaultSnackbarTheme","nextSnackbarProviderProps","handleSectionChange","sectionKey","useEffect","previewContentElement","handlePointerDown","handlePointerUp","clearAutoSaveTimeout","scheduleAutoSave","delay","isUserInteracting","handlePageExit","Button","SaveOutlinedIcon","RestoreOutlinedIcon","DownloadOutlinedIcon","UploadFileOutlinedIcon","ThemePreviewControls","ThemePreviewCanvas"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
var v = Object.defineProperty;
|
|
2
2
|
var n = (e, t) => v(e, "name", { value: t, configurable: !0 });
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
const V = /* @__PURE__ */ n(() => d(
|
|
6
|
-
const e = o(
|
|
3
|
+
import { useAtomValue as d, useSetAtom as o } from "jotai";
|
|
4
|
+
import { navbarStateAtom as g, navbarToggleFoldedAtom as i, navbarOpenFoldedAtom as p, navbarCloseFoldedAtom as u, navbarToggleMobileAtom as F, navbarOpenMobileAtom as M, navbarCloseMobileAtom as C, navbarOpenAtom as N, navbarCloseAtom as O, navbarToggleAtom as T, resetNavbarAtom as f } from "../../store/atoms/navbarAtoms.js";
|
|
5
|
+
const V = /* @__PURE__ */ n(() => d(g), "useGetNavbar"), h = /* @__PURE__ */ n(() => {
|
|
6
|
+
const e = o(i), t = o(p), a = o(u), l = o(F), s = o(M), r = o(C), b = o(N), m = o(O), c = o(T), A = o(f);
|
|
7
7
|
return {
|
|
8
8
|
toggleFolded: e,
|
|
9
9
|
openFolded: t,
|
package/dist/hooks/useConfirm.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var f = Object.defineProperty;
|
|
2
2
|
var n = (t, e) => f(t, "name", { value: e, configurable: !0 });
|
|
3
|
+
import { useOwpDialogs as p } from "./useOwpDialogs.js";
|
|
3
4
|
import { useOwpTranslation as m } from "./useOwpTranslation.js";
|
|
4
|
-
import { useDialogs as p } from "@toolpad/core/useDialogs";
|
|
5
5
|
import { OwpAlertDialog as T } from "../components/OwpDialog/OwpAlertDialog.js";
|
|
6
6
|
const s = {
|
|
7
7
|
infoTitle: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConfirm.js","sources":["../../src/hooks/useConfirm.tsx"],"sourcesContent":["import { OwpAlertDialog } from '@/components/OwpDialog';\nimport {
|
|
1
|
+
{"version":3,"file":"useConfirm.js","sources":["../../src/hooks/useConfirm.tsx"],"sourcesContent":["import { OwpAlertDialog } from '@/components/OwpDialog';\nimport { useOwpDialogs } from '@/hooks/useOwpDialogs';\nimport { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport type { OwpAlertDialogPayload } from '@/components/OwpDialog';\nimport type { ButtonProps } from '@mui/material';\n\nexport interface ConfirmProps extends Omit<OwpAlertDialogPayload, 'cancelButtonProps'> {\n onClose?: (result: boolean) => Promise<void>;\n}\ninterface ConfirmBaseProps extends ConfirmProps {\n cancelButtonProps?: ButtonProps;\n}\n\ninterface ConfirmTranslationConfig {\n key: string;\n defaultValue?: string;\n}\n\n/**\n * 확인 대화상자 번역 설정\n */\nconst CONFIRM_TRANSLATIONS = {\n infoTitle: {\n key: 'Message.처리하시겠습니까',\n defaultValue: '처리하시겠습니까?',\n },\n infoOk: {\n key: 'Button.확인',\n },\n saveTitle: {\n key: 'Message.저장하시겠습니까?',\n },\n saveOk: {\n key: 'Button.저장',\n },\n updateTitle: {\n key: 'Message.수정하시겠습니까?',\n },\n updateOk: {\n key: 'Button.수정',\n },\n deleteTitle: {\n key: 'Message.삭제하시겠습니까?',\n },\n deleteOk: {\n key: 'Button.삭제',\n },\n cancel: {\n key: 'Button.취소',\n },\n} as const;\n\nconst translateConfirmText = (\n translate: (key: string, options?: { defaultValue?: string }) => string,\n { key, defaultValue }: ConfirmTranslationConfig,\n) => (defaultValue ? translate(key, { defaultValue }) : translate(key));\n\n/**\n * 확인 버튼 속성 병합\n * @param defaultColor 기본 버튼 색상\n * @param okButtonProps 사용자 버튼 속성\n */\nconst mergeOkButtonProps = (\n defaultColor: ButtonProps['color'] | undefined,\n okButtonProps?: ButtonProps,\n) => {\n if (!defaultColor) {\n return okButtonProps;\n }\n\n return {\n color: defaultColor,\n ...okButtonProps,\n } as ButtonProps;\n};\n/**\n * 확인 대화상자 훅\n */\nexport const useConfirm = () => {\n const dialogs = useOwpDialogs();\n const { t } = useOwpTranslation();\n\n const confirmBase = (props: ConfirmBaseProps) => dialogs.open(OwpAlertDialog, props);\n\n return {\n confirm: confirmBase,\n confirmInfo: async ({\n title,\n description,\n okText,\n severity,\n }: ConfirmProps | undefined = {}) => {\n return confirmBase({\n title: title ?? translateConfirmText(t, CONFIRM_TRANSLATIONS.infoTitle),\n description,\n okText: okText ?? translateConfirmText(t, CONFIRM_TRANSLATIONS.infoOk),\n severity: severity ?? 'primary',\n useInfo: true,\n });\n },\n confirmSave: async ({\n title,\n description,\n okText,\n cancelText,\n okButtonProps,\n }: ConfirmProps | undefined = {}) => {\n return confirmBase({\n title: title ?? translateConfirmText(t, CONFIRM_TRANSLATIONS.saveTitle),\n description,\n okText: okText ?? translateConfirmText(t, CONFIRM_TRANSLATIONS.saveOk),\n cancelText,\n okButtonProps: mergeOkButtonProps('secondary', okButtonProps),\n });\n },\n confirmUpdate: async ({\n title,\n description,\n okText,\n cancelText,\n okButtonProps,\n }: ConfirmProps | undefined = {}) => {\n return confirmBase({\n title: title ?? translateConfirmText(t, CONFIRM_TRANSLATIONS.updateTitle),\n description,\n okText: okText ?? translateConfirmText(t, CONFIRM_TRANSLATIONS.updateOk),\n cancelText,\n okButtonProps: mergeOkButtonProps('secondary', okButtonProps),\n });\n },\n confirmDelete: async ({\n title,\n description,\n okText,\n cancelText,\n okButtonProps,\n }: ConfirmProps | undefined = {}) => {\n return confirmBase({\n title: title ?? translateConfirmText(t, CONFIRM_TRANSLATIONS.deleteTitle),\n description,\n okText: okText ?? translateConfirmText(t, CONFIRM_TRANSLATIONS.deleteOk),\n cancelText,\n okButtonProps: mergeOkButtonProps('error', okButtonProps),\n });\n },\n };\n};\n"],"names":["CONFIRM_TRANSLATIONS","translateConfirmText","__name","translate","key","defaultValue","mergeOkButtonProps","defaultColor","okButtonProps","useConfirm","dialogs","useOwpDialogs","t","useOwpTranslation","confirmBase","props","OwpAlertDialog","title","description","okText","severity","cancelText"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
var s = Object.defineProperty;
|
|
2
|
+
var e = (r, m) => s(r, "name", { value: m, configurable: !0 });
|
|
3
|
+
import { blurActiveElement as n } from "../utils/internal/blurActiveElement.js";
|
|
4
|
+
import { useDialogs as c } from "@toolpad/core/useDialogs";
|
|
5
|
+
import { useMemo as i } from "react";
|
|
6
|
+
const d = /* @__PURE__ */ e(() => {
|
|
7
|
+
const r = c();
|
|
8
|
+
return i(() => ({
|
|
9
|
+
...r,
|
|
10
|
+
alert: /* @__PURE__ */ e((o, t) => (n(), r.alert(o, t)), "alert"),
|
|
11
|
+
confirm: /* @__PURE__ */ e((o, t) => (n(), r.confirm(o, t)), "confirm"),
|
|
12
|
+
prompt: /* @__PURE__ */ e((o, t) => (n(), r.prompt(o, t)), "prompt"),
|
|
13
|
+
open: /* @__PURE__ */ e(((o, t, p) => (n(), r.open(o, t, p))), "open")
|
|
14
|
+
}), [r]);
|
|
15
|
+
}, "useOwpDialogs");
|
|
16
|
+
export {
|
|
17
|
+
d as useOwpDialogs
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=useOwpDialogs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOwpDialogs.js","sources":["../../src/hooks/useOwpDialogs.ts"],"sourcesContent":["import { blurActiveElement } from '@/utils/internal/blurActiveElement';\nimport { useDialogs } from '@toolpad/core/useDialogs';\nimport { useMemo } from 'react';\nimport type { DialogHook } from '@/types/OwpDialogTypes';\n\n/**\n * Dialog open 전 focus 정리 hook\n */\nexport const useOwpDialogs = (): DialogHook => {\n const dialogs = useDialogs();\n\n return useMemo(() => {\n const alert: DialogHook['alert'] = (msg, options) => {\n blurActiveElement();\n return dialogs.alert(msg, options);\n };\n const confirm: DialogHook['confirm'] = (msg, options) => {\n blurActiveElement();\n return dialogs.confirm(msg, options);\n };\n const prompt: DialogHook['prompt'] = (msg, options) => {\n blurActiveElement();\n return dialogs.prompt(msg, options);\n };\n const open = ((\n Component: Parameters<DialogHook['open']>[0],\n payload?: Parameters<DialogHook['open']>[1],\n options?: Parameters<DialogHook['open']>[2],\n ) => {\n blurActiveElement();\n return dialogs.open(Component, payload, options);\n }) as DialogHook['open'];\n\n return {\n ...dialogs,\n alert,\n confirm,\n prompt,\n open,\n };\n }, [dialogs]);\n};\n"],"names":["useOwpDialogs","__name","dialogs","useDialogs","useMemo","msg","options","blurActiveElement","Component","payload"],"mappings":";;;;;AAQO,MAAMA,IAAgB,gBAAAC,EAAA,MAAkB;AAC7C,QAAMC,IAAUC,EAAA;AAEhB,SAAOC,EAAQ,OAsBN;AAAA,IACL,GAAGF;AAAA,IACH,OAvBiC,gBAAAD,EAAA,CAACI,GAAKC,OACvCC,EAAA,GACOL,EAAQ,MAAMG,GAAKC,CAAO,IAFA;AAAA,IAwBjC,SApBqC,gBAAAL,EAAA,CAACI,GAAKC,OAC3CC,EAAA,GACOL,EAAQ,QAAQG,GAAKC,CAAO,IAFE;AAAA,IAqBrC,QAjBmC,gBAAAL,EAAA,CAACI,GAAKC,OACzCC,EAAA,GACOL,EAAQ,OAAOG,GAAKC,CAAO,IAFC;AAAA,IAkBnC,MAdY,gBAAAL,GAAA,CACZO,GACAC,GACAH,OAEAC,EAAA,GACOL,EAAQ,KAAKM,GAAWC,GAASH,CAAO,KANnC;AAAA,EAcZ,IAED,CAACJ,CAAO,CAAC;AACd,GAjC6B;"}
|