@owp/core 2.5.15 → 2.5.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/components/OwpPicker/OwpTimePicker.js +147 -185
  2. package/dist/components/OwpPicker/OwpTimePicker.js.map +1 -1
  3. package/dist/components/OwpQuerySelector/OwpQuerySelector.js +184 -177
  4. package/dist/components/OwpQuerySelector/OwpQuerySelector.js.map +1 -1
  5. package/dist/components/OwpTable/internal/treeGridTableStyle.js +16 -21
  6. package/dist/components/OwpTable/internal/treeGridTableStyle.js.map +1 -1
  7. package/dist/components/OwpTreeGrid/OwpTreeGrid.js +237 -215
  8. package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
  9. package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js +153 -0
  10. package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js.map +1 -0
  11. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +301 -209
  12. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
  13. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +141 -127
  14. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -1
  15. package/dist/constants/treeGrid.js +32 -26
  16. package/dist/constants/treeGrid.js.map +1 -1
  17. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/constants.js +1 -1
  18. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/constants.js +1 -1
  19. package/dist/owp-app.css +1 -1
  20. package/dist/types/components/OwpQuerySelector/OwpQuerySelector.d.ts +1 -1
  21. package/dist/types/components/OwpTreeGrid/OwpTreeGrid.d.ts +9 -1
  22. package/dist/types/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.d.ts +14 -0
  23. package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +9 -1
  24. package/dist/types/constants/treeGrid.d.ts +3 -3
  25. package/dist/utils/treeGridUtil.js +81 -76
  26. package/dist/utils/treeGridUtil.js.map +1 -1
  27. package/package.json +1 -1
@@ -1,266 +1,273 @@
1
- var gt = Object.defineProperty;
2
- var s = (t, e) => gt(t, "name", { value: e, configurable: !0 });
3
- import { jsx as Ot } 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 { OwpSelectorBase as bt } from "../OwpSelectorBase/OwpSelectorBase.js";
5
- import { splitSelectorValue as D, mergeSelectorOptions as St } from "../OwpSelectorBase/utils/querySelectorUtils.js";
6
- import { STORAGE_ACCESS_TOKEN_KEY as Qt } from "../../constants/localStorageKeys.js";
7
- import { useOwpAppContext as ht } from "../../contexts/OwpAppProvider.js";
8
- import { useGetCurrentUser as wt } from "../../hooks/useCurrentUser.js";
9
- import { createJsonString as Et } from "../../utils/createJsonString.js";
10
- import { getApiLanguageCode as Lt } from "../../utils/language.js";
11
- import { useQuery as J } from "@tanstack/react-query";
12
- import { useState as C, useMemo as j, useEffect as T } from "react";
13
- import { isArray as st } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isArray.js";
14
- import { isPlainObject as It } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js";
15
- import { isFunction as ct } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isFunction.js";
16
- const Bt = "resultData", P = /* @__PURE__ */ s((t) => typeof t == "string" || typeof t == "number" ? `${t}` : "", "getQuerySelectorOptionLabelText"), Ct = /* @__PURE__ */ s((t) => ({
17
- jsondata: Et(t)
18
- }), "defaultBuildRequestQuery"), rt = /* @__PURE__ */ s((t, e) => e != null && e.length ? [...t, e] : t, "appendQuerySelectorQueryKeyDeps"), z = /* @__PURE__ */ s((t) => {
1
+ var Qt = Object.defineProperty;
2
+ var s = (t, n) => Qt(t, "name", { value: n, configurable: !0 });
3
+ import { jsx as wt } 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 { OwpSelectorBase as ht } from "../OwpSelectorBase/OwpSelectorBase.js";
5
+ import { splitSelectorValue as P, mergeSelectorOptions as Et } from "../OwpSelectorBase/utils/querySelectorUtils.js";
6
+ import { STORAGE_ACCESS_TOKEN_KEY as Lt } from "../../constants/localStorageKeys.js";
7
+ import { useOwpAppContext as Ct } from "../../contexts/OwpAppProvider.js";
8
+ import { useGetCurrentUser as It } from "../../hooks/useCurrentUser.js";
9
+ import { createJsonString as Bt } from "../../utils/createJsonString.js";
10
+ import { getApiLanguageCode as Nt } from "../../utils/language.js";
11
+ import { useQuery as y } from "@tanstack/react-query";
12
+ import { clsx as st } from "../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js";
13
+ import { useState as B, useMemo as N, useEffect as j } from "react";
14
+ import { isArray as it } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isArray.js";
15
+ import { isPlainObject as jt } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js";
16
+ import { isFunction as at } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isFunction.js";
17
+ const $t = "resultData", v = /* @__PURE__ */ s((t) => typeof t == "string" || typeof t == "number" ? `${t}` : "", "getQuerySelectorOptionLabelText"), Tt = /* @__PURE__ */ s((t) => ({
18
+ jsondata: Bt(t)
19
+ }), "defaultBuildRequestQuery"), ct = /* @__PURE__ */ s((t, n) => n != null && n.length ? [...t, n] : t, "appendQuerySelectorQueryKeyDeps"), G = /* @__PURE__ */ s((t) => {
19
20
  if (t instanceof Date)
20
21
  return t.toJSON();
21
22
  if (typeof t == "bigint")
22
23
  return t.toString();
23
- if (st(t))
24
- return t.map((e) => z(e));
25
- if (It(t))
26
- return Object.keys(t).sort().reduce((e, i) => {
27
- const d = z(t[i]);
28
- return d === void 0 || (e[i] = d), e;
24
+ if (it(t))
25
+ return t.map((n) => G(n));
26
+ if (jt(t))
27
+ return Object.keys(t).sort().reduce((n, c) => {
28
+ const g = G(t[c]);
29
+ return g === void 0 || (n[c] = g), n;
29
30
  }, {});
30
- if (!(ct(t) || typeof t == "symbol"))
31
+ if (!(at(t) || typeof t == "symbol"))
31
32
  return t;
32
- }, "normalizeQuerySelectorKeyValue"), jt = /* @__PURE__ */ s((t) => JSON.stringify(z(t)), "createQuerySelectorScopeKey"), Tt = /* @__PURE__ */ s((t, e, i, d) => {
33
- const S = new URL(t.endsWith("/") ? t : `${t}/`), c = new URL(e.startsWith("/") ? e.slice(1) : e, S);
34
- return Object.entries(i).forEach(([f, m]) => {
35
- m != null && c.searchParams.set(f, typeof m == "string" ? m : JSON.stringify(m));
36
- }), d && c.searchParams.set("TOKEN", d), c.searchParams.set("i18nextLng", Lt()), c.toString();
37
- }, "createQuerySelectorRequestUrl"), $t = /* @__PURE__ */ s((t, e) => {
33
+ }, "normalizeQuerySelectorKeyValue"), Vt = /* @__PURE__ */ s((t) => JSON.stringify(G(t)), "createQuerySelectorScopeKey"), Mt = /* @__PURE__ */ s((t, n, c, g) => {
34
+ const C = new URL(t.endsWith("/") ? t : `${t}/`), f = new URL(n.startsWith("/") ? n.slice(1) : n, C);
35
+ return Object.entries(c).forEach(([l, u]) => {
36
+ u != null && f.searchParams.set(l, typeof u == "string" ? u : JSON.stringify(u));
37
+ }), g && f.searchParams.set("TOKEN", g), f.searchParams.set("i18nextLng", Nt()), f.toString();
38
+ }, "createQuerySelectorRequestUrl"), _t = /* @__PURE__ */ s((t, n) => {
38
39
  if (!t || typeof t != "object")
39
40
  return [];
40
- const i = t[e];
41
- return st(i) ? i : [];
42
- }, "getQuerySelectorResponseList"), Vt = /* @__PURE__ */ s((t, e, i) => `${(i ? i(t) : `${(t == null ? void 0 : t[e ?? ""]) ?? ""}`) ?? ""}`.trim(), "resolveQuerySelectorValue"), Mt = /* @__PURE__ */ s((t, e, i) => `${(i ? i(t) : `${(t == null ? void 0 : t[e ?? ""]) ?? ""}`) ?? ""}`.trim(), "resolveQuerySelectorLabel"), _t = /* @__PURE__ */ s((t, e, i, d, S) => t.map((c) => {
43
- const f = Vt(c, e, d);
44
- return f ? {
45
- label: Mt(c, i, S),
46
- raw: c,
47
- value: f
41
+ const c = t[n];
42
+ return it(c) ? c : [];
43
+ }, "getQuerySelectorResponseList"), Rt = /* @__PURE__ */ s((t, n, c) => `${(c ? c(t) : `${(t == null ? void 0 : t[n ?? ""]) ?? ""}`) ?? ""}`.trim(), "resolveQuerySelectorValue"), Jt = /* @__PURE__ */ s((t, n, c) => `${(c ? c(t) : `${(t == null ? void 0 : t[n ?? ""]) ?? ""}`) ?? ""}`.trim(), "resolveQuerySelectorLabel"), zt = /* @__PURE__ */ s((t, n, c, g, C) => t.map((f) => {
44
+ const l = Rt(f, n, g);
45
+ return l ? {
46
+ label: Jt(f, c, C),
47
+ raw: f,
48
+ value: l
48
49
  } : null;
49
- }).filter((c) => c != null), "mapQuerySelectorOptions"), Zt = /* @__PURE__ */ s(({
50
+ }).filter((f) => f != null), "mapQuerySelectorOptions"), Pt = /* @__PURE__ */ s(({
50
51
  apiUrl: t,
51
- asyncSearch: e,
52
- buildRequestQuery: i = Ct,
53
- disableAllValueItem: d,
54
- filterOptions: S,
55
- multiple: c,
56
- query: f,
57
- queryKeyDeps: m,
58
- responseListKey: Q = Bt,
59
- selectorType: q = "select",
60
- value: O,
61
- valueKey: h,
62
- valueResolver: it,
63
- labelKey: w,
64
- labelResolver: ut,
65
- onChange: k,
66
- defaultValue: $,
67
- textFieldProps: E,
68
- ...at
52
+ asyncSearch: n,
53
+ buildRequestQuery: c = Tt,
54
+ className: g,
55
+ disableAllValueItem: C,
56
+ filterOptions: f,
57
+ multiple: l,
58
+ query: u,
59
+ queryKeyDeps: $,
60
+ responseListKey: Q = $t,
61
+ selectorType: T = "select",
62
+ value: b,
63
+ valueKey: w,
64
+ valueResolver: ut,
65
+ labelKey: h,
66
+ labelResolver: ft,
67
+ onChange: W,
68
+ defaultValue: V,
69
+ textFieldProps: m,
70
+ ...lt
69
71
  }) => {
70
- const { env: G } = ht(), W = wt(), B = `${(G == null ? void 0 : G.apiBaseUrl) ?? ""}`.trim(), ft = `${(W == null ? void 0 : W.token) ?? localStorage.getItem(Qt) ?? ""}`.trim(), n = q === "autocomplete" ? e : void 0, u = n != null, v = u ? !0 : d, lt = (n == null ? void 0 : n.minLength) ?? 1, tt = (n == null ? void 0 : n.debounceMs) ?? 300, [Y, x] = C(O ?? $ ?? ""), [dt, p] = C(""), [ot, V] = C(""), [F, M] = C(""), et = m != null && m.length ? z(m) : void 0, b = jt(
71
- rt(
72
- [t, f, Q, h, w],
72
+ const { env: Y } = Ct(), H = It(), I = `${(Y == null ? void 0 : Y.apiBaseUrl) ?? ""}`.trim(), mt = `${(H == null ? void 0 : H.token) ?? localStorage.getItem(Lt) ?? ""}`.trim(), e = T === "autocomplete" ? n : void 0, i = e != null, tt = i ? !0 : C, dt = (e == null ? void 0 : e.minLength) ?? 1, ot = (e == null ? void 0 : e.debounceMs) ?? 300, [U, X] = B(b ?? V ?? ""), [gt, p] = B(""), [nt, M] = B(""), [Z, _] = B(""), et = $ != null && $.length ? G($) : void 0, S = Vt(
73
+ ct(
74
+ [t, u, Q, w, h],
73
75
  et
74
76
  )
75
- ), [_, mt] = C(() => ({
77
+ ), [R, pt] = B(() => ({
76
78
  options: {},
77
- scopeKey: b
78
- })), nt = j(
79
- () => _.scopeKey === b ? _.options : {},
80
- [_.options, _.scopeKey, b]
81
- ), L = j(() => D(Y), [Y]), H = u && F.trim().length >= lt, N = /* @__PURE__ */ s((...o) => rt(["owp", "query-selector", ...o], et), "createSelectorQueryKey");
82
- T(() => {
83
- O !== void 0 && x(O);
84
- }, [O]), T(() => {
85
- O === void 0 && x($ ?? "");
86
- }, [$, O]), T(() => {
87
- if (!u)
79
+ scopeKey: S
80
+ })), rt = N(
81
+ () => R.scopeKey === S ? R.options : {},
82
+ [R.options, R.scopeKey, S]
83
+ ), E = N(() => P(U), [U]), A = i && Z.trim().length >= dt, J = /* @__PURE__ */ s((...o) => ct(["owp", "query-selector", ...o], et), "createSelectorQueryKey");
84
+ j(() => {
85
+ b !== void 0 && X(b);
86
+ }, [b]), j(() => {
87
+ b === void 0 && X(V ?? "");
88
+ }, [V, b]), j(() => {
89
+ if (!i)
88
90
  return;
89
91
  const o = window.setTimeout(() => {
90
- M(ot.trim());
91
- }, tt);
92
+ _(nt.trim());
93
+ }, ot);
92
94
  return () => {
93
95
  window.clearTimeout(o);
94
96
  };
95
- }, [tt, u, ot]);
96
- const R = /* @__PURE__ */ s(async (o) => {
97
+ }, [ot, i, nt]);
98
+ const z = /* @__PURE__ */ s(async (o) => {
97
99
  const r = await fetch(
98
- Tt(B, t, i(o), ft)
100
+ Mt(I, t, c(o), mt)
99
101
  ), a = await r.json();
100
102
  if (!r.ok || (a == null ? void 0 : a.resultCode) === "STATUS_0")
101
103
  throw new Error(`${(a == null ? void 0 : a.resultMessage) ?? "Failed to fetch selector options"}`);
102
- const l = $t(a, Q), g = ct(S) ? S(l) : l;
103
- return _t(
104
- g,
105
- h,
104
+ const d = _t(a, Q), O = at(f) ? f(d) : d;
105
+ return zt(
106
+ O,
106
107
  w,
107
- it,
108
- ut
108
+ h,
109
+ ut,
110
+ ft
109
111
  );
110
- }, "fetchOptions"), U = J({
111
- queryKey: N(t, f, Q, h, w),
112
- enabled: !!B && !u,
113
- queryFn: /* @__PURE__ */ s(() => R(f), "queryFn")
114
- }), X = J({
115
- queryKey: N(
112
+ }, "fetchOptions"), K = y({
113
+ queryKey: J(t, u, Q, w, h),
114
+ enabled: !!I && !i,
115
+ queryFn: /* @__PURE__ */ s(() => z(u), "queryFn")
116
+ }), D = y({
117
+ queryKey: J(
116
118
  "search",
117
119
  t,
118
- f,
119
- F,
120
+ u,
121
+ Z,
120
122
  Q,
121
- h,
122
- w
123
+ w,
124
+ h
123
125
  ),
124
- enabled: !!B && u && H,
125
- queryFn: /* @__PURE__ */ s(() => R({
126
- ...f,
127
- ...(n == null ? void 0 : n.buildKeywordQuery(F)) ?? {}
126
+ enabled: !!I && i && A,
127
+ queryFn: /* @__PURE__ */ s(() => z({
128
+ ...u,
129
+ ...(e == null ? void 0 : e.buildKeywordQuery(Z)) ?? {}
128
130
  }), "queryFn")
129
- }), Z = J({
130
- queryKey: N(
131
+ }), q = y({
132
+ queryKey: J(
131
133
  "all",
132
134
  t,
133
- f,
135
+ u,
134
136
  Q,
135
- h,
136
- w
137
+ w,
138
+ h
137
139
  ),
138
- enabled: !!B && u && (!!L.length || !!c && !v),
140
+ enabled: !!I && i && (!!E.length || !!l && !tt),
139
141
  queryFn: /* @__PURE__ */ s(() => {
140
142
  var o;
141
- return R({
142
- ...f,
143
- ...((o = n == null ? void 0 : n.buildAllQuery) == null ? void 0 : o.call(n)) ?? {}
143
+ return z({
144
+ ...u,
145
+ ...((o = e == null ? void 0 : e.buildAllQuery) == null ? void 0 : o.call(e)) ?? {}
144
146
  });
145
147
  }, "queryFn")
146
- }), A = J({
147
- queryKey: N(
148
+ }), x = y({
149
+ queryKey: J(
148
150
  "selected",
149
151
  t,
150
- f,
151
- L,
152
+ u,
153
+ E,
152
154
  Q,
153
- h,
154
- w
155
+ w,
156
+ h
155
157
  ),
156
- enabled: !!B && u && !!L.length && !!(n != null && n.buildSelectedQuery),
158
+ enabled: !!I && i && !!E.length && !!(e != null && e.buildSelectedQuery),
157
159
  queryFn: /* @__PURE__ */ s(() => {
158
160
  var o;
159
- return R({
160
- ...f,
161
- ...((o = n == null ? void 0 : n.buildSelectedQuery) == null ? void 0 : o.call(n, L)) ?? {}
161
+ return z({
162
+ ...u,
163
+ ...((o = e == null ? void 0 : e.buildSelectedQuery) == null ? void 0 : o.call(e, E)) ?? {}
162
164
  });
163
165
  }, "queryFn")
164
- }), K = j(() => u ? H ? X.data ?? [] : [] : U.data ?? [], [
165
- U.data,
166
- u,
167
- X.data,
168
- H
169
- ]), I = j(
170
- () => St(
171
- K,
172
- Z.data,
173
- A.data,
174
- Object.values(nt)
166
+ }), F = N(() => i ? A ? D.data ?? [] : [] : K.data ?? [], [
167
+ K.data,
168
+ i,
169
+ D.data,
170
+ A
171
+ ]), L = N(
172
+ () => Et(
173
+ F,
174
+ q.data,
175
+ x.data,
176
+ Object.values(rt)
175
177
  ),
176
- [Z.data, nt, K, A.data]
177
- ), y = j(
178
+ [q.data, rt, F, x.data]
179
+ ), k = N(
178
180
  () => {
179
181
  const o = {};
180
- return I.forEach((r) => {
182
+ return L.forEach((r) => {
181
183
  o[r.value] = r;
182
184
  }), o;
183
185
  },
184
- [I]
185
- ), pt = U.isLoading || X.isLoading || Z.isLoading || A.isLoading;
186
- return T(() => {
187
- I.length && mt((o) => {
188
- const r = o.scopeKey === b ? o.options : {}, a = { ...r };
189
- let l = !1;
190
- return I.forEach((g) => {
191
- a[g.value] !== g && (a[g.value] = g, l = !0);
192
- }), !l && o.scopeKey === b ? o : {
193
- options: l ? a : r,
194
- scopeKey: b
186
+ [L]
187
+ ), Ot = K.isLoading || D.isLoading || q.isLoading || x.isLoading, bt = st(T === "autocomplete" && "!min-w-160", g), St = st(
188
+ T === "autocomplete" && !(m != null && m.className) && "w-full",
189
+ m == null ? void 0 : m.className
190
+ );
191
+ return j(() => {
192
+ L.length && pt((o) => {
193
+ const r = o.scopeKey === S ? o.options : {}, a = { ...r };
194
+ let d = !1;
195
+ return L.forEach((O) => {
196
+ a[O.value] !== O && (a[O.value] = O, d = !0);
197
+ }), !d && o.scopeKey === S ? o : {
198
+ options: d ? a : r,
199
+ scopeKey: S
195
200
  };
196
201
  });
197
- }, [b, I]), T(() => {
202
+ }, [S, L]), j(() => {
198
203
  var r;
199
- if (!u)
204
+ if (!i)
200
205
  return;
201
- if (c) {
206
+ if (l) {
202
207
  p("");
203
208
  return;
204
209
  }
205
- const o = L[0];
210
+ const o = E[0];
206
211
  if (!o) {
207
212
  p("");
208
213
  return;
209
214
  }
210
- p(P(((r = y[o]) == null ? void 0 : r.label) ?? ""));
211
- }, [u, c, y, L]), /* @__PURE__ */ Ot(
212
- bt,
215
+ p(v(((r = k[o]) == null ? void 0 : r.label) ?? ""));
216
+ }, [i, l, k, E]), /* @__PURE__ */ wt(
217
+ ht,
213
218
  {
214
- ...at,
215
- allOptions: I,
219
+ ...lt,
220
+ allOptions: L,
216
221
  allValueMode: "joined",
217
- autocompleteInputValue: u ? dt : void 0,
218
- defaultValue: $,
219
- disableAllValueItem: v,
220
- disableClientFilter: u,
221
- loading: pt,
222
- multiple: c,
223
- onAutocompleteInputChange: u ? (o, r) => {
224
- r !== "reset" && (c && r !== "input" || (p(o), V(o)));
222
+ autocompleteInputValue: i ? gt : void 0,
223
+ className: bt,
224
+ defaultValue: V,
225
+ disableAllValueItem: tt,
226
+ disableClientFilter: i,
227
+ loading: Ot,
228
+ multiple: l,
229
+ onAutocompleteInputChange: i ? (o, r) => {
230
+ r !== "reset" && (l && r !== "input" || (p(o), M(o)));
225
231
  } : void 0,
226
232
  onChange: /* @__PURE__ */ s((o) => {
227
233
  var r;
228
- if (x(o.target.value), u) {
229
- const a = D(o.target.value);
230
- if (c)
231
- p(""), V(""), M("");
234
+ if (X(o.target.value), i) {
235
+ const a = P(o.target.value);
236
+ if (l)
237
+ p(""), M(""), _("");
232
238
  else {
233
- const l = a[0], g = l ? P(((r = y[l]) == null ? void 0 : r.label) ?? "") : "";
234
- p(g), V(""), M("");
239
+ const d = a[0], O = d ? v(((r = k[d]) == null ? void 0 : r.label) ?? "") : "";
240
+ p(O), M(""), _("");
235
241
  }
236
242
  }
237
- k == null || k(o);
243
+ W == null || W(o);
238
244
  }, "onChange"),
239
- options: K,
240
- selectorType: q,
245
+ options: F,
246
+ selectorType: T,
241
247
  textFieldProps: {
242
- ...E,
248
+ ...m,
249
+ className: St,
243
250
  onBlur: /* @__PURE__ */ s((o) => {
244
251
  var r, a;
245
- if (u) {
246
- if (c)
252
+ if (i) {
253
+ if (l)
247
254
  p("");
248
255
  else {
249
- const l = D(Y)[0];
256
+ const d = P(U)[0];
250
257
  p(
251
- l ? P(((r = y[l]) == null ? void 0 : r.label) ?? "") : ""
258
+ d ? v(((r = k[d]) == null ? void 0 : r.label) ?? "") : ""
252
259
  );
253
260
  }
254
- V(""), M("");
261
+ M(""), _("");
255
262
  }
256
- (a = E == null ? void 0 : E.onBlur) == null || a.call(E, o);
263
+ (a = m == null ? void 0 : m.onBlur) == null || a.call(m, o);
257
264
  }, "onBlur")
258
265
  },
259
- value: O
266
+ value: b
260
267
  }
261
268
  );
262
269
  }, "OwpQuerySelector");
263
270
  export {
264
- Zt as OwpQuerySelector
271
+ Pt as OwpQuerySelector
265
272
  };
266
273
  //# sourceMappingURL=OwpQuerySelector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OwpQuerySelector.js","sources":["../../../src/components/OwpQuerySelector/OwpQuerySelector.tsx"],"sourcesContent":["import { OwpSelectorBase } from '@/components/OwpSelectorBase/OwpSelectorBase';\nimport type { OwpSelectorBaseOption } from '@/components/OwpSelectorBase/types';\nimport { mergeSelectorOptions, splitSelectorValue } from '@/components/OwpSelectorBase/utils';\nimport { STORAGE_ACCESS_TOKEN_KEY } from '@/constants/localStorageKeys';\nimport { useOwpAppContext } from '@/contexts/OwpAppProvider';\nimport { useGetCurrentUser } from '@/hooks/useCurrentUser';\nimport { createJsonString } from '@/utils/createJsonString';\nimport { getApiLanguageCode } from '@/utils/language';\nimport { useQuery } from '@tanstack/react-query';\nimport { isArray, isFunction, isPlainObject } from 'es-toolkit/compat';\nimport { useEffect, useMemo, useState } from 'react';\nimport type { OwpQuerySelectorProps } from './types';\n\nconst DEFAULT_RESPONSE_LIST_KEY = 'resultData';\n\n/**\n * 선택 옵션 라벨 문자열 변환\n * @param label 선택 옵션 라벨\n */\nconst getQuerySelectorOptionLabelText = (label: OwpSelectorBaseOption['label']) => {\n return typeof label === 'string' || typeof label === 'number' ? `${label}` : '';\n};\n\n/**\n * 요청 query 객체 구성\n * @param query 원본 query\n */\nconst defaultBuildRequestQuery = (query: Record<string, unknown>) => {\n return {\n jsondata: createJsonString(query),\n };\n};\n\n/**\n * query key 추가 의존성 병합\n * @param queryKey 원본 query key\n * @param queryKeyDeps 추가 의존성\n */\nconst appendQuerySelectorQueryKeyDeps = (\n queryKey: unknown[],\n queryKeyDeps?: readonly unknown[],\n) => {\n return queryKeyDeps?.length ? [...queryKey, queryKeyDeps] : queryKey;\n};\n\n/**\n * query key 직렬화 값 정규화\n * @param value 원본 값\n */\nconst normalizeQuerySelectorKeyValue = (value: unknown): unknown => {\n if (value instanceof Date) {\n return value.toJSON();\n }\n\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (isArray(value)) {\n return value.map((item) => normalizeQuerySelectorKeyValue(item));\n }\n\n if (isPlainObject(value)) {\n return Object.keys(value as Record<string, unknown>)\n .sort()\n .reduce<Record<string, unknown>>((result, key) => {\n const normalizedValue = normalizeQuerySelectorKeyValue((value as Record<string, unknown>)[key]);\n\n if (normalizedValue === undefined) {\n return result;\n }\n\n result[key] = normalizedValue;\n\n return result;\n }, {});\n }\n\n if (isFunction(value) || typeof value === 'symbol') {\n return undefined;\n }\n\n return value;\n};\n\n/**\n * 요청 범위 key 문자열 생성\n * @param value 요청 범위 값\n */\nconst createQuerySelectorScopeKey = (value: unknown) => {\n return JSON.stringify(normalizeQuerySelectorKeyValue(value));\n};\n\n/**\n * API 요청 URL 생성\n * @param apiBaseUrl API base URL\n * @param apiUrl API path\n * @param requestQuery 요청 query\n * @param accessToken 접근 토큰\n */\nconst createQuerySelectorRequestUrl = (\n apiBaseUrl: string,\n apiUrl: string,\n requestQuery: Record<string, unknown>,\n accessToken: string,\n) => {\n const baseUrl = new URL(apiBaseUrl.endsWith('/') ? apiBaseUrl : `${apiBaseUrl}/`);\n const requestUrl = new URL(apiUrl.startsWith('/') ? apiUrl.slice(1) : apiUrl, baseUrl);\n\n Object.entries(requestQuery).forEach(([key, value]) => {\n if (value == null) {\n return;\n }\n\n requestUrl.searchParams.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n });\n\n if (accessToken) {\n requestUrl.searchParams.set('TOKEN', accessToken);\n }\n\n requestUrl.searchParams.set('i18nextLng', getApiLanguageCode());\n\n return requestUrl.toString();\n};\n\n/**\n * 원격 선택기 응답 목록 정규화\n * @param data 응답 데이터\n * @param responseListKey 목록 키\n */\nconst getQuerySelectorResponseList = (data: unknown, responseListKey: string) => {\n if (!data || typeof data !== 'object') {\n return [];\n }\n\n const responseList = (data as Record<string, unknown>)[responseListKey];\n\n return isArray(responseList) ? (responseList as Record<string, unknown>[]) : [];\n};\n\n/**\n * 원격 아이템 value 계산\n * @param item 응답 아이템\n * @param valueKey value key\n * @param valueResolver value resolver\n */\nconst resolveQuerySelectorValue = (\n item: Record<string, unknown>,\n valueKey?: string,\n valueResolver?: (item: Record<string, unknown>) => string,\n) => {\n const value = valueResolver ? valueResolver(item) : `${item?.[valueKey ?? ''] ?? ''}`;\n\n return `${value ?? ''}`.trim();\n};\n\n/**\n * 원격 아이템 label 계산\n * @param item 응답 아이템\n * @param labelKey label key\n * @param labelResolver label resolver\n */\nconst resolveQuerySelectorLabel = (\n item: Record<string, unknown>,\n labelKey?: string,\n labelResolver?: (item: Record<string, unknown>) => string,\n) => {\n const label = labelResolver ? labelResolver(item) : `${item?.[labelKey ?? ''] ?? ''}`;\n\n return `${label ?? ''}`.trim();\n};\n\n/**\n * 원격 응답 데이터를 선택 옵션으로 변환\n * @param items 응답 아이템 목록\n * @param valueKey value key\n * @param labelKey label key\n * @param valueResolver value resolver\n * @param labelResolver label resolver\n */\nconst mapQuerySelectorOptions = (\n items: Record<string, unknown>[],\n valueKey?: string,\n labelKey?: string,\n valueResolver?: (item: Record<string, unknown>) => string,\n labelResolver?: (item: Record<string, unknown>) => string,\n) => {\n return items\n .map((item) => {\n const value = resolveQuerySelectorValue(item, valueKey, valueResolver);\n\n if (!value) {\n return null;\n }\n\n return {\n label: resolveQuerySelectorLabel(item, labelKey, labelResolver),\n raw: item,\n value,\n } as OwpSelectorBaseOption<Record<string, unknown>>;\n })\n .filter((option): option is OwpSelectorBaseOption<Record<string, unknown>> => option != null);\n};\n\n/**\n * 원격 조회형 공통 선택기\n * @param props 원격 선택기 props\n */\nexport const OwpQuerySelector = ({\n apiUrl,\n asyncSearch,\n buildRequestQuery = defaultBuildRequestQuery,\n disableAllValueItem,\n filterOptions,\n multiple,\n query,\n queryKeyDeps,\n responseListKey = DEFAULT_RESPONSE_LIST_KEY,\n selectorType = 'select',\n value,\n valueKey,\n valueResolver,\n labelKey,\n labelResolver,\n onChange,\n defaultValue,\n textFieldProps,\n ...selectorBaseProps\n}: OwpQuerySelectorProps) => {\n const { env } = useOwpAppContext();\n const currentUser = useGetCurrentUser();\n const apiBaseUrl = `${env?.apiBaseUrl ?? ''}`.trim();\n const accessToken = `${currentUser?.token ?? localStorage.getItem(STORAGE_ACCESS_TOKEN_KEY) ?? ''}`.trim();\n const resolvedAsyncSearch = selectorType === 'autocomplete' ? asyncSearch : undefined;\n const isAsyncSearchEnabled = resolvedAsyncSearch != null;\n const resolvedDisableAllValueItem = isAsyncSearchEnabled ? true : disableAllValueItem;\n const minLength = resolvedAsyncSearch?.minLength ?? 1;\n const debounceMs = resolvedAsyncSearch?.debounceMs ?? 300;\n const [currentSelectionValue, setCurrentSelectionValue] = useState(value ?? defaultValue ?? '');\n const [autocompleteInputValue, setAutocompleteInputValue] = useState('');\n const [searchKeyword, setSearchKeyword] = useState('');\n const [debouncedSearchKeyword, setDebouncedSearchKeyword] = useState('');\n const normalizedQueryKeyDeps =\n queryKeyDeps?.length ? (normalizeQuerySelectorKeyValue(queryKeyDeps) as readonly unknown[]) : undefined;\n const optionsCacheScopeKey = createQuerySelectorScopeKey(\n appendQuerySelectorQueryKeyDeps(\n [apiUrl, query, responseListKey, valueKey, labelKey],\n normalizedQueryKeyDeps,\n ),\n );\n const [cachedOptionsState, setCachedOptionsState] = useState(() => ({\n options: {} as Record<string, OwpSelectorBaseOption<Record<string, unknown>>>,\n scopeKey: optionsCacheScopeKey,\n }));\n const cachedOptions = useMemo(\n () => (cachedOptionsState.scopeKey === optionsCacheScopeKey ? cachedOptionsState.options : {}),\n [cachedOptionsState.options, cachedOptionsState.scopeKey, optionsCacheScopeKey],\n );\n const selectedIds = useMemo(() => splitSelectorValue(currentSelectionValue), [currentSelectionValue]);\n const shouldFetchSearchOptions = isAsyncSearchEnabled && debouncedSearchKeyword.trim().length >= minLength;\n const createSelectorQueryKey = (...segments: unknown[]) => {\n return appendQuerySelectorQueryKeyDeps(['owp', 'query-selector', ...segments], normalizedQueryKeyDeps);\n };\n\n useEffect(() => {\n if (value === undefined) {\n return;\n }\n\n setCurrentSelectionValue(value);\n }, [value]);\n\n useEffect(() => {\n if (value !== undefined) {\n return;\n }\n\n setCurrentSelectionValue(defaultValue ?? '');\n }, [defaultValue, value]);\n\n useEffect(() => {\n if (!isAsyncSearchEnabled) {\n return;\n }\n\n const timer = window.setTimeout(() => {\n setDebouncedSearchKeyword(searchKeyword.trim());\n }, debounceMs);\n\n return () => {\n window.clearTimeout(timer);\n };\n }, [debounceMs, isAsyncSearchEnabled, searchKeyword]);\n\n const fetchOptions = async (nextQuery: Record<string, unknown>) => {\n const response = await fetch(\n createQuerySelectorRequestUrl(apiBaseUrl, apiUrl, buildRequestQuery(nextQuery), accessToken),\n );\n const data = (await response.json()) as Record<string, unknown>;\n\n if (!response.ok || data?.resultCode === 'STATUS_0') {\n throw new Error(`${data?.resultMessage ?? 'Failed to fetch selector options'}`);\n }\n\n const responseList = getQuerySelectorResponseList(data, responseListKey);\n const filteredItems = isFunction(filterOptions) ? filterOptions(responseList) : responseList;\n\n return mapQuerySelectorOptions(\n filteredItems,\n valueKey,\n labelKey,\n valueResolver,\n labelResolver,\n );\n };\n\n const baseOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(apiUrl, query, responseListKey, valueKey, labelKey),\n enabled: Boolean(apiBaseUrl) && !isAsyncSearchEnabled,\n queryFn: () => fetchOptions(query),\n });\n const searchOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'search',\n apiUrl,\n query,\n debouncedSearchKeyword,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled: Boolean(apiBaseUrl) && isAsyncSearchEnabled && shouldFetchSearchOptions,\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildKeywordQuery(debouncedSearchKeyword) ?? {}),\n }),\n });\n const allOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'all',\n apiUrl,\n query,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled:\n Boolean(apiBaseUrl) &&\n isAsyncSearchEnabled &&\n (Boolean(selectedIds.length) || (Boolean(multiple) && !resolvedDisableAllValueItem)),\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildAllQuery?.() ?? {}),\n }),\n });\n const selectedOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'selected',\n apiUrl,\n query,\n selectedIds,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled: Boolean(apiBaseUrl) && isAsyncSearchEnabled && Boolean(selectedIds.length) && Boolean(resolvedAsyncSearch?.buildSelectedQuery),\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildSelectedQuery?.(selectedIds) ?? {}),\n }),\n });\n\n const currentOptions = useMemo(() => {\n if (isAsyncSearchEnabled) {\n return shouldFetchSearchOptions ? (searchOptionsQuery.data ?? []) : [];\n }\n\n return baseOptionsQuery.data ?? [];\n }, [\n baseOptionsQuery.data,\n isAsyncSearchEnabled,\n searchOptionsQuery.data,\n shouldFetchSearchOptions,\n ]);\n const resolvedAllOptions = useMemo(\n () =>\n mergeSelectorOptions(\n currentOptions,\n allOptionsQuery.data,\n selectedOptionsQuery.data,\n Object.values(cachedOptions),\n ),\n [allOptionsQuery.data, cachedOptions, currentOptions, selectedOptionsQuery.data],\n );\n const optionMap = useMemo(\n () => {\n const nextOptionMap: Record<string, OwpSelectorBaseOption<Record<string, unknown>>> = {};\n\n resolvedAllOptions.forEach((option) => {\n nextOptionMap[option.value] = option;\n });\n\n return nextOptionMap;\n },\n [resolvedAllOptions],\n );\n const isLoading =\n baseOptionsQuery.isLoading ||\n searchOptionsQuery.isLoading ||\n allOptionsQuery.isLoading ||\n selectedOptionsQuery.isLoading;\n\n useEffect(() => {\n if (!resolvedAllOptions.length) {\n return;\n }\n\n setCachedOptionsState((previousState) => {\n const previousCachedOptions =\n previousState.scopeKey === optionsCacheScopeKey ? previousState.options : {};\n const nextCachedOptions = { ...previousCachedOptions };\n let hasChanged = false;\n\n resolvedAllOptions.forEach((option) => {\n if (nextCachedOptions[option.value] === option) {\n return;\n }\n\n nextCachedOptions[option.value] = option;\n hasChanged = true;\n });\n\n if (!hasChanged && previousState.scopeKey === optionsCacheScopeKey) {\n return previousState;\n }\n\n return {\n options: hasChanged ? nextCachedOptions : previousCachedOptions,\n scopeKey: optionsCacheScopeKey,\n };\n });\n }, [optionsCacheScopeKey, resolvedAllOptions]);\n\n useEffect(() => {\n if (!isAsyncSearchEnabled) {\n return;\n }\n\n if (multiple) {\n setAutocompleteInputValue('');\n return;\n }\n\n const selectedId = selectedIds[0];\n\n if (!selectedId) {\n setAutocompleteInputValue('');\n return;\n }\n\n setAutocompleteInputValue(getQuerySelectorOptionLabelText(optionMap[selectedId]?.label ?? ''));\n }, [isAsyncSearchEnabled, multiple, optionMap, selectedIds]);\n\n return (\n <OwpSelectorBase\n {...selectorBaseProps}\n allOptions={resolvedAllOptions}\n allValueMode=\"joined\"\n autocompleteInputValue={isAsyncSearchEnabled ? autocompleteInputValue : undefined}\n defaultValue={defaultValue}\n disableAllValueItem={resolvedDisableAllValueItem}\n disableClientFilter={isAsyncSearchEnabled}\n loading={isLoading}\n multiple={multiple}\n onAutocompleteInputChange={\n isAsyncSearchEnabled\n ? (nextInputValue, reason) => {\n if (reason === 'reset') {\n return;\n }\n\n if (multiple && reason !== 'input') {\n return;\n }\n\n setAutocompleteInputValue(nextInputValue);\n setSearchKeyword(nextInputValue);\n }\n : undefined\n }\n onChange={(event) => {\n setCurrentSelectionValue(event.target.value);\n\n if (isAsyncSearchEnabled) {\n const nextSelectedIds = splitSelectorValue(event.target.value);\n\n if (multiple) {\n setAutocompleteInputValue('');\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n } else {\n const nextSelectedId = nextSelectedIds[0];\n const nextLabel = nextSelectedId\n ? getQuerySelectorOptionLabelText(optionMap[nextSelectedId]?.label ?? '')\n : '';\n\n setAutocompleteInputValue(nextLabel);\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n }\n }\n\n onChange?.(event);\n }}\n options={currentOptions}\n selectorType={selectorType}\n textFieldProps={{\n ...textFieldProps,\n onBlur: (event) => {\n if (isAsyncSearchEnabled) {\n if (multiple) {\n setAutocompleteInputValue('');\n } else {\n const selectedId = splitSelectorValue(currentSelectionValue)[0];\n\n setAutocompleteInputValue(\n selectedId ? getQuerySelectorOptionLabelText(optionMap[selectedId]?.label ?? '') : '',\n );\n }\n\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n }\n\n textFieldProps?.onBlur?.(event);\n },\n }}\n value={value}\n />\n );\n};\n"],"names":["DEFAULT_RESPONSE_LIST_KEY","getQuerySelectorOptionLabelText","__name","label","defaultBuildRequestQuery","query","createJsonString","appendQuerySelectorQueryKeyDeps","queryKey","queryKeyDeps","normalizeQuerySelectorKeyValue","value","isArray","item","isPlainObject","result","key","normalizedValue","isFunction","createQuerySelectorScopeKey","createQuerySelectorRequestUrl","apiBaseUrl","apiUrl","requestQuery","accessToken","baseUrl","requestUrl","getApiLanguageCode","getQuerySelectorResponseList","data","responseListKey","responseList","resolveQuerySelectorValue","valueKey","valueResolver","resolveQuerySelectorLabel","labelKey","labelResolver","mapQuerySelectorOptions","items","option","OwpQuerySelector","asyncSearch","buildRequestQuery","disableAllValueItem","filterOptions","multiple","selectorType","onChange","defaultValue","textFieldProps","selectorBaseProps","env","useOwpAppContext","currentUser","useGetCurrentUser","STORAGE_ACCESS_TOKEN_KEY","resolvedAsyncSearch","isAsyncSearchEnabled","resolvedDisableAllValueItem","minLength","debounceMs","currentSelectionValue","setCurrentSelectionValue","useState","autocompleteInputValue","setAutocompleteInputValue","searchKeyword","setSearchKeyword","debouncedSearchKeyword","setDebouncedSearchKeyword","normalizedQueryKeyDeps","optionsCacheScopeKey","cachedOptionsState","setCachedOptionsState","cachedOptions","useMemo","selectedIds","splitSelectorValue","shouldFetchSearchOptions","createSelectorQueryKey","segments","useEffect","timer","fetchOptions","nextQuery","response","filteredItems","baseOptionsQuery","useQuery","searchOptionsQuery","allOptionsQuery","_a","selectedOptionsQuery","currentOptions","resolvedAllOptions","mergeSelectorOptions","optionMap","nextOptionMap","isLoading","previousState","previousCachedOptions","nextCachedOptions","hasChanged","selectedId","jsx","OwpSelectorBase","nextInputValue","reason","event","nextSelectedIds","nextSelectedId","nextLabel","_b"],"mappings":"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"}
1
+ {"version":3,"file":"OwpQuerySelector.js","sources":["../../../src/components/OwpQuerySelector/OwpQuerySelector.tsx"],"sourcesContent":["import { OwpSelectorBase } from '@/components/OwpSelectorBase/OwpSelectorBase';\nimport type { OwpSelectorBaseOption } from '@/components/OwpSelectorBase/types';\nimport { mergeSelectorOptions, splitSelectorValue } from '@/components/OwpSelectorBase/utils';\nimport { STORAGE_ACCESS_TOKEN_KEY } from '@/constants/localStorageKeys';\nimport { useOwpAppContext } from '@/contexts/OwpAppProvider';\nimport { useGetCurrentUser } from '@/hooks/useCurrentUser';\nimport { createJsonString } from '@/utils/createJsonString';\nimport { getApiLanguageCode } from '@/utils/language';\nimport { useQuery } from '@tanstack/react-query';\nimport clsx from 'clsx';\nimport { isArray, isFunction, isPlainObject } from 'es-toolkit/compat';\nimport { useEffect, useMemo, useState } from 'react';\nimport type { OwpQuerySelectorProps } from './types';\n\nconst DEFAULT_RESPONSE_LIST_KEY = 'resultData';\n\n/**\n * 선택 옵션 라벨 문자열 변환\n * @param label 선택 옵션 라벨\n */\nconst getQuerySelectorOptionLabelText = (label: OwpSelectorBaseOption['label']) => {\n return typeof label === 'string' || typeof label === 'number' ? `${label}` : '';\n};\n\n/**\n * 요청 query 객체 구성\n * @param query 원본 query\n */\nconst defaultBuildRequestQuery = (query: Record<string, unknown>) => {\n return {\n jsondata: createJsonString(query),\n };\n};\n\n/**\n * query key 추가 의존성 병합\n * @param queryKey 원본 query key\n * @param queryKeyDeps 추가 의존성\n */\nconst appendQuerySelectorQueryKeyDeps = (\n queryKey: unknown[],\n queryKeyDeps?: readonly unknown[],\n) => {\n return queryKeyDeps?.length ? [...queryKey, queryKeyDeps] : queryKey;\n};\n\n/**\n * query key 직렬화 값 정규화\n * @param value 원본 값\n */\nconst normalizeQuerySelectorKeyValue = (value: unknown): unknown => {\n if (value instanceof Date) {\n return value.toJSON();\n }\n\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (isArray(value)) {\n return value.map((item) => normalizeQuerySelectorKeyValue(item));\n }\n\n if (isPlainObject(value)) {\n return Object.keys(value as Record<string, unknown>)\n .sort()\n .reduce<Record<string, unknown>>((result, key) => {\n const normalizedValue = normalizeQuerySelectorKeyValue((value as Record<string, unknown>)[key]);\n\n if (normalizedValue === undefined) {\n return result;\n }\n\n result[key] = normalizedValue;\n\n return result;\n }, {});\n }\n\n if (isFunction(value) || typeof value === 'symbol') {\n return undefined;\n }\n\n return value;\n};\n\n/**\n * 요청 범위 key 문자열 생성\n * @param value 요청 범위 값\n */\nconst createQuerySelectorScopeKey = (value: unknown) => {\n return JSON.stringify(normalizeQuerySelectorKeyValue(value));\n};\n\n/**\n * API 요청 URL 생성\n * @param apiBaseUrl API base URL\n * @param apiUrl API path\n * @param requestQuery 요청 query\n * @param accessToken 접근 토큰\n */\nconst createQuerySelectorRequestUrl = (\n apiBaseUrl: string,\n apiUrl: string,\n requestQuery: Record<string, unknown>,\n accessToken: string,\n) => {\n const baseUrl = new URL(apiBaseUrl.endsWith('/') ? apiBaseUrl : `${apiBaseUrl}/`);\n const requestUrl = new URL(apiUrl.startsWith('/') ? apiUrl.slice(1) : apiUrl, baseUrl);\n\n Object.entries(requestQuery).forEach(([key, value]) => {\n if (value == null) {\n return;\n }\n\n requestUrl.searchParams.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n });\n\n if (accessToken) {\n requestUrl.searchParams.set('TOKEN', accessToken);\n }\n\n requestUrl.searchParams.set('i18nextLng', getApiLanguageCode());\n\n return requestUrl.toString();\n};\n\n/**\n * 원격 선택기 응답 목록 정규화\n * @param data 응답 데이터\n * @param responseListKey 목록 키\n */\nconst getQuerySelectorResponseList = (data: unknown, responseListKey: string) => {\n if (!data || typeof data !== 'object') {\n return [];\n }\n\n const responseList = (data as Record<string, unknown>)[responseListKey];\n\n return isArray(responseList) ? (responseList as Record<string, unknown>[]) : [];\n};\n\n/**\n * 원격 아이템 value 계산\n * @param item 응답 아이템\n * @param valueKey value key\n * @param valueResolver value resolver\n */\nconst resolveQuerySelectorValue = (\n item: Record<string, unknown>,\n valueKey?: string,\n valueResolver?: (item: Record<string, unknown>) => string,\n) => {\n const value = valueResolver ? valueResolver(item) : `${item?.[valueKey ?? ''] ?? ''}`;\n\n return `${value ?? ''}`.trim();\n};\n\n/**\n * 원격 아이템 label 계산\n * @param item 응답 아이템\n * @param labelKey label key\n * @param labelResolver label resolver\n */\nconst resolveQuerySelectorLabel = (\n item: Record<string, unknown>,\n labelKey?: string,\n labelResolver?: (item: Record<string, unknown>) => string,\n) => {\n const label = labelResolver ? labelResolver(item) : `${item?.[labelKey ?? ''] ?? ''}`;\n\n return `${label ?? ''}`.trim();\n};\n\n/**\n * 원격 응답 데이터를 선택 옵션으로 변환\n * @param items 응답 아이템 목록\n * @param valueKey value key\n * @param labelKey label key\n * @param valueResolver value resolver\n * @param labelResolver label resolver\n */\nconst mapQuerySelectorOptions = (\n items: Record<string, unknown>[],\n valueKey?: string,\n labelKey?: string,\n valueResolver?: (item: Record<string, unknown>) => string,\n labelResolver?: (item: Record<string, unknown>) => string,\n) => {\n return items\n .map((item) => {\n const value = resolveQuerySelectorValue(item, valueKey, valueResolver);\n\n if (!value) {\n return null;\n }\n\n return {\n label: resolveQuerySelectorLabel(item, labelKey, labelResolver),\n raw: item,\n value,\n } as OwpSelectorBaseOption<Record<string, unknown>>;\n })\n .filter((option): option is OwpSelectorBaseOption<Record<string, unknown>> => option != null);\n};\n\n/**\n * 원격 조회형 공통 선택기\n * @param props 원격 선택기 props\n */\nexport const OwpQuerySelector = ({\n apiUrl,\n asyncSearch,\n buildRequestQuery = defaultBuildRequestQuery,\n className,\n disableAllValueItem,\n filterOptions,\n multiple,\n query,\n queryKeyDeps,\n responseListKey = DEFAULT_RESPONSE_LIST_KEY,\n selectorType = 'select',\n value,\n valueKey,\n valueResolver,\n labelKey,\n labelResolver,\n onChange,\n defaultValue,\n textFieldProps,\n ...selectorBaseProps\n}: OwpQuerySelectorProps) => {\n const { env } = useOwpAppContext();\n const currentUser = useGetCurrentUser();\n const apiBaseUrl = `${env?.apiBaseUrl ?? ''}`.trim();\n const accessToken = `${currentUser?.token ?? localStorage.getItem(STORAGE_ACCESS_TOKEN_KEY) ?? ''}`.trim();\n const resolvedAsyncSearch = selectorType === 'autocomplete' ? asyncSearch : undefined;\n const isAsyncSearchEnabled = resolvedAsyncSearch != null;\n const resolvedDisableAllValueItem = isAsyncSearchEnabled ? true : disableAllValueItem;\n const minLength = resolvedAsyncSearch?.minLength ?? 1;\n const debounceMs = resolvedAsyncSearch?.debounceMs ?? 300;\n const [currentSelectionValue, setCurrentSelectionValue] = useState(value ?? defaultValue ?? '');\n const [autocompleteInputValue, setAutocompleteInputValue] = useState('');\n const [searchKeyword, setSearchKeyword] = useState('');\n const [debouncedSearchKeyword, setDebouncedSearchKeyword] = useState('');\n const normalizedQueryKeyDeps =\n queryKeyDeps?.length ? (normalizeQuerySelectorKeyValue(queryKeyDeps) as readonly unknown[]) : undefined;\n const optionsCacheScopeKey = createQuerySelectorScopeKey(\n appendQuerySelectorQueryKeyDeps(\n [apiUrl, query, responseListKey, valueKey, labelKey],\n normalizedQueryKeyDeps,\n ),\n );\n const [cachedOptionsState, setCachedOptionsState] = useState(() => ({\n options: {} as Record<string, OwpSelectorBaseOption<Record<string, unknown>>>,\n scopeKey: optionsCacheScopeKey,\n }));\n const cachedOptions = useMemo(\n () => (cachedOptionsState.scopeKey === optionsCacheScopeKey ? cachedOptionsState.options : {}),\n [cachedOptionsState.options, cachedOptionsState.scopeKey, optionsCacheScopeKey],\n );\n const selectedIds = useMemo(() => splitSelectorValue(currentSelectionValue), [currentSelectionValue]);\n const shouldFetchSearchOptions = isAsyncSearchEnabled && debouncedSearchKeyword.trim().length >= minLength;\n const createSelectorQueryKey = (...segments: unknown[]) => {\n return appendQuerySelectorQueryKeyDeps(['owp', 'query-selector', ...segments], normalizedQueryKeyDeps);\n };\n\n useEffect(() => {\n if (value === undefined) {\n return;\n }\n\n setCurrentSelectionValue(value);\n }, [value]);\n\n useEffect(() => {\n if (value !== undefined) {\n return;\n }\n\n setCurrentSelectionValue(defaultValue ?? '');\n }, [defaultValue, value]);\n\n useEffect(() => {\n if (!isAsyncSearchEnabled) {\n return;\n }\n\n const timer = window.setTimeout(() => {\n setDebouncedSearchKeyword(searchKeyword.trim());\n }, debounceMs);\n\n return () => {\n window.clearTimeout(timer);\n };\n }, [debounceMs, isAsyncSearchEnabled, searchKeyword]);\n\n const fetchOptions = async (nextQuery: Record<string, unknown>) => {\n const response = await fetch(\n createQuerySelectorRequestUrl(apiBaseUrl, apiUrl, buildRequestQuery(nextQuery), accessToken),\n );\n const data = (await response.json()) as Record<string, unknown>;\n\n if (!response.ok || data?.resultCode === 'STATUS_0') {\n throw new Error(`${data?.resultMessage ?? 'Failed to fetch selector options'}`);\n }\n\n const responseList = getQuerySelectorResponseList(data, responseListKey);\n const filteredItems = isFunction(filterOptions) ? filterOptions(responseList) : responseList;\n\n return mapQuerySelectorOptions(\n filteredItems,\n valueKey,\n labelKey,\n valueResolver,\n labelResolver,\n );\n };\n\n const baseOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(apiUrl, query, responseListKey, valueKey, labelKey),\n enabled: Boolean(apiBaseUrl) && !isAsyncSearchEnabled,\n queryFn: () => fetchOptions(query),\n });\n const searchOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'search',\n apiUrl,\n query,\n debouncedSearchKeyword,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled: Boolean(apiBaseUrl) && isAsyncSearchEnabled && shouldFetchSearchOptions,\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildKeywordQuery(debouncedSearchKeyword) ?? {}),\n }),\n });\n const allOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'all',\n apiUrl,\n query,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled:\n Boolean(apiBaseUrl) &&\n isAsyncSearchEnabled &&\n (Boolean(selectedIds.length) || (Boolean(multiple) && !resolvedDisableAllValueItem)),\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildAllQuery?.() ?? {}),\n }),\n });\n const selectedOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'selected',\n apiUrl,\n query,\n selectedIds,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled: Boolean(apiBaseUrl) && isAsyncSearchEnabled && Boolean(selectedIds.length) && Boolean(resolvedAsyncSearch?.buildSelectedQuery),\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildSelectedQuery?.(selectedIds) ?? {}),\n }),\n });\n\n const currentOptions = useMemo(() => {\n if (isAsyncSearchEnabled) {\n return shouldFetchSearchOptions ? (searchOptionsQuery.data ?? []) : [];\n }\n\n return baseOptionsQuery.data ?? [];\n }, [\n baseOptionsQuery.data,\n isAsyncSearchEnabled,\n searchOptionsQuery.data,\n shouldFetchSearchOptions,\n ]);\n const resolvedAllOptions = useMemo(\n () =>\n mergeSelectorOptions(\n currentOptions,\n allOptionsQuery.data,\n selectedOptionsQuery.data,\n Object.values(cachedOptions),\n ),\n [allOptionsQuery.data, cachedOptions, currentOptions, selectedOptionsQuery.data],\n );\n const optionMap = useMemo(\n () => {\n const nextOptionMap: Record<string, OwpSelectorBaseOption<Record<string, unknown>>> = {};\n\n resolvedAllOptions.forEach((option) => {\n nextOptionMap[option.value] = option;\n });\n\n return nextOptionMap;\n },\n [resolvedAllOptions],\n );\n const isLoading =\n baseOptionsQuery.isLoading ||\n searchOptionsQuery.isLoading ||\n allOptionsQuery.isLoading ||\n selectedOptionsQuery.isLoading;\n const resolvedClassName = clsx(selectorType === 'autocomplete' && '!min-w-160', className);\n const resolvedTextFieldClassName = clsx(\n selectorType === 'autocomplete' && !textFieldProps?.className && 'w-full',\n textFieldProps?.className,\n );\n\n useEffect(() => {\n if (!resolvedAllOptions.length) {\n return;\n }\n\n setCachedOptionsState((previousState) => {\n const previousCachedOptions =\n previousState.scopeKey === optionsCacheScopeKey ? previousState.options : {};\n const nextCachedOptions = { ...previousCachedOptions };\n let hasChanged = false;\n\n resolvedAllOptions.forEach((option) => {\n if (nextCachedOptions[option.value] === option) {\n return;\n }\n\n nextCachedOptions[option.value] = option;\n hasChanged = true;\n });\n\n if (!hasChanged && previousState.scopeKey === optionsCacheScopeKey) {\n return previousState;\n }\n\n return {\n options: hasChanged ? nextCachedOptions : previousCachedOptions,\n scopeKey: optionsCacheScopeKey,\n };\n });\n }, [optionsCacheScopeKey, resolvedAllOptions]);\n\n useEffect(() => {\n if (!isAsyncSearchEnabled) {\n return;\n }\n\n if (multiple) {\n setAutocompleteInputValue('');\n return;\n }\n\n const selectedId = selectedIds[0];\n\n if (!selectedId) {\n setAutocompleteInputValue('');\n return;\n }\n\n setAutocompleteInputValue(getQuerySelectorOptionLabelText(optionMap[selectedId]?.label ?? ''));\n }, [isAsyncSearchEnabled, multiple, optionMap, selectedIds]);\n\n return (\n <OwpSelectorBase\n {...selectorBaseProps}\n allOptions={resolvedAllOptions}\n allValueMode=\"joined\"\n autocompleteInputValue={isAsyncSearchEnabled ? autocompleteInputValue : undefined}\n className={resolvedClassName}\n defaultValue={defaultValue}\n disableAllValueItem={resolvedDisableAllValueItem}\n disableClientFilter={isAsyncSearchEnabled}\n loading={isLoading}\n multiple={multiple}\n onAutocompleteInputChange={\n isAsyncSearchEnabled\n ? (nextInputValue, reason) => {\n if (reason === 'reset') {\n return;\n }\n\n if (multiple && reason !== 'input') {\n return;\n }\n\n setAutocompleteInputValue(nextInputValue);\n setSearchKeyword(nextInputValue);\n }\n : undefined\n }\n onChange={(event) => {\n setCurrentSelectionValue(event.target.value);\n\n if (isAsyncSearchEnabled) {\n const nextSelectedIds = splitSelectorValue(event.target.value);\n\n if (multiple) {\n setAutocompleteInputValue('');\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n } else {\n const nextSelectedId = nextSelectedIds[0];\n const nextLabel = nextSelectedId\n ? getQuerySelectorOptionLabelText(optionMap[nextSelectedId]?.label ?? '')\n : '';\n\n setAutocompleteInputValue(nextLabel);\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n }\n }\n\n onChange?.(event);\n }}\n options={currentOptions}\n selectorType={selectorType}\n textFieldProps={{\n ...textFieldProps,\n className: resolvedTextFieldClassName,\n onBlur: (event) => {\n if (isAsyncSearchEnabled) {\n if (multiple) {\n setAutocompleteInputValue('');\n } else {\n const selectedId = splitSelectorValue(currentSelectionValue)[0];\n\n setAutocompleteInputValue(\n selectedId ? getQuerySelectorOptionLabelText(optionMap[selectedId]?.label ?? '') : '',\n );\n }\n\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n }\n\n textFieldProps?.onBlur?.(event);\n },\n }}\n value={value}\n />\n );\n};\n"],"names":["DEFAULT_RESPONSE_LIST_KEY","getQuerySelectorOptionLabelText","__name","label","defaultBuildRequestQuery","query","createJsonString","appendQuerySelectorQueryKeyDeps","queryKey","queryKeyDeps","normalizeQuerySelectorKeyValue","value","isArray","item","isPlainObject","result","key","normalizedValue","isFunction","createQuerySelectorScopeKey","createQuerySelectorRequestUrl","apiBaseUrl","apiUrl","requestQuery","accessToken","baseUrl","requestUrl","getApiLanguageCode","getQuerySelectorResponseList","data","responseListKey","responseList","resolveQuerySelectorValue","valueKey","valueResolver","resolveQuerySelectorLabel","labelKey","labelResolver","mapQuerySelectorOptions","items","option","OwpQuerySelector","asyncSearch","buildRequestQuery","className","disableAllValueItem","filterOptions","multiple","selectorType","onChange","defaultValue","textFieldProps","selectorBaseProps","env","useOwpAppContext","currentUser","useGetCurrentUser","STORAGE_ACCESS_TOKEN_KEY","resolvedAsyncSearch","isAsyncSearchEnabled","resolvedDisableAllValueItem","minLength","debounceMs","currentSelectionValue","setCurrentSelectionValue","useState","autocompleteInputValue","setAutocompleteInputValue","searchKeyword","setSearchKeyword","debouncedSearchKeyword","setDebouncedSearchKeyword","normalizedQueryKeyDeps","optionsCacheScopeKey","cachedOptionsState","setCachedOptionsState","cachedOptions","useMemo","selectedIds","splitSelectorValue","shouldFetchSearchOptions","createSelectorQueryKey","segments","useEffect","timer","fetchOptions","nextQuery","response","filteredItems","baseOptionsQuery","useQuery","searchOptionsQuery","allOptionsQuery","_a","selectedOptionsQuery","currentOptions","resolvedAllOptions","mergeSelectorOptions","optionMap","nextOptionMap","isLoading","resolvedClassName","clsx","resolvedTextFieldClassName","previousState","previousCachedOptions","nextCachedOptions","hasChanged","selectedId","jsx","OwpSelectorBase","nextInputValue","reason","event","nextSelectedIds","nextSelectedId","nextLabel","_b"],"mappings":";;;;;;;;;;;;;;;;AAcA,MAAMA,KAA4B,cAM5BC,IAAkC,gBAAAC,EAAA,CAACC,MAChC,OAAOA,KAAU,YAAY,OAAOA,KAAU,WAAW,GAAGA,CAAK,KAAK,IADvC,oCAQlCC,KAA2B,gBAAAF,EAAA,CAACG,OACzB;AAAA,EACL,UAAUC,GAAiBD,CAAK;AAAA,IAFH,6BAW3BE,KAAkC,gBAAAL,EAAA,CACtCM,GACAC,MAEOA,KAAA,QAAAA,EAAc,SAAS,CAAC,GAAGD,GAAUC,CAAY,IAAID,GAJtB,oCAWlCE,IAAiC,gBAAAR,EAAA,CAACS,MAA4B;AAClE,MAAIA,aAAiB;AACnB,WAAOA,EAAM,OAAA;AAGf,MAAI,OAAOA,KAAU;AACnB,WAAOA,EAAM,SAAA;AAGf,MAAIC,GAAQD,CAAK;AACf,WAAOA,EAAM,IAAI,CAACE,MAASH,EAA+BG,CAAI,CAAC;AAGjE,MAAIC,GAAcH,CAAK;AACrB,WAAO,OAAO,KAAKA,CAAgC,EAChD,OACA,OAAgC,CAACI,GAAQC,MAAQ;AAChD,YAAMC,IAAkBP,EAAgCC,EAAkCK,CAAG,CAAC;AAE9F,aAAIC,MAAoB,WAIxBF,EAAOC,CAAG,IAAIC,IAEPF;AAAA,IACT,GAAG,CAAA,CAAE;AAGT,MAAI,EAAAG,GAAWP,CAAK,KAAK,OAAOA,KAAU;AAI1C,WAAOA;AACT,GAlCuC,mCAwCjCQ,KAA8B,gBAAAjB,EAAA,CAACS,MAC5B,KAAK,UAAUD,EAA+BC,CAAK,CAAC,GADzB,gCAW9BS,KAAgC,gBAAAlB,EAAA,CACpCmB,GACAC,GACAC,GACAC,MACG;AACH,QAAMC,IAAU,IAAI,IAAIJ,EAAW,SAAS,GAAG,IAAIA,IAAa,GAAGA,CAAU,GAAG,GAC1EK,IAAa,IAAI,IAAIJ,EAAO,WAAW,GAAG,IAAIA,EAAO,MAAM,CAAC,IAAIA,GAAQG,CAAO;AAErF,gBAAO,QAAQF,CAAY,EAAE,QAAQ,CAAC,CAACP,GAAKL,CAAK,MAAM;AACrD,IAAIA,KAAS,QAIbe,EAAW,aAAa,IAAIV,GAAK,OAAOL,KAAU,WAAWA,IAAQ,KAAK,UAAUA,CAAK,CAAC;AAAA,EAC5F,CAAC,GAEGa,KACFE,EAAW,aAAa,IAAI,SAASF,CAAW,GAGlDE,EAAW,aAAa,IAAI,cAAcC,GAAA,CAAoB,GAEvDD,EAAW,SAAA;AACpB,GAxBsC,kCA+BhCE,KAA+B,gBAAA1B,EAAA,CAAC2B,GAAeC,MAA4B;AAC/E,MAAI,CAACD,KAAQ,OAAOA,KAAS;AAC3B,WAAO,CAAA;AAGT,QAAME,IAAgBF,EAAiCC,CAAe;AAEtE,SAAOlB,GAAQmB,CAAY,IAAKA,IAA6C,CAAA;AAC/E,GARqC,iCAgB/BC,KAA4B,gBAAA9B,EAAA,CAChCW,GACAoB,GACAC,MAIO,IAFOA,IAAgBA,EAAcrB,CAAI,IAAI,IAAGA,KAAA,gBAAAA,EAAOoB,KAAY,QAAO,EAAE,OAEhE,EAAE,GAAG,KAAA,GAPQ,8BAgB5BE,KAA4B,gBAAAjC,EAAA,CAChCW,GACAuB,GACAC,MAIO,IAFOA,IAAgBA,EAAcxB,CAAI,IAAI,IAAGA,KAAA,gBAAAA,EAAOuB,KAAY,QAAO,EAAE,OAEhE,EAAE,GAAG,KAAA,GAPQ,8BAkB5BE,KAA0B,gBAAApC,EAAA,CAC9BqC,GACAN,GACAG,GACAF,GACAG,MAEOE,EACJ,IAAI,CAAC1B,MAAS;AACb,QAAMF,IAAQqB,GAA0BnB,GAAMoB,GAAUC,CAAa;AAErE,SAAKvB,IAIE;AAAA,IACL,OAAOwB,GAA0BtB,GAAMuB,GAAUC,CAAa;AAAA,IAC9D,KAAKxB;AAAA,IACL,OAAAF;AAAA,EAAA,IANO;AAQX,CAAC,EACA,OAAO,CAAC6B,MAAqEA,KAAU,IAAI,GArBhE,4BA4BnBC,KAAmB,gBAAAvC,EAAA,CAAC;AAAA,EAC/B,QAAAoB;AAAA,EACA,aAAAoB;AAAA,EACA,mBAAAC,IAAoBvC;AAAA,EACpB,WAAAwC;AAAA,EACA,qBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAA1C;AAAA,EACA,cAAAI;AAAA,EACA,iBAAAqB,IAAkB9B;AAAA,EAClB,cAAAgD,IAAe;AAAA,EACf,OAAArC;AAAA,EACA,UAAAsB;AAAA,EACA,eAAAC;AAAA,EACA,UAAAE;AAAA,EACA,eAAAC;AAAA,EACA,UAAAY;AAAA,EACA,cAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,GAAGC;AACL,MAA6B;AAC3B,QAAM,EAAE,KAAAC,EAAA,IAAQC,GAAA,GACVC,IAAcC,GAAA,GACdnC,IAAa,IAAGgC,KAAA,gBAAAA,EAAK,eAAc,EAAE,GAAG,KAAA,GACxC7B,KAAc,IAAG+B,KAAA,gBAAAA,EAAa,UAAS,aAAa,QAAQE,EAAwB,KAAK,EAAE,GAAG,KAAA,GAC9FC,IAAsBV,MAAiB,iBAAiBN,IAAc,QACtEiB,IAAuBD,KAAuB,MAC9CE,KAA8BD,IAAuB,KAAOd,GAC5DgB,MAAYH,KAAA,gBAAAA,EAAqB,cAAa,GAC9CI,MAAaJ,KAAA,gBAAAA,EAAqB,eAAc,KAChD,CAACK,GAAuBC,CAAwB,IAAIC,EAAStD,KAASuC,KAAgB,EAAE,GACxF,CAACgB,IAAwBC,CAAyB,IAAIF,EAAS,EAAE,GACjE,CAACG,IAAeC,CAAgB,IAAIJ,EAAS,EAAE,GAC/C,CAACK,GAAwBC,CAAyB,IAAIN,EAAS,EAAE,GACjEO,KACJ/D,KAAA,QAAAA,EAAc,SAAUC,EAA+BD,CAAY,IAA2B,QAC1FgE,IAAuBtD;AAAA,IAC3BZ;AAAA,MACE,CAACe,GAAQjB,GAAOyB,GAAiBG,GAAUG,CAAQ;AAAA,MACnDoC;AAAA,IAAA;AAAA,EACF,GAEI,CAACE,GAAoBC,EAAqB,IAAIV,EAAS,OAAO;AAAA,IAClE,SAAS,CAAA;AAAA,IACT,UAAUQ;AAAA,EAAA,EACV,GACIG,KAAgBC;AAAA,IACpB,MAAOH,EAAmB,aAAaD,IAAuBC,EAAmB,UAAU,CAAA;AAAA,IAC3F,CAACA,EAAmB,SAASA,EAAmB,UAAUD,CAAoB;AAAA,EAAA,GAE1EK,IAAcD,EAAQ,MAAME,EAAmBhB,CAAqB,GAAG,CAACA,CAAqB,CAAC,GAC9FiB,IAA2BrB,KAAwBW,EAAuB,KAAA,EAAO,UAAUT,IAC3FoB,IAAyB,gBAAA/E,EAAA,IAAIgF,MAC1B3E,GAAgC,CAAC,OAAO,kBAAkB,GAAG2E,CAAQ,GAAGV,EAAsB,GADxE;AAI/B,EAAAW,EAAU,MAAM;AACd,IAAIxE,MAAU,UAIdqD,EAAyBrD,CAAK;AAAA,EAChC,GAAG,CAACA,CAAK,CAAC,GAEVwE,EAAU,MAAM;AACd,IAAIxE,MAAU,UAIdqD,EAAyBd,KAAgB,EAAE;AAAA,EAC7C,GAAG,CAACA,GAAcvC,CAAK,CAAC,GAExBwE,EAAU,MAAM;AACd,QAAI,CAACxB;AACH;AAGF,UAAMyB,IAAQ,OAAO,WAAW,MAAM;AACpC,MAAAb,EAA0BH,GAAc,MAAM;AAAA,IAChD,GAAGN,EAAU;AAEb,WAAO,MAAM;AACX,aAAO,aAAasB,CAAK;AAAA,IAC3B;AAAA,EACF,GAAG,CAACtB,IAAYH,GAAsBS,EAAa,CAAC;AAEpD,QAAMiB,IAAe,gBAAAnF,EAAA,OAAOoF,MAAuC;AACjE,UAAMC,IAAW,MAAM;AAAA,MACrBnE,GAA8BC,GAAYC,GAAQqB,EAAkB2C,CAAS,GAAG9D,EAAW;AAAA,IAAA,GAEvFK,IAAQ,MAAM0D,EAAS,KAAA;AAE7B,QAAI,CAACA,EAAS,OAAM1D,KAAA,gBAAAA,EAAM,gBAAe;AACvC,YAAM,IAAI,MAAM,IAAGA,KAAA,gBAAAA,EAAM,kBAAiB,kCAAkC,EAAE;AAGhF,UAAME,IAAeH,GAA6BC,GAAMC,CAAe,GACjE0D,IAAgBtE,GAAW4B,CAAa,IAAIA,EAAcf,CAAY,IAAIA;AAEhF,WAAOO;AAAA,MACLkD;AAAA,MACAvD;AAAA,MACAG;AAAA,MACAF;AAAA,MACAG;AAAA,IAAA;AAAA,EAEJ,GApBqB,iBAsBfoD,IAAmBC,EAAS;AAAA,IAChC,UAAUT,EAAuB3D,GAAQjB,GAAOyB,GAAiBG,GAAUG,CAAQ;AAAA,IACnF,SAAS,EAAQf,KAAe,CAACsC;AAAA,IACjC,SAAS,gBAAAzD,EAAA,MAAMmF,EAAahF,CAAK,GAAxB;AAAA,EAAwB,CAClC,GACKsF,IAAqBD,EAAS;AAAA,IAClC,UAAUT;AAAA,MACR;AAAA,MACA3D;AAAA,MACAjB;AAAA,MACAiE;AAAA,MACAxC;AAAA,MACAG;AAAA,MACAG;AAAA,IAAA;AAAA,IAEF,SAAS,EAAQf,KAAesC,KAAwBqB;AAAA,IACxD,SAAS,gBAAA9E,EAAA,MACPmF,EAAa;AAAA,MACX,GAAGhF;AAAA,MACH,IAAIqD,KAAA,gBAAAA,EAAqB,kBAAkBY,OAA2B,CAAA;AAAA,IAAC,CACxE,GAJM;AAAA,EAIN,CACJ,GACKsB,IAAkBF,EAAS;AAAA,IAC/B,UAAUT;AAAA,MACR;AAAA,MACA3D;AAAA,MACAjB;AAAA,MACAyB;AAAA,MACAG;AAAA,MACAG;AAAA,IAAA;AAAA,IAEF,SACE,EAAQf,KACRsC,MACC,EAAQmB,EAAY,UAAY,EAAQ/B,KAAa,CAACa;AAAA,IACzD,SAAS,gBAAA1D,EAAA,MAAA;;AACP,aAAAmF,EAAa;AAAA,QACX,GAAGhF;AAAA,QACH,KAAIwF,IAAAnC,KAAA,gBAAAA,EAAqB,kBAArB,gBAAAmC,EAAA,KAAAnC,OAA0C,CAAA;AAAA,MAAC,CAChD;AAAA,OAJM;AAAA,EAIN,CACJ,GACKoC,IAAuBJ,EAAS;AAAA,IACpC,UAAUT;AAAA,MACR;AAAA,MACA3D;AAAA,MACAjB;AAAA,MACAyE;AAAA,MACAhD;AAAA,MACAG;AAAA,MACAG;AAAA,IAAA;AAAA,IAEF,SAAS,EAAQf,KAAesC,KAAwB,EAAQmB,EAAY,UAAW,GAAQpB,KAAA,QAAAA,EAAqB;AAAA,IACpH,SAAS,gBAAAxD,EAAA,MAAA;;AACP,aAAAmF,EAAa;AAAA,QACX,GAAGhF;AAAA,QACH,KAAIwF,IAAAnC,KAAA,gBAAAA,EAAqB,uBAArB,gBAAAmC,EAAA,KAAAnC,GAA0CoB,OAAgB,CAAA;AAAA,MAAC,CAChE;AAAA,OAJM;AAAA,EAIN,CACJ,GAEKiB,IAAiBlB,EAAQ,MACzBlB,IACKqB,IAA4BW,EAAmB,QAAQ,CAAA,IAAM,CAAA,IAG/DF,EAAiB,QAAQ,CAAA,GAC/B;AAAA,IACDA,EAAiB;AAAA,IACjB9B;AAAA,IACAgC,EAAmB;AAAA,IACnBX;AAAA,EAAA,CACD,GACKgB,IAAqBnB;AAAA,IACzB,MACEoB;AAAA,MACEF;AAAA,MACAH,EAAgB;AAAA,MAChBE,EAAqB;AAAA,MACrB,OAAO,OAAOlB,EAAa;AAAA,IAAA;AAAA,IAE/B,CAACgB,EAAgB,MAAMhB,IAAemB,GAAgBD,EAAqB,IAAI;AAAA,EAAA,GAE3EI,IAAYrB;AAAA,IAChB,MAAM;AACJ,YAAMsB,IAAgF,CAAA;AAEtF,aAAAH,EAAmB,QAAQ,CAACxD,MAAW;AACrC,QAAA2D,EAAc3D,EAAO,KAAK,IAAIA;AAAA,MAChC,CAAC,GAEM2D;AAAA,IACT;AAAA,IACA,CAACH,CAAkB;AAAA,EAAA,GAEfI,KACJX,EAAiB,aACjBE,EAAmB,aACnBC,EAAgB,aAChBE,EAAqB,WACjBO,KAAoBC,GAAKtD,MAAiB,kBAAkB,cAAcJ,CAAS,GACnF2D,KAA6BD;AAAA,IACjCtD,MAAiB,kBAAkB,EAACG,KAAA,QAAAA,EAAgB,cAAa;AAAA,IACjEA,KAAA,gBAAAA,EAAgB;AAAA,EAAA;AAGlB,SAAAgC,EAAU,MAAM;AACd,IAAKa,EAAmB,UAIxBrB,GAAsB,CAAC6B,MAAkB;AACvC,YAAMC,IACJD,EAAc,aAAa/B,IAAuB+B,EAAc,UAAU,CAAA,GACtEE,IAAoB,EAAE,GAAGD,EAAA;AAC/B,UAAIE,IAAa;AAWjB,aATAX,EAAmB,QAAQ,CAACxD,MAAW;AACrC,QAAIkE,EAAkBlE,EAAO,KAAK,MAAMA,MAIxCkE,EAAkBlE,EAAO,KAAK,IAAIA,GAClCmE,IAAa;AAAA,MACf,CAAC,GAEG,CAACA,KAAcH,EAAc,aAAa/B,IACrC+B,IAGF;AAAA,QACL,SAASG,IAAaD,IAAoBD;AAAA,QAC1C,UAAUhC;AAAA,MAAA;AAAA,IAEd,CAAC;AAAA,EACH,GAAG,CAACA,GAAsBuB,CAAkB,CAAC,GAE7Cb,EAAU,MAAM;;AACd,QAAI,CAACxB;AACH;AAGF,QAAIZ,GAAU;AACZ,MAAAoB,EAA0B,EAAE;AAC5B;AAAA,IACF;AAEA,UAAMyC,IAAa9B,EAAY,CAAC;AAEhC,QAAI,CAAC8B,GAAY;AACf,MAAAzC,EAA0B,EAAE;AAC5B;AAAA,IACF;AAEA,IAAAA,EAA0BlE,IAAgC4F,IAAAK,EAAUU,CAAU,MAApB,gBAAAf,EAAuB,UAAS,EAAE,CAAC;AAAA,EAC/F,GAAG,CAAClC,GAAsBZ,GAAUmD,GAAWpB,CAAW,CAAC,GAGzD,gBAAA+B;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,GAAG1D;AAAA,MACJ,YAAY4C;AAAA,MACZ,cAAa;AAAA,MACb,wBAAwBrC,IAAuBO,KAAyB;AAAA,MACxE,WAAWmC;AAAA,MACX,cAAAnD;AAAA,MACA,qBAAqBU;AAAA,MACrB,qBAAqBD;AAAA,MACrB,SAASyC;AAAA,MACT,UAAArD;AAAA,MACA,2BACEY,IACI,CAACoD,GAAgBC,MAAW;AAC1B,QAAIA,MAAW,YAIXjE,KAAYiE,MAAW,YAI3B7C,EAA0B4C,CAAc,GACxC1C,EAAiB0C,CAAc;AAAA,MACjC,IACA;AAAA,MAEN,UAAU,gBAAA7G,EAAA,CAAC+G,MAAU;;AAGnB,YAFAjD,EAAyBiD,EAAM,OAAO,KAAK,GAEvCtD,GAAsB;AACxB,gBAAMuD,IAAkBnC,EAAmBkC,EAAM,OAAO,KAAK;AAE7D,cAAIlE;AACF,YAAAoB,EAA0B,EAAE,GAC5BE,EAAiB,EAAE,GACnBE,EAA0B,EAAE;AAAA,eACvB;AACL,kBAAM4C,IAAiBD,EAAgB,CAAC,GAClCE,IAAYD,IACdlH,IAAgC4F,IAAAK,EAAUiB,CAAc,MAAxB,gBAAAtB,EAA2B,UAAS,EAAE,IACtE;AAEJ,YAAA1B,EAA0BiD,CAAS,GACnC/C,EAAiB,EAAE,GACnBE,EAA0B,EAAE;AAAA,UAC9B;AAAA,QACF;AAEA,QAAAtB,KAAA,QAAAA,EAAWgE;AAAA,MACb,GAvBU;AAAA,MAwBV,SAASlB;AAAA,MACT,cAAA/C;AAAA,MACA,gBAAgB;AAAA,QACd,GAAGG;AAAA,QACH,WAAWoD;AAAA,QACX,QAAQ,gBAAArG,EAAA,CAAC+G,MAAU;;AACjB,cAAItD,GAAsB;AACxB,gBAAIZ;AACF,cAAAoB,EAA0B,EAAE;AAAA,iBACvB;AACL,oBAAMyC,IAAa7B,EAAmBhB,CAAqB,EAAE,CAAC;AAE9D,cAAAI;AAAA,gBACEyC,IAAa3G,IAAgC4F,IAAAK,EAAUU,CAAU,MAApB,gBAAAf,EAAuB,UAAS,EAAE,IAAI;AAAA,cAAA;AAAA,YAEvF;AAEA,YAAAxB,EAAiB,EAAE,GACnBE,EAA0B,EAAE;AAAA,UAC9B;AAEA,WAAA8C,IAAAlE,KAAA,gBAAAA,EAAgB,WAAhB,QAAAkE,EAAA,KAAAlE,GAAyB8D;AAAA,QAC3B,GAjBQ;AAAA,MAiBR;AAAA,MAEF,OAAAtG;AAAA,IAAA;AAAA,EAAA;AAGN,GAvVgC;"}