@owp/core 2.2.4 → 2.2.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.
- package/dist/_virtual/index11.js +2 -2
- package/dist/_virtual/index12.js +2 -2
- package/dist/_virtual/index13.js +2 -2
- package/dist/_virtual/index14.js +2 -2
- package/dist/_virtual/index16.js +2 -5
- package/dist/_virtual/index16.js.map +1 -1
- package/dist/_virtual/index17.js +2 -2
- package/dist/_virtual/index6.js +5 -2
- package/dist/_virtual/index6.js.map +1 -1
- package/dist/_virtual/index7.js +2 -2
- package/dist/components/OwpCommonCode/OwpCommonCodeSelector.js +68 -149
- package/dist/components/OwpCommonCode/OwpCommonCodeSelector.js.map +1 -1
- package/dist/components/OwpDialog/OwpDialog.js +48 -46
- package/dist/components/OwpDialog/OwpDialog.js.map +1 -1
- package/dist/components/OwpErrorStatusPage/OwpErrorStatusPage.js +24 -24
- package/dist/components/OwpErrorStatusPage/OwpErrorStatusPage.js.map +1 -1
- package/dist/components/OwpMrtTable/OwpMrtTable.js +2 -2
- package/dist/components/OwpMrtTable/OwpMrtTable.js.map +1 -1
- package/dist/components/OwpMrtTable/{OwpMrtTableNoDataOverlay.js → internal/OwpMrtTableNoDataOverlay.js} +1 -1
- package/dist/components/OwpMrtTable/internal/OwpMrtTableNoDataOverlay.js.map +1 -0
- package/dist/components/OwpMrtTable/{OwpMrtTableTopToolbar.js → internal/OwpMrtTableTopToolbar.js} +3 -3
- package/dist/components/OwpMrtTable/internal/OwpMrtTableTopToolbar.js.map +1 -0
- package/dist/components/OwpOptionSelector/OwpOptionSelector.js +52 -38
- package/dist/components/OwpOptionSelector/OwpOptionSelector.js.map +1 -1
- package/dist/components/OwpPageCarded/OwpPageCarded.js +81 -77
- package/dist/components/OwpPageCarded/OwpPageCarded.js.map +1 -1
- package/dist/components/OwpPageCarded/{OwpPageCardedHeader.js → internal/OwpPageCardedHeader.js} +2 -2
- package/dist/components/OwpPageCarded/internal/OwpPageCardedHeader.js.map +1 -0
- package/dist/components/OwpPageCarded/{OwpPageCardedSidebar.js → internal/OwpPageCardedSidebar.js} +3 -3
- package/dist/components/OwpPageCarded/internal/OwpPageCardedSidebar.js.map +1 -0
- package/dist/components/OwpPageCarded/{OwpPageCardedSidebarContent.js → internal/OwpPageCardedSidebarContent.js} +2 -2
- package/dist/components/OwpPageCarded/internal/OwpPageCardedSidebarContent.js.map +1 -0
- package/dist/components/OwpPicker/OwpDatePicker.js +90 -83
- package/dist/components/OwpPicker/OwpDatePicker.js.map +1 -1
- package/dist/components/OwpPicker/OwpDateRangePicker.js +57 -50
- package/dist/components/OwpPicker/OwpDateRangePicker.js.map +1 -1
- package/dist/components/OwpPicker/OwpTimePicker.js +65 -61
- package/dist/components/OwpPicker/OwpTimePicker.js.map +1 -1
- package/dist/components/OwpPicker/OwpWeekDatePicker.js +58 -52
- package/dist/components/OwpPicker/OwpWeekDatePicker.js.map +1 -1
- package/dist/components/OwpPicker/OwpYearRangePicker.js +68 -62
- package/dist/components/OwpPicker/OwpYearRangePicker.js.map +1 -1
- package/dist/components/OwpPicker/{constants.js → constants/index.js} +1 -1
- package/dist/components/OwpPicker/constants/index.js.map +1 -0
- package/dist/components/OwpPicker/{AnimatedCalendarContainer.js → internal/AnimatedCalendarContainer.js} +2 -2
- package/dist/components/OwpPicker/internal/AnimatedCalendarContainer.js.map +1 -0
- package/dist/components/OwpPicker/{CalendarContainer.js → internal/CalendarContainer.js} +2 -2
- package/dist/components/OwpPicker/internal/CalendarContainer.js.map +1 -0
- package/dist/components/OwpPicker/{DatePickerInput.js → internal/DatePickerInput.js} +4 -4
- package/dist/components/OwpPicker/internal/DatePickerInput.js.map +1 -0
- package/dist/components/OwpQuerySelector/OwpQuerySelector.js +266 -0
- package/dist/components/OwpQuerySelector/OwpQuerySelector.js.map +1 -0
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +390 -0
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -0
- package/dist/components/OwpSelectorBase/OwpSelectorBase.js +14 -0
- package/dist/components/OwpSelectorBase/OwpSelectorBase.js.map +1 -0
- package/dist/components/OwpSelectorBase/OwpSelectorSelect.js +152 -0
- package/dist/components/OwpSelectorBase/OwpSelectorSelect.js.map +1 -0
- package/dist/components/OwpSelectorBase/hooks/useOwpSelectorBase.js +120 -0
- package/dist/components/OwpSelectorBase/hooks/useOwpSelectorBase.js.map +1 -0
- package/dist/components/OwpSelectorBase/utils/querySelectorUtils.js +24 -0
- package/dist/components/OwpSelectorBase/utils/querySelectorUtils.js.map +1 -0
- package/dist/components/OwpStyleProvider/OwpStyleProvider.js +90 -42
- package/dist/components/OwpStyleProvider/OwpStyleProvider.js.map +1 -1
- package/dist/components/OwpSuspense/OwpSuspense.js.map +1 -1
- package/dist/components/OwpTable/OwpTable.js +50 -51
- package/dist/components/OwpTable/OwpTable.js.map +1 -1
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js +163 -308
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
- package/dist/components/OwpTreeGrid/hooks/useOwpTreeGridOverlayFrame.js +1 -1
- package/dist/components/OwpTreeGrid/hooks/useOwpTreeGridOverlayFrame.js.map +1 -1
- package/dist/components/OwpTreeGrid/{OwpTreeGridLoadingOverlay.js → internal/OwpTreeGridLoadingOverlay.js} +2 -2
- package/dist/components/OwpTreeGrid/internal/OwpTreeGridLoadingOverlay.js.map +1 -0
- package/dist/components/OwpTreeGrid/{OwpTreeGridNoDataOverlay.js → internal/OwpTreeGridNoDataOverlay.js} +2 -2
- package/dist/components/OwpTreeGrid/internal/OwpTreeGridNoDataOverlay.js.map +1 -0
- package/dist/components/OwpTreeGrid/{utils/index.js → internal/treeGridLayout.js} +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridLayout.js.map +1 -0
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +176 -0
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -0
- package/dist/components/OwpTreeGrid/utils/perf.js.map +1 -0
- package/dist/components/OwpZoomImageSlider/OwpZoomImageSlider.js +1 -1
- package/dist/components/OwpZoomImageSlider/OwpZoomImageSlider.js.map +1 -1
- package/dist/components/OwpZoomImageSlider/{ZoomImage.js → internal/ZoomImage.js} +1 -1
- package/dist/components/OwpZoomImageSlider/internal/ZoomImage.js.map +1 -0
- package/dist/index.js +100 -104
- package/dist/index.js.map +1 -1
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/ArrowDropDown.js +9 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/ArrowDropDown.js.map +1 -0
- package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isFunction.js +10 -0
- package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isFunction.js.map +1 -0
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE39/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/GenericBarcode/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/MSI/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/codabar/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/pharmacode/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/renderers/index.js +1 -1
- package/dist/node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.js +1 -1
- package/dist/node_modules/.pnpm/react-imask@7.6.1_react@19.2.4/node_modules/react-imask/esm/mixin.js +1 -1
- package/dist/node_modules/.pnpm/react-overlays@5.2.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-overlays/esm/Portal.js +1 -1
- package/dist/owp-app.css +1 -1
- package/dist/types/components/OwpCommonCode/OwpCommonCodeSelector.d.ts +16 -6
- package/dist/types/components/OwpOptionSelector/OwpOptionSelector.d.ts +9 -8
- package/dist/types/components/OwpPageCarded/OwpPageCarded.d.ts +12 -41
- package/dist/types/components/OwpPageSkeleton/index.d.ts +1 -0
- package/dist/types/components/OwpPicker/OwpWeekDatePicker.d.ts +0 -1
- package/dist/types/components/OwpPicker/OwpYearRangePicker.d.ts +0 -1
- package/dist/types/components/OwpQuerySelector/OwpQuerySelector.d.ts +6 -0
- package/dist/types/components/OwpQuerySelector/index.d.ts +2 -0
- package/dist/types/components/OwpQuerySelector/types/index.d.ts +1 -0
- package/dist/types/components/OwpQuerySelector/types/types.d.ts +44 -0
- package/dist/types/components/OwpSelectorBase/OwpSelectorAutocomplete.d.ts +11 -0
- package/dist/types/components/OwpSelectorBase/OwpSelectorBase.d.ts +6 -0
- package/dist/types/components/OwpSelectorBase/OwpSelectorSelect.d.ts +11 -0
- package/dist/types/components/OwpSelectorBase/hooks/useOwpSelectorBase.d.ts +6 -0
- package/dist/types/components/OwpSelectorBase/types/index.d.ts +1 -0
- package/dist/types/components/OwpSelectorBase/types/types.d.ts +59 -0
- package/dist/types/components/OwpSelectorBase/utils/index.d.ts +1 -0
- package/dist/types/components/OwpSelectorBase/utils/querySelectorUtils.d.ts +31 -0
- package/dist/types/components/OwpTreeGrid/OwpTreeGrid.d.ts +3 -1
- package/dist/types/components/OwpTreeGrid/{OwpTreeGridLoadingOverlay.d.ts → internal/OwpTreeGridLoadingOverlay.d.ts} +1 -1
- package/dist/types/components/OwpTreeGrid/{OwpTreeGridNoDataOverlay.d.ts → internal/OwpTreeGridNoDataOverlay.d.ts} +1 -1
- package/dist/types/components/OwpTreeGrid/{utils/index.d.ts → internal/treeGridLayout.d.ts} +0 -2
- package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +75 -0
- package/dist/types/index.d.ts +2 -4
- package/dist/types/store/navigationSlice.d.ts +1 -0
- package/dist/types/types/OwpNavigationTypes.d.ts +14 -0
- package/dist/types/types/index.d.ts +1 -1
- package/dist/types/utils/index.d.ts +1 -0
- package/dist/types/utils/navigationUtils.d.ts +6 -2
- package/dist/types/utils/normalizeTimeToHourMinute.d.ts +11 -0
- package/dist/utils/navigationUtils.js.map +1 -1
- package/dist/utils/normalizeTimeToHourMinute.js +34 -0
- package/dist/utils/normalizeTimeToHourMinute.js.map +1 -0
- package/dist/utils/treeGridUtil.js +1 -1
- package/dist/utils/treeGridUtil.js.map +1 -1
- package/dist/utils.js +78 -75
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/OwpMrtTable/OwpMrtTableNoDataOverlay.js.map +0 -1
- package/dist/components/OwpMrtTable/OwpMrtTableTopToolbar.js.map +0 -1
- package/dist/components/OwpPageCarded/OwpPageCardedHeader.js.map +0 -1
- package/dist/components/OwpPageCarded/OwpPageCardedSidebar.js.map +0 -1
- package/dist/components/OwpPageCarded/OwpPageCardedSidebarContent.js.map +0 -1
- package/dist/components/OwpPicker/AnimatedCalendarContainer.js.map +0 -1
- package/dist/components/OwpPicker/CalendarContainer.js.map +0 -1
- package/dist/components/OwpPicker/DatePickerInput.js.map +0 -1
- package/dist/components/OwpPicker/constants.js.map +0 -1
- package/dist/components/OwpTreeGrid/OwpTreeGridLoadingOverlay.js.map +0 -1
- package/dist/components/OwpTreeGrid/OwpTreeGridNoDataOverlay.js.map +0 -1
- package/dist/components/OwpTreeGrid/perf.js.map +0 -1
- package/dist/components/OwpTreeGrid/utils/index.js.map +0 -1
- package/dist/components/OwpZoomImageSlider/ZoomImage.js.map +0 -1
- package/dist/node_modules/.pnpm/react-datepicker@8.7.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/react-datepicker.css +0 -1
- /package/dist/components/OwpTreeGrid/{perf.js → utils/perf.js} +0 -0
- /package/dist/types/components/OwpMrtTable/{OwpMrtTableNoDataOverlay.d.ts → internal/OwpMrtTableNoDataOverlay.d.ts} +0 -0
- /package/dist/types/components/OwpMrtTable/{OwpMrtTableTopToolbar.d.ts → internal/OwpMrtTableTopToolbar.d.ts} +0 -0
- /package/dist/types/components/OwpPageCarded/{OwpPageCardedHeader.d.ts → internal/OwpPageCardedHeader.d.ts} +0 -0
- /package/dist/types/components/OwpPageCarded/{OwpPageCardedSidebar.d.ts → internal/OwpPageCardedSidebar.d.ts} +0 -0
- /package/dist/types/components/OwpPageCarded/{OwpPageCardedSidebarContent.d.ts → internal/OwpPageCardedSidebarContent.d.ts} +0 -0
- /package/dist/types/components/OwpPicker/{constants.d.ts → constants/index.d.ts} +0 -0
- /package/dist/types/components/OwpPicker/{AnimatedCalendarContainer.d.ts → internal/AnimatedCalendarContainer.d.ts} +0 -0
- /package/dist/types/components/OwpPicker/{CalendarContainer.d.ts → internal/CalendarContainer.d.ts} +0 -0
- /package/dist/types/components/OwpPicker/{DatePickerInput.d.ts → internal/DatePickerInput.d.ts} +0 -0
- /package/dist/types/components/OwpTreeGrid/{perf.d.ts → utils/perf.d.ts} +0 -0
- /package/dist/types/components/OwpZoomImageSlider/{ZoomImage.d.ts → internal/ZoomImage.d.ts} +0 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
var b = Object.defineProperty;
|
|
2
|
+
var U = (a, c) => b(a, "name", { value: c, configurable: !0 });
|
|
3
|
+
import { useOwpTranslation as m } from "../../../hooks/useOwpTranslation.js";
|
|
4
|
+
import { mergeSelectorOptions as I, joinSelectorValue as W, splitSelectorValue as X, getSelectorAllToken as nn, createSelectorChangeEvent as en } from "../utils/querySelectorUtils.js";
|
|
5
|
+
import { useState as Y, useRef as k, useMemo as i, useCallback as d, useEffect as q } from "react";
|
|
6
|
+
const sn = /* @__PURE__ */ U(({
|
|
7
|
+
allOptions: a,
|
|
8
|
+
allValueMode: c = "joined",
|
|
9
|
+
defaultValue: L,
|
|
10
|
+
disableAllValueItem: r,
|
|
11
|
+
multiple: n,
|
|
12
|
+
name: F,
|
|
13
|
+
onChange: G,
|
|
14
|
+
options: H,
|
|
15
|
+
value: j
|
|
16
|
+
}) => {
|
|
17
|
+
const { t: J } = m(), f = j !== void 0, K = L ?? "", [w, x] = Y(L), [h, v] = Y(
|
|
18
|
+
() => n && !r && (j ?? K) === "" ? "all" : "none"
|
|
19
|
+
), Q = k(!1), O = k(j ?? K), g = k(null), B = k(G);
|
|
20
|
+
B.current = G;
|
|
21
|
+
const y = i(
|
|
22
|
+
() => I(H, a),
|
|
23
|
+
[a, H]
|
|
24
|
+
), t = i(
|
|
25
|
+
() => y.filter((e) => !e.disabled).map((e) => e.value),
|
|
26
|
+
[y]
|
|
27
|
+
), Z = i(() => W(t), [t]), o = f ? j : w, R = i(() => X(o), [o]), T = i(() => n && !r && (o == null || o === "") && h === "all" ? t : R, [t, r, h, n, o, R]), E = i(() => new Set(T), [T]), p = i(
|
|
28
|
+
() => ({
|
|
29
|
+
label: J("Common.전체"),
|
|
30
|
+
raw: null,
|
|
31
|
+
value: nn()
|
|
32
|
+
}),
|
|
33
|
+
[J]
|
|
34
|
+
), D = i(
|
|
35
|
+
() => y.filter((e) => E.has(e.value)),
|
|
36
|
+
[y, E]
|
|
37
|
+
), C = i(() => r ? !1 : n ? (o == null || o === "") && h === "all" ? !0 : c === "empty" ? h === "all" : !!t.length && t.every((e) => E.has(e)) : o == null || o === "", [
|
|
38
|
+
t,
|
|
39
|
+
c,
|
|
40
|
+
r,
|
|
41
|
+
h,
|
|
42
|
+
n,
|
|
43
|
+
o,
|
|
44
|
+
E
|
|
45
|
+
]), _ = i(() => !n && C && !r ? p : D[0] ?? null, [p, r, C, n, D]), z = n && c === "joined" ? Z : "", s = d(
|
|
46
|
+
(e, S) => {
|
|
47
|
+
var u;
|
|
48
|
+
n && !r && (e === "" ? (g.current = S ?? "none", v(S ?? "none")) : (g.current = null, v("none"))), f || x(e), (u = B.current) == null || u.call(B, en(F, e));
|
|
49
|
+
},
|
|
50
|
+
[r, f, n, F]
|
|
51
|
+
), P = d(() => {
|
|
52
|
+
s(z, n && c === "empty" ? "all" : void 0);
|
|
53
|
+
}, [z, c, s, n]), $ = d(() => {
|
|
54
|
+
!n || r || (g.current = "all", O.current = "", v("all"), f || x(""));
|
|
55
|
+
}, [r, f, n]), l = d(() => {
|
|
56
|
+
s("", n ? "none" : void 0);
|
|
57
|
+
}, [s, n]), M = d(
|
|
58
|
+
(e) => {
|
|
59
|
+
s(e);
|
|
60
|
+
},
|
|
61
|
+
[s]
|
|
62
|
+
), V = d(
|
|
63
|
+
(e) => {
|
|
64
|
+
const S = e.filter((u) => u !== "");
|
|
65
|
+
if (!r && t.length && t.every((u) => S.includes(u))) {
|
|
66
|
+
P();
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
s(
|
|
70
|
+
W(S),
|
|
71
|
+
c === "empty" ? "none" : void 0
|
|
72
|
+
);
|
|
73
|
+
},
|
|
74
|
+
[t, c, r, s, P]
|
|
75
|
+
);
|
|
76
|
+
return q(() => {
|
|
77
|
+
f || x(L);
|
|
78
|
+
}, [L, f]), q(() => {
|
|
79
|
+
if (n && !r) {
|
|
80
|
+
const e = o ?? "", S = O.current;
|
|
81
|
+
if (e === "") {
|
|
82
|
+
const N = g.current;
|
|
83
|
+
N ? (v(N), g.current = null) : S !== e && v("all"), O.current = e;
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const u = X(e), A = !!t.length && t.every((N) => u.includes(N));
|
|
87
|
+
v(A ? "all" : "none"), g.current = null, O.current = e;
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
O.current = o ?? "";
|
|
91
|
+
}, [t, r, n, o]), q(() => {
|
|
92
|
+
!n || r || Q.current || f || w !== void 0 && w !== "" || !t.length || (Q.current = !0, s(z, n && c === "empty" ? "all" : void 0));
|
|
93
|
+
}, [
|
|
94
|
+
z,
|
|
95
|
+
t.length,
|
|
96
|
+
c,
|
|
97
|
+
r,
|
|
98
|
+
s,
|
|
99
|
+
w,
|
|
100
|
+
f,
|
|
101
|
+
n
|
|
102
|
+
]), {
|
|
103
|
+
allOption: p,
|
|
104
|
+
allValue: z,
|
|
105
|
+
clearSelection: l,
|
|
106
|
+
isAllSelected: C,
|
|
107
|
+
resolvedOptions: y,
|
|
108
|
+
restoreAllSelection: $,
|
|
109
|
+
selectAll: P,
|
|
110
|
+
selectedOption: _,
|
|
111
|
+
selectedOptions: C && n && !r ? [p, ...y] : D,
|
|
112
|
+
selectedValueList: T,
|
|
113
|
+
selectMultipleValues: V,
|
|
114
|
+
selectSingleValue: M
|
|
115
|
+
};
|
|
116
|
+
}, "useOwpSelectorBase");
|
|
117
|
+
export {
|
|
118
|
+
sn as useOwpSelectorBase
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=useOwpSelectorBase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOwpSelectorBase.js","sources":["../../../../src/components/OwpSelectorBase/hooks/useOwpSelectorBase.ts"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport {\n type OwpSelectorBaseHookResult,\n type OwpSelectorBaseOption,\n type OwpSelectorBaseProps,\n type OwpSelectorEmptyValueMode,\n} from '../types';\nimport {\n createSelectorChangeEvent,\n getSelectorAllToken,\n joinSelectorValue,\n mergeSelectorOptions,\n splitSelectorValue,\n} from '../utils';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\n/**\n * 공통 선택기 상태 훅\n * @param props 공통 선택기 props\n */\nexport const useOwpSelectorBase = ({\n allOptions,\n allValueMode = 'joined',\n defaultValue,\n disableAllValueItem,\n multiple,\n name,\n onChange,\n options,\n value,\n}: OwpSelectorBaseProps): OwpSelectorBaseHookResult => {\n const { t } = useOwpTranslation();\n const isControlled = value !== undefined;\n const normalizedDefaultValue = defaultValue ?? '';\n const [internalValue, setInternalValue] = useState(defaultValue);\n const [emptyValueMode, setEmptyValueMode] = useState<OwpSelectorEmptyValueMode>(() =>\n multiple && !disableAllValueItem && (value ?? normalizedDefaultValue) === ''\n ? 'all'\n : 'none',\n );\n const didInitializeAllValue = useRef(false);\n const previousNormalizedValue = useRef(value ?? normalizedDefaultValue);\n const pendingEmptyValueMode = useRef<OwpSelectorEmptyValueMode | null>(null);\n const onChangeRef = useRef(onChange);\n\n onChangeRef.current = onChange;\n\n const resolvedOptions = useMemo(\n () => mergeSelectorOptions(options, allOptions),\n [allOptions, options],\n );\n const allValueList = useMemo(\n () => resolvedOptions.filter((option) => !option.disabled).map((option) => option.value),\n [resolvedOptions],\n );\n const joinedAllValue = useMemo(() => joinSelectorValue(allValueList), [allValueList]);\n const normalizedValue = isControlled ? value : internalValue;\n const splitValueList = useMemo(() => splitSelectorValue(normalizedValue), [normalizedValue]);\n const selectedValueList = useMemo(() => {\n if (\n multiple &&\n !disableAllValueItem &&\n (normalizedValue == null || normalizedValue === '') &&\n emptyValueMode === 'all'\n ) {\n return allValueList;\n }\n\n return splitValueList;\n }, [allValueList, disableAllValueItem, emptyValueMode, multiple, normalizedValue, splitValueList]);\n const selectedValueSet = useMemo(() => new Set(selectedValueList), [selectedValueList]);\n const allOption = useMemo<OwpSelectorBaseOption<null>>(\n () => ({\n label: t('Common.전체'),\n raw: null,\n value: getSelectorAllToken(),\n }),\n [t],\n );\n const selectedOptions = useMemo(\n () => resolvedOptions.filter((option) => selectedValueSet.has(option.value)),\n [resolvedOptions, selectedValueSet],\n );\n const isAllSelected = useMemo(() => {\n if (disableAllValueItem) {\n return false;\n }\n\n if (!multiple) {\n return normalizedValue == null || normalizedValue === '';\n }\n\n if ((normalizedValue == null || normalizedValue === '') && emptyValueMode === 'all') {\n return true;\n }\n\n if (allValueMode === 'empty') {\n return emptyValueMode === 'all';\n }\n\n return Boolean(allValueList.length) && allValueList.every((item) => selectedValueSet.has(item));\n }, [\n allValueList,\n allValueMode,\n disableAllValueItem,\n emptyValueMode,\n multiple,\n normalizedValue,\n selectedValueSet,\n ]);\n const selectedOption = useMemo(() => {\n if (!multiple && isAllSelected && !disableAllValueItem) {\n return allOption;\n }\n\n return selectedOptions[0] ?? null;\n }, [allOption, disableAllValueItem, isAllSelected, multiple, selectedOptions]);\n const allValue = multiple\n ? allValueMode === 'joined'\n ? joinedAllValue\n : ''\n : '';\n\n const emitChange = useCallback(\n (nextValue: string, nextEmptyMode?: OwpSelectorEmptyValueMode) => {\n if (multiple && !disableAllValueItem) {\n if (nextValue === '') {\n pendingEmptyValueMode.current = nextEmptyMode ?? 'none';\n setEmptyValueMode(nextEmptyMode ?? 'none');\n } else {\n pendingEmptyValueMode.current = null;\n setEmptyValueMode('none');\n }\n }\n\n if (!isControlled) {\n setInternalValue(nextValue);\n }\n\n onChangeRef.current?.(createSelectorChangeEvent(name, nextValue));\n },\n [disableAllValueItem, isControlled, multiple, name],\n );\n\n const selectAll = useCallback(() => {\n emitChange(allValue, multiple && allValueMode === 'empty' ? 'all' : undefined);\n }, [allValue, allValueMode, emitChange, multiple]);\n\n const restoreAllSelection = useCallback(() => {\n if (!multiple || disableAllValueItem) {\n return;\n }\n\n pendingEmptyValueMode.current = 'all';\n previousNormalizedValue.current = '';\n setEmptyValueMode('all');\n\n if (!isControlled) {\n setInternalValue('');\n }\n }, [disableAllValueItem, isControlled, multiple]);\n\n const clearSelection = useCallback(() => {\n emitChange('', multiple ? 'none' : undefined);\n }, [emitChange, multiple]);\n\n const selectSingleValue = useCallback(\n (nextValue: string) => {\n emitChange(nextValue);\n },\n [emitChange],\n );\n\n const selectMultipleValues = useCallback(\n (nextSelectedValueList: string[]) => {\n const normalizedSelectedValueList = nextSelectedValueList.filter((item) => item !== '');\n\n if (\n !disableAllValueItem &&\n Boolean(allValueList.length) &&\n allValueList.every((item) => normalizedSelectedValueList.includes(item))\n ) {\n selectAll();\n return;\n }\n\n emitChange(\n joinSelectorValue(normalizedSelectedValueList),\n allValueMode === 'empty' ? 'none' : undefined,\n );\n },\n [allValueList, allValueMode, disableAllValueItem, emitChange, selectAll],\n );\n\n useEffect(() => {\n if (isControlled) {\n return;\n }\n\n setInternalValue(defaultValue);\n }, [defaultValue, isControlled]);\n\n useEffect(() => {\n if (multiple && !disableAllValueItem) {\n const nextNormalizedValue = normalizedValue ?? '';\n const previousValue = previousNormalizedValue.current;\n\n if (nextNormalizedValue === '') {\n const nextPendingEmptyValueMode = pendingEmptyValueMode.current;\n\n if (nextPendingEmptyValueMode) {\n setEmptyValueMode(nextPendingEmptyValueMode);\n pendingEmptyValueMode.current = null;\n } else if (previousValue !== nextNormalizedValue) {\n setEmptyValueMode('all');\n }\n\n previousNormalizedValue.current = nextNormalizedValue;\n\n return;\n }\n\n const nextSelectedValueList = splitSelectorValue(nextNormalizedValue);\n const isNextAllSelected =\n Boolean(allValueList.length) &&\n allValueList.every((item) => nextSelectedValueList.includes(item));\n\n setEmptyValueMode(isNextAllSelected ? 'all' : 'none');\n pendingEmptyValueMode.current = null;\n previousNormalizedValue.current = nextNormalizedValue;\n\n return;\n }\n\n previousNormalizedValue.current = normalizedValue ?? '';\n }, [allValueList, disableAllValueItem, multiple, normalizedValue]);\n\n useEffect(() => {\n if (\n !multiple ||\n disableAllValueItem ||\n didInitializeAllValue.current ||\n isControlled ||\n (internalValue !== undefined && internalValue !== '') ||\n !allValueList.length\n ) {\n return;\n }\n\n didInitializeAllValue.current = true;\n emitChange(allValue, multiple && allValueMode === 'empty' ? 'all' : undefined);\n }, [\n allValue,\n allValueList.length,\n allValueMode,\n disableAllValueItem,\n emitChange,\n internalValue,\n isControlled,\n multiple,\n ]);\n\n return {\n allOption,\n allValue,\n clearSelection,\n isAllSelected,\n resolvedOptions,\n restoreAllSelection,\n selectAll,\n selectedOption,\n selectedOptions: isAllSelected && multiple && !disableAllValueItem ? [allOption, ...resolvedOptions] : selectedOptions,\n selectedValueList,\n selectMultipleValues,\n selectSingleValue,\n };\n};\n"],"names":["useOwpSelectorBase","__name","allOptions","allValueMode","defaultValue","disableAllValueItem","multiple","name","onChange","options","value","t","useOwpTranslation","isControlled","normalizedDefaultValue","internalValue","setInternalValue","useState","emptyValueMode","setEmptyValueMode","didInitializeAllValue","useRef","previousNormalizedValue","pendingEmptyValueMode","onChangeRef","resolvedOptions","useMemo","mergeSelectorOptions","allValueList","option","joinedAllValue","joinSelectorValue","normalizedValue","splitValueList","splitSelectorValue","selectedValueList","selectedValueSet","allOption","getSelectorAllToken","selectedOptions","isAllSelected","item","selectedOption","allValue","emitChange","useCallback","nextValue","nextEmptyMode","_a","createSelectorChangeEvent","selectAll","restoreAllSelection","clearSelection","selectSingleValue","selectMultipleValues","nextSelectedValueList","normalizedSelectedValueList","useEffect","nextNormalizedValue","previousValue","nextPendingEmptyValueMode","isNextAllSelected"],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
var c = Object.defineProperty;
|
|
2
|
+
var r = (e, t) => c(e, "name", { value: t, configurable: !0 });
|
|
3
|
+
const a = "__OWP_SELECTOR_ALL__", o = /* @__PURE__ */ r(() => a, "getSelectorAllToken"), i = /* @__PURE__ */ r((e) => e ? e.split(",").map((t) => t.trim()).filter(Boolean) : [], "splitSelectorValue"), u = /* @__PURE__ */ r((e) => e.map((t) => t.trim()).filter(Boolean).join(","), "joinSelectorValue"), E = /* @__PURE__ */ r((e, t) => ({
|
|
4
|
+
target: {
|
|
5
|
+
name: e ?? "",
|
|
6
|
+
value: t
|
|
7
|
+
}
|
|
8
|
+
}), "createSelectorChangeEvent"), S = /* @__PURE__ */ r((...e) => {
|
|
9
|
+
const t = /* @__PURE__ */ new Map();
|
|
10
|
+
return e.forEach((l) => {
|
|
11
|
+
l == null || l.forEach((n) => {
|
|
12
|
+
t.has(n.value) || t.set(n.value, n);
|
|
13
|
+
});
|
|
14
|
+
}), Array.from(t.values());
|
|
15
|
+
}, "mergeSelectorOptions"), _ = /* @__PURE__ */ r((e) => e.value === a, "isSelectorAllOption");
|
|
16
|
+
export {
|
|
17
|
+
E as createSelectorChangeEvent,
|
|
18
|
+
o as getSelectorAllToken,
|
|
19
|
+
_ as isSelectorAllOption,
|
|
20
|
+
u as joinSelectorValue,
|
|
21
|
+
S as mergeSelectorOptions,
|
|
22
|
+
i as splitSelectorValue
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=querySelectorUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"querySelectorUtils.js","sources":["../../../../src/components/OwpSelectorBase/utils/querySelectorUtils.ts"],"sourcesContent":["import type { OwpSelectorBaseChangeEvent, OwpSelectorBaseOption } from '../types';\n\nconst SELECTOR_ALL_TOKEN = '__OWP_SELECTOR_ALL__';\n\n/**\n * 전체 선택 토큰 반환\n */\nexport const getSelectorAllToken = () => {\n return SELECTOR_ALL_TOKEN;\n};\n\n/**\n * 선택 값 문자열 분리\n * @param value 원본 선택 값\n */\nexport const splitSelectorValue = (value?: string) => {\n if (!value) {\n return [];\n }\n\n return value\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean);\n};\n\n/**\n * 선택 값 문자열 결합\n * @param valueList 선택 값 목록\n */\nexport const joinSelectorValue = (valueList: string[]) => {\n return valueList\n .map((item) => item.trim())\n .filter(Boolean)\n .join(',');\n};\n\n/**\n * 선택 변경 이벤트 생성\n * @param name 필드 이름\n * @param value 선택 값\n */\nexport const createSelectorChangeEvent = (name: string | undefined, value: string) => {\n return {\n target: {\n name: name ?? '',\n value,\n },\n } as OwpSelectorBaseChangeEvent;\n};\n\n/**\n * 선택 옵션 목록 병합\n * @param optionGroups 옵션 그룹 목록\n */\nexport const mergeSelectorOptions = <T = unknown>(\n ...optionGroups: Array<OwpSelectorBaseOption<T>[] | undefined>\n) => {\n const optionMap = new Map<string, OwpSelectorBaseOption<T>>();\n\n optionGroups.forEach((optionGroup) => {\n optionGroup?.forEach((option) => {\n if (!optionMap.has(option.value)) {\n optionMap.set(option.value, option);\n }\n });\n });\n\n return Array.from(optionMap.values());\n};\n\n/**\n * 선택 옵션 값 포함 여부 확인\n * @param option 선택 옵션\n */\nexport const isSelectorAllOption = (option: OwpSelectorBaseOption) => {\n return option.value === SELECTOR_ALL_TOKEN;\n};\n"],"names":["SELECTOR_ALL_TOKEN","getSelectorAllToken","__name","splitSelectorValue","value","item","joinSelectorValue","valueList","createSelectorChangeEvent","name","mergeSelectorOptions","optionGroups","optionMap","optionGroup","option","isSelectorAllOption"],"mappings":";;AAEA,MAAMA,IAAqB,wBAKdC,IAAsB,gBAAAC,EAAA,MAC1BF,GAD0B,wBAQtBG,IAAqB,gBAAAD,EAAA,CAACE,MAC5BA,IAIEA,EACJ,MAAM,GAAG,EACT,IAAI,CAACC,MAASA,EAAK,KAAA,CAAM,EACzB,OAAO,OAAO,IANR,CAAA,GAFuB,uBAerBC,IAAoB,gBAAAJ,EAAA,CAACK,MACzBA,EACJ,IAAI,CAACF,MAASA,EAAK,MAAM,EACzB,OAAO,OAAO,EACd,KAAK,GAAG,GAJoB,sBAYpBG,IAA4B,gBAAAN,EAAA,CAACO,GAA0BL,OAC3D;AAAA,EACL,QAAQ;AAAA,IACN,MAAMK,KAAQ;AAAA,IACd,OAAAL;AAAA,EAAA;AACF,IALqC,8BAa5BM,IAAuB,gBAAAR,EAAA,IAC/BS,MACA;AACH,QAAMC,wBAAgB,IAAA;AAEtB,SAAAD,EAAa,QAAQ,CAACE,MAAgB;AACpC,IAAAA,KAAA,QAAAA,EAAa,QAAQ,CAACC,MAAW;AAC/B,MAAKF,EAAU,IAAIE,EAAO,KAAK,KAC7BF,EAAU,IAAIE,EAAO,OAAOA,CAAM;AAAA,IAEtC;AAAA,EACF,CAAC,GAEM,MAAM,KAAKF,EAAU,OAAA,CAAQ;AACtC,GAdoC,yBAoBvBG,IAAsB,gBAAAb,EAAA,CAACY,MAC3BA,EAAO,UAAUd,GADS;"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
var
|
|
2
|
-
var l = (t,
|
|
3
|
-
import { jsx as
|
|
4
|
-
import { CacheProvider as
|
|
5
|
-
import { useAppSelector as
|
|
6
|
-
import { selectMainTheme as
|
|
7
|
-
import
|
|
8
|
-
import { ThemeProvider as
|
|
9
|
-
import { useEffect as
|
|
10
|
-
const
|
|
11
|
-
|
|
1
|
+
var m = Object.defineProperty;
|
|
2
|
+
var l = (t, e) => m(t, "name", { value: e, configurable: !0 });
|
|
3
|
+
import { jsx as i, jsxs as g } 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 { CacheProvider as y } from "@emotion/react";
|
|
5
|
+
import { useAppSelector as c } from "../../hooks/useAppStore.js";
|
|
6
|
+
import { selectMainTheme as k, selectToolbarTheme as v } from "../../store/owpSettingsSlice.js";
|
|
7
|
+
import s from "@mui/material/GlobalStyles";
|
|
8
|
+
import { ThemeProvider as f, alpha as n, emphasize as w } from "@mui/material/styles";
|
|
9
|
+
import { useEffect as x } from "react";
|
|
10
|
+
const C = /* @__PURE__ */ i(
|
|
11
|
+
s,
|
|
12
12
|
{
|
|
13
13
|
styles: /* @__PURE__ */ l((t) => ({
|
|
14
14
|
html: {
|
|
@@ -37,12 +37,12 @@ const v = typeof window > "u" ? d : y, k = /* @__PURE__ */ n(
|
|
|
37
37
|
"&:hover": {}
|
|
38
38
|
},
|
|
39
39
|
"a.link, a:not([role=button])[target=_blank]": {
|
|
40
|
-
background:
|
|
40
|
+
background: n(t.palette.secondary.main, 0.2),
|
|
41
41
|
color: "inherit",
|
|
42
42
|
borderBottom: `1px solid ${t.palette.divider}`,
|
|
43
43
|
textDecoration: "none",
|
|
44
44
|
"&:hover": {
|
|
45
|
-
background:
|
|
45
|
+
background: n(t.palette.secondary.main, 0.3),
|
|
46
46
|
textDecoration: "none"
|
|
47
47
|
}
|
|
48
48
|
},
|
|
@@ -66,47 +66,95 @@ const v = typeof window > "u" ? d : y, k = /* @__PURE__ */ n(
|
|
|
66
66
|
}
|
|
67
67
|
}), "styles")
|
|
68
68
|
}
|
|
69
|
-
)
|
|
70
|
-
|
|
69
|
+
), h = /* @__PURE__ */ l((t, e, o) => /* @__PURE__ */ i(
|
|
70
|
+
s,
|
|
71
|
+
{
|
|
72
|
+
styles: {
|
|
73
|
+
":root": {
|
|
74
|
+
"--owp-datepicker-selected-bg": t,
|
|
75
|
+
"--owp-datepicker-selected-color": e,
|
|
76
|
+
"--owp-datepicker-selected-hover-bg": w(t, 0.16),
|
|
77
|
+
"--owp-datepicker-hover-color": o,
|
|
78
|
+
"--owp-datepicker-hover-bg": n(t, 0.14),
|
|
79
|
+
"--owp-datepicker-keyboard-selected-bg": n(t, 0.28),
|
|
80
|
+
"--owp-datepicker-keyboard-selected-hover-bg": n(t, 0.36),
|
|
81
|
+
"--owp-datepicker-keyboard-selected-color": o,
|
|
82
|
+
"--owp-datepicker-range-preview-bg": n(t, 0.48)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
), "getThemeGlobalStyles");
|
|
87
|
+
function T({
|
|
71
88
|
children: t,
|
|
72
|
-
theme:
|
|
73
|
-
root:
|
|
89
|
+
theme: e,
|
|
90
|
+
root: o = !1,
|
|
91
|
+
datePickerSelectedBg: r,
|
|
92
|
+
datePickerSelectedColor: a,
|
|
93
|
+
datePickerHoverColor: d
|
|
74
94
|
}) {
|
|
75
|
-
const { mode:
|
|
76
|
-
return
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}, [o, e]), /* @__PURE__ */ c(g, { theme: r, children: [
|
|
95
|
+
const { mode: p } = e.palette;
|
|
96
|
+
return x(() => {
|
|
97
|
+
o && (document.body.classList.add(p === "light" ? "light" : "dark"), document.body.classList.remove(p === "light" ? "dark" : "light"));
|
|
98
|
+
}, [p, o]), /* @__PURE__ */ g(f, { theme: e, children: [
|
|
80
99
|
t,
|
|
81
|
-
|
|
100
|
+
h(
|
|
101
|
+
r ?? e.palette.primary.main,
|
|
102
|
+
a ?? e.palette.getContrastText(r ?? e.palette.primary.main),
|
|
103
|
+
d ?? e.palette.text.primary
|
|
104
|
+
),
|
|
105
|
+
o && C
|
|
82
106
|
] });
|
|
83
107
|
}
|
|
84
|
-
l(
|
|
85
|
-
function
|
|
108
|
+
l(T, "OwpStyleTheme");
|
|
109
|
+
function u({
|
|
86
110
|
children: t,
|
|
87
|
-
theme:
|
|
88
|
-
root:
|
|
89
|
-
cacheProviderProps:
|
|
111
|
+
theme: e,
|
|
112
|
+
root: o,
|
|
113
|
+
cacheProviderProps: r,
|
|
114
|
+
datePickerSelectedBg: a,
|
|
115
|
+
datePickerSelectedColor: d,
|
|
116
|
+
datePickerHoverColor: p
|
|
90
117
|
}) {
|
|
91
|
-
const
|
|
92
|
-
|
|
118
|
+
const b = /* @__PURE__ */ i(
|
|
119
|
+
T,
|
|
120
|
+
{
|
|
121
|
+
theme: e,
|
|
122
|
+
root: o,
|
|
123
|
+
datePickerSelectedBg: a,
|
|
124
|
+
datePickerSelectedColor: d,
|
|
125
|
+
datePickerHoverColor: p,
|
|
126
|
+
children: t
|
|
127
|
+
}
|
|
128
|
+
);
|
|
129
|
+
return r != null && r.value ? /* @__PURE__ */ i(y, { ...r, children: b }) : b;
|
|
93
130
|
}
|
|
94
|
-
l(
|
|
95
|
-
function
|
|
131
|
+
l(u, "OwpStyleProviderContent");
|
|
132
|
+
function S({
|
|
96
133
|
children: t,
|
|
97
|
-
root:
|
|
98
|
-
cacheProviderProps:
|
|
134
|
+
root: e,
|
|
135
|
+
cacheProviderProps: o
|
|
99
136
|
}) {
|
|
100
|
-
const
|
|
101
|
-
return /* @__PURE__ */
|
|
137
|
+
const r = c(k), a = c(v), d = a.palette.background.default;
|
|
138
|
+
return /* @__PURE__ */ i(
|
|
139
|
+
u,
|
|
140
|
+
{
|
|
141
|
+
theme: r,
|
|
142
|
+
root: e,
|
|
143
|
+
cacheProviderProps: o,
|
|
144
|
+
datePickerSelectedBg: d,
|
|
145
|
+
datePickerSelectedColor: a.palette.getContrastText(d),
|
|
146
|
+
datePickerHoverColor: r.palette.text.primary,
|
|
147
|
+
children: t
|
|
148
|
+
}
|
|
149
|
+
);
|
|
102
150
|
}
|
|
103
|
-
l(
|
|
104
|
-
function
|
|
105
|
-
const { children:
|
|
106
|
-
return
|
|
151
|
+
l(S, "OwpStyleProviderFallback");
|
|
152
|
+
function A(t) {
|
|
153
|
+
const { children: e, theme: o, root: r, cacheProviderProps: a } = t;
|
|
154
|
+
return o ? /* @__PURE__ */ i(u, { theme: o, root: r, cacheProviderProps: a, children: e }) : /* @__PURE__ */ i(S, { root: r, cacheProviderProps: a, children: e });
|
|
107
155
|
}
|
|
108
|
-
l(
|
|
156
|
+
l(A, "OwpStyleProvider");
|
|
109
157
|
export {
|
|
110
|
-
|
|
158
|
+
A as OwpStyleProvider
|
|
111
159
|
};
|
|
112
160
|
//# sourceMappingURL=OwpStyleProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpStyleProvider.js","sources":["../../../src/components/OwpStyleProvider/OwpStyleProvider.tsx"],"sourcesContent":["import { CacheProvider } from '@emotion/react';\nimport { useAppSelector } from '@/hooks/useAppStore';\nimport { selectMainTheme } from '@/store/owpSettingsSlice';\nimport type { RootState } from '@/store/store';\nimport GlobalStyles from '@mui/material/GlobalStyles';\nimport { alpha, ThemeProvider, type Theme } from '@mui/material/styles';\nimport { ComponentProps, ReactNode, useEffect, useLayoutEffect } from 'react';\n\ntype OwpCacheProviderProps = Omit<ComponentProps<typeof CacheProvider>, 'children'>;\ntype OwpStyleProviderContentProps = Omit<OwpStyleProviderProps, 'theme'> & { theme: Theme };\n\n/**\n * Layout effect fallback for SSR environments.\n */\nconst useEnhancedEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\nconst inputGlobalStyles = (\n <GlobalStyles\n styles={(theme) => ({\n html: {\n backgroundColor: `${theme.palette.background.default}!important`,\n color: `${theme.palette.text.primary}!important`,\n },\n body: {\n backgroundColor: theme.palette.background.default,\n color: theme.palette.text.primary,\n },\n '& .MuiOutlinedInput-root': {\n backgroundColor: theme.palette.background.paper,\n },\n '& .border-divider ': {\n borderColor: `${theme.palette.divider}!important`,\n },\n 'table.simple tbody tr th': {\n borderColor: theme.palette.divider,\n },\n 'table.simple thead tr th': {\n borderColor: theme.palette.divider,\n },\n 'a:not([role=button]):not(.MuiButtonBase-root)': {\n color: theme.palette.secondary.main,\n textDecoration: 'underline',\n '&:hover': {},\n },\n 'a.link, a:not([role=button])[target=_blank]': {\n background: alpha(theme.palette.secondary.main, 0.2),\n color: 'inherit',\n borderBottom: `1px solid ${theme.palette.divider}`,\n textDecoration: 'none',\n '&:hover': {\n background: alpha(theme.palette.secondary.main, 0.3),\n textDecoration: 'none',\n },\n },\n '[class^=\"border\"]': {\n borderColor: theme.palette.divider,\n },\n '[class*=\"border\"]': {\n borderColor: theme.palette.divider,\n },\n '[class*=\"divide-\"] > :not([hidden]) ~ :not([hidden])': {\n borderColor: theme.palette.divider,\n },\n hr: {\n borderColor: theme.palette.divider,\n },\n '::-webkit-scrollbar-thumb': {\n boxShadow: `inset 0 0 0 20px ${\n theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.24)' : 'rgba(255, 255, 255, 0.24)'\n }`,\n },\n '::-webkit-scrollbar-thumb:active': {\n boxShadow: `inset 0 0 0 20px ${\n theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.37)' : 'rgba(255, 255, 255, 0.37)'\n }`,\n },\n })}\n />\n);\n\nexport interface OwpStyleProviderProps {\n children?: ReactNode;\n theme?: Theme;\n root?: boolean;\n cacheProviderProps?: OwpCacheProviderProps;\n}\n\n/**\n * MUI theme boundary and global style layer.\n * @param theme MUI theme 객체\n * @param root 글로벌 스타일 적용 여부\n * @param children 렌더링 자식\n */\nfunction OwpStyleTheme({\n children,\n theme,\n root = false,\n}: Pick<OwpStyleProviderProps, 'children' | 'root'> & { theme: Theme }) {\n const { mode } = theme.palette;\n\n useEnhancedEffect(() => {\n if (root) {\n \n }\n }, [root]);\n\n useEffect(() => {\n if (root) {\n document.body.classList.add(mode === 'light' ? 'light' : 'dark');\n document.body.classList.remove(mode === 'light' ? 'dark' : 'light');\n }\n }, [mode, root]);\n\n return (\n <ThemeProvider theme={theme}>\n {children}\n {root && inputGlobalStyles}\n </ThemeProvider>\n );\n}\n\n/**\n * CacheProvider, theme composition\n * @param theme MUI theme 객체\n * @param root 글로벌 스타일 적용 여부\n * @param cacheProviderProps CacheProvider 옵션\n */\nfunction OwpStyleProviderContent({\n children,\n theme,\n root,\n cacheProviderProps,\n}: OwpStyleProviderContentProps) {\n const themeContent = (\n <OwpStyleTheme theme={theme} root={root}>\n {children}\n </OwpStyleTheme>\n );\n\n if (!cacheProviderProps?.value) {\n return themeContent;\n }\n\n return <CacheProvider {...cacheProviderProps}>{themeContent}</CacheProvider>;\n}\n\n/**\n * Store main theme fallback provider\n * @param root 글로벌 스타일 적용 여부\n * @param cacheProviderProps CacheProvider 옵션\n */\nfunction OwpStyleProviderFallback({\n children,\n root,\n cacheProviderProps,\n}: Omit<OwpStyleProviderProps, 'theme'>) {\n const theme = useAppSelector(selectMainTheme as (state: RootState) => Theme);\n\n return (\n <OwpStyleProviderContent theme={theme} root={root} cacheProviderProps={cacheProviderProps}>\n {children}\n </OwpStyleProviderContent>\n );\n}\n\n/**\n * CacheProvider, theme composition\n * @param theme MUI theme 객체. 미지정 시 store main theme 사용\n * @param root 글로벌 스타일 적용 여부\n * @param cacheProviderProps CacheProvider 옵션\n */\nexport function OwpStyleProvider(props: OwpStyleProviderProps) {\n const { children, theme, root, cacheProviderProps } = props;\n\n if (theme) {\n return (\n <OwpStyleProviderContent theme={theme} root={root} cacheProviderProps={cacheProviderProps}>\n {children}\n </OwpStyleProviderContent>\n );\n }\n\n return (\n <OwpStyleProviderFallback root={root} cacheProviderProps={cacheProviderProps}>\n {children}\n </OwpStyleProviderFallback>\n );\n}\n"],"names":["useEnhancedEffect","useEffect","useLayoutEffect","inputGlobalStyles","jsx","GlobalStyles","__name","theme","alpha","OwpStyleTheme","children","root","mode","jsxs","ThemeProvider","OwpStyleProviderContent","cacheProviderProps","themeContent","CacheProvider","OwpStyleProviderFallback","useAppSelector","selectMainTheme","OwpStyleProvider","props"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OwpStyleProvider.js","sources":["../../../src/components/OwpStyleProvider/OwpStyleProvider.tsx"],"sourcesContent":["import { CacheProvider } from '@emotion/react';\nimport { useAppSelector } from '@/hooks/useAppStore';\nimport { selectMainTheme, selectToolbarTheme } from '@/store/owpSettingsSlice';\nimport type { RootState } from '@/store/store';\nimport GlobalStyles from '@mui/material/GlobalStyles';\nimport { alpha, emphasize, ThemeProvider, type Theme } from '@mui/material/styles';\nimport { ComponentProps, ReactNode, useEffect } from 'react';\n\ntype OwpCacheProviderProps = Omit<ComponentProps<typeof CacheProvider>, 'children'>;\ntype OwpStyleProviderContentProps = Omit<OwpStyleProviderProps, 'theme'> & {\n theme: Theme;\n datePickerSelectedBg?: string;\n datePickerSelectedColor?: string;\n datePickerHoverColor?: string;\n};\n\nconst inputGlobalStyles = (\n <GlobalStyles\n styles={(theme) => ({\n html: {\n backgroundColor: `${theme.palette.background.default}!important`,\n color: `${theme.palette.text.primary}!important`,\n },\n body: {\n backgroundColor: theme.palette.background.default,\n color: theme.palette.text.primary,\n },\n '& .MuiOutlinedInput-root': {\n backgroundColor: theme.palette.background.paper,\n },\n '& .border-divider ': {\n borderColor: `${theme.palette.divider}!important`,\n },\n 'table.simple tbody tr th': {\n borderColor: theme.palette.divider,\n },\n 'table.simple thead tr th': {\n borderColor: theme.palette.divider,\n },\n 'a:not([role=button]):not(.MuiButtonBase-root)': {\n color: theme.palette.secondary.main,\n textDecoration: 'underline',\n '&:hover': {},\n },\n 'a.link, a:not([role=button])[target=_blank]': {\n background: alpha(theme.palette.secondary.main, 0.2),\n color: 'inherit',\n borderBottom: `1px solid ${theme.palette.divider}`,\n textDecoration: 'none',\n '&:hover': {\n background: alpha(theme.palette.secondary.main, 0.3),\n textDecoration: 'none',\n },\n },\n '[class^=\"border\"]': {\n borderColor: theme.palette.divider,\n },\n '[class*=\"border\"]': {\n borderColor: theme.palette.divider,\n },\n '[class*=\"divide-\"] > :not([hidden]) ~ :not([hidden])': {\n borderColor: theme.palette.divider,\n },\n hr: {\n borderColor: theme.palette.divider,\n },\n '::-webkit-scrollbar-thumb': {\n boxShadow: `inset 0 0 0 20px ${\n theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.24)' : 'rgba(255, 255, 255, 0.24)'\n }`,\n },\n '::-webkit-scrollbar-thumb:active': {\n boxShadow: `inset 0 0 0 20px ${\n theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.37)' : 'rgba(255, 255, 255, 0.37)'\n }`,\n },\n })}\n />\n);\n\nconst getThemeGlobalStyles = (\n datePickerSelectedBg: string,\n datePickerSelectedColor: string,\n datePickerHoverColor: string,\n) => (\n <GlobalStyles\n styles={{\n ':root': {\n '--owp-datepicker-selected-bg': datePickerSelectedBg,\n '--owp-datepicker-selected-color': datePickerSelectedColor,\n '--owp-datepicker-selected-hover-bg': emphasize(datePickerSelectedBg, 0.16),\n '--owp-datepicker-hover-color': datePickerHoverColor,\n '--owp-datepicker-hover-bg': alpha(datePickerSelectedBg, 0.14),\n '--owp-datepicker-keyboard-selected-bg': alpha(datePickerSelectedBg, 0.28),\n '--owp-datepicker-keyboard-selected-hover-bg': alpha(datePickerSelectedBg, 0.36),\n '--owp-datepicker-keyboard-selected-color': datePickerHoverColor,\n '--owp-datepicker-range-preview-bg': alpha(datePickerSelectedBg, 0.48),\n },\n }}\n />\n);\n\nexport interface OwpStyleProviderProps {\n children?: ReactNode;\n theme?: Theme;\n root?: boolean;\n cacheProviderProps?: OwpCacheProviderProps;\n}\n\n/**\n * MUI theme boundary and global style layer.\n * @param theme MUI theme 객체\n * @param root 글로벌 스타일 적용 여부\n * @param children 렌더링 자식\n */\nfunction OwpStyleTheme({\n children,\n theme,\n root = false,\n datePickerSelectedBg,\n datePickerSelectedColor,\n datePickerHoverColor,\n}: Pick<OwpStyleProviderProps, 'children' | 'root'> & {\n theme: Theme;\n datePickerSelectedBg?: string;\n datePickerSelectedColor?: string;\n datePickerHoverColor?: string;\n}) {\n const { mode } = theme.palette;\n\n useEffect(() => {\n if (root) {\n document.body.classList.add(mode === 'light' ? 'light' : 'dark');\n document.body.classList.remove(mode === 'light' ? 'dark' : 'light');\n }\n }, [mode, root]);\n\n return (\n <ThemeProvider theme={theme}>\n {children}\n {getThemeGlobalStyles(\n datePickerSelectedBg ?? theme.palette.primary.main,\n datePickerSelectedColor ??\n theme.palette.getContrastText(datePickerSelectedBg ?? theme.palette.primary.main),\n datePickerHoverColor ?? theme.palette.text.primary,\n )}\n {root && inputGlobalStyles}\n </ThemeProvider>\n );\n}\n\n/**\n * CacheProvider, theme composition\n * @param theme MUI theme 객체\n * @param root 글로벌 스타일 적용 여부\n * @param cacheProviderProps CacheProvider 옵션\n */\nfunction OwpStyleProviderContent({\n children,\n theme,\n root,\n cacheProviderProps,\n datePickerSelectedBg,\n datePickerSelectedColor,\n datePickerHoverColor,\n}: OwpStyleProviderContentProps) {\n const themeContent = (\n <OwpStyleTheme\n theme={theme}\n root={root}\n datePickerSelectedBg={datePickerSelectedBg}\n datePickerSelectedColor={datePickerSelectedColor}\n datePickerHoverColor={datePickerHoverColor}\n >\n {children}\n </OwpStyleTheme>\n );\n\n if (!cacheProviderProps?.value) {\n return themeContent;\n }\n\n return <CacheProvider {...cacheProviderProps}>{themeContent}</CacheProvider>;\n}\n\n/**\n * Store main theme fallback provider\n * @param root 글로벌 스타일 적용 여부\n * @param cacheProviderProps CacheProvider 옵션\n */\nfunction OwpStyleProviderFallback({\n children,\n root,\n cacheProviderProps,\n}: Omit<OwpStyleProviderProps, 'theme'>) {\n const theme = useAppSelector(selectMainTheme as (state: RootState) => Theme);\n const toolbarTheme = useAppSelector(selectToolbarTheme as (state: RootState) => Theme);\n const datePickerSelectedBg = toolbarTheme.palette.background.default;\n\n return (\n <OwpStyleProviderContent\n theme={theme}\n root={root}\n cacheProviderProps={cacheProviderProps}\n datePickerSelectedBg={datePickerSelectedBg}\n datePickerSelectedColor={toolbarTheme.palette.getContrastText(datePickerSelectedBg)}\n datePickerHoverColor={theme.palette.text.primary}\n >\n {children}\n </OwpStyleProviderContent>\n );\n}\n\n/**\n * CacheProvider, theme composition\n * @param theme MUI theme 객체. 미지정 시 store main theme 사용\n * @param root 글로벌 스타일 적용 여부\n * @param cacheProviderProps CacheProvider 옵션\n */\nexport function OwpStyleProvider(props: OwpStyleProviderProps) {\n const { children, theme, root, cacheProviderProps } = props;\n\n if (theme) {\n return (\n <OwpStyleProviderContent theme={theme} root={root} cacheProviderProps={cacheProviderProps}>\n {children}\n </OwpStyleProviderContent>\n );\n }\n\n return (\n <OwpStyleProviderFallback root={root} cacheProviderProps={cacheProviderProps}>\n {children}\n </OwpStyleProviderFallback>\n );\n}\n"],"names":["inputGlobalStyles","jsx","GlobalStyles","__name","theme","alpha","getThemeGlobalStyles","datePickerSelectedBg","datePickerSelectedColor","datePickerHoverColor","emphasize","OwpStyleTheme","children","root","mode","useEffect","jsxs","ThemeProvider","OwpStyleProviderContent","cacheProviderProps","themeContent","CacheProvider","OwpStyleProviderFallback","useAppSelector","selectMainTheme","toolbarTheme","selectToolbarTheme","OwpStyleProvider","props"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpSuspense.js","sources":["../../../src/components/OwpSuspense/OwpSuspense.tsx"],"sourcesContent":["import { OwpPageSkeleton } from '@/components/OwpPageSkeleton
|
|
1
|
+
{"version":3,"file":"OwpSuspense.js","sources":["../../../src/components/OwpSuspense/OwpSuspense.tsx"],"sourcesContent":["import { OwpPageSkeleton } from '@/components/OwpPageSkeleton';\nimport { OwpLoading } from '@/components/OwpLoading';\nimport type { OwpLoadingProps } from '@/components/OwpLoading/OwpLoading';\nimport { useOwpAppContext } from '@/contexts/OwpAppProvider';\nimport clsx from 'clsx';\nimport type {\n OwpPageSkeletonSpec,\n OwpRouteLoadingConfig,\n OwpRouteLoadingSlotProps,\n} from '@/contexts/OwpAppProvider';\nimport {\n ComponentType,\n ReactNode,\n Suspense,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { useLocation } from 'react-router-dom';\n\ntype OwpSuspenseProps = {\n loadingProps?: OwpLoadingProps;\n children: ReactNode;\n};\n\n/**\n * The OwpSuspense component is a wrapper around the React Suspense component.\n * It is used to display a loading spinner while the wrapped components are being loaded.\n * The component is memoized to prevent unnecessary re-renders.\n * React Suspense defaults\n * For to Avoid Repetition\n */\nfunction OwpSuspense(props: OwpSuspenseProps) {\n const { children, loadingProps } = props;\n const { pathname } = useLocation();\n const { slots, slotProps } = useOwpAppContext();\n const RouteLoadingSlot = slots?.routeLoading;\n const { getSkeletonSpec, releaseOnClick = false, ...routeLoadingProps } =\n slotProps?.routeLoading ?? {};\n const skeletonSpec = getSkeletonSpec?.(pathname);\n const hasCompletedInitialMountRef = useRef(false);\n const [holdPathname, setHoldPathname] = useState<string | null>(null);\n const isReleaseOnClickEnabled = releaseOnClick === true;\n\n useEffect(() => {\n hasCompletedInitialMountRef.current = true;\n }, []);\n\n const shouldUseSkeleton = hasCompletedInitialMountRef.current && !!skeletonSpec;\n\n return (\n <Suspense\n fallback={\n <RouteLoadingFallback\n pathname={pathname}\n loadingProps={loadingProps}\n routeLoadingSlotProps={routeLoadingProps}\n RouteLoadingSlot={RouteLoadingSlot}\n skeletonSpec={skeletonSpec}\n shouldUseSkeleton={shouldUseSkeleton}\n shouldHoldOnResolve={!RouteLoadingSlot && shouldUseSkeleton && isReleaseOnClickEnabled}\n onFallbackRendered={() => {\n setHoldPathname(pathname);\n }}\n />\n }\n >\n <RouteLoadingHold\n skeletonSpec={skeletonSpec}\n isVisible={holdPathname === pathname}\n onRelease={() => {\n setHoldPathname(null);\n }}\n >\n {children}\n </RouteLoadingHold>\n </Suspense>\n );\n}\n\nexport { OwpSuspense };\n\ntype RouteLoadingFallbackProps = {\n pathname: string;\n loadingProps?: OwpLoadingProps;\n routeLoadingSlotProps?: Omit<\n Partial<OwpRouteLoadingSlotProps>,\n 'pathname' | 'isFirstRouteLoading'\n > &\n OwpRouteLoadingConfig;\n RouteLoadingSlot?: ComponentType<OwpRouteLoadingSlotProps>;\n skeletonSpec?: OwpPageSkeletonSpec;\n shouldUseSkeleton: boolean;\n shouldHoldOnResolve: boolean;\n onFallbackRendered: () => void;\n};\n\nfunction RouteLoadingFallback({\n pathname,\n loadingProps,\n routeLoadingSlotProps,\n RouteLoadingSlot,\n skeletonSpec,\n shouldUseSkeleton,\n shouldHoldOnResolve,\n onFallbackRendered,\n}: RouteLoadingFallbackProps) {\n useEffect(() => {\n if (shouldHoldOnResolve) {\n onFallbackRendered();\n }\n }, [onFallbackRendered, shouldHoldOnResolve]);\n\n if (RouteLoadingSlot) {\n return (\n <RouteLoadingSlot\n {...routeLoadingSlotProps}\n {...loadingProps}\n pathname={pathname}\n isFirstRouteLoading={true}\n />\n );\n }\n\n if (shouldUseSkeleton && skeletonSpec) {\n return <OwpPageSkeleton spec={skeletonSpec} />;\n }\n\n return (\n <OwpLoading\n {...routeLoadingSlotProps}\n {...loadingProps}\n className={clsx(routeLoadingSlotProps?.className, loadingProps?.className)}\n />\n );\n}\n\ntype RouteLoadingHoldProps = {\n skeletonSpec?: OwpPageSkeletonSpec;\n isVisible: boolean;\n onRelease: () => void;\n children: ReactNode;\n};\n\nfunction RouteLoadingHold({\n skeletonSpec,\n isVisible,\n onRelease,\n children,\n}: RouteLoadingHoldProps) {\n if (!isVisible || !skeletonSpec) {\n return children;\n }\n\n return (\n <div\n aria-label=\"Release route loading skeleton\"\n className=\"flex min-h-0 w-full flex-1 cursor-pointer flex-col overflow-hidden\"\n onClick={onRelease}\n onKeyDown={(event) => {\n if (event.key !== 'Enter' && event.key !== ' ') {\n return;\n }\n\n event.preventDefault();\n onRelease();\n }}\n role=\"button\"\n tabIndex={0}\n >\n <OwpPageSkeleton spec={skeletonSpec} />\n </div>\n );\n}\n"],"names":["OwpSuspense","props","children","loadingProps","pathname","useLocation","slots","slotProps","useOwpAppContext","RouteLoadingSlot","getSkeletonSpec","releaseOnClick","routeLoadingProps","skeletonSpec","hasCompletedInitialMountRef","useRef","holdPathname","setHoldPathname","useState","isReleaseOnClickEnabled","useEffect","shouldUseSkeleton","jsx","Suspense","RouteLoadingFallback","__name","RouteLoadingHold","routeLoadingSlotProps","shouldHoldOnResolve","onFallbackRendered","OwpPageSkeleton","OwpLoading","clsx","isVisible","onRelease","event"],"mappings":"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"}
|