@wipco/sdui 1.6.1 → 1.7.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 (95) hide show
  1. package/dist/{DatePicker-DX9juElE.d.ts → DatePicker-BOOKdd5x.d.ts} +6 -6
  2. package/dist/calendar-nav-BSGsgJc4.d.ts +54 -0
  3. package/dist/{chunk-O4EMQWCV.js → chunk-27ILQUWE.js} +113 -26
  4. package/dist/{chunk-AJ3KDBEE.js → chunk-466W3XNK.js} +1 -1
  5. package/dist/{chunk-FP32LNFK.js → chunk-4VQIKSDS.js} +157 -190
  6. package/dist/{chunk-UC725BGW.js → chunk-5FZBH3T5.js} +1 -1
  7. package/dist/{chunk-XUVWIRZJ.js → chunk-5LIFU57A.js} +2 -2
  8. package/dist/{chunk-VAXRTBJH.js → chunk-63GM4S25.js} +1 -1
  9. package/dist/{chunk-J7BZF4T4.js → chunk-7EDFYBUA.js} +4 -4
  10. package/dist/{chunk-KO3EUNWB.js → chunk-7YTZB5LQ.js} +3 -3
  11. package/dist/{chunk-SGGIWPP6.js → chunk-7ZCM6XEM.js} +2 -2
  12. package/dist/{chunk-GKYUDTMI.js → chunk-A22QR6PM.js} +2 -2
  13. package/dist/{chunk-IIRVHSNK.js → chunk-A3SO6H47.js} +2 -2
  14. package/dist/{chunk-TWUKNUUQ.js → chunk-AP33B24H.js} +2 -2
  15. package/dist/{chunk-VSNHDHGS.js → chunk-B5MB64YQ.js} +209 -25
  16. package/dist/{chunk-USNPJEXH.js → chunk-DCSUBFFG.js} +4 -4
  17. package/dist/{chunk-KDKRFWIF.js → chunk-DILQ2DJV.js} +5 -5
  18. package/dist/{chunk-US3K6Q5T.js → chunk-ENZBX4AR.js} +1 -1
  19. package/dist/{chunk-CUFGH3LB.js → chunk-FGKBXUUA.js} +1 -1
  20. package/dist/{chunk-VR5MFUD2.js → chunk-FUNCQCKN.js} +2 -2
  21. package/dist/{chunk-TB7G5DXQ.js → chunk-GWT5UF5B.js} +2 -2
  22. package/dist/{chunk-OKNF2SBB.js → chunk-H5QRRPBJ.js} +3 -3
  23. package/dist/{chunk-UZZLMPRW.js → chunk-JCG4575S.js} +2 -2
  24. package/dist/{chunk-34BABTH4.js → chunk-JMNUFA5M.js} +1 -1
  25. package/dist/{chunk-3PT5OBOU.js → chunk-L6ODTHTX.js} +1 -1
  26. package/dist/{chunk-OQ7A3SFM.js → chunk-LKA43GYA.js} +1 -1
  27. package/dist/{chunk-GSXD52XG.js → chunk-LKL3SCBJ.js} +2 -2
  28. package/dist/{chunk-A57GKV5F.js → chunk-LN4KPZIX.js} +3 -3
  29. package/dist/chunk-MUXGTVEA.js +421 -0
  30. package/dist/{chunk-3PCR73OC.js → chunk-MWBCQHKQ.js} +3 -3
  31. package/dist/{chunk-XFKNU6QN.js → chunk-NI3LMETK.js} +2 -2
  32. package/dist/{chunk-ESAFQXEU.js → chunk-NJTIJAFU.js} +2 -2
  33. package/dist/{chunk-PCFH74RD.js → chunk-NQDHGK7C.js} +3 -3
  34. package/dist/{chunk-YYAGE733.js → chunk-OWM7E55U.js} +8 -0
  35. package/dist/{chunk-OCYJ2ZOV.js → chunk-P62INTQ5.js} +1 -1
  36. package/dist/{chunk-7G6J6QFC.js → chunk-Q56LZJFX.js} +1 -1
  37. package/dist/{chunk-BITS7UJY.js → chunk-R2ORCOTG.js} +2 -2
  38. package/dist/{chunk-VQKX5PJ4.js → chunk-RA74PUMP.js} +3 -3
  39. package/dist/{chunk-GSM664TX.js → chunk-TAVKGYH5.js} +24 -1
  40. package/dist/{chunk-BV37UCDF.js → chunk-UBVYPV7H.js} +2 -2
  41. package/dist/chunk-VR4DQTWR.js +391 -0
  42. package/dist/{chunk-6YBSBC77.js → chunk-WPAZBAUW.js} +1 -1
  43. package/dist/{chunk-4YPPL7JK.js → chunk-WTQH2NI2.js} +1 -1
  44. package/dist/{chunk-NLSR3JYU.js → chunk-X7RSKFWF.js} +1 -1
  45. package/dist/{chunk-CSZCWBOE.js → chunk-XDR6HC4U.js} +14 -7
  46. package/dist/{chunk-EUSC5NMZ.js → chunk-Z4JZUIKE.js} +3 -3
  47. package/dist/{chunk-EGFDELSF.js → chunk-Z4LFZWHH.js} +2 -2
  48. package/dist/{chunk-JHFA5RDN.js → chunk-ZBX2CAOO.js} +2 -2
  49. package/dist/index.d.ts +22 -2
  50. package/dist/index.js +27 -19
  51. package/dist/meta.js +14 -1
  52. package/dist/rich/ExcelUploadCard.js +4 -4
  53. package/dist/rich.d.ts +2 -1
  54. package/dist/rich.js +7 -6
  55. package/dist/styles.css +10 -0
  56. package/dist/widgets/ApprovalLineEditor.js +9 -8
  57. package/dist/widgets/ApprovalOverridesEditor.js +11 -10
  58. package/dist/widgets/ApprovalStepper.js +2 -2
  59. package/dist/widgets/AutocompleteField.js +9 -8
  60. package/dist/widgets/ColumnBoard.js +2 -2
  61. package/dist/widgets/DiffView.js +2 -2
  62. package/dist/widgets/Disclosure.js +2 -2
  63. package/dist/widgets/EventCalendar.d.ts +14 -10
  64. package/dist/widgets/EventCalendar.js +5 -3
  65. package/dist/widgets/FileDropzone.js +7 -7
  66. package/dist/widgets/ImageLightbox.js +5 -5
  67. package/dist/widgets/InlineEdit.js +2 -2
  68. package/dist/widgets/JsonField.js +2 -2
  69. package/dist/widgets/OptionSchemaEditor.js +3 -3
  70. package/dist/widgets/OptionValueFields.js +3 -3
  71. package/dist/widgets/OrgChart.js +3 -3
  72. package/dist/widgets/OrgChartBoard.d.ts +57 -4
  73. package/dist/widgets/OrgChartBoard.js +8 -8
  74. package/dist/widgets/PeriodFilter.js +6 -5
  75. package/dist/widgets/PermissionMatrixEditor.js +4 -4
  76. package/dist/widgets/PositionSelect.js +4 -4
  77. package/dist/widgets/PrintSheet.js +2 -2
  78. package/dist/widgets/ProfileEditDiffCard.js +4 -4
  79. package/dist/widgets/QRDisplay.js +4 -4
  80. package/dist/widgets/RankBoard.js +6 -6
  81. package/dist/widgets/RecordSheet.d.ts +48 -1
  82. package/dist/widgets/RecordSheet.js +2 -1
  83. package/dist/widgets/RoleMemberPicker.js +5 -5
  84. package/dist/widgets/SearchableMultiPicker.js +7 -6
  85. package/dist/widgets/SecureScreen.js +2 -2
  86. package/dist/widgets/StagePeriodEditor.js +6 -5
  87. package/dist/widgets/TagInput.js +2 -2
  88. package/dist/widgets/TagMultiSelect.js +4 -4
  89. package/dist/widgets/Timeline.js +3 -3
  90. package/dist/widgets/TreePicker.js +8 -7
  91. package/dist/widgets/TreeView.js +7 -6
  92. package/dist/widgets/index.d.ts +1 -0
  93. package/dist/widgets/index.js +76 -75
  94. package/package.json +1 -1
  95. package/dist/chunk-IB2ZPUTF.js +0 -172
@@ -0,0 +1,421 @@
1
+ import { OverlayContainerContext, getOverlayRoot, useOverlayLayer } from './chunk-R2ORCOTG.js';
2
+ import { HoistedStyle } from './chunk-RIZRM7OO.js';
3
+ import { IconButton } from './chunk-OWM7E55U.js';
4
+ import React2, { useState, useRef, useEffect, useLayoutEffect } from 'react';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+ import { createPortal } from 'react-dom';
7
+
8
+ var KO_CALENDAR_NAV_LOCALE = {
9
+ formatCaption: (year, month) => `${year}\uB144 ${month}\uC6D4`,
10
+ formatYear: (year) => `${year}\uB144`,
11
+ formatMonth: (month) => `${month}\uC6D4`,
12
+ formatDecade: (from, to) => `${from}~${to}`,
13
+ prevMonthLabel: "\uC774\uC804 \uB2EC",
14
+ nextMonthLabel: "\uB2E4\uC74C \uB2EC",
15
+ prevYearLabel: "\uC774\uC804 \uD574",
16
+ nextYearLabel: "\uB2E4\uC74C \uD574",
17
+ prevDecadeLabel: "\uC774\uC804 10\uB144",
18
+ nextDecadeLabel: "\uB2E4\uC74C 10\uB144",
19
+ prevCenturyLabel: "\uC774\uC804 100\uB144",
20
+ nextCenturyLabel: "\uB2E4\uC74C 100\uB144",
21
+ zoomLabel: "\uB2EC\xB7\uC5F0\uB3C4 \uACE0\uB974\uAE30",
22
+ monthGridLabel: "\uB2EC \uC120\uD0DD",
23
+ yearGridLabel: "\uC5F0\uB3C4 \uC120\uD0DD"
24
+ };
25
+ function resolveCalendarNavLocale(locale) {
26
+ const out = { ...KO_CALENDAR_NAV_LOCALE };
27
+ if (!locale) return out;
28
+ for (const key of Object.keys(KO_CALENDAR_NAV_LOCALE)) {
29
+ const given = locale[key];
30
+ if (given !== void 0) out[key] = given;
31
+ }
32
+ return out;
33
+ }
34
+ function CalendarNav({
35
+ title,
36
+ onZoomOut,
37
+ zoomLabel,
38
+ titleProps,
39
+ titleRef,
40
+ labels,
41
+ disabled,
42
+ onStep,
43
+ sides = "both",
44
+ size = "sm",
45
+ className
46
+ }) {
47
+ const showStart = sides === "both" || sides === "start";
48
+ const showEnd = sides === "both" || sides === "end";
49
+ const btn = (step, icon) => {
50
+ const off = Boolean(disabled?.[step]);
51
+ return /* @__PURE__ */ jsx(
52
+ IconButton,
53
+ {
54
+ className: "wp-calnav__btn",
55
+ size,
56
+ icon,
57
+ label: labels[step],
58
+ "aria-disabled": off || void 0,
59
+ onClick: off ? void 0 : () => onStep(step)
60
+ }
61
+ );
62
+ };
63
+ const blank = /* @__PURE__ */ jsx("span", { className: `wp-iconbtn wp-iconbtn--${size} wp-calnav__btn wp-calnav__btn--blank`, "aria-hidden": true });
64
+ const classes = ["wp-calnav", `wp-calnav--${size}`];
65
+ if (className) classes.push(className);
66
+ return /* @__PURE__ */ jsxs("div", { className: classes.join(" "), children: [
67
+ /* @__PURE__ */ jsx(HoistedStyle, { id: "wp-calnav", css: CALNAV_CSS }),
68
+ /* @__PURE__ */ jsxs("span", { className: "wp-calnav__side wp-calnav__side--start", children: [
69
+ showStart ? btn("prevBig", "chevrons-left") : blank,
70
+ showStart ? btn("prev", "chevron-left") : blank
71
+ ] }),
72
+ onZoomOut ? /* @__PURE__ */ jsx(
73
+ "button",
74
+ {
75
+ type: "button",
76
+ className: "wp-calnav__title",
77
+ title: zoomLabel,
78
+ onClick: onZoomOut,
79
+ ref: titleRef,
80
+ ...titleProps,
81
+ children: title
82
+ }
83
+ ) : /* @__PURE__ */ jsx("span", { className: "wp-calnav__title wp-calnav__title--static", children: title }),
84
+ /* @__PURE__ */ jsxs("span", { className: "wp-calnav__side wp-calnav__side--end", children: [
85
+ showEnd ? btn("next", "chevron-right") : blank,
86
+ showEnd ? btn("nextBig", "chevrons-right") : blank
87
+ ] })
88
+ ] });
89
+ }
90
+ var ZOOM_COLUMNS = 4;
91
+ function decadeOf(year) {
92
+ return Math.floor(year / 10) * 10;
93
+ }
94
+ function clampIndex(value, min, max) {
95
+ return Math.min(Math.max(value, min), max);
96
+ }
97
+ function moveZoomCursor(level, cursor, key) {
98
+ const page = level === "month" ? 12 : 10;
99
+ const first = level === "month" ? Math.floor(cursor / 12) * 12 : decadeOf(cursor);
100
+ switch (key) {
101
+ case "ArrowLeft":
102
+ return cursor - 1;
103
+ case "ArrowRight":
104
+ return cursor + 1;
105
+ case "ArrowUp":
106
+ return cursor - ZOOM_COLUMNS;
107
+ case "ArrowDown":
108
+ return cursor + ZOOM_COLUMNS;
109
+ case "Home":
110
+ return first;
111
+ case "End":
112
+ return first + page - 1;
113
+ case "PageUp":
114
+ return cursor - page;
115
+ case "PageDown":
116
+ return cursor + page;
117
+ default:
118
+ return void 0;
119
+ }
120
+ }
121
+ function zoomNavDisabled(level, cursor, minMonthIndex, maxMonthIndex) {
122
+ if (level === "month") {
123
+ const year = Math.floor(cursor / 12);
124
+ return { prev: year * 12 <= minMonthIndex, next: (year + 1) * 12 > maxMonthIndex };
125
+ }
126
+ const decade = decadeOf(cursor);
127
+ return { prev: decade * 12 <= minMonthIndex, next: (decade + 10) * 12 > maxMonthIndex };
128
+ }
129
+ function CalendarZoom({
130
+ monthIndex,
131
+ initialLevel = "month",
132
+ selectedMonthIndexes = [],
133
+ minMonthIndex = -Infinity,
134
+ maxMonthIndex = Infinity,
135
+ onPick,
136
+ onExit,
137
+ autoFocus = false,
138
+ locale,
139
+ navSize = "sm",
140
+ className,
141
+ style,
142
+ todayMonthIndex
143
+ }) {
144
+ const minIdx = minMonthIndex;
145
+ const maxIdx = maxMonthIndex;
146
+ const minYear = Number.isFinite(minIdx) ? Math.floor(minIdx / 12) : -Infinity;
147
+ const maxYear = Number.isFinite(maxIdx) ? Math.floor(maxIdx / 12) : Infinity;
148
+ const [level, setLevel] = useState(initialLevel);
149
+ const [cursor, setCursor] = useState(() => clampIndex(monthIndex, minIdx, maxIdx));
150
+ const [yearCursor, setYearCursor] = useState(() => clampIndex(Math.floor(monthIndex / 12), minYear, maxYear));
151
+ const rootRef = useRef(null);
152
+ useEffect(() => {
153
+ setCursor(clampIndex(monthIndex, minIdx, maxIdx));
154
+ setYearCursor(clampIndex(Math.floor(monthIndex / 12), minYear, maxYear));
155
+ }, [monthIndex, minIdx, maxIdx, minYear, maxYear]);
156
+ const claimRef = useRef(false);
157
+ useEffect(() => {
158
+ if (autoFocus) rootRef.current?.querySelector('.wp-calzoom__cell[tabindex="0"]')?.focus();
159
+ }, []);
160
+ const now = /* @__PURE__ */ new Date();
161
+ const todayIdx = todayMonthIndex ?? now.getFullYear() * 12 + now.getMonth();
162
+ const todayYear = Math.floor(todayIdx / 12);
163
+ const viewYear = Math.floor(cursor / 12);
164
+ const decade = decadeOf(yearCursor);
165
+ const selected = new Set(selectedMonthIndexes);
166
+ const selectedYears = new Set(selectedMonthIndexes.map((idx) => Math.floor(idx / 12)));
167
+ useLayoutEffect(() => {
168
+ const root = rootRef.current;
169
+ if (!root) return;
170
+ const active = document.activeElement;
171
+ const holdsFocus = active instanceof HTMLElement && root.contains(active) && active.classList.contains("wp-calzoom__cell");
172
+ const claim = claimRef.current || holdsFocus;
173
+ claimRef.current = false;
174
+ if (claim) root.querySelector('.wp-calzoom__cell[tabindex="0"]')?.focus();
175
+ }, [level, cursor, yearCursor]);
176
+ const toYearLevel = () => {
177
+ setYearCursor(clampIndex(viewYear, minYear, maxYear));
178
+ claimRef.current = true;
179
+ setLevel("year");
180
+ };
181
+ const pickYear = (year) => {
182
+ setCursor(clampIndex(year * 12 + cursor % 12, minIdx, maxIdx));
183
+ claimRef.current = true;
184
+ setLevel("month");
185
+ };
186
+ const stepMonths = (delta) => setCursor((c) => clampIndex(c + delta, minIdx, maxIdx));
187
+ const stepYears = (delta) => setYearCursor((y) => clampIndex(y + delta, minYear, maxYear));
188
+ const handleKeyDown = (event) => {
189
+ if (event.key === "Escape") {
190
+ event.preventDefault();
191
+ event.stopPropagation();
192
+ if (level === "year") {
193
+ claimRef.current = true;
194
+ setLevel("month");
195
+ } else {
196
+ onExit();
197
+ }
198
+ return;
199
+ }
200
+ const next = moveZoomCursor(level, level === "month" ? cursor : yearCursor, event.key);
201
+ if (next === void 0) return;
202
+ event.preventDefault();
203
+ event.stopPropagation();
204
+ claimRef.current = true;
205
+ if (level === "month") setCursor(clampIndex(next, minIdx, maxIdx));
206
+ else setYearCursor(clampIndex(next, minYear, maxYear));
207
+ };
208
+ const classes = ["wp-calzoom", `wp-calzoom--${level}`];
209
+ if (className) classes.push(className);
210
+ const nav = level === "month" ? /* @__PURE__ */ jsx(
211
+ CalendarNav,
212
+ {
213
+ size: navSize,
214
+ title: locale.formatYear(viewYear),
215
+ onZoomOut: toYearLevel,
216
+ zoomLabel: locale.zoomLabel,
217
+ labels: {
218
+ prevBig: locale.prevDecadeLabel,
219
+ prev: locale.prevYearLabel,
220
+ next: locale.nextYearLabel,
221
+ nextBig: locale.nextDecadeLabel
222
+ },
223
+ disabled: (() => {
224
+ const d = zoomNavDisabled("month", cursor, minIdx, maxIdx);
225
+ return { prev: d.prev, prevBig: d.prev, next: d.next, nextBig: d.next };
226
+ })(),
227
+ onStep: (step) => stepMonths(step === "prevBig" ? -120 : step === "prev" ? -12 : step === "next" ? 12 : 120)
228
+ }
229
+ ) : /* @__PURE__ */ jsx(
230
+ CalendarNav,
231
+ {
232
+ size: navSize,
233
+ title: locale.formatDecade(decade, decade + 9),
234
+ labels: {
235
+ prevBig: locale.prevCenturyLabel,
236
+ prev: locale.prevDecadeLabel,
237
+ next: locale.nextDecadeLabel,
238
+ nextBig: locale.nextCenturyLabel
239
+ },
240
+ disabled: (() => {
241
+ const d = zoomNavDisabled("year", yearCursor, minIdx, maxIdx);
242
+ return { prev: d.prev, prevBig: d.prev, next: d.next, nextBig: d.next };
243
+ })(),
244
+ onStep: (step) => stepYears(step === "prevBig" ? -100 : step === "prev" ? -10 : step === "next" ? 10 : 100)
245
+ }
246
+ );
247
+ const cells = level === "month" ? Array.from({ length: 12 }, (_, m) => {
248
+ const idx = viewYear * 12 + m;
249
+ const isSelected = selected.has(idx);
250
+ const classNames = ["wp-calzoom__cell"];
251
+ if (isSelected) classNames.push("wp-calzoom__cell--selected");
252
+ if (idx === todayIdx) classNames.push("wp-calzoom__cell--today");
253
+ return /* @__PURE__ */ jsx(
254
+ "button",
255
+ {
256
+ type: "button",
257
+ className: classNames.join(" "),
258
+ tabIndex: idx === cursor ? 0 : -1,
259
+ disabled: idx < minIdx || idx > maxIdx,
260
+ "aria-pressed": isSelected || void 0,
261
+ "aria-current": idx === todayIdx ? "date" : void 0,
262
+ "aria-label": locale.formatCaption(viewYear, m + 1),
263
+ onClick: () => {
264
+ setCursor(idx);
265
+ onPick(idx);
266
+ },
267
+ children: locale.formatMonth(m + 1)
268
+ },
269
+ idx
270
+ );
271
+ }) : Array.from({ length: 12 }, (_, i) => {
272
+ const year = decade - 1 + i;
273
+ const outside = year < decade || year > decade + 9;
274
+ const isSelected = selectedYears.has(year);
275
+ const classNames = ["wp-calzoom__cell"];
276
+ if (isSelected) classNames.push("wp-calzoom__cell--selected");
277
+ if (year === todayYear) classNames.push("wp-calzoom__cell--today");
278
+ if (outside) classNames.push("wp-calzoom__cell--outside");
279
+ return /* @__PURE__ */ jsx(
280
+ "button",
281
+ {
282
+ type: "button",
283
+ className: classNames.join(" "),
284
+ tabIndex: year === yearCursor ? 0 : -1,
285
+ disabled: year * 12 + 11 < minIdx || year * 12 > maxIdx,
286
+ "aria-pressed": isSelected || void 0,
287
+ "aria-current": year === todayYear ? "date" : void 0,
288
+ "aria-label": locale.formatYear(year),
289
+ onClick: () => pickYear(year),
290
+ children: year
291
+ },
292
+ year
293
+ );
294
+ });
295
+ return /* @__PURE__ */ jsxs("div", { ref: rootRef, className: classes.join(" "), style, onKeyDown: handleKeyDown, children: [
296
+ nav,
297
+ /* @__PURE__ */ jsx("div", { className: "wp-calzoom__grid", role: "group", "aria-label": level === "month" ? locale.monthGridLabel : locale.yearGridLabel, children: cells })
298
+ ] });
299
+ }
300
+ var CALNAV_CSS = `
301
+ .wp-calnav{display:flex;align-items:center;gap:var(--wp-space-1);min-width:0}
302
+ .wp-calnav__side{display:inline-flex;align-items:center;gap:2px;flex:none}
303
+ .wp-calnav__btn{flex:none}
304
+ .wp-calnav__btn--blank{visibility:hidden;pointer-events:none}
305
+ /* \uBE44\uD65C\uC131 \uBAA8\uC591\uC740 hover\xB7active \uC5D0\uC11C\uB3C4 \uACE0\uC815 \u2014 DS \uC758 .wp-iconbtn:hover:not(:disabled)(\uBA85\uC2DC\uB3C4 0,3,0)\uC640 \uAC19\uC740 \uBA85\uC2DC\uB3C4\uBA74
306
+ \uC2DC\uD2B8 \uC21C\uC11C\uC5D0 \uB530\uB77C \uC838\uC11C \uBC30\uACBD\xB7\uC9C4\uD55C \uC0C9\uC774 \uB4E4\uC5B4\uAC14\uACE0, \uD130\uCE58\uB294 \uD0ED \uB4A4 hover \uAC00 \uB0A8\uC544 \uACC4\uC18D \uD65C\uC131\uCC98\uB7FC \uBCF4\uC600\uB2E4(\uC2E4\uCE21). .wp-calnav \uB97C
307
+ \uC55E\uC5D0 \uB46C \uD55C \uB2E8\uACC4 \uB192\uC778\uB2E4(0,4,0). */
308
+ .wp-calnav .wp-calnav__btn[aria-disabled="true"],.wp-calnav .wp-calnav__btn[aria-disabled="true"]:hover,.wp-calnav .wp-calnav__btn[aria-disabled="true"]:active{background:transparent;color:var(--wp-text-disabled);cursor:default}
309
+ .wp-calnav__title{flex:1 1 auto;min-width:0;height:28px;margin:0;padding:0 var(--wp-space-1);border:none;background:transparent;border-radius:var(--wp-radius-sm);font:inherit;font-size:13px;font-weight:600;font-variant-numeric:tabular-nums;line-height:1;color:var(--wp-text-strong);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-flex;align-items:center;justify-content:center}
310
+ button.wp-calnav__title{cursor:pointer;transition:background 0.12s}
311
+ button.wp-calnav__title:hover{background:var(--wp-surface-hover)}
312
+ button.wp-calnav__title:focus-visible{outline:2px solid var(--wp-border-focus);outline-offset:1px}
313
+ .wp-calnav--md .wp-calnav__title{height:32px;font-size:15px;font-weight:700}
314
+ .wp-calzoom{display:flex;flex-direction:column;gap:var(--wp-space-2);width:224px;font-size:13px;color:var(--wp-text-default)}
315
+ .wp-calzoom__grid{flex:1 1 auto;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:minmax(40px,1fr);gap:var(--wp-space-1)}
316
+ .wp-calzoom__cell{display:inline-flex;align-items:center;justify-content:center;min-width:0;padding:0;border:none;background:transparent;border-radius:var(--wp-radius-sm);font:inherit;font-variant-numeric:tabular-nums;color:inherit;cursor:pointer;transition:background 0.12s,color 0.12s}
317
+ .wp-calzoom__cell:hover:not(:disabled):not(.wp-calzoom__cell--selected){background:var(--wp-surface-hover)}
318
+ .wp-calzoom__cell:focus-visible{outline:2px solid var(--wp-border-focus);outline-offset:-1px}
319
+ .wp-calzoom__cell--today{box-shadow:inset 0 0 0 1px var(--wp-border-focus)}
320
+ .wp-calzoom__cell--outside{color:var(--wp-text-subtle)}
321
+ /* \uBABB \uACE0\uB974\uB294 \uCE78(min/max \uBC16)\uC740 \uC55E\uB4A4 \uD68C\uC0C9 \uD574(--outside, \uACE0\uB97C \uC218 \uC788\uB2E4)\uBCF4\uB2E4 \uB69C\uB837\uC774 \uD750\uB9AC\uAC8C */
322
+ .wp-calzoom__cell:disabled{color:var(--wp-text-disabled);opacity:0.45;cursor:default}
323
+ .wp-calzoom__cell--selected{background:var(--wp-action-primary-bg);color:var(--wp-action-primary-fg);font-weight:500;box-shadow:none}
324
+ @media (pointer:coarse){
325
+ .wp-calnav__btn,.wp-calnav__title{min-width:32px;min-height:32px}
326
+ .wp-calzoom__grid{grid-auto-rows:minmax(44px,1fr)}
327
+ }
328
+ `;
329
+ var ANCHOR_GAP = 8;
330
+ var VIEWPORT_EDGE = 8;
331
+ function anchorTo(rect, viewportHeight, height) {
332
+ const below = viewportHeight - rect.bottom;
333
+ const up = below < height && rect.top > below;
334
+ const room = (up ? rect.top : below) - ANCHOR_GAP - VIEWPORT_EDGE;
335
+ return {
336
+ left: rect.left,
337
+ top: up ? void 0 : rect.bottom + ANCHOR_GAP,
338
+ bottom: up ? viewportHeight - rect.top + ANCHOR_GAP : void 0,
339
+ minWidth: rect.width,
340
+ available: Math.max(MIN_AVAILABLE, Math.floor(room))
341
+ };
342
+ }
343
+ var MIN_AVAILABLE = 120;
344
+ function anchorToHost(host, height) {
345
+ if (!host || typeof window === "undefined") return null;
346
+ return anchorTo(host.getBoundingClientRect(), window.innerHeight, height);
347
+ }
348
+ function usePopoverAnchor(open, hostRef, popRef, height) {
349
+ const [anchor, setAnchor] = useState(null);
350
+ useLayoutEffect(() => {
351
+ if (!open) {
352
+ setAnchor(null);
353
+ return;
354
+ }
355
+ const place = () => setAnchor(anchorToHost(hostRef.current, height));
356
+ place();
357
+ window.addEventListener("scroll", place, true);
358
+ window.addEventListener("resize", place);
359
+ return () => {
360
+ window.removeEventListener("scroll", place, true);
361
+ window.removeEventListener("resize", place);
362
+ };
363
+ }, [open, hostRef, height]);
364
+ useLayoutEffect(() => {
365
+ const el = popRef.current;
366
+ if (!open || !el || !anchor) return;
367
+ const overflow = el.getBoundingClientRect().right - (window.innerWidth - VIEWPORT_EDGE);
368
+ if (overflow <= 1) return;
369
+ setAnchor((prev) => {
370
+ if (!prev) return prev;
371
+ const left = Math.max(VIEWPORT_EDGE, prev.left - overflow);
372
+ return Math.abs(left - prev.left) < 1 ? prev : { ...prev, left };
373
+ });
374
+ }, [open, anchor, popRef]);
375
+ return anchor;
376
+ }
377
+ function AnchoredPopoverStyles() {
378
+ return /* @__PURE__ */ jsx(HoistedStyle, { id: "wp-anchored-pop", css: ANCHORED_POP_CSS });
379
+ }
380
+ var ANCHORED_POP_CSS = `
381
+ .wp-anchored-pop{position:fixed;width:max-content;max-width:min(92vw,400px);background:var(--wp-surface-card);border:1px solid var(--wp-border-subtle);border-radius:var(--wp-radius-lg);box-shadow:var(--wp-shadow-lg);z-index:var(--wp-z-dialog);pointer-events:auto}
382
+ `;
383
+ function anchorStyle(anchor) {
384
+ if (!anchor) return void 0;
385
+ const style = {
386
+ left: anchor.left,
387
+ top: anchor.top,
388
+ bottom: anchor.bottom,
389
+ minWidth: anchor.minWidth
390
+ };
391
+ if (anchor.available !== void 0) style["--wp-pop-avail"] = `${anchor.available}px`;
392
+ return style;
393
+ }
394
+ function usePortalTo() {
395
+ const container = React2.useContext(OverlayContainerContext);
396
+ return (anchor, node) => {
397
+ if (!anchor) return null;
398
+ const root = container ?? getOverlayRoot();
399
+ return root ? createPortal(node, root) : node;
400
+ };
401
+ }
402
+ function useDismiss(open, hostRef, popRef, onDismiss) {
403
+ useEffect(() => {
404
+ if (!open) return;
405
+ const handlePointerDown = (event) => {
406
+ const target = event.target;
407
+ if (target instanceof Node && (hostRef.current?.contains(target) || popRef.current?.contains(target))) return;
408
+ onDismiss("outside");
409
+ };
410
+ document.addEventListener("pointerdown", handlePointerDown);
411
+ return () => {
412
+ document.removeEventListener("pointerdown", handlePointerDown);
413
+ };
414
+ }, [open, hostRef, popRef, onDismiss]);
415
+ useOverlayLayer(open, () => onDismiss("escape"), hostRef);
416
+ }
417
+ function focusStaysInside(next, hostRef, popRef) {
418
+ return next instanceof Node && Boolean(hostRef.current?.contains(next) || popRef.current?.contains(next));
419
+ }
420
+
421
+ export { AnchoredPopoverStyles, CalendarNav, CalendarZoom, KO_CALENDAR_NAV_LOCALE, anchorStyle, clampIndex, focusStaysInside, resolveCalendarNavLocale, useDismiss, usePopoverAnchor, usePortalTo };
@@ -1,6 +1,6 @@
1
- import { includesLooseSearch } from './chunk-A57GKV5F.js';
2
- import { OverlayLayer } from './chunk-BITS7UJY.js';
3
- import { Button, Dialog, Input, Tag, Checkbox } from './chunk-YYAGE733.js';
1
+ import { includesLooseSearch } from './chunk-LN4KPZIX.js';
2
+ import { OverlayLayer } from './chunk-R2ORCOTG.js';
3
+ import { Button, Dialog, Input, Tag, Checkbox } from './chunk-OWM7E55U.js';
4
4
  import { boxed } from './chunk-3JTBOABA.js';
5
5
  import React, { useMemo, useState } from 'react';
6
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,5 +1,5 @@
1
- import { useSduiAssetResolver } from './chunk-JHFA5RDN.js';
2
- import { Spinner, Icon } from './chunk-YYAGE733.js';
1
+ import { useSduiAssetResolver } from './chunk-ZBX2CAOO.js';
2
+ import { Spinner, Icon } from './chunk-OWM7E55U.js';
3
3
  import { boxed } from './chunk-3JTBOABA.js';
4
4
  import { useState, useEffect } from 'react';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,5 +1,5 @@
1
- import { Text } from './chunk-UC725BGW.js';
2
- import { Field, Input, Select, IconButton, Button } from './chunk-YYAGE733.js';
1
+ import { Text } from './chunk-5FZBH3T5.js';
2
+ import { Field, Input, Select, IconButton, Button } from './chunk-OWM7E55U.js';
3
3
  import { boxed } from './chunk-3JTBOABA.js';
4
4
  import { useMemo } from 'react';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,6 +1,6 @@
1
- import { fetchAllPages } from './chunk-VAXRTBJH.js';
2
- import { useSduiAdapter, hostFetchOf, defaultAdapter } from './chunk-JHFA5RDN.js';
3
- import { Alert, Badge, Spinner, Button, Input, Checkbox } from './chunk-YYAGE733.js';
1
+ import { fetchAllPages } from './chunk-63GM4S25.js';
2
+ import { useSduiAdapter, hostFetchOf, defaultAdapter } from './chunk-ZBX2CAOO.js';
3
+ import { Alert, Badge, Spinner, Button, Input, Checkbox } from './chunk-OWM7E55U.js';
4
4
  import { boxed } from './chunk-3JTBOABA.js';
5
5
  import { useRef, useMemo, useState, useCallback, useEffect } from 'react';
6
6
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -641,6 +641,14 @@ var ICON_NODES = {
641
641
  "chevron-up": [
642
642
  { t: "path", d: "m18 15-6-6-6 6" }
643
643
  ],
644
+ "chevrons-left": [
645
+ { t: "path", d: "m11 17-5-5 5-5" },
646
+ { t: "path", d: "m18 17-5-5 5-5" }
647
+ ],
648
+ "chevrons-right": [
649
+ { t: "path", d: "m6 17 5-5-5-5" },
650
+ { t: "path", d: "m13 17 5-5-5-5" }
651
+ ],
644
652
  "chevrons-up-down": [
645
653
  { t: "path", d: "m7 15 5 5 5-5" },
646
654
  { t: "path", d: "m7 9 5-5 5 5" }
@@ -1,4 +1,4 @@
1
- import { Icon } from './chunk-YYAGE733.js';
1
+ import { Icon } from './chunk-OWM7E55U.js';
2
2
  import { boxed } from './chunk-3JTBOABA.js';
3
3
  import { useState, useId, useCallback } from 'react';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,4 +1,4 @@
1
- import { Badge, Checkbox, IconButton, Icon } from './chunk-YYAGE733.js';
1
+ import { Badge, Checkbox, IconButton, Icon } from './chunk-OWM7E55U.js';
2
2
  import { boxed } from './chunk-3JTBOABA.js';
3
3
  import { useState, useEffect } from 'react';
4
4
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -1,5 +1,5 @@
1
1
  import { HoistedStyle } from './chunk-RIZRM7OO.js';
2
- import { MOBILE_MEDIA_QUERY } from './chunk-GSM664TX.js';
2
+ import { MOBILE_MEDIA_QUERY } from './chunk-TAVKGYH5.js';
3
3
  import React, { useSyncExternalStore, useRef, useEffect } from 'react';
4
4
  import { createPortal } from 'react-dom';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -330,4 +330,4 @@ function OverlayLayer({
330
330
  }
331
331
  var OVERLAY_FOCUS_CSS = `.wp-overlay-layer [role="dialog"][tabindex="-1"]:focus{outline:none}`;
332
332
 
333
- export { OverlayContainerContext, OverlayLayer, getOverlayRoot, useAnyModalOpen, useOverlayLayer };
333
+ export { OverlayContainerContext, OverlayLayer, getOverlayRoot, tabbablesIn, useAnyModalOpen, useOverlayLayer };
@@ -1,7 +1,7 @@
1
1
  import { fetchAllJobPositions } from './chunk-XRHR452N.js';
2
- import { useSduiDispatch, useSduiCan, SduiDialog } from './chunk-VR5MFUD2.js';
3
- import { useSduiAdapter, hostFetchOf, defaultAdapter } from './chunk-JHFA5RDN.js';
4
- import { Card, Input, Button, Icon, Badge, IconButton } from './chunk-YYAGE733.js';
2
+ import { useSduiDispatch, useSduiCan, SduiDialog } from './chunk-FUNCQCKN.js';
3
+ import { useSduiAdapter, hostFetchOf, defaultAdapter } from './chunk-ZBX2CAOO.js';
4
+ import { Card, Input, Button, Icon, Badge, IconButton } from './chunk-OWM7E55U.js';
5
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';
@@ -34,5 +34,28 @@ function mobileServerSnapshot() {
34
34
  function useIsMobile() {
35
35
  return useSyncExternalStore(subscribeMobile, mobileSnapshot, mobileServerSnapshot);
36
36
  }
37
+ var TABLET_DOWN_MEDIA_QUERY = "screen and (max-width: 1023.98px)";
38
+ function tabletDownQueryList() {
39
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") return null;
40
+ return window.matchMedia(TABLET_DOWN_MEDIA_QUERY);
41
+ }
42
+ function subscribeTabletDown(onChange) {
43
+ const list = tabletDownQueryList();
44
+ if (!list) return () => {
45
+ };
46
+ if (typeof list.addEventListener === "function") {
47
+ list.addEventListener("change", onChange);
48
+ return () => list.removeEventListener("change", onChange);
49
+ }
50
+ list.addListener(onChange);
51
+ return () => list.removeListener(onChange);
52
+ }
53
+ function useIsTabletDown() {
54
+ return useSyncExternalStore(
55
+ subscribeTabletDown,
56
+ () => tabletDownQueryList()?.matches ?? false,
57
+ () => false
58
+ );
59
+ }
37
60
 
38
- export { DEV, MOBILE_MEDIA_QUERY, useIsMobile };
61
+ export { DEV, MOBILE_MEDIA_QUERY, useIsMobile, useIsTabletDown };
@@ -1,6 +1,6 @@
1
1
  import { fetchAllJobPositions } from './chunk-XRHR452N.js';
2
- import { useSduiAdapter, hostFetchOf, defaultAdapter } from './chunk-JHFA5RDN.js';
3
- import { Select, Button } from './chunk-YYAGE733.js';
2
+ import { useSduiAdapter, hostFetchOf, defaultAdapter } from './chunk-ZBX2CAOO.js';
3
+ import { Select, Button } from './chunk-OWM7E55U.js';
4
4
  import { boxed } from './chunk-3JTBOABA.js';
5
5
  import { useRef, useState, useEffect, useMemo } from 'react';
6
6
  import { jsxs, jsx } from 'react/jsx-runtime';