@wipco/sdui 1.4.2 → 1.6.0

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 (143) hide show
  1. package/dist/{DatePicker-C_TT_SOw.d.ts → DatePicker-DX9juElE.d.ts} +10 -1
  2. package/dist/{chunk-GZBY7I4Y.js → chunk-2KQL6DYG.js} +3 -3
  3. package/dist/{chunk-RYBBPFI7.js → chunk-2QXA52DG.js} +4 -4
  4. package/dist/{chunk-DMLDKW7K.js → chunk-37BNG4DT.js} +1 -1
  5. package/dist/{chunk-5WW4MBRO.js → chunk-3JTBOABA.js} +6 -2
  6. package/dist/{chunk-UV6HHFEW.js → chunk-4OABUPIU.js} +129 -68
  7. package/dist/{chunk-ZORQPB6B.js → chunk-53KS4E5N.js} +318 -359
  8. package/dist/{chunk-I5SD7XRA.js → chunk-6TI4WF5Y.js} +3 -3
  9. package/dist/{chunk-44TDRCKR.js → chunk-6XI2VF2O.js} +5 -5
  10. package/dist/{chunk-HBIIEYKW.js → chunk-7C54CKFZ.js} +4 -4
  11. package/dist/{chunk-IZ3JA2BR.js → chunk-7JP52QQO.js} +3 -3
  12. package/dist/{chunk-I45EUZC6.js → chunk-AY4GM6KQ.js} +4 -2
  13. package/dist/{chunk-SAPBDJJQ.js → chunk-AZSLSAJB.js} +2 -2
  14. package/dist/chunk-BITS7UJY.js +333 -0
  15. package/dist/{chunk-RNOUXUBO.js → chunk-BLFJMMBW.js} +306 -57
  16. package/dist/{chunk-YOZN35HD.js → chunk-CEVZAFPO.js} +3 -3
  17. package/dist/chunk-CI5OZ2QT.js +106 -0
  18. package/dist/{chunk-FNMS7OB7.js → chunk-CSE3PZOZ.js} +5 -5
  19. package/dist/chunk-CSZCWBOE.js +256 -0
  20. package/dist/{chunk-JIV4YHCZ.js → chunk-EJIWOD7W.js} +1 -1
  21. package/dist/{chunk-JZXU22PE.js → chunk-FEKKOBPX.js} +208 -117
  22. package/dist/chunk-GSM664TX.js +38 -0
  23. package/dist/{chunk-JYAR7D5U.js → chunk-HRHKQOOF.js} +2 -2
  24. package/dist/{chunk-CXW6KT6X.js → chunk-HXLQSO66.js} +3 -3
  25. package/dist/{chunk-O4IISNE7.js → chunk-IB2ZPUTF.js} +51 -12
  26. package/dist/{chunk-MPT7WJG2.js → chunk-IQXLNICY.js} +5 -5
  27. package/dist/{chunk-OQ52XMGG.js → chunk-K6RE23XX.js} +4 -4
  28. package/dist/{chunk-VY7MVBSE.js → chunk-KZ6U6FKB.js} +2 -2
  29. package/dist/{chunk-WPSK2CB5.js → chunk-LIZTK3HO.js} +16 -5
  30. package/dist/{chunk-Q4SWUINA.js → chunk-LKQJJSVJ.js} +1 -1
  31. package/dist/{chunk-E6ISNQK3.js → chunk-M6H3SHIS.js} +31 -8
  32. package/dist/chunk-MN4RZ2WP.js +380 -0
  33. package/dist/{chunk-GTGS2QRL.js → chunk-NA232CBX.js} +3 -3
  34. package/dist/{chunk-ZFNFPXPR.js → chunk-NAIWQQPW.js} +2 -2
  35. package/dist/{chunk-YVTV4ZV6.js → chunk-NWYYNE3Q.js} +1 -1
  36. package/dist/{chunk-DKVSM5HX.js → chunk-OUEJWC2Z.js} +6 -6
  37. package/dist/{chunk-DOL57OOP.js → chunk-OYDJHQNZ.js} +3 -3
  38. package/dist/{chunk-YWUDBLO6.js → chunk-QVS6K4FP.js} +2 -2
  39. package/dist/{chunk-N5RKM6IC.js → chunk-RU5U2YMT.js} +4 -4
  40. package/dist/{chunk-A6LAIGUS.js → chunk-V7BWMOHO.js} +7 -4
  41. package/dist/{chunk-2HLXCKK7.js → chunk-VPOOIEKT.js} +2 -2
  42. package/dist/{chunk-2YP5N4VV.js → chunk-VZOQRQAR.js} +1 -1
  43. package/dist/{chunk-GNA6SX2H.js → chunk-W4VA76QO.js} +2 -2
  44. package/dist/{chunk-BEM2YS7U.js → chunk-WEG3V7ZB.js} +3 -3
  45. package/dist/{chunk-XGFDY43I.js → chunk-WTIYILY3.js} +88 -18
  46. package/dist/{chunk-RWSH2MBU.js → chunk-X2NIRVLN.js} +73 -19
  47. package/dist/{chunk-AXGF4M57.js → chunk-XAXROQKB.js} +1 -1
  48. package/dist/{chunk-NIJUVTEW.js → chunk-XG22XKKD.js} +3 -3
  49. package/dist/{chunk-A5XQOEVH.js → chunk-YN7X7BEO.js} +4 -4
  50. package/dist/{chunk-KO6OEY3G.js → chunk-YNEEJCSZ.js} +3 -13
  51. package/dist/{chunk-7P7N43JV.js → chunk-YZTTFEL4.js} +2 -2
  52. package/dist/index.d.ts +494 -89
  53. package/dist/index.js +1098 -124
  54. package/dist/{layout-C3nRXMwb.d.ts → layout-DmRikwZb.d.ts} +5 -4
  55. package/dist/meta.d.ts +1 -1
  56. package/dist/meta.js +286 -22
  57. package/dist/rich/ExcelUploadCard.d.ts +1 -1
  58. package/dist/rich/ExcelUploadCard.js +5 -4
  59. package/dist/rich.d.ts +21 -3
  60. package/dist/rich.js +277 -35
  61. package/dist/styles.css +102 -4
  62. package/dist/{types-COjGKgmd.d.ts → types-CYfIthux.d.ts} +57 -1
  63. package/dist/widgets/ApprovalLineEditor.d.ts +1 -1
  64. package/dist/widgets/ApprovalLineEditor.js +9 -8
  65. package/dist/widgets/ApprovalOverridesEditor.d.ts +1 -1
  66. package/dist/widgets/ApprovalOverridesEditor.js +11 -10
  67. package/dist/widgets/ApprovalStepper.d.ts +29 -4
  68. package/dist/widgets/ApprovalStepper.js +3 -3
  69. package/dist/widgets/AutocompleteField.d.ts +1 -1
  70. package/dist/widgets/AutocompleteField.js +9 -8
  71. package/dist/widgets/ColumnBoard.d.ts +1 -1
  72. package/dist/widgets/ColumnBoard.js +3 -3
  73. package/dist/widgets/DiffView.d.ts +1 -1
  74. package/dist/widgets/DiffView.js +3 -3
  75. package/dist/widgets/Disclosure.d.ts +1 -1
  76. package/dist/widgets/Disclosure.js +3 -3
  77. package/dist/widgets/EventCalendar.d.ts +5 -1
  78. package/dist/widgets/EventCalendar.js +5 -3
  79. package/dist/widgets/FileDropzone.d.ts +1 -1
  80. package/dist/widgets/FileDropzone.js +9 -7
  81. package/dist/widgets/ImageLightbox.d.ts +1 -1
  82. package/dist/widgets/ImageLightbox.js +7 -5
  83. package/dist/widgets/InlineEdit.d.ts +1 -1
  84. package/dist/widgets/InlineEdit.js +3 -3
  85. package/dist/widgets/JsonField.d.ts +1 -1
  86. package/dist/widgets/JsonField.js +3 -3
  87. package/dist/widgets/LiveClock.d.ts +1 -1
  88. package/dist/widgets/LiveClock.js +2 -2
  89. package/dist/widgets/OptionSchemaEditor.d.ts +1 -1
  90. package/dist/widgets/OptionSchemaEditor.js +4 -4
  91. package/dist/widgets/OptionValueFields.d.ts +1 -1
  92. package/dist/widgets/OptionValueFields.js +4 -4
  93. package/dist/widgets/OrgChart.d.ts +1 -1
  94. package/dist/widgets/OrgChart.js +4 -4
  95. package/dist/widgets/OrgChartBoard.d.ts +15 -33
  96. package/dist/widgets/OrgChartBoard.js +10 -8
  97. package/dist/widgets/PeriodFilter.d.ts +1 -1
  98. package/dist/widgets/PeriodFilter.js +6 -5
  99. package/dist/widgets/PermissionMatrixEditor.d.ts +34 -2
  100. package/dist/widgets/PermissionMatrixEditor.js +6 -4
  101. package/dist/widgets/PositionSelect.d.ts +1 -1
  102. package/dist/widgets/PositionSelect.js +5 -4
  103. package/dist/widgets/PrintSheet.d.ts +15 -2
  104. package/dist/widgets/PrintSheet.js +3 -3
  105. package/dist/widgets/ProfileEditDiffCard.d.ts +1 -1
  106. package/dist/widgets/ProfileEditDiffCard.js +5 -4
  107. package/dist/widgets/QRDisplay.d.ts +1 -1
  108. package/dist/widgets/QRDisplay.js +5 -4
  109. package/dist/widgets/RankBoard.d.ts +1 -1
  110. package/dist/widgets/RankBoard.js +8 -6
  111. package/dist/widgets/RecordSheet.d.ts +1 -1
  112. package/dist/widgets/RecordSheet.js +2 -2
  113. package/dist/widgets/RoleMemberPicker.d.ts +1 -1
  114. package/dist/widgets/RoleMemberPicker.js +6 -5
  115. package/dist/widgets/SearchableMultiPicker.d.ts +1 -1
  116. package/dist/widgets/SearchableMultiPicker.js +7 -6
  117. package/dist/widgets/SecureScreen.d.ts +1 -1
  118. package/dist/widgets/SecureScreen.js +3 -3
  119. package/dist/widgets/StackedMeter.d.ts +1 -1
  120. package/dist/widgets/StackedMeter.js +2 -2
  121. package/dist/widgets/StagePeriodEditor.d.ts +1 -1
  122. package/dist/widgets/StagePeriodEditor.js +6 -5
  123. package/dist/widgets/Strip.d.ts +1 -1
  124. package/dist/widgets/Strip.js +2 -2
  125. package/dist/widgets/SummaryTable.d.ts +1 -1
  126. package/dist/widgets/SummaryTable.js +2 -2
  127. package/dist/widgets/TagInput.d.ts +1 -1
  128. package/dist/widgets/TagInput.js +3 -3
  129. package/dist/widgets/TagMultiSelect.d.ts +1 -1
  130. package/dist/widgets/TagMultiSelect.js +5 -4
  131. package/dist/widgets/Timeline.d.ts +1 -1
  132. package/dist/widgets/Timeline.js +4 -4
  133. package/dist/widgets/TreePicker.d.ts +1 -1
  134. package/dist/widgets/TreePicker.js +8 -7
  135. package/dist/widgets/TreeView.d.ts +1 -1
  136. package/dist/widgets/TreeView.js +7 -6
  137. package/dist/widgets/index.d.ts +3 -3
  138. package/dist/widgets/index.js +84 -83
  139. package/package.json +1 -1
  140. package/dist/chunk-LFEJLOFN.js +0 -352
  141. package/dist/chunk-MMIGOPO5.js +0 -111
  142. package/dist/chunk-TFGNKFL2.js +0 -39
  143. package/dist/chunk-XQPTSEJC.js +0 -135
@@ -1,4 +1,4 @@
1
- import { S as SduiBoxProps } from './layout-C3nRXMwb.js';
1
+ import { S as SduiBoxProps } from './layout-DmRikwZb.js';
2
2
  import React__default from 'react';
3
3
 
4
4
  interface TimePickerProps {
@@ -57,6 +57,15 @@ interface DatePickerProps {
57
57
  * 같은 모양이라 서버로 가는 문자열은 그대로다). 칸에는 `2026-08-18 14:30`으로 보인다.
58
58
  */
59
59
  withTime?: boolean;
60
+ /**
61
+ * 값을 **시간대를 붙여** 돌려준다(`withTime` 전용) — `2026-07-03T01:00:00+09:00`.
62
+ *
63
+ * 생략하면 들어온 값에 시간대가 붙어 있을 때만 붙인다(서버가 준 timestamptz 를 고치는 수정
64
+ * 창). 새로 입력하는 등록 창은 들어온 값이 없어 시간대 없는 `YYYY-MM-DDTHH:mm` 이 나가는데,
65
+ * 서버가 그것을 UTC 로 읽는 열(timestamptz)이면 9시간 어긋나 저장된다 — 그런 칸은 `true`
66
+ * 로 켠다. 시간대 없는 값만 받는 서버(벽시계 문자열을 직접 파싱하는 곳)는 켜지 않는다.
67
+ */
68
+ zoned?: boolean;
60
69
  /** 표시 로캘(요일·캡션·낭독 라벨·주 시작 요일). 기본 한국어·일요일 시작. 값 계약은 불변. */
61
70
  locale?: DatePickerLocale;
62
71
  }
@@ -1,6 +1,6 @@
1
- import { buildCascadingTree } from './chunk-UV6HHFEW.js';
2
- import { Input, IconButton, EmptyState, Icon, Badge } from './chunk-RNOUXUBO.js';
3
- import { boxed } from './chunk-5WW4MBRO.js';
1
+ import { buildCascadingTree } from './chunk-4OABUPIU.js';
2
+ import { Input, IconButton, EmptyState, Icon, Badge } from './chunk-BLFJMMBW.js';
3
+ import { boxed } from './chunk-3JTBOABA.js';
4
4
  import React, { useMemo, useState, useRef, useEffect } from 'react';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
6
6
 
@@ -1,8 +1,8 @@
1
1
  import { fetchAllJobPositions } from './chunk-XRHR452N.js';
2
- import { useSduiDispatch, useSduiCan, SduiDialog } from './chunk-TFGNKFL2.js';
3
- import { useSduiAdapter, hostFetchOf, defaultAdapter } from './chunk-KO6OEY3G.js';
4
- import { Card, Input, Button, Icon, Badge, IconButton } from './chunk-RNOUXUBO.js';
5
- import { boxed } from './chunk-5WW4MBRO.js';
2
+ import { useSduiDispatch, useSduiCan, SduiDialog } from './chunk-CI5OZ2QT.js';
3
+ import { useSduiAdapter, hostFetchOf, defaultAdapter } from './chunk-YNEEJCSZ.js';
4
+ import { Card, Input, Button, Icon, Badge, IconButton } from './chunk-BLFJMMBW.js';
5
+ import { boxed } from './chunk-3JTBOABA.js';
6
6
  import React, { useState, useEffect, useCallback, useMemo } from 'react';
7
7
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
8
 
@@ -1,4 +1,4 @@
1
- import { boxed } from './chunk-5WW4MBRO.js';
1
+ import { boxed } from './chunk-3JTBOABA.js';
2
2
  import { useSyncExternalStore } from 'react';
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
 
@@ -133,8 +133,12 @@ var LAYOUT_CSS = `
133
133
  .wp-grid--1{grid-template-columns:minmax(0,1fr)}
134
134
  .wp-grid--5{grid-template-columns:repeat(5,minmax(0,1fr))}
135
135
  .wp-grid--6{grid-template-columns:repeat(6,minmax(0,1fr))}
136
- @media (max-width:900px){.wp-grid--5,.wp-grid--6{grid-template-columns:repeat(2,minmax(0,1fr))}}
137
- @media (max-width:600px){.wp-grid--5,.wp-grid--6{grid-template-columns:minmax(0,1fr)}}
136
+ .wp-grid--custom{grid-template-columns:var(--wp-grid-template)}
137
+ @media screen and (max-width:1023.98px){.wp-grid--5:where(:not(.wp-grid--nocollapse)),.wp-grid--6:where(:not(.wp-grid--nocollapse)){grid-template-columns:repeat(2,minmax(0,1fr))}}
138
+ @media screen and (max-width:767.98px){.wp-grid--5:where(:not(.wp-grid--nocollapse)),.wp-grid--6:where(:not(.wp-grid--nocollapse)),.wp-grid--custom:where(:not(.wp-grid--nocollapse)){grid-template-columns:minmax(0,1fr)}}
139
+ .wp-kv__v{min-width:0;overflow-wrap:anywhere}
140
+ .wp-kv>.wp-kv__v--block{grid-column:1/-1;text-align:left;white-space:pre-wrap}
141
+ .wp-card--interactive[role=button]:focus-visible{outline:none;box-shadow:var(--wp-ring-focus)}
138
142
  `;
139
143
  var BOXED = /* @__PURE__ */ Symbol.for("wipco.sdui.boxed");
140
144
  function apply(element, box) {
@@ -1,9 +1,28 @@
1
- import { DateRangePicker } from './chunk-RWSH2MBU.js';
2
- import { useOverlayLayer } from './chunk-XQPTSEJC.js';
3
- import { Input, Button, IconButton, Tag, Field, Checkbox } from './chunk-RNOUXUBO.js';
1
+ import { DateRangePicker } from './chunk-X2NIRVLN.js';
2
+ import { useOverlayLayer } from './chunk-BITS7UJY.js';
3
+ import { HoistedStyle } from './chunk-RIZRM7OO.js';
4
+ import { Input, Button, IconButton, Tag, Field, Checkbox } from './chunk-BLFJMMBW.js';
4
5
  import { useRef, useEffect, useState, useMemo } from 'react';
5
6
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
6
7
 
8
+ var POPOVER_CSS = ".wp-popover.wp-popover--wide{width:min(560px,80vw)}.wp-popover-inline{margin-top:var(--wp-space-2);background:var(--wp-surface-card);border:var(--wp-border-w) solid var(--wp-border-subtle);border-radius:var(--wp-radius-md)}.wp-popover-inline__body{padding:var(--wp-space-2) var(--wp-space-3)}.wp-popover-inline__foot{display:flex;align-items:center;justify-content:space-between;gap:var(--wp-space-2);padding:var(--wp-space-1) var(--wp-space-2);border-top:var(--wp-border-w) solid var(--wp-divider)}";
9
+ function swallowNextClick() {
10
+ if (typeof document === "undefined") return;
11
+ let timer;
12
+ const cleanup = () => {
13
+ document.removeEventListener("click", swallow, true);
14
+ document.removeEventListener("pointerdown", cleanup, true);
15
+ if (timer !== void 0) clearTimeout(timer);
16
+ };
17
+ const swallow = (event) => {
18
+ event.stopPropagation();
19
+ event.preventDefault();
20
+ cleanup();
21
+ };
22
+ document.addEventListener("click", swallow, true);
23
+ document.addEventListener("pointerdown", cleanup, true);
24
+ timer = setTimeout(cleanup, 800);
25
+ }
7
26
  function Popover({
8
27
  open,
9
28
  onClose,
@@ -11,6 +30,8 @@ function Popover({
11
30
  footer,
12
31
  alignLeft = true,
13
32
  width,
33
+ wide = false,
34
+ inline = false,
14
35
  children
15
36
  }) {
16
37
  const hostRef = useRef(null);
@@ -22,23 +43,60 @@ function Popover({
22
43
  if (event.target instanceof Node && hostRef.current?.contains(event.target)) return;
23
44
  closeRef.current();
24
45
  };
25
- document.addEventListener("pointerdown", closeOnOutside);
46
+ const type = inline ? "click" : "pointerdown";
47
+ document.addEventListener(type, closeOnOutside);
26
48
  return () => {
27
- document.removeEventListener("pointerdown", closeOnOutside);
49
+ document.removeEventListener(type, closeOnOutside);
28
50
  };
29
- }, [open]);
51
+ }, [open, inline]);
30
52
  useOverlayLayer(open, () => closeRef.current(), hostRef);
53
+ if (inline) {
54
+ return /* @__PURE__ */ jsxs("div", { ref: hostRef, className: "wp-popover-host erp-popover-host", children: [
55
+ /* @__PURE__ */ jsx(HoistedStyle, { id: "wp-popover", css: POPOVER_CSS }),
56
+ trigger,
57
+ open ? /* @__PURE__ */ jsxs("div", { className: "wp-popover-inline", children: [
58
+ /* @__PURE__ */ jsx("div", { className: "wp-popover-inline__body", children }),
59
+ footer ? /* @__PURE__ */ jsx("div", { className: "wp-popover-inline__foot", children: footer }) : null
60
+ ] }) : null
61
+ ] });
62
+ }
31
63
  return (
32
64
  // 트리거와 패널을 함께 감싸는 기준 상자 — .wp-popover-host의 position:relative가
33
65
  // 패널 absolute의 기준이 된다
34
66
  /* @__PURE__ */ jsxs("div", { ref: hostRef, className: "wp-popover-host erp-popover-host", children: [
67
+ /* @__PURE__ */ jsx(HoistedStyle, { id: "wp-popover", css: POPOVER_CSS }),
35
68
  trigger,
69
+ open ? (
70
+ /*
71
+ * 딤 막 — 패널의 형제. 데스크톱에서는 크기 0 인 빈 칸이다(규칙 없음). 모바일에서
72
+ * 소비자 CSS 가 화면을 덮는 딤으로 그리면(하단 시트) 바깥 탭이 여기에 떨어진다:
73
+ * 닫고, 같은 탭의 click 이 밑의 행으로 새지 않게 삼킨다. 호스트 안이라 문서 바깥
74
+ * 닫기 리스너는 이 탭을 무시한다 — 닫기는 여기서 한 번만 한다.
75
+ */
76
+ /* @__PURE__ */ jsx(
77
+ "div",
78
+ {
79
+ className: "wp-popover-backdrop",
80
+ "aria-hidden": "true",
81
+ onPointerDown: () => {
82
+ swallowNextClick();
83
+ closeRef.current();
84
+ }
85
+ }
86
+ )
87
+ ) : null,
36
88
  open ? (
37
89
  // 기본은 오른쪽 기준(.wp-popover), --left가 붙으면 왼쪽 기준으로 뒤집힌다
38
90
  /* @__PURE__ */ jsxs(
39
91
  "div",
40
92
  {
41
- className: alignLeft ? "wp-popover wp-popover--left erp-popover erp-popover--left" : "wp-popover erp-popover",
93
+ className: [
94
+ "wp-popover",
95
+ alignLeft ? "wp-popover--left" : null,
96
+ wide ? "wp-popover--wide" : null,
97
+ "erp-popover",
98
+ alignLeft ? "erp-popover--left" : null
99
+ ].filter(Boolean).join(" "),
42
100
  style: width ? { width } : void 0,
43
101
  children: [
44
102
  /* @__PURE__ */ jsx("div", { className: "wp-popover__body erp-popover__body", children }),
@@ -311,7 +369,7 @@ function SearchToolbar({
311
369
  open,
312
370
  onClose: () => setOpen(false),
313
371
  alignLeft: false,
314
- width: "min(560px, 80vw)",
372
+ wide: true,
315
373
  trigger: (
316
374
  // 검색 입력창 옆에 나란히 서는 자리라 테두리가 있어야 한 덩어리로 읽힌다.
317
375
  // 열린 상태는 인라인 배경이 아니라 pressed(aria-pressed 틴트)로 알린다.
@@ -425,32 +483,37 @@ function MultiSelectInput({
425
483
  const next = checked ? [...selected, value] : selected.filter((item) => item !== value);
426
484
  onChange({ [field.key]: joinMultiValue(next) });
427
485
  };
428
- return /* @__PURE__ */ jsx(
429
- Popover,
430
- {
431
- open,
432
- onClose: () => setOpen(false),
433
- trigger: /* @__PURE__ */ jsx(
434
- Button,
435
- {
436
- type: "button",
437
- variant: "secondary",
438
- block: true,
439
- iconEnd: "chevron-down",
440
- onClick: () => setOpen((value) => !value),
441
- children: multiSelectLabel(field, selected)
442
- }
443
- ),
444
- children: /* @__PURE__ */ jsx("div", { className: "wp-col", style: { maxHeight: "min(320px, 40vh)", overflowY: "auto" }, children: field.options.map((option) => /* @__PURE__ */ jsx(
445
- Checkbox,
446
- {
447
- label: option.label,
448
- checked: selected.includes(option.value),
449
- onChange: (e) => toggle(option.value, e.target.checked)
450
- },
451
- option.value
452
- )) })
453
- }
486
+ return (
487
+ // 상세검색 패널 안의 목록이라 제자리에서 펼친다 — 떠 있으면 패널의 '적용' 버튼을 덮는다
488
+ /* @__PURE__ */ jsx(
489
+ Popover,
490
+ {
491
+ open,
492
+ onClose: () => setOpen(false),
493
+ inline: true,
494
+ trigger: /* @__PURE__ */ jsx(
495
+ Button,
496
+ {
497
+ type: "button",
498
+ variant: "secondary",
499
+ block: true,
500
+ iconEnd: open ? "chevron-up" : "chevron-down",
501
+ "aria-expanded": open,
502
+ onClick: () => setOpen((value) => !value),
503
+ children: multiSelectLabel(field, selected)
504
+ }
505
+ ),
506
+ children: /* @__PURE__ */ jsx("div", { className: "wp-col", style: { maxHeight: "min(320px, 40vh)", overflowY: "auto" }, children: field.options.map((option) => /* @__PURE__ */ jsx(
507
+ Checkbox,
508
+ {
509
+ label: option.label,
510
+ checked: selected.includes(option.value),
511
+ onChange: (e) => toggle(option.value, e.target.checked)
512
+ },
513
+ option.value
514
+ )) })
515
+ }
516
+ )
454
517
  );
455
518
  }
456
519
  function uniqueCascadingOptions(options) {
@@ -570,40 +633,38 @@ function CascadingLevelSelect({
570
633
  }) {
571
634
  const [open, setOpen] = useState(false);
572
635
  const selectedSet = new Set(selectedValues);
573
- return /* @__PURE__ */ jsx(
574
- Popover,
575
- {
576
- open,
577
- onClose: () => setOpen(false),
578
- trigger: /* @__PURE__ */ jsx(
579
- Button,
580
- {
581
- type: "button",
582
- variant: "secondary",
583
- block: true,
584
- iconEnd: "chevron-down",
585
- onClick: () => setOpen((value) => !value),
586
- children: cascadingLevelLabel(selectedValues, allLabel, pathMap, showPathLabels)
587
- }
588
- ),
589
- footer: /* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", size: "xs", icon: "refresh-cw", onClick: onClear, children: allLabel }),
590
- children: /* @__PURE__ */ jsx(
591
- "div",
592
- {
593
- className: "wp-col",
594
- style: { minWidth: 200, maxHeight: "min(320px, 40vh)", overflowY: "auto" },
595
- children: options.map((option) => /* @__PURE__ */ jsx(
596
- Checkbox,
597
- {
598
- label: cascadingOptionLabel(option, pathMap, showPathLabels),
599
- checked: selectedSet.has(option.value),
600
- onChange: (e) => onToggle(option, e.target.checked)
601
- },
602
- option.value
603
- ))
604
- }
605
- )
606
- }
636
+ return (
637
+ // 상세검색 패널 안의 목록이라 제자리에서 펼친다(MultiSelectInput 과 같은 이유)
638
+ /* @__PURE__ */ jsx(
639
+ Popover,
640
+ {
641
+ open,
642
+ onClose: () => setOpen(false),
643
+ inline: true,
644
+ trigger: /* @__PURE__ */ jsx(
645
+ Button,
646
+ {
647
+ type: "button",
648
+ variant: "secondary",
649
+ block: true,
650
+ iconEnd: open ? "chevron-up" : "chevron-down",
651
+ "aria-expanded": open,
652
+ onClick: () => setOpen((value) => !value),
653
+ children: cascadingLevelLabel(selectedValues, allLabel, pathMap, showPathLabels)
654
+ }
655
+ ),
656
+ footer: /* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", size: "xs", icon: "refresh-cw", onClick: onClear, children: allLabel }),
657
+ children: /* @__PURE__ */ jsx("div", { className: "wp-col", style: { maxHeight: "min(320px, 40vh)", overflowY: "auto" }, children: options.map((option) => /* @__PURE__ */ jsx(
658
+ Checkbox,
659
+ {
660
+ label: cascadingOptionLabel(option, pathMap, showPathLabels),
661
+ checked: selectedSet.has(option.value),
662
+ onChange: (e) => onToggle(option, e.target.checked)
663
+ },
664
+ option.value
665
+ )) })
666
+ }
667
+ )
607
668
  );
608
669
  }
609
670