sellmate-design-system-react 9.0.0-beta.32 → 9.0.0-beta.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +21 -6
- package/dist/components/SBadge/README.md +2 -0
- package/dist/components/SButton/README.md +2 -0
- package/dist/components/SCalendarBoard/CalendarDayCard.d.ts +38 -0
- package/dist/components/SCalendarBoard/CalendarDayEventListBox.d.ts +26 -0
- package/dist/components/SCalendarBoard/CalendarEventButton.d.ts +13 -0
- package/dist/components/SCalendarBoard/CalendarMoreButton.d.ts +12 -0
- package/dist/components/SCalendarBoard/README.md +137 -0
- package/dist/components/SCalendarBoard/SCalendarBoard.d.ts +68 -0
- package/dist/components/SCalendarBoard/calendarBoard.config.d.ts +33 -0
- package/dist/components/SCalendarBoard/index.d.ts +3 -0
- package/dist/components/SCalendarBoard/types.d.ts +31 -0
- package/dist/components/SDivider/README.md +2 -0
- package/dist/components/SGhostButton/README.md +2 -0
- package/dist/components/SGnb/SGnb.d.ts +6 -0
- package/dist/components/SGnb/gnb.config.d.ts +3 -3
- package/dist/components/SGnbSystem/README.md +43 -1
- package/dist/components/SGnbSystem/SGnbSystem.d.ts +48 -2
- package/dist/components/SPortal/README.md +2 -0
- package/dist/components/SScrollArea/README.md +13 -0
- package/dist/components/SSystemActionButton/systemActionButton.config.d.ts +8 -2
- package/dist/components/STooltip/README.md +2 -0
- package/dist/index.cjs +823 -129
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +817 -129
- package/dist/index.js.map +1 -1
- package/dist/llms-full.txt +206 -7
- package/dist/llms.txt +23 -8
- package/dist/styles.css +290 -9
- package/dist/theme.css +74 -8
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { forwardRef, useState, useRef, useEffect, createContext, useContext, use
|
|
|
5
5
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
6
6
|
import { createPortal } from 'react-dom';
|
|
7
7
|
import * as RCheckbox from '@radix-ui/react-checkbox';
|
|
8
|
-
import * as
|
|
8
|
+
import * as RPopover12 from '@radix-ui/react-popover';
|
|
9
9
|
import { createRoot } from 'react-dom/client';
|
|
10
10
|
import * as RTooltip from '@radix-ui/react-tooltip';
|
|
11
11
|
import * as RDropdown2 from '@radix-ui/react-dropdown-menu';
|
|
@@ -5164,8 +5164,8 @@ function SGhostButton({
|
|
|
5164
5164
|
}
|
|
5165
5165
|
);
|
|
5166
5166
|
if (!hasTooltip) return btn2;
|
|
5167
|
-
return /* @__PURE__ */ jsxs(
|
|
5168
|
-
/* @__PURE__ */ jsx(
|
|
5167
|
+
return /* @__PURE__ */ jsxs(RPopover12.Root, { open, onOpenChange: setOpen, children: [
|
|
5168
|
+
/* @__PURE__ */ jsx(RPopover12.Anchor, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
5169
5169
|
"span",
|
|
5170
5170
|
{
|
|
5171
5171
|
className: cn("inline-flex", anchorClassName),
|
|
@@ -5177,8 +5177,8 @@ function SGhostButton({
|
|
|
5177
5177
|
children: btn2
|
|
5178
5178
|
}
|
|
5179
5179
|
) }),
|
|
5180
|
-
/* @__PURE__ */ jsx(
|
|
5181
|
-
|
|
5180
|
+
/* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
|
|
5181
|
+
RPopover12.Content,
|
|
5182
5182
|
{
|
|
5183
5183
|
side: "top",
|
|
5184
5184
|
sideOffset: 4,
|
|
@@ -5754,14 +5754,14 @@ var STooltipImpl = /* @__PURE__ */ forwardRef(function STooltip({
|
|
|
5754
5754
|
...style,
|
|
5755
5755
|
...contentPropsStyle
|
|
5756
5756
|
};
|
|
5757
|
-
return /* @__PURE__ */ jsxs(
|
|
5757
|
+
return /* @__PURE__ */ jsxs(RPopover12.Root, { open, onOpenChange: setOpenState, children: [
|
|
5758
5758
|
isNone ? (
|
|
5759
5759
|
// 트리거 없음: children 을 래퍼 없이 그대로 앵커로 쓴다 (소비자 레이아웃 보존).
|
|
5760
5760
|
// mouse/focus 핸들러가 없으므로 useClose 없이도 자동 닫힘이 발생하지 않는다.
|
|
5761
|
-
/* @__PURE__ */ jsx(
|
|
5761
|
+
/* @__PURE__ */ jsx(RPopover12.Anchor, { asChild: true, children: triggerNode })
|
|
5762
5762
|
) : isHover ? (
|
|
5763
5763
|
// hover: Anchor(위치 기준) + 직접 mouse 핸들러 — 클릭으로 토글되지 않도록 Trigger 미사용
|
|
5764
|
-
/* @__PURE__ */ jsx(
|
|
5764
|
+
/* @__PURE__ */ jsx(RPopover12.Anchor, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
5765
5765
|
"span",
|
|
5766
5766
|
{
|
|
5767
5767
|
className: "inline-flex",
|
|
@@ -5772,9 +5772,9 @@ var STooltipImpl = /* @__PURE__ */ forwardRef(function STooltip({
|
|
|
5772
5772
|
children: triggerNode
|
|
5773
5773
|
}
|
|
5774
5774
|
) })
|
|
5775
|
-
) : /* @__PURE__ */ jsx(
|
|
5776
|
-
/* @__PURE__ */ jsx(
|
|
5777
|
-
|
|
5775
|
+
) : /* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: triggerNode }),
|
|
5776
|
+
/* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(
|
|
5777
|
+
RPopover12.Content,
|
|
5778
5778
|
{
|
|
5779
5779
|
side: placement,
|
|
5780
5780
|
sideOffset,
|
|
@@ -5808,7 +5808,7 @@ var STooltipImpl = /* @__PURE__ */ forwardRef(function STooltip({
|
|
|
5808
5808
|
}
|
|
5809
5809
|
)
|
|
5810
5810
|
] }),
|
|
5811
|
-
/* @__PURE__ */ jsx(
|
|
5811
|
+
/* @__PURE__ */ jsx(RPopover12.Arrow, { width: 16, height: 12, style: { fill: bg } })
|
|
5812
5812
|
]
|
|
5813
5813
|
}
|
|
5814
5814
|
) })
|
|
@@ -6886,7 +6886,7 @@ function SPortal({
|
|
|
6886
6886
|
const portalContainer = usePortalContainer();
|
|
6887
6887
|
const { minWidth: styleMinWidth, maxWidth: styleMaxWidth, ...restStyle } = style ?? {};
|
|
6888
6888
|
return /* @__PURE__ */ jsxs(
|
|
6889
|
-
|
|
6889
|
+
RPopover12.Root,
|
|
6890
6890
|
{
|
|
6891
6891
|
open,
|
|
6892
6892
|
onOpenChange: (next) => {
|
|
@@ -6894,9 +6894,9 @@ function SPortal({
|
|
|
6894
6894
|
if (!next) onClose?.();
|
|
6895
6895
|
},
|
|
6896
6896
|
children: [
|
|
6897
|
-
/* @__PURE__ */ jsx(
|
|
6898
|
-
/* @__PURE__ */ jsx(
|
|
6899
|
-
|
|
6897
|
+
/* @__PURE__ */ jsx(RPopover12.Anchor, { virtualRef: anchorRef }),
|
|
6898
|
+
/* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
|
|
6899
|
+
RPopover12.Content,
|
|
6900
6900
|
{
|
|
6901
6901
|
side: placement,
|
|
6902
6902
|
align,
|
|
@@ -7340,12 +7340,15 @@ var SYSTEM_ACTION_BUTTON_COLOR_CONFIG = {
|
|
|
7340
7340
|
dark: {
|
|
7341
7341
|
bg: item2("dark-bg-default"),
|
|
7342
7342
|
bgHover: item2("dark-bg-hover"),
|
|
7343
|
+
// 프레임은 hover 에서도 행의 기본 표면색을 지킨다 — 표면만 한 단계 밝아지고 프레임은
|
|
7344
|
+
// 제자리에 남아, 밝아진 면에 뚫린 구멍처럼 읽힌다. `dark-icon-bg-hover`(흰색) 토큰은
|
|
7345
|
+
// 이 시안과 어긋나 쓰지 않는다.
|
|
7343
7346
|
iconBg: item2("dark-icon-bg-default"),
|
|
7344
|
-
iconBgHover: item2("dark-icon-bg-
|
|
7345
|
-
// 어두운 면에는 글리프색 토큰이 없다.
|
|
7346
|
-
//
|
|
7347
|
+
iconBgHover: item2("dark-icon-bg-default"),
|
|
7348
|
+
// 어두운 면에는 글리프색 토큰이 없다. 프레임이 배경과 블렌딩되므로 라벨색(흰색)을 쓰고,
|
|
7349
|
+
// 프레임이 hover 에서 그대로이므로 글리프도 그대로 둔다.
|
|
7347
7350
|
iconGlyph: item2("dark-text"),
|
|
7348
|
-
iconGlyphHover: item2("dark-
|
|
7351
|
+
iconGlyphHover: item2("dark-text"),
|
|
7349
7352
|
text: item2("dark-text"),
|
|
7350
7353
|
actionText: {
|
|
7351
7354
|
switch: action("switch-text-dark"),
|
|
@@ -7357,10 +7360,11 @@ var SYSTEM_ACTION_BUTTON_COLOR_CONFIG = {
|
|
|
7357
7360
|
darker: {
|
|
7358
7361
|
bg: item2("darker-bg-default"),
|
|
7359
7362
|
bgHover: item2("darker-bg-hover"),
|
|
7363
|
+
// dark 와 같은 규칙 — 프레임은 hover 에서도 행의 기본 표면색을 지킨다.
|
|
7360
7364
|
iconBg: item2("darker-icon-bg-default"),
|
|
7361
|
-
iconBgHover: item2("darker-icon-bg-
|
|
7365
|
+
iconBgHover: item2("darker-icon-bg-default"),
|
|
7362
7366
|
iconGlyph: item2("darker-text"),
|
|
7363
|
-
iconGlyphHover: item2("darker-
|
|
7367
|
+
iconGlyphHover: item2("darker-text"),
|
|
7364
7368
|
text: item2("darker-text"),
|
|
7365
7369
|
actionText: {
|
|
7366
7370
|
switch: action("switch-text-dark"),
|
|
@@ -7405,7 +7409,13 @@ var SYSTEM_ACTION_BUTTON_LAYOUT = {
|
|
|
7405
7409
|
/** 우측 여백 */
|
|
7406
7410
|
paddingRight: action("paddingRight"),
|
|
7407
7411
|
/** 액션 텍스트 ↔ 액션 아이콘 간격 */
|
|
7408
|
-
actionGap: action("selectData-gap")
|
|
7412
|
+
actionGap: action("selectData-gap"),
|
|
7413
|
+
/**
|
|
7414
|
+
* 액션 아이콘 글리프 한 변. 프레임 한 변은 타입별 토큰(`actionButton.*-icon`)이 정하고
|
|
7415
|
+
* 그 안에 글리프가 이 크기로 놓인다 — 선행 아이콘의 프레임(24)/글리프(20) 과 같은 구조다.
|
|
7416
|
+
* 대응 토큰이 없어 디자인 값을 그대로 쓴다.
|
|
7417
|
+
*/
|
|
7418
|
+
actionIconGlyph: "12px"
|
|
7409
7419
|
};
|
|
7410
7420
|
function TokenIcon2({ name, size }) {
|
|
7411
7421
|
return /* @__PURE__ */ jsx(SIcon, { name, size: "100%", style: { width: size, height: size } });
|
|
@@ -7508,7 +7518,15 @@ var SSystemActionButton = /* @__PURE__ */ forwardRef(
|
|
|
7508
7518
|
children: actionText
|
|
7509
7519
|
}
|
|
7510
7520
|
),
|
|
7511
|
-
spec.actionIcon &&
|
|
7521
|
+
spec.actionIcon && // 토큰이 정하는 크기는 글리프가 아니라 프레임이다 — 그 안에 글리프를 가운데로 놓는다.
|
|
7522
|
+
/* @__PURE__ */ jsx(
|
|
7523
|
+
"span",
|
|
7524
|
+
{
|
|
7525
|
+
className: "inline-flex shrink-0 items-center justify-center text-(--sab-action-icon)",
|
|
7526
|
+
style: { width: spec.actionIcon.size, height: spec.actionIcon.size },
|
|
7527
|
+
children: /* @__PURE__ */ jsx(TokenIcon2, { name: spec.actionIcon.name, size: SYSTEM_ACTION_BUTTON_LAYOUT.actionIconGlyph })
|
|
7528
|
+
}
|
|
7529
|
+
)
|
|
7512
7530
|
] })
|
|
7513
7531
|
]
|
|
7514
7532
|
}
|
|
@@ -7629,10 +7647,10 @@ function SPopover({
|
|
|
7629
7647
|
const descColor = type === "default" ? "var(--cmp-popover-default-description)" : "var(--cmp-popover-light-description)";
|
|
7630
7648
|
const leftLinkLabelClass = type === "default" ? "text-[color:var(--cmp-popover-default-subAction)]" : "text-[color:var(--cmp-popover-light-subAction)]";
|
|
7631
7649
|
const triggerNode = trigger ?? /* @__PURE__ */ jsx("span", { className: "inline-flex cursor-pointer", "aria-label": ariaLabel, children: /* @__PURE__ */ jsx(SIcon, { name: icon, size: iconSize, color }) });
|
|
7632
|
-
return /* @__PURE__ */ jsxs(
|
|
7633
|
-
/* @__PURE__ */ jsx(
|
|
7634
|
-
/* @__PURE__ */ jsx(
|
|
7635
|
-
|
|
7650
|
+
return /* @__PURE__ */ jsxs(RPopover12.Root, { open: actualOpen, onOpenChange: setOpen, children: [
|
|
7651
|
+
/* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: triggerNode }),
|
|
7652
|
+
/* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(
|
|
7653
|
+
RPopover12.Content,
|
|
7636
7654
|
{
|
|
7637
7655
|
side: placement,
|
|
7638
7656
|
sideOffset: 8,
|
|
@@ -7698,7 +7716,7 @@ function SPopover({
|
|
|
7698
7716
|
]
|
|
7699
7717
|
}
|
|
7700
7718
|
),
|
|
7701
|
-
/* @__PURE__ */ jsx(
|
|
7719
|
+
/* @__PURE__ */ jsx(RPopover12.Arrow, { width: 16, height: 12, style: { fill: bg } })
|
|
7702
7720
|
]
|
|
7703
7721
|
}
|
|
7704
7722
|
) })
|
|
@@ -7809,10 +7827,10 @@ function SGuide({
|
|
|
7809
7827
|
);
|
|
7810
7828
|
if (isNotion)
|
|
7811
7829
|
return /* @__PURE__ */ jsx("span", { className, style, children: trigger });
|
|
7812
|
-
return /* @__PURE__ */ jsxs(
|
|
7813
|
-
/* @__PURE__ */ jsx(
|
|
7814
|
-
/* @__PURE__ */ jsx(
|
|
7815
|
-
|
|
7830
|
+
return /* @__PURE__ */ jsxs(RPopover12.Root, { open, onOpenChange: setOpen, children: [
|
|
7831
|
+
/* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: trigger }),
|
|
7832
|
+
/* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(
|
|
7833
|
+
RPopover12.Content,
|
|
7816
7834
|
{
|
|
7817
7835
|
side: "bottom",
|
|
7818
7836
|
align: "start",
|
|
@@ -9242,9 +9260,9 @@ var GNB_RAIL = {
|
|
|
9242
9260
|
var GNB_RAIL_WIDTH = 68;
|
|
9243
9261
|
var GNB_FOLD_MS = 200;
|
|
9244
9262
|
var GNB_EXPAND_MS = 200;
|
|
9245
|
-
var GNB_MENU_WIDTH =
|
|
9263
|
+
var GNB_MENU_WIDTH = 214;
|
|
9246
9264
|
var GNB_MENU_MIN_WIDTH = 200;
|
|
9247
|
-
var GNB_MENU_MAX_WIDTH =
|
|
9265
|
+
var GNB_MENU_MAX_WIDTH = 240;
|
|
9248
9266
|
var GNB_MENU_RESIZE_KEY_STEP = { normal: 10, large: 50 };
|
|
9249
9267
|
var clampGnbMenuWidth = (width) => Math.min(GNB_MENU_MAX_WIDTH, Math.max(GNB_MENU_MIN_WIDTH, Math.round(width)));
|
|
9250
9268
|
var GNB_FULL_LOGO_WIDTH = 140;
|
|
@@ -9802,8 +9820,15 @@ var SGnb = /* @__PURE__ */ forwardRef(function SGnb2({
|
|
|
9802
9820
|
"topContent"
|
|
9803
9821
|
) : null;
|
|
9804
9822
|
const systemMenuContext = useMemo(
|
|
9805
|
-
|
|
9806
|
-
|
|
9823
|
+
// 기본 폭보다 줄여 놓은 메뉴 컬럼이면 판에 알린다 — 알림 개수가 점 배지로 줄어든다.
|
|
9824
|
+
() => ({
|
|
9825
|
+
color,
|
|
9826
|
+
folded: false,
|
|
9827
|
+
placement: "panel",
|
|
9828
|
+
active: !railFolded,
|
|
9829
|
+
narrow: menuWidth < GNB_MENU_WIDTH
|
|
9830
|
+
}),
|
|
9831
|
+
[color, railFolded, menuWidth]
|
|
9807
9832
|
);
|
|
9808
9833
|
const systemFoldedContext = useMemo(
|
|
9809
9834
|
() => ({ color, folded: true, placement: "panel", active: true }),
|
|
@@ -9956,10 +9981,10 @@ var SGnb = /* @__PURE__ */ forwardRef(function SGnb2({
|
|
|
9956
9981
|
}
|
|
9957
9982
|
),
|
|
9958
9983
|
header === "fix" && menuResizeHandle,
|
|
9959
|
-
/* @__PURE__ */ jsxs(
|
|
9960
|
-
/* @__PURE__ */ jsx(
|
|
9961
|
-
/* @__PURE__ */ jsx(
|
|
9962
|
-
|
|
9984
|
+
/* @__PURE__ */ jsxs(RPopover12.Root, { open: labelTip !== null, onOpenChange: (open) => !open && setLabelTip(null), children: [
|
|
9985
|
+
/* @__PURE__ */ jsx(RPopover12.Anchor, { virtualRef: labelTipAnchorRef }),
|
|
9986
|
+
/* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
|
|
9987
|
+
RPopover12.Content,
|
|
9963
9988
|
{
|
|
9964
9989
|
side: "right",
|
|
9965
9990
|
sideOffset: 4,
|
|
@@ -10070,7 +10095,7 @@ var GNB_SYSTEM_SETTING_LABEL = "\uC124\uC815";
|
|
|
10070
10095
|
function TokenIcon3({ name, size }) {
|
|
10071
10096
|
return /* @__PURE__ */ jsx(SIcon, { name, size: "100%", style: { width: size, height: size } });
|
|
10072
10097
|
}
|
|
10073
|
-
|
|
10098
|
+
var SystemButton = /* @__PURE__ */ forwardRef(function SystemButton2({
|
|
10074
10099
|
color,
|
|
10075
10100
|
icon,
|
|
10076
10101
|
label,
|
|
@@ -10082,21 +10107,22 @@ function SystemButton({
|
|
|
10082
10107
|
dot,
|
|
10083
10108
|
accentColor,
|
|
10084
10109
|
stretch,
|
|
10085
|
-
buttonRef,
|
|
10086
10110
|
hasPopup,
|
|
10087
10111
|
expanded,
|
|
10088
|
-
onClick
|
|
10089
|
-
|
|
10112
|
+
onClick,
|
|
10113
|
+
onMouseLeave
|
|
10114
|
+
}, ref) {
|
|
10090
10115
|
const c = SYSTEM_ACTION_BUTTON_COLOR_CONFIG[color];
|
|
10091
10116
|
return /* @__PURE__ */ jsxs(
|
|
10092
10117
|
"button",
|
|
10093
10118
|
{
|
|
10094
|
-
ref
|
|
10119
|
+
ref,
|
|
10095
10120
|
type: "button",
|
|
10096
10121
|
"aria-label": label ? void 0 : ariaLabel,
|
|
10097
10122
|
"aria-haspopup": hasPopup ? "dialog" : void 0,
|
|
10098
10123
|
"aria-expanded": hasPopup ? expanded : void 0,
|
|
10099
10124
|
onClick,
|
|
10125
|
+
onMouseLeave,
|
|
10100
10126
|
className: cn(
|
|
10101
10127
|
"group box-border flex cursor-pointer items-center border-none bg-(--gsb-bg) text-(--gsb-text) transition-colors hover:bg-(--gsb-bg-hover)",
|
|
10102
10128
|
stretch ? "min-w-0 flex-1" : "shrink-0",
|
|
@@ -10142,12 +10168,14 @@ function SystemButton({
|
|
|
10142
10168
|
]
|
|
10143
10169
|
}
|
|
10144
10170
|
),
|
|
10145
|
-
label && /* @__PURE__ */ jsx("span", { className: "typo-body-sm-semibold min-w-0
|
|
10146
|
-
count != null && count > 0 &&
|
|
10171
|
+
label && /* @__PURE__ */ jsx("span", { className: "typo-body-sm-semibold min-w-0 truncate", children: label }),
|
|
10172
|
+
count != null && count > 0 && // 개수 오른쪽은 버튼 여백(alertButton.paddingX)만으로는 좁다 — 시안이 4px 을 더 준다.
|
|
10173
|
+
// 대응 토큰이 없어 디자인 값을 그대로 쓴다.
|
|
10174
|
+
/* @__PURE__ */ jsx("span", { className: "typo-body-md-bold me-[4px] shrink-0", style: { color: accentColor }, children: count.toLocaleString() })
|
|
10147
10175
|
]
|
|
10148
10176
|
}
|
|
10149
10177
|
);
|
|
10150
|
-
}
|
|
10178
|
+
});
|
|
10151
10179
|
var SGnbSystem = /* @__PURE__ */ forwardRef(function SGnbSystem2({
|
|
10152
10180
|
color: colorProp,
|
|
10153
10181
|
folded: foldedProp,
|
|
@@ -10166,6 +10194,7 @@ var SGnbSystem = /* @__PURE__ */ forwardRef(function SGnbSystem2({
|
|
|
10166
10194
|
const isTop = placement === "top";
|
|
10167
10195
|
const folded = !isTop && (foldedProp ?? gnb2?.folded ?? false);
|
|
10168
10196
|
const active = gnb2?.active ?? true;
|
|
10197
|
+
const narrow = !isTop && !folded && (gnb2?.narrow ?? false);
|
|
10169
10198
|
const c = GNB_SYSTEM_COLOR_CONFIG[color];
|
|
10170
10199
|
const t = GNB_SYSTEM_TOP_COLOR_CONFIG[color];
|
|
10171
10200
|
const itemColor = isTop ? t.item : color;
|
|
@@ -10184,13 +10213,39 @@ var SGnbSystem = /* @__PURE__ */ forwardRef(function SGnbSystem2({
|
|
|
10184
10213
|
setAccountOpen(next);
|
|
10185
10214
|
account?.onOpenChange?.(next);
|
|
10186
10215
|
};
|
|
10216
|
+
const alertButtonRef = useRef(null);
|
|
10217
|
+
const [alertListOpen, setAlertListOpen] = useState(false);
|
|
10218
|
+
const hasAlertList = alert2?.listBox != null;
|
|
10219
|
+
const commitAlertListOpen = (next) => {
|
|
10220
|
+
setAlertListOpen(next);
|
|
10221
|
+
alert2?.onOpenChange?.(next);
|
|
10222
|
+
};
|
|
10187
10223
|
useEffect(() => {
|
|
10188
10224
|
if (active || !accountOpen) return;
|
|
10189
10225
|
setAccountOpen(false);
|
|
10190
10226
|
account?.onOpenChange?.(false);
|
|
10191
10227
|
}, [active, accountOpen, account]);
|
|
10228
|
+
useEffect(() => {
|
|
10229
|
+
if (active || !alertListOpen) return;
|
|
10230
|
+
setAlertListOpen(false);
|
|
10231
|
+
alert2?.onOpenChange?.(false);
|
|
10232
|
+
}, [active, alertListOpen, alert2]);
|
|
10192
10233
|
const alertCount = alert2?.count ?? 0;
|
|
10193
10234
|
const notified = alertCount > 0;
|
|
10235
|
+
const alertTooltip = (alert2?.tooltip ?? []).filter((line) => line.trim() !== "");
|
|
10236
|
+
const hasAlertTooltip = alertTooltip.length > 0;
|
|
10237
|
+
const [alertTooltipDismissed, setAlertTooltipDismissed] = useState(false);
|
|
10238
|
+
const hadAlertTooltip = useRef(hasAlertTooltip);
|
|
10239
|
+
if (hadAlertTooltip.current !== hasAlertTooltip) {
|
|
10240
|
+
hadAlertTooltip.current = hasAlertTooltip;
|
|
10241
|
+
if (hasAlertTooltip && alertTooltipDismissed) setAlertTooltipDismissed(false);
|
|
10242
|
+
}
|
|
10243
|
+
const alertTooltipOpen = hasAlertTooltip && active && !alertTooltipDismissed;
|
|
10244
|
+
const dismissAlertTooltip = () => {
|
|
10245
|
+
if (!alertTooltipOpen) return;
|
|
10246
|
+
setAlertTooltipDismissed(true);
|
|
10247
|
+
alert2?.onTooltipDismiss?.();
|
|
10248
|
+
};
|
|
10194
10249
|
const alertLabel = alert2?.label ?? GNB_SYSTEM_ALERT_LABEL;
|
|
10195
10250
|
const settingLabel = setting?.label ?? GNB_SYSTEM_SETTING_LABEL;
|
|
10196
10251
|
const alertButton = alert2 && /* @__PURE__ */ jsx(
|
|
@@ -10203,13 +10258,51 @@ var SGnbSystem = /* @__PURE__ */ forwardRef(function SGnbSystem2({
|
|
|
10203
10258
|
paddingX: GNB_SYSTEM_LAYOUT.alertPaddingX,
|
|
10204
10259
|
iconColor: notified ? alertIconColor : void 0,
|
|
10205
10260
|
hoverBg: notified ? alertHoverBg : void 0,
|
|
10206
|
-
count: folded ? void 0 : alertCount,
|
|
10207
|
-
dot: folded && notified,
|
|
10261
|
+
count: folded || narrow ? void 0 : alertCount,
|
|
10262
|
+
dot: (folded || narrow) && notified,
|
|
10208
10263
|
accentColor: alertCountColor,
|
|
10209
10264
|
stretch: !folded && !isTop,
|
|
10210
|
-
|
|
10265
|
+
ref: alertButtonRef,
|
|
10266
|
+
hasPopup: hasAlertList,
|
|
10267
|
+
expanded: alertListOpen,
|
|
10268
|
+
onClick: () => {
|
|
10269
|
+
dismissAlertTooltip();
|
|
10270
|
+
alert2.onClick?.();
|
|
10271
|
+
if (hasAlertList) commitAlertListOpen(!alertListOpen);
|
|
10272
|
+
},
|
|
10273
|
+
onMouseLeave: hasAlertTooltip ? dismissAlertTooltip : void 0
|
|
10211
10274
|
}
|
|
10212
10275
|
);
|
|
10276
|
+
const alertListBox = alert2 && hasAlertList && /* @__PURE__ */ jsx(
|
|
10277
|
+
SPortal,
|
|
10278
|
+
{
|
|
10279
|
+
open: alertListOpen && active,
|
|
10280
|
+
onClose: () => commitAlertListOpen(false),
|
|
10281
|
+
anchorRef: alertButtonRef,
|
|
10282
|
+
placement: isTop ? "bottom" : "right",
|
|
10283
|
+
align: "end",
|
|
10284
|
+
offset: 8,
|
|
10285
|
+
viewportPadding: 8,
|
|
10286
|
+
ariaLabel: alert2.label ?? GNB_SYSTEM_ALERT_LABEL,
|
|
10287
|
+
onOpenAutoFocus: (event) => event.preventDefault(),
|
|
10288
|
+
className: "rounded-(--radius-8)",
|
|
10289
|
+
children: alert2.listBox
|
|
10290
|
+
}
|
|
10291
|
+
);
|
|
10292
|
+
const alertNode = alertButton && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
10293
|
+
hasAlertTooltip ? /* @__PURE__ */ jsx(
|
|
10294
|
+
STooltip2,
|
|
10295
|
+
{
|
|
10296
|
+
trigger: "none",
|
|
10297
|
+
open: alertTooltipOpen,
|
|
10298
|
+
message: alertTooltip,
|
|
10299
|
+
tooltipType: color === "light" ? "default" : "accent",
|
|
10300
|
+
placement: isTop ? "bottom" : "right",
|
|
10301
|
+
children: alertButton
|
|
10302
|
+
}
|
|
10303
|
+
) : alertButton,
|
|
10304
|
+
alertListBox
|
|
10305
|
+
] });
|
|
10213
10306
|
const settingButton = setting && /* @__PURE__ */ jsx(
|
|
10214
10307
|
SystemButton,
|
|
10215
10308
|
{
|
|
@@ -10265,7 +10358,7 @@ var SGnbSystem = /* @__PURE__ */ forwardRef(function SGnbSystem2({
|
|
|
10265
10358
|
)
|
|
10266
10359
|
})
|
|
10267
10360
|
);
|
|
10268
|
-
if (
|
|
10361
|
+
if (alertNode) segments.push({ key: "alert", node: alertNode });
|
|
10269
10362
|
if (settingButton) segments.push({ key: "setting", node: settingButton });
|
|
10270
10363
|
if (domainTag || accountButton) {
|
|
10271
10364
|
segments.push({
|
|
@@ -10323,7 +10416,7 @@ var SGnbSystem = /* @__PURE__ */ forwardRef(function SGnbSystem2({
|
|
|
10323
10416
|
"data-folded": "",
|
|
10324
10417
|
...rest,
|
|
10325
10418
|
children: [
|
|
10326
|
-
|
|
10419
|
+
alertNode,
|
|
10327
10420
|
account && /* @__PURE__ */ jsx(
|
|
10328
10421
|
SystemButton,
|
|
10329
10422
|
{
|
|
@@ -10331,7 +10424,7 @@ var SGnbSystem = /* @__PURE__ */ forwardRef(function SGnbSystem2({
|
|
|
10331
10424
|
icon: "user",
|
|
10332
10425
|
ariaLabel: account.label ?? "account",
|
|
10333
10426
|
paddingX: GNB_SYSTEM_LAYOUT.alertPaddingX,
|
|
10334
|
-
|
|
10427
|
+
ref: foldedAccountRef,
|
|
10335
10428
|
hasPopup: true,
|
|
10336
10429
|
expanded: accountOpen,
|
|
10337
10430
|
onClick: () => {
|
|
@@ -10377,7 +10470,7 @@ var SGnbSystem = /* @__PURE__ */ forwardRef(function SGnbSystem2({
|
|
|
10377
10470
|
domainTag,
|
|
10378
10471
|
hasUserBlock && /* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
10379
10472
|
(alert2 || setting) && /* @__PURE__ */ jsxs("div", { className: "flex items-center", style: { gap: GNB_SYSTEM_LAYOUT.gap }, children: [
|
|
10380
|
-
|
|
10473
|
+
alertNode,
|
|
10381
10474
|
alert2 && setting && /* @__PURE__ */ jsx(
|
|
10382
10475
|
"span",
|
|
10383
10476
|
{
|
|
@@ -11449,6 +11542,636 @@ var SStepper = /* @__PURE__ */ forwardRef(function SStepper2({
|
|
|
11449
11542
|
);
|
|
11450
11543
|
});
|
|
11451
11544
|
|
|
11545
|
+
// src/lib/date.ts
|
|
11546
|
+
function todayStr() {
|
|
11547
|
+
const d = /* @__PURE__ */ new Date();
|
|
11548
|
+
return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
|
|
11549
|
+
}
|
|
11550
|
+
function formatDate(year, month, day) {
|
|
11551
|
+
return `${year}-${String(month).padStart(2, "0")}-${String(day).padStart(2, "0")}`;
|
|
11552
|
+
}
|
|
11553
|
+
function calcYearMonth(year, month, dir) {
|
|
11554
|
+
if (dir === "prev")
|
|
11555
|
+
return month === 1 ? { year: year - 1, month: 12 } : { year, month: month - 1 };
|
|
11556
|
+
return month === 12 ? { year: year + 1, month: 1 } : { year, month: month + 1 };
|
|
11557
|
+
}
|
|
11558
|
+
function monthCells(year, month) {
|
|
11559
|
+
const firstDayIndex = new Date(year, month - 1, 1).getDay();
|
|
11560
|
+
const daysInCurrent = new Date(year, month, 0).getDate();
|
|
11561
|
+
const prev = calcYearMonth(year, month, "prev");
|
|
11562
|
+
const daysInPrev = new Date(prev.year, prev.month, 0).getDate();
|
|
11563
|
+
const next = calcYearMonth(year, month, "next");
|
|
11564
|
+
const cells = [];
|
|
11565
|
+
for (let i = firstDayIndex - 1; i >= 0; i--) {
|
|
11566
|
+
const day = daysInPrev - i;
|
|
11567
|
+
cells.push({ date: formatDate(prev.year, prev.month, day), day, inCurrentMonth: false });
|
|
11568
|
+
}
|
|
11569
|
+
for (let day = 1; day <= daysInCurrent; day++) {
|
|
11570
|
+
cells.push({ date: formatDate(year, month, day), day, inCurrentMonth: true });
|
|
11571
|
+
}
|
|
11572
|
+
const remaining = (7 - cells.length % 7) % 7;
|
|
11573
|
+
for (let day = 1; day <= remaining; day++) {
|
|
11574
|
+
cells.push({ date: formatDate(next.year, next.month, day), day, inCurrentMonth: false });
|
|
11575
|
+
}
|
|
11576
|
+
return cells;
|
|
11577
|
+
}
|
|
11578
|
+
var WEEK_LABELS = ["\uC77C", "\uC6D4", "\uD654", "\uC218", "\uBAA9", "\uAE08", "\uD1A0"];
|
|
11579
|
+
|
|
11580
|
+
// src/components/SCalendarBoard/calendarBoard.config.ts
|
|
11581
|
+
var CALENDAR_BOARD_EVENT_COLORS = [
|
|
11582
|
+
"default",
|
|
11583
|
+
"blue",
|
|
11584
|
+
"oceanBlue",
|
|
11585
|
+
"lightBlue",
|
|
11586
|
+
"green",
|
|
11587
|
+
"yellow",
|
|
11588
|
+
"orange",
|
|
11589
|
+
"red",
|
|
11590
|
+
"white"
|
|
11591
|
+
];
|
|
11592
|
+
var BG = (name) => `var(--cmp-calendarBoard-eventButton-bg-${name})`;
|
|
11593
|
+
var CALENDAR_BOARD_EVENT_PRESETS = {
|
|
11594
|
+
default: { bg: BG("default"), dot: "indigo" },
|
|
11595
|
+
blue: { bg: BG("blue"), dot: "blue" },
|
|
11596
|
+
oceanBlue: { bg: BG("oceanBlue"), dot: "darkblue" },
|
|
11597
|
+
lightBlue: { bg: BG("lightBlue"), dot: "lightblue" },
|
|
11598
|
+
green: { bg: BG("green"), dot: "green" },
|
|
11599
|
+
yellow: { bg: BG("yellow"), dot: "yellow" },
|
|
11600
|
+
orange: { bg: BG("orange"), dot: "orange" },
|
|
11601
|
+
red: { bg: BG("red"), dot: "red" },
|
|
11602
|
+
white: { bg: BG("white"), dot: "grey" }
|
|
11603
|
+
};
|
|
11604
|
+
var CALENDAR_BOARD_MAX_VISIBLE_EVENTS = 4;
|
|
11605
|
+
var CALENDAR_BOARD_DAY_COLORS = [
|
|
11606
|
+
"default",
|
|
11607
|
+
"danger",
|
|
11608
|
+
"accent",
|
|
11609
|
+
"complete",
|
|
11610
|
+
"dim"
|
|
11611
|
+
];
|
|
11612
|
+
var CALENDAR_BOARD_DAY_BG = {
|
|
11613
|
+
default: "var(--cmp-calendarBoard-dayCard-bg)",
|
|
11614
|
+
danger: "var(--color-red-30)",
|
|
11615
|
+
accent: "var(--color-brilliantblue-40)",
|
|
11616
|
+
complete: "var(--color-green-45)",
|
|
11617
|
+
dim: "var(--color-grey-25)"
|
|
11618
|
+
};
|
|
11619
|
+
function CalendarEventButton({
|
|
11620
|
+
event,
|
|
11621
|
+
onSelect,
|
|
11622
|
+
className
|
|
11623
|
+
}) {
|
|
11624
|
+
const preset = CALENDAR_BOARD_EVENT_PRESETS[event.color ?? "default"];
|
|
11625
|
+
const dot = event.dotColor ?? preset.dot;
|
|
11626
|
+
const disabled = event.disabled === true;
|
|
11627
|
+
const hasDescription = event.description != null && event.description !== "";
|
|
11628
|
+
const hasValue = event.value != null && event.value !== "";
|
|
11629
|
+
const title = [event.label.replace(/<[^>]*>/g, ""), event.description, event.value].filter((v) => v != null && v !== "").join(" ") || void 0;
|
|
11630
|
+
return /* @__PURE__ */ jsxs(
|
|
11631
|
+
"button",
|
|
11632
|
+
{
|
|
11633
|
+
type: "button",
|
|
11634
|
+
disabled,
|
|
11635
|
+
title,
|
|
11636
|
+
className: cn(
|
|
11637
|
+
// hover 는 배경 위에 8% 오버레이를 얹는다 — 프리셋 배경이 9종이라 색마다 hover 색을 두지 않는다.
|
|
11638
|
+
"group relative flex w-full min-w-0 items-center overflow-hidden text-left",
|
|
11639
|
+
"h-(--cmp-calendarBoard-item-height) shrink-0 rounded-(--cmp-calendarBoard-item-radius)",
|
|
11640
|
+
"gap-(--cmp-calendarBoard-eventButton-inline-gap) px-(--cmp-calendarBoard-item-paddingX)",
|
|
11641
|
+
"bg-(--ceb-bg) text-(--cmp-calendarBoard-eventButton-text-color-default)",
|
|
11642
|
+
disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer",
|
|
11643
|
+
className
|
|
11644
|
+
),
|
|
11645
|
+
style: { "--ceb-bg": preset.bg },
|
|
11646
|
+
onClick: (e) => {
|
|
11647
|
+
if (disabled) return;
|
|
11648
|
+
onSelect?.(event, e);
|
|
11649
|
+
},
|
|
11650
|
+
children: [
|
|
11651
|
+
!disabled && /* @__PURE__ */ jsx(
|
|
11652
|
+
"span",
|
|
11653
|
+
{
|
|
11654
|
+
"aria-hidden": true,
|
|
11655
|
+
className: "pointer-events-none absolute inset-0 rounded-(--cmp-calendarBoard-item-radius) bg-(--cmp-calendarBoard-eventButton-hover-overlay-color) opacity-0 transition-opacity group-hover:opacity-(--cmp-calendarBoard-eventButton-hover-overlay-opacity)"
|
|
11656
|
+
}
|
|
11657
|
+
),
|
|
11658
|
+
/* @__PURE__ */ jsx(SBadge, { "aria-hidden": true, color: dot, className: "shrink-0" }),
|
|
11659
|
+
/* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-1 items-center gap-(--cmp-calendarBoard-eventButton-label-gap)", children: [
|
|
11660
|
+
/* @__PURE__ */ jsxs("span", { className: "typo-body-sm-default min-w-0 flex-1 truncate", children: [
|
|
11661
|
+
/* @__PURE__ */ jsx(
|
|
11662
|
+
"span",
|
|
11663
|
+
{
|
|
11664
|
+
className: cn(
|
|
11665
|
+
"typo-body-sm-semibold",
|
|
11666
|
+
hasDescription && "me-(--cmp-calendarBoard-eventButton-label-gap)"
|
|
11667
|
+
),
|
|
11668
|
+
dangerouslySetInnerHTML: { __html: sanitizeInlineHtml(event.label) }
|
|
11669
|
+
}
|
|
11670
|
+
),
|
|
11671
|
+
hasDescription && event.description
|
|
11672
|
+
] }),
|
|
11673
|
+
hasValue && /* @__PURE__ */ jsxs("span", { className: "flex shrink-0 items-center gap-(--cmp-calendarBoard-eventButton-label-gap)", children: [
|
|
11674
|
+
/* @__PURE__ */ jsx(
|
|
11675
|
+
"span",
|
|
11676
|
+
{
|
|
11677
|
+
"aria-hidden": true,
|
|
11678
|
+
className: "typo-body-sm-default text-(--cmp-calendarBoard-eventButton-text-color-separator)",
|
|
11679
|
+
children: "/"
|
|
11680
|
+
}
|
|
11681
|
+
),
|
|
11682
|
+
/* @__PURE__ */ jsx("span", { className: "typo-body-sm-default whitespace-nowrap", children: event.value })
|
|
11683
|
+
] })
|
|
11684
|
+
] })
|
|
11685
|
+
]
|
|
11686
|
+
}
|
|
11687
|
+
);
|
|
11688
|
+
}
|
|
11689
|
+
var CalendarMoreButton = /* @__PURE__ */ forwardRef(function CalendarMoreButton2({ count, label = "\uB354\uBCF4\uAE30", onClick, className }, ref) {
|
|
11690
|
+
return /* @__PURE__ */ jsxs(
|
|
11691
|
+
"button",
|
|
11692
|
+
{
|
|
11693
|
+
ref,
|
|
11694
|
+
type: "button",
|
|
11695
|
+
className: cn(
|
|
11696
|
+
"group relative flex w-full min-w-0 cursor-pointer items-center overflow-hidden text-left",
|
|
11697
|
+
"h-(--cmp-calendarBoard-item-height) shrink-0 rounded-(--cmp-calendarBoard-item-radius)",
|
|
11698
|
+
"gap-(--cmp-calendarBoard-moreButton-gap) px-(--cmp-calendarBoard-item-paddingX)",
|
|
11699
|
+
"bg-(--cmp-calendarBoard-moreButton-bg)",
|
|
11700
|
+
className
|
|
11701
|
+
),
|
|
11702
|
+
onClick,
|
|
11703
|
+
children: [
|
|
11704
|
+
/* @__PURE__ */ jsx(
|
|
11705
|
+
"span",
|
|
11706
|
+
{
|
|
11707
|
+
"aria-hidden": true,
|
|
11708
|
+
className: "pointer-events-none absolute inset-0 rounded-(--cmp-calendarBoard-item-radius) bg-(--cmp-calendarBoard-moreButton-hover-overlay-color) opacity-0 transition-opacity group-hover:opacity-(--cmp-calendarBoard-moreButton-hover-overlay-opacity)"
|
|
11709
|
+
}
|
|
11710
|
+
),
|
|
11711
|
+
/* @__PURE__ */ jsxs("span", { className: "typo-body-sm-semibold shrink-0 text-(--cmp-calendarBoard-moreButton-count-color)", children: [
|
|
11712
|
+
count,
|
|
11713
|
+
"\uAC1C"
|
|
11714
|
+
] }),
|
|
11715
|
+
/* @__PURE__ */ jsx("span", { className: "typo-body-sm-default min-w-0 truncate text-(--cmp-calendarBoard-moreButton-label-color)", children: label })
|
|
11716
|
+
]
|
|
11717
|
+
}
|
|
11718
|
+
);
|
|
11719
|
+
});
|
|
11720
|
+
var CalendarDayCard = /* @__PURE__ */ forwardRef(function CalendarDayCard2({
|
|
11721
|
+
date,
|
|
11722
|
+
day,
|
|
11723
|
+
inCurrentMonth,
|
|
11724
|
+
isToday,
|
|
11725
|
+
isSelected,
|
|
11726
|
+
selectable,
|
|
11727
|
+
color,
|
|
11728
|
+
events,
|
|
11729
|
+
body,
|
|
11730
|
+
hiddenCount,
|
|
11731
|
+
isOpen,
|
|
11732
|
+
moreLabel,
|
|
11733
|
+
onDaySelect,
|
|
11734
|
+
onEventClick,
|
|
11735
|
+
onOpenEvents,
|
|
11736
|
+
...rest
|
|
11737
|
+
}, ref) {
|
|
11738
|
+
const hasEvents = events.length + hiddenCount > 0;
|
|
11739
|
+
const interactive = selectable || hasEvents;
|
|
11740
|
+
const activate = () => {
|
|
11741
|
+
if (hasEvents) onOpenEvents?.();
|
|
11742
|
+
if (selectable) onDaySelect?.(date);
|
|
11743
|
+
};
|
|
11744
|
+
return /* @__PURE__ */ jsxs(
|
|
11745
|
+
"div",
|
|
11746
|
+
{
|
|
11747
|
+
...rest,
|
|
11748
|
+
ref,
|
|
11749
|
+
role: "gridcell",
|
|
11750
|
+
"data-date": date,
|
|
11751
|
+
"aria-selected": selectable ? isSelected : void 0,
|
|
11752
|
+
"aria-current": isToday ? "date" : void 0,
|
|
11753
|
+
"aria-haspopup": hasEvents ? "dialog" : void 0,
|
|
11754
|
+
"aria-expanded": hasEvents ? isOpen : void 0,
|
|
11755
|
+
tabIndex: interactive ? 0 : void 0,
|
|
11756
|
+
onClick: interactive ? activate : void 0,
|
|
11757
|
+
onKeyDown: interactive ? (e) => {
|
|
11758
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
11759
|
+
e.preventDefault();
|
|
11760
|
+
activate();
|
|
11761
|
+
}
|
|
11762
|
+
} : void 0,
|
|
11763
|
+
className: cn(
|
|
11764
|
+
"relative flex min-h-(--cmp-calendarBoard-dayCard-minHeight) min-w-(--cmp-calendarBoard-dayCard-minWidth) flex-col bg-(--cdc-bg) px-(--cmp-calendarBoard-dayCard-paddingX) outline-none",
|
|
11765
|
+
interactive && "cursor-pointer"
|
|
11766
|
+
),
|
|
11767
|
+
style: { ...rest.style, "--cdc-bg": CALENDAR_BOARD_DAY_BG[color] },
|
|
11768
|
+
children: [
|
|
11769
|
+
isSelected && /* @__PURE__ */ jsx(
|
|
11770
|
+
"span",
|
|
11771
|
+
{
|
|
11772
|
+
"aria-hidden": true,
|
|
11773
|
+
className: "pointer-events-none absolute inset-[1px] rounded-(--cmp-calendarBoard-dayCard-focus-border-radius) border-(length:--cmp-calendarBoard-dayCard-focus-border-width) border-solid border-(--cmp-calendarBoard-dayCard-focus-border-color)"
|
|
11774
|
+
}
|
|
11775
|
+
),
|
|
11776
|
+
/* @__PURE__ */ jsx("div", { className: "flex shrink-0 pt-(--cmp-calendarBoard-dayCard-header-paddingTop) pb-(--cmp-calendarBoard-dayCard-header-paddingBottom)", children: /* @__PURE__ */ jsx(
|
|
11777
|
+
"span",
|
|
11778
|
+
{
|
|
11779
|
+
className: cn(
|
|
11780
|
+
"inline-flex size-(--cmp-calendarBoard-daySequence-size) items-center justify-center rounded-(--cmp-calendarBoard-daySequence-radius)",
|
|
11781
|
+
isToday ? "typo-body-md-bold bg-(--cmp-calendarBoard-daySequence-bg-today) text-(--cmp-calendarBoard-daySequence-text-today)" : cn(
|
|
11782
|
+
"typo-body-md-medium",
|
|
11783
|
+
inCurrentMonth ? "text-(--cmp-calendarBoard-daySequence-text-default)" : "text-(--cmp-calendarBoard-daySequence-text-otherMonth)"
|
|
11784
|
+
),
|
|
11785
|
+
// 오늘이 아니면서 선택된 날은 테두리 원으로 표시한다 (오늘은 이미 채운 원이라 겹치지 않는다).
|
|
11786
|
+
// 굵기는 1px 로 고정한다 — 칸을 감싸는 focus 테두리(2px)와 달리 얇은 원이고, 대응 토큰이 없다.
|
|
11787
|
+
isSelected && !isToday && "border border-solid border-(--cmp-calendarBoard-daySequence-border-selected)"
|
|
11788
|
+
),
|
|
11789
|
+
children: day
|
|
11790
|
+
}
|
|
11791
|
+
) }),
|
|
11792
|
+
/* @__PURE__ */ jsxs(
|
|
11793
|
+
"div",
|
|
11794
|
+
{
|
|
11795
|
+
className: cn(
|
|
11796
|
+
"flex min-h-0 flex-col gap-(--cmp-calendarBoard-dayCard-grid-gap) pb-(--cmp-calendarBoard-dayCard-grid-paddingBottom)",
|
|
11797
|
+
// 슬롯은 남는 세로를 다 갖는다 — 안에서 h-full 로 칸을 채울 수 있어야 한다.
|
|
11798
|
+
body != null && "flex-1"
|
|
11799
|
+
),
|
|
11800
|
+
children: [
|
|
11801
|
+
body,
|
|
11802
|
+
body == null && events.map((event, i) => /* @__PURE__ */ jsx(
|
|
11803
|
+
CalendarEventButton,
|
|
11804
|
+
{
|
|
11805
|
+
event,
|
|
11806
|
+
onSelect: (ev, e) => {
|
|
11807
|
+
e.stopPropagation();
|
|
11808
|
+
onEventClick?.(ev, e);
|
|
11809
|
+
}
|
|
11810
|
+
},
|
|
11811
|
+
event.id ?? `${event.date}-${i}`
|
|
11812
|
+
)),
|
|
11813
|
+
hiddenCount > 0 && /* @__PURE__ */ jsx(
|
|
11814
|
+
CalendarMoreButton,
|
|
11815
|
+
{
|
|
11816
|
+
count: hiddenCount,
|
|
11817
|
+
label: moreLabel,
|
|
11818
|
+
onClick: (e) => {
|
|
11819
|
+
e.stopPropagation();
|
|
11820
|
+
onOpenEvents?.();
|
|
11821
|
+
}
|
|
11822
|
+
}
|
|
11823
|
+
)
|
|
11824
|
+
]
|
|
11825
|
+
}
|
|
11826
|
+
)
|
|
11827
|
+
]
|
|
11828
|
+
}
|
|
11829
|
+
);
|
|
11830
|
+
});
|
|
11831
|
+
var MAX_HEIGHT = 480;
|
|
11832
|
+
var MAX_WIDTH = "calc(100vw - 16px)";
|
|
11833
|
+
function CalendarDayEventListBox({
|
|
11834
|
+
date,
|
|
11835
|
+
events,
|
|
11836
|
+
onEventClick,
|
|
11837
|
+
minWidth,
|
|
11838
|
+
minHeight,
|
|
11839
|
+
onClose,
|
|
11840
|
+
closeLabel = "\uB2EB\uAE30"
|
|
11841
|
+
}) {
|
|
11842
|
+
const [y, m, d] = date.split("-").map(Number);
|
|
11843
|
+
const weekday = WEEK_LABELS[new Date(y, m - 1, d).getDay()];
|
|
11844
|
+
return /* @__PURE__ */ jsxs(
|
|
11845
|
+
"div",
|
|
11846
|
+
{
|
|
11847
|
+
className: "flex w-max flex-col overflow-hidden rounded-(--cmp-calendarBoard-radius) bg-(--cmp-calendarBoard-bg) shadow-(--shadow-overlay)",
|
|
11848
|
+
style: { minWidth, maxWidth: MAX_WIDTH, minHeight, maxHeight: MAX_HEIGHT },
|
|
11849
|
+
children: [
|
|
11850
|
+
/* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-(--cmp-calendarBoard-dayEvent-header-gap) px-(--cmp-calendarBoard-dayEvent-header-paddingX) py-(--cmp-calendarBoard-dayEvent-header-paddingY)", children: [
|
|
11851
|
+
/* @__PURE__ */ jsxs("span", { className: "typo-heading-md text-(--cmp-calendarBoard-header-content-color)", children: [
|
|
11852
|
+
d,
|
|
11853
|
+
"\uC77C"
|
|
11854
|
+
] }),
|
|
11855
|
+
/* @__PURE__ */ jsxs("span", { className: "typo-body-lg-default flex-1 text-(--cmp-calendarBoard-header-content-color)", children: [
|
|
11856
|
+
"(",
|
|
11857
|
+
weekday,
|
|
11858
|
+
")"
|
|
11859
|
+
] }),
|
|
11860
|
+
/* @__PURE__ */ jsx(
|
|
11861
|
+
SGhostButton,
|
|
11862
|
+
{
|
|
11863
|
+
icon: "close",
|
|
11864
|
+
size: "xs",
|
|
11865
|
+
ariaLabel: closeLabel,
|
|
11866
|
+
className: "shrink-0",
|
|
11867
|
+
onClick: onClose
|
|
11868
|
+
}
|
|
11869
|
+
)
|
|
11870
|
+
] }),
|
|
11871
|
+
/* @__PURE__ */ jsx(SScrollArea, { axis: "vertical", className: "min-h-0 flex-1", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-(--cmp-calendarBoard-dayEvent-body-gap) px-(--cmp-calendarBoard-dayEvent-body-paddingX) pb-(--cmp-calendarBoard-dayEvent-body-paddingBottom)", children: events.map((event, i) => /* @__PURE__ */ jsx(
|
|
11872
|
+
CalendarEventButton,
|
|
11873
|
+
{
|
|
11874
|
+
event,
|
|
11875
|
+
onSelect: onEventClick
|
|
11876
|
+
},
|
|
11877
|
+
event.id ?? `${event.date}-${i}`
|
|
11878
|
+
)) }) })
|
|
11879
|
+
]
|
|
11880
|
+
}
|
|
11881
|
+
);
|
|
11882
|
+
}
|
|
11883
|
+
var DAY_EVENT_OUTDENT = 16;
|
|
11884
|
+
var VIEWPORT_PADDING2 = 8;
|
|
11885
|
+
function shiftIntoView(desired, size, viewport) {
|
|
11886
|
+
const max = Math.max(viewport - size - VIEWPORT_PADDING2, VIEWPORT_PADDING2);
|
|
11887
|
+
return Math.min(Math.max(desired, VIEWPORT_PADDING2), max) - desired;
|
|
11888
|
+
}
|
|
11889
|
+
function measureRowCapacity(cell) {
|
|
11890
|
+
const cs = getComputedStyle(cell);
|
|
11891
|
+
const v = (name) => Number.parseFloat(cs.getPropertyValue(name)) || 0;
|
|
11892
|
+
const gap = v("--cmp-calendarBoard-dayCard-grid-gap");
|
|
11893
|
+
const row = v("--cmp-calendarBoard-item-height") + gap;
|
|
11894
|
+
if (row <= 0) return null;
|
|
11895
|
+
const header = v("--cmp-calendarBoard-dayCard-header-paddingTop") + v("--cmp-calendarBoard-daySequence-size") + v("--cmp-calendarBoard-dayCard-header-paddingBottom");
|
|
11896
|
+
const free = cell.getBoundingClientRect().height - header - v("--cmp-calendarBoard-dayCard-grid-paddingBottom") + gap;
|
|
11897
|
+
if (free <= 0) return null;
|
|
11898
|
+
return Math.max(1, Math.floor(free / row));
|
|
11899
|
+
}
|
|
11900
|
+
function SCalendarBoard({
|
|
11901
|
+
year,
|
|
11902
|
+
month,
|
|
11903
|
+
defaultYear,
|
|
11904
|
+
defaultMonth,
|
|
11905
|
+
onViewChange,
|
|
11906
|
+
selectable = false,
|
|
11907
|
+
value,
|
|
11908
|
+
onValueChange,
|
|
11909
|
+
events,
|
|
11910
|
+
dayColors,
|
|
11911
|
+
dayContent,
|
|
11912
|
+
onEventClick,
|
|
11913
|
+
onMoreClick,
|
|
11914
|
+
todayLabel = "\uC624\uB298",
|
|
11915
|
+
moreLabel,
|
|
11916
|
+
headerRight,
|
|
11917
|
+
className,
|
|
11918
|
+
style
|
|
11919
|
+
}) {
|
|
11920
|
+
const today = todayStr();
|
|
11921
|
+
const [ty, tm] = [Number(today.slice(0, 4)), Number(today.slice(5, 7))];
|
|
11922
|
+
const [innerView, setInnerView] = useState(() => ({
|
|
11923
|
+
year: defaultYear ?? ty,
|
|
11924
|
+
month: defaultMonth ?? tm
|
|
11925
|
+
}));
|
|
11926
|
+
const controlled = year != null && month != null;
|
|
11927
|
+
const view = controlled ? { year, month } : innerView;
|
|
11928
|
+
const [openDate, setOpenDate] = useState(null);
|
|
11929
|
+
const [placement, setPlacement] = useState({ cellWidth: 0, cellHeight: 0, side: 0, align: 0 });
|
|
11930
|
+
const [panelEl, setPanelEl] = useState(null);
|
|
11931
|
+
const portalContainer = usePortalContainer();
|
|
11932
|
+
const setView = useCallback(
|
|
11933
|
+
(next) => {
|
|
11934
|
+
setOpenDate(null);
|
|
11935
|
+
if (!controlled) setInnerView(next);
|
|
11936
|
+
onViewChange?.(next);
|
|
11937
|
+
},
|
|
11938
|
+
[controlled, onViewChange]
|
|
11939
|
+
);
|
|
11940
|
+
const cells = useMemo(() => monthCells(view.year, view.month), [view.year, view.month]);
|
|
11941
|
+
const rowCount = cells.length / 7;
|
|
11942
|
+
const gridRef = useRef(null);
|
|
11943
|
+
const [rowCapacity, setRowCapacity] = useState(CALENDAR_BOARD_MAX_VISIBLE_EVENTS);
|
|
11944
|
+
useEffect(() => {
|
|
11945
|
+
const grid = gridRef.current;
|
|
11946
|
+
if (grid == null || typeof ResizeObserver === "undefined") return;
|
|
11947
|
+
const cell = grid.querySelector('[role="gridcell"]');
|
|
11948
|
+
if (cell == null) return;
|
|
11949
|
+
const apply = () => {
|
|
11950
|
+
const next = measureRowCapacity(cell);
|
|
11951
|
+
if (next != null) setRowCapacity(next);
|
|
11952
|
+
};
|
|
11953
|
+
apply();
|
|
11954
|
+
const observer = new ResizeObserver(apply);
|
|
11955
|
+
observer.observe(cell);
|
|
11956
|
+
return () => observer.disconnect();
|
|
11957
|
+
}, [rowCount]);
|
|
11958
|
+
const eventMap = useMemo(() => {
|
|
11959
|
+
const map = /* @__PURE__ */ new Map();
|
|
11960
|
+
(events ?? []).forEach((event) => {
|
|
11961
|
+
const list = map.get(event.date);
|
|
11962
|
+
if (list) list.push(event);
|
|
11963
|
+
else map.set(event.date, [event]);
|
|
11964
|
+
});
|
|
11965
|
+
return map;
|
|
11966
|
+
}, [events]);
|
|
11967
|
+
const openEvents = openDate ? eventMap.get(openDate) ?? [] : [];
|
|
11968
|
+
useLayoutEffect(() => {
|
|
11969
|
+
if (openDate == null || panelEl == null) return;
|
|
11970
|
+
const cell = gridRef.current?.querySelector(`[data-date="${openDate}"]`);
|
|
11971
|
+
if (cell == null) return;
|
|
11972
|
+
const adjust = () => {
|
|
11973
|
+
const cellRect = cell.getBoundingClientRect();
|
|
11974
|
+
const panelRect = panelEl.getBoundingClientRect();
|
|
11975
|
+
const next = {
|
|
11976
|
+
cellWidth: cellRect.width,
|
|
11977
|
+
cellHeight: cellRect.height,
|
|
11978
|
+
side: -(cellRect.height + DAY_EVENT_OUTDENT) + shiftIntoView(cellRect.top - DAY_EVENT_OUTDENT, panelRect.height, window.innerHeight),
|
|
11979
|
+
align: -DAY_EVENT_OUTDENT + shiftIntoView(cellRect.left - DAY_EVENT_OUTDENT, panelRect.width, window.innerWidth)
|
|
11980
|
+
};
|
|
11981
|
+
setPlacement(
|
|
11982
|
+
(prev) => prev.cellWidth === next.cellWidth && prev.cellHeight === next.cellHeight && prev.side === next.side && prev.align === next.align ? prev : next
|
|
11983
|
+
);
|
|
11984
|
+
};
|
|
11985
|
+
adjust();
|
|
11986
|
+
const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(adjust);
|
|
11987
|
+
observer?.observe(panelEl);
|
|
11988
|
+
window.addEventListener("scroll", adjust, true);
|
|
11989
|
+
window.addEventListener("resize", adjust);
|
|
11990
|
+
return () => {
|
|
11991
|
+
observer?.disconnect();
|
|
11992
|
+
window.removeEventListener("scroll", adjust, true);
|
|
11993
|
+
window.removeEventListener("resize", adjust);
|
|
11994
|
+
};
|
|
11995
|
+
}, [openDate, panelEl]);
|
|
11996
|
+
const columns = "repeat(7, minmax(var(--cmp-calendarBoard-dayCard-minWidth), 1fr))";
|
|
11997
|
+
const openEventList = (date, list) => {
|
|
11998
|
+
if (onMoreClick) {
|
|
11999
|
+
onMoreClick({ date, events: list });
|
|
12000
|
+
return;
|
|
12001
|
+
}
|
|
12002
|
+
setOpenDate((prev) => prev === date ? null : date);
|
|
12003
|
+
};
|
|
12004
|
+
return /* @__PURE__ */ jsxs(
|
|
12005
|
+
"div",
|
|
12006
|
+
{
|
|
12007
|
+
className: cn(
|
|
12008
|
+
// 판 높이는 부모가 정한다 — 행이 그 높이를 균등 분할하고, 칸 높이가 다시 "몇 줄 보일지" 를 정한다.
|
|
12009
|
+
"flex h-full w-full flex-col overflow-hidden rounded-(--cmp-calendarBoard-radius) border border-solid border-(--cmp-calendarBoard-border) bg-(--cmp-calendarBoard-bg)",
|
|
12010
|
+
className
|
|
12011
|
+
),
|
|
12012
|
+
style,
|
|
12013
|
+
children: [
|
|
12014
|
+
/* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-(--cmp-calendarBoard-header-gap) px-sd-16 py-sd-12", children: [
|
|
12015
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-(--cmp-calendarBoard-header-content-gap)", children: [
|
|
12016
|
+
/* @__PURE__ */ jsx(
|
|
12017
|
+
SGhostButton,
|
|
12018
|
+
{
|
|
12019
|
+
icon: "chevronLeft",
|
|
12020
|
+
size: "xxs",
|
|
12021
|
+
ariaLabel: "\uC774\uC804 \uD574",
|
|
12022
|
+
onClick: () => setView({ year: view.year - 1, month: view.month })
|
|
12023
|
+
}
|
|
12024
|
+
),
|
|
12025
|
+
/* @__PURE__ */ jsx("span", { className: "typo-heading-lg inline-flex min-w-[48px] justify-center text-(--cmp-calendarBoard-header-content-color)", children: view.year }),
|
|
12026
|
+
/* @__PURE__ */ jsx(
|
|
12027
|
+
SGhostButton,
|
|
12028
|
+
{
|
|
12029
|
+
icon: "chevronRight",
|
|
12030
|
+
size: "xxs",
|
|
12031
|
+
ariaLabel: "\uB2E4\uC74C \uD574",
|
|
12032
|
+
onClick: () => setView({ year: view.year + 1, month: view.month })
|
|
12033
|
+
}
|
|
12034
|
+
)
|
|
12035
|
+
] }),
|
|
12036
|
+
/* @__PURE__ */ jsx(SDivider, { vertical: true, height: "var(--cmp-calendarBoard-header-content-divider-height)" }),
|
|
12037
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-(--cmp-calendarBoard-header-content-gap)", children: [
|
|
12038
|
+
/* @__PURE__ */ jsx(
|
|
12039
|
+
SGhostButton,
|
|
12040
|
+
{
|
|
12041
|
+
icon: "chevronLeft",
|
|
12042
|
+
size: "xxs",
|
|
12043
|
+
ariaLabel: "\uC774\uC804 \uB2EC",
|
|
12044
|
+
onClick: () => setView(calcYearMonth(view.year, view.month, "prev"))
|
|
12045
|
+
}
|
|
12046
|
+
),
|
|
12047
|
+
/* @__PURE__ */ jsxs("span", { className: "typo-heading-lg inline-flex min-w-[48px] justify-center text-(--cmp-calendarBoard-header-content-color)", children: [
|
|
12048
|
+
view.month,
|
|
12049
|
+
"\uC6D4"
|
|
12050
|
+
] }),
|
|
12051
|
+
/* @__PURE__ */ jsx(
|
|
12052
|
+
SGhostButton,
|
|
12053
|
+
{
|
|
12054
|
+
icon: "chevronRight",
|
|
12055
|
+
size: "xxs",
|
|
12056
|
+
ariaLabel: "\uB2E4\uC74C \uB2EC",
|
|
12057
|
+
onClick: () => setView(calcYearMonth(view.year, view.month, "next"))
|
|
12058
|
+
}
|
|
12059
|
+
)
|
|
12060
|
+
] }),
|
|
12061
|
+
todayLabel !== "" && /* @__PURE__ */ jsx(
|
|
12062
|
+
SButton,
|
|
12063
|
+
{
|
|
12064
|
+
color: "neutral",
|
|
12065
|
+
outline: true,
|
|
12066
|
+
size: "xs",
|
|
12067
|
+
label: todayLabel,
|
|
12068
|
+
onClick: () => setView({ year: ty, month: tm })
|
|
12069
|
+
}
|
|
12070
|
+
),
|
|
12071
|
+
headerRight != null && /* @__PURE__ */ jsx("div", { className: "ml-auto flex items-center", children: headerRight })
|
|
12072
|
+
] }),
|
|
12073
|
+
/* @__PURE__ */ jsx(SDivider, {}),
|
|
12074
|
+
/* @__PURE__ */ jsx(
|
|
12075
|
+
"div",
|
|
12076
|
+
{
|
|
12077
|
+
className: "grid shrink-0 bg-(--cmp-calendarBoard-grid-bg) pt-(--cmp-calendarBoard-grid-paddingTop) pb-(--cmp-calendarBoard-grid-gap)",
|
|
12078
|
+
style: { gridTemplateColumns: columns },
|
|
12079
|
+
children: WEEK_LABELS.map((label) => /* @__PURE__ */ jsx(
|
|
12080
|
+
"div",
|
|
12081
|
+
{
|
|
12082
|
+
className: "typo-body-md-default flex justify-center text-(--cmp-calendarBoard-grid-weekRow-color)",
|
|
12083
|
+
children: label
|
|
12084
|
+
},
|
|
12085
|
+
label
|
|
12086
|
+
))
|
|
12087
|
+
}
|
|
12088
|
+
),
|
|
12089
|
+
/* @__PURE__ */ jsxs(
|
|
12090
|
+
RPopover12.Root,
|
|
12091
|
+
{
|
|
12092
|
+
open: openDate !== null,
|
|
12093
|
+
onOpenChange: (open) => {
|
|
12094
|
+
if (!open) setOpenDate(null);
|
|
12095
|
+
},
|
|
12096
|
+
children: [
|
|
12097
|
+
/* @__PURE__ */ jsx(
|
|
12098
|
+
"div",
|
|
12099
|
+
{
|
|
12100
|
+
ref: gridRef,
|
|
12101
|
+
role: "grid",
|
|
12102
|
+
className: "grid min-h-0 flex-1 gap-px overflow-auto border-t border-solid border-(--cmp-calendarBoard-grid-month-border) bg-(--cmp-calendarBoard-grid-month-border)",
|
|
12103
|
+
style: {
|
|
12104
|
+
gridTemplateColumns: columns,
|
|
12105
|
+
// 행은 판 높이를 균등하게 나눠 갖는다 — 일정이 많은 주만 길어지면 격자가 깨진다.
|
|
12106
|
+
gridTemplateRows: `repeat(${rowCount}, minmax(var(--cmp-calendarBoard-dayCard-minHeight), 1fr))`
|
|
12107
|
+
},
|
|
12108
|
+
children: cells.map((cell) => {
|
|
12109
|
+
const content = dayContent?.[cell.date];
|
|
12110
|
+
const list = content == null ? eventMap.get(cell.date) ?? [] : [];
|
|
12111
|
+
const folded = list.length > rowCapacity;
|
|
12112
|
+
const visible = folded ? list.slice(0, rowCapacity - 1) : list;
|
|
12113
|
+
const card = /* @__PURE__ */ jsx(
|
|
12114
|
+
CalendarDayCard,
|
|
12115
|
+
{
|
|
12116
|
+
date: cell.date,
|
|
12117
|
+
day: cell.day,
|
|
12118
|
+
inCurrentMonth: cell.inCurrentMonth,
|
|
12119
|
+
isToday: cell.date === today,
|
|
12120
|
+
isSelected: value != null && value === cell.date,
|
|
12121
|
+
selectable,
|
|
12122
|
+
color: dayColors?.[cell.date] ?? "default",
|
|
12123
|
+
events: visible,
|
|
12124
|
+
body: content,
|
|
12125
|
+
hiddenCount: folded ? list.length - (rowCapacity - 1) : 0,
|
|
12126
|
+
isOpen: openDate === cell.date,
|
|
12127
|
+
moreLabel,
|
|
12128
|
+
onDaySelect: (date) => onValueChange?.(date, list),
|
|
12129
|
+
onEventClick,
|
|
12130
|
+
onOpenEvents: () => openEventList(cell.date, list)
|
|
12131
|
+
},
|
|
12132
|
+
cell.date
|
|
12133
|
+
);
|
|
12134
|
+
return cell.date === openDate ? /* @__PURE__ */ jsx(RPopover12.Anchor, { asChild: true, children: card }, cell.date) : card;
|
|
12135
|
+
})
|
|
12136
|
+
}
|
|
12137
|
+
),
|
|
12138
|
+
/* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
|
|
12139
|
+
RPopover12.Content,
|
|
12140
|
+
{
|
|
12141
|
+
onInteractOutside: (e) => {
|
|
12142
|
+
const target = e.detail.originalEvent.target;
|
|
12143
|
+
if (target instanceof Node && gridRef.current?.contains(target)) e.preventDefault();
|
|
12144
|
+
},
|
|
12145
|
+
side: "bottom",
|
|
12146
|
+
align: "start",
|
|
12147
|
+
ref: setPanelEl,
|
|
12148
|
+
sideOffset: placement.side,
|
|
12149
|
+
alignOffset: placement.align,
|
|
12150
|
+
avoidCollisions: false,
|
|
12151
|
+
className: cn("z-50 outline-none", FLOATING_SLIDE_ANIM),
|
|
12152
|
+
onOpenAutoFocus: (e) => e.preventDefault(),
|
|
12153
|
+
children: openDate != null && /* @__PURE__ */ jsx(
|
|
12154
|
+
CalendarDayEventListBox,
|
|
12155
|
+
{
|
|
12156
|
+
date: openDate,
|
|
12157
|
+
minWidth: placement.cellWidth > 0 ? placement.cellWidth + DAY_EVENT_OUTDENT * 2 : void 0,
|
|
12158
|
+
minHeight: placement.cellHeight > 0 ? placement.cellHeight + DAY_EVENT_OUTDENT * 2 : void 0,
|
|
12159
|
+
events: openEvents,
|
|
12160
|
+
onEventClick,
|
|
12161
|
+
onClose: () => setOpenDate(null)
|
|
12162
|
+
}
|
|
12163
|
+
)
|
|
12164
|
+
},
|
|
12165
|
+
openDate
|
|
12166
|
+
) })
|
|
12167
|
+
]
|
|
12168
|
+
}
|
|
12169
|
+
)
|
|
12170
|
+
]
|
|
12171
|
+
}
|
|
12172
|
+
);
|
|
12173
|
+
}
|
|
12174
|
+
|
|
11452
12175
|
// src/lib/floating-height.ts
|
|
11453
12176
|
var POPOVER_AVAILABLE_HEIGHT = "var(--radix-popover-content-available-height)";
|
|
11454
12177
|
function clampToAvailableHeight(value, availableHeight) {
|
|
@@ -13404,10 +14127,10 @@ function useTruncatedValueTooltip({
|
|
|
13404
14127
|
valueRef: elRef,
|
|
13405
14128
|
onMouseEnter: active ? onMouseEnter : cancelHide,
|
|
13406
14129
|
onMouseLeave: active ? startHide : cancelHide,
|
|
13407
|
-
tooltip: active ? /* @__PURE__ */ jsxs(
|
|
13408
|
-
/* @__PURE__ */ jsx(
|
|
13409
|
-
/* @__PURE__ */ jsx(
|
|
13410
|
-
|
|
14130
|
+
tooltip: active ? /* @__PURE__ */ jsxs(RPopover12.Root, { open, onOpenChange: setOpen, children: [
|
|
14131
|
+
/* @__PURE__ */ jsx(RPopover12.Anchor, { virtualRef: elRef }),
|
|
14132
|
+
/* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
|
|
14133
|
+
RPopover12.Content,
|
|
13411
14134
|
{
|
|
13412
14135
|
side: "top",
|
|
13413
14136
|
sideOffset: 4,
|
|
@@ -14163,41 +14886,6 @@ function SRadioGroup({
|
|
|
14163
14886
|
}
|
|
14164
14887
|
);
|
|
14165
14888
|
}
|
|
14166
|
-
|
|
14167
|
-
// src/lib/date.ts
|
|
14168
|
-
function todayStr() {
|
|
14169
|
-
const d = /* @__PURE__ */ new Date();
|
|
14170
|
-
return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
|
|
14171
|
-
}
|
|
14172
|
-
function formatDate(year, month, day) {
|
|
14173
|
-
return `${year}-${String(month).padStart(2, "0")}-${String(day).padStart(2, "0")}`;
|
|
14174
|
-
}
|
|
14175
|
-
function calcYearMonth(year, month, dir) {
|
|
14176
|
-
if (dir === "prev")
|
|
14177
|
-
return month === 1 ? { year: year - 1, month: 12 } : { year, month: month - 1 };
|
|
14178
|
-
return month === 12 ? { year: year + 1, month: 1 } : { year, month: month + 1 };
|
|
14179
|
-
}
|
|
14180
|
-
function monthCells(year, month) {
|
|
14181
|
-
const firstDayIndex = new Date(year, month - 1, 1).getDay();
|
|
14182
|
-
const daysInCurrent = new Date(year, month, 0).getDate();
|
|
14183
|
-
const prev = calcYearMonth(year, month, "prev");
|
|
14184
|
-
const daysInPrev = new Date(prev.year, prev.month, 0).getDate();
|
|
14185
|
-
const next = calcYearMonth(year, month, "next");
|
|
14186
|
-
const cells = [];
|
|
14187
|
-
for (let i = firstDayIndex - 1; i >= 0; i--) {
|
|
14188
|
-
const day = daysInPrev - i;
|
|
14189
|
-
cells.push({ date: formatDate(prev.year, prev.month, day), day, inCurrentMonth: false });
|
|
14190
|
-
}
|
|
14191
|
-
for (let day = 1; day <= daysInCurrent; day++) {
|
|
14192
|
-
cells.push({ date: formatDate(year, month, day), day, inCurrentMonth: true });
|
|
14193
|
-
}
|
|
14194
|
-
const remaining = (7 - cells.length % 7) % 7;
|
|
14195
|
-
for (let day = 1; day <= remaining; day++) {
|
|
14196
|
-
cells.push({ date: formatDate(next.year, next.month, day), day, inCurrentMonth: false });
|
|
14197
|
-
}
|
|
14198
|
-
return cells;
|
|
14199
|
-
}
|
|
14200
|
-
var WEEK_LABELS = ["\uC77C", "\uC6D4", "\uD654", "\uC218", "\uBAA9", "\uAE08", "\uD1A0"];
|
|
14201
14889
|
function SCalendar({
|
|
14202
14890
|
value,
|
|
14203
14891
|
onValueChange,
|
|
@@ -14776,8 +15464,8 @@ function SDatePicker({
|
|
|
14776
15464
|
disabled,
|
|
14777
15465
|
className,
|
|
14778
15466
|
style,
|
|
14779
|
-
children: /* @__PURE__ */ jsxs(
|
|
14780
|
-
/* @__PURE__ */ jsx(
|
|
15467
|
+
children: /* @__PURE__ */ jsxs(RPopover12.Root, { open, onOpenChange: (o) => !disabled && setOpen(o), children: [
|
|
15468
|
+
/* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
14781
15469
|
"div",
|
|
14782
15470
|
{
|
|
14783
15471
|
role: "button",
|
|
@@ -14836,8 +15524,8 @@ function SDatePicker({
|
|
|
14836
15524
|
]
|
|
14837
15525
|
}
|
|
14838
15526
|
) }),
|
|
14839
|
-
/* @__PURE__ */ jsx(
|
|
14840
|
-
|
|
15527
|
+
/* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
|
|
15528
|
+
RPopover12.Content,
|
|
14841
15529
|
{
|
|
14842
15530
|
side: "bottom",
|
|
14843
15531
|
align: mode === "date" ? "start" : "center",
|
|
@@ -15310,7 +15998,7 @@ function SDateRangePicker({
|
|
|
15310
15998
|
className,
|
|
15311
15999
|
style,
|
|
15312
16000
|
children: /* @__PURE__ */ jsxs(
|
|
15313
|
-
|
|
16001
|
+
RPopover12.Root,
|
|
15314
16002
|
{
|
|
15315
16003
|
open,
|
|
15316
16004
|
onOpenChange: (o) => {
|
|
@@ -15319,7 +16007,7 @@ function SDateRangePicker({
|
|
|
15319
16007
|
if (!o) setPendingStart(null);
|
|
15320
16008
|
},
|
|
15321
16009
|
children: [
|
|
15322
|
-
/* @__PURE__ */ jsx(
|
|
16010
|
+
/* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
15323
16011
|
"div",
|
|
15324
16012
|
{
|
|
15325
16013
|
role: "button",
|
|
@@ -15383,8 +16071,8 @@ function SDateRangePicker({
|
|
|
15383
16071
|
]
|
|
15384
16072
|
}
|
|
15385
16073
|
) }),
|
|
15386
|
-
/* @__PURE__ */ jsx(
|
|
15387
|
-
|
|
16074
|
+
/* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
|
|
16075
|
+
RPopover12.Content,
|
|
15388
16076
|
{
|
|
15389
16077
|
side: "bottom",
|
|
15390
16078
|
align: "start",
|
|
@@ -17881,10 +18569,10 @@ function EditorToolbarBar({
|
|
|
17881
18569
|
},
|
|
17882
18570
|
item4
|
|
17883
18571
|
);
|
|
17884
|
-
return /* @__PURE__ */ jsxs(
|
|
17885
|
-
/* @__PURE__ */ jsx(
|
|
17886
|
-
/* @__PURE__ */ jsx(
|
|
17887
|
-
|
|
18572
|
+
return /* @__PURE__ */ jsxs(RPopover12.Root, { open: linkOpen, onOpenChange: setLinkOpen, children: [
|
|
18573
|
+
/* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsx(ToolbarButton, { label: "\uB9C1\uD06C", active: state2.link, disabled: off, children: /* @__PURE__ */ jsx(IconLink, { size: ICON_SIZE }) }) }),
|
|
18574
|
+
/* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
|
|
18575
|
+
RPopover12.Content,
|
|
17888
18576
|
{
|
|
17889
18577
|
sideOffset: 4,
|
|
17890
18578
|
align: "start",
|
|
@@ -19092,7 +19780,7 @@ var SChipFilter = /* @__PURE__ */ forwardRef(function SChipFilter2({
|
|
|
19092
19780
|
"div",
|
|
19093
19781
|
{
|
|
19094
19782
|
className: cn(
|
|
19095
|
-
"flex w-full items-start gap-[var(--chipfilter-bar-gap)]
|
|
19783
|
+
"flex w-full items-start gap-[var(--chipfilter-bar-gap)] bg-[var(--chipfilter-bar-bg)] px-[var(--chipfilter-bar-padding-x)] py-[var(--chipfilter-bar-padding-y)]",
|
|
19096
19784
|
className
|
|
19097
19785
|
),
|
|
19098
19786
|
style: { ...rootStyle, borderColor: "var(--chipfilter-bar-border)" },
|
|
@@ -19220,8 +19908,8 @@ var SChipFilter = /* @__PURE__ */ forwardRef(function SChipFilter2({
|
|
|
19220
19908
|
})(),
|
|
19221
19909
|
hasRightActions && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
19222
19910
|
/* @__PURE__ */ jsx(Divider, { inset: true }),
|
|
19223
|
-
hasAddButton && /* @__PURE__ */ jsxs(
|
|
19224
|
-
/* @__PURE__ */ jsx(
|
|
19911
|
+
hasAddButton && /* @__PURE__ */ jsxs(RPopover12.Root, { open: addOpen, onOpenChange: setAddOpen, children: [
|
|
19912
|
+
/* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
19225
19913
|
"button",
|
|
19226
19914
|
{
|
|
19227
19915
|
type: "button",
|
|
@@ -19246,8 +19934,8 @@ var SChipFilter = /* @__PURE__ */ forwardRef(function SChipFilter2({
|
|
|
19246
19934
|
]
|
|
19247
19935
|
}
|
|
19248
19936
|
) }),
|
|
19249
|
-
/* @__PURE__ */ jsx(
|
|
19250
|
-
|
|
19937
|
+
/* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
|
|
19938
|
+
RPopover12.Content,
|
|
19251
19939
|
{
|
|
19252
19940
|
side: "bottom",
|
|
19253
19941
|
align: "start",
|
|
@@ -19282,17 +19970,17 @@ var SChipFilter = /* @__PURE__ */ forwardRef(function SChipFilter2({
|
|
|
19282
19970
|
)
|
|
19283
19971
|
] })
|
|
19284
19972
|
] }),
|
|
19285
|
-
/* @__PURE__ */ jsxs(
|
|
19973
|
+
/* @__PURE__ */ jsxs(RPopover12.Root, { open: openKey != null, onOpenChange: (next) => !next && setOpenKey(null), children: [
|
|
19286
19974
|
/* @__PURE__ */ jsx(
|
|
19287
|
-
|
|
19975
|
+
RPopover12.Anchor,
|
|
19288
19976
|
{
|
|
19289
19977
|
virtualRef: {
|
|
19290
19978
|
current: openKey ? triggerRefs.current.get(openKey) : null
|
|
19291
19979
|
}
|
|
19292
19980
|
}
|
|
19293
19981
|
),
|
|
19294
|
-
/* @__PURE__ */ jsx(
|
|
19295
|
-
|
|
19982
|
+
/* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
|
|
19983
|
+
RPopover12.Content,
|
|
19296
19984
|
{
|
|
19297
19985
|
side: "bottom",
|
|
19298
19986
|
align: "start",
|
|
@@ -19884,8 +20572,8 @@ function InlineDatePresetFilter({
|
|
|
19884
20572
|
applied && (rangeValue ? (
|
|
19885
20573
|
// 뱃지 모양은 그대로 두고, 눌렀을 때 캘린더가 열려 기간을 직접 다시 고를 수 있게 한다.
|
|
19886
20574
|
// 직접 고르면 프리셋 선택은 해제된다.
|
|
19887
|
-
/* @__PURE__ */ jsxs(
|
|
19888
|
-
/* @__PURE__ */ jsx(
|
|
20575
|
+
/* @__PURE__ */ jsxs(RPopover12.Root, { open: pickerOpen, onOpenChange: setPickerOpen, children: [
|
|
20576
|
+
/* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
19889
20577
|
"button",
|
|
19890
20578
|
{
|
|
19891
20579
|
type: "button",
|
|
@@ -19894,8 +20582,8 @@ function InlineDatePresetFilter({
|
|
|
19894
20582
|
children: badge
|
|
19895
20583
|
}
|
|
19896
20584
|
) }),
|
|
19897
|
-
/* @__PURE__ */ jsx(
|
|
19898
|
-
|
|
20585
|
+
/* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
|
|
20586
|
+
RPopover12.Content,
|
|
19899
20587
|
{
|
|
19900
20588
|
side: "bottom",
|
|
19901
20589
|
align: "start",
|
|
@@ -21203,8 +21891,8 @@ function STimePicker({
|
|
|
21203
21891
|
disabled,
|
|
21204
21892
|
className,
|
|
21205
21893
|
style,
|
|
21206
|
-
children: /* @__PURE__ */ jsxs(
|
|
21207
|
-
/* @__PURE__ */ jsx(
|
|
21894
|
+
children: /* @__PURE__ */ jsxs(RPopover12.Root, { open, onOpenChange: commitOpen, children: [
|
|
21895
|
+
/* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
21208
21896
|
"div",
|
|
21209
21897
|
{
|
|
21210
21898
|
ref: triggerRef,
|
|
@@ -21264,8 +21952,8 @@ function STimePicker({
|
|
|
21264
21952
|
]
|
|
21265
21953
|
}
|
|
21266
21954
|
) }),
|
|
21267
|
-
/* @__PURE__ */ jsx(
|
|
21268
|
-
|
|
21955
|
+
/* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
|
|
21956
|
+
RPopover12.Content,
|
|
21269
21957
|
{
|
|
21270
21958
|
side: "bottom",
|
|
21271
21959
|
align: "start",
|
|
@@ -21670,8 +22358,8 @@ function STimeRangePicker({
|
|
|
21670
22358
|
disabled,
|
|
21671
22359
|
className,
|
|
21672
22360
|
style,
|
|
21673
|
-
children: /* @__PURE__ */ jsxs(
|
|
21674
|
-
/* @__PURE__ */ jsx(
|
|
22361
|
+
children: /* @__PURE__ */ jsxs(RPopover12.Root, { open, onOpenChange: commitOpen, children: [
|
|
22362
|
+
/* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
21675
22363
|
"div",
|
|
21676
22364
|
{
|
|
21677
22365
|
ref: triggerRef,
|
|
@@ -21731,8 +22419,8 @@ function STimeRangePicker({
|
|
|
21731
22419
|
]
|
|
21732
22420
|
}
|
|
21733
22421
|
) }),
|
|
21734
|
-
/* @__PURE__ */ jsx(
|
|
21735
|
-
|
|
22422
|
+
/* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
|
|
22423
|
+
RPopover12.Content,
|
|
21736
22424
|
{
|
|
21737
22425
|
side: "bottom",
|
|
21738
22426
|
align: "start",
|
|
@@ -21759,6 +22447,6 @@ function STimeRangePicker({
|
|
|
21759
22447
|
);
|
|
21760
22448
|
}
|
|
21761
22449
|
|
|
21762
|
-
export { ACCOUNT_LIST_BOX_ICONS, ACCOUNT_LIST_BOX_ITEM_TONES, ACCOUNT_LIST_BOX_LABELS, ACCOUNT_LIST_BOX_LAYOUT, ACCOUNT_LIST_BOX_TONE_CONFIG, BADGE_COLORS, BUTTON_COLORS, BUTTON_SIZES, COLOR_KEYS, FIELD_WIDTH_GRADES, GNB_COLORS, GNB_COMMON, GNB_FOLD_MS, GNB_FULL_LOGO_WIDTH, GNB_HEADER, GNB_MENU, GNB_MENU_WIDTH, GNB_RAIL, GNB_RAIL_WIDTH, GNB_SYSTEM_COLORS, GNB_SYSTEM_COLOR_CONFIG, GNB_SYSTEM_LAYOUT, GNB_SYSTEM_PLACEMENTS, GNB_SYSTEM_TOP_COLOR_CONFIG, ICONS, IMAGE_FITS, PAGE_BACKGROUNDS, PAGE_CONTENT_HEIGHTS, RangeCalendar, SAccountListBox, SActionModal, SBadge, SBarcodeInput, SButton, SCROLL_AREA_AXES, SCalendar, SCallout, SCard, SCheckbox, SChip2 as SChip, SChipFilter, SChipInput, SCircleProgress, SConfirmModal, SDatePicker, SDatePickerMonthListbox, SDatePickerYearListbox, SDateRangePicker, SDivider, SDraggableGroup, SDraggableItem2 as SDraggableItem, SDraggableList, SDraggableProvider, SDrawer, SDropdownButton2 as SDropdownButton, SEDITOR_DEFAULT_FONT_SIZE, SEDITOR_HEADING_LABELS, SEDITOR_HEADING_LEVELS, SEditor, SExpansionItem, SExpansionList2 as SExpansionList, SField, SFilePicker, SForm, SGhostButton, SGnb, SGnbSystem, SGnbSystemContext, SGuide, SIcon, SImage, SInput, SKeyValueTable, SLAYOUT_MIN_WIDTH, SLayout, SLayoutContext, SLinearProgress, SList2 as SList, SListItem2 as SListItem, SLoadingContainer, SLoadingModal, SLoadingViewport, SModal, SModalOutlet, SNumberInput, SPage, SPagination, SPopover, SPopup, SPortal, SRadio, SRadioButton, SRadioCard, SRadioCardGroup, SRadioGroup, SSPLITTER_UNITS, SScrollArea, SSearchInput, SSectionHeaderCard2 as SSectionHeaderCard, SSelect2 as SSelect, SSplitter2 as SSplitter, SStepper, SSwitch, SSystemActionButton, STEPPER_SIZES, STable, STableBar, STabs, STag, STextLink, STextarea, STimePicker, STimeRangePicker, SToast, SToastContainer, SToggle, STooltip2 as STooltip, STree2 as STree, STreeItem2 as STreeItem, SYSTEM_ACTION_BUTTON_COLORS, SYSTEM_ACTION_BUTTON_COLOR_CONFIG, SYSTEM_ACTION_BUTTON_LAYOUT, SYSTEM_ACTION_BUTTON_TYPES, SYSTEM_ACTION_BUTTON_TYPE_CONFIG, TAG_COLORS, TAG_SHAPES, TAG_SIZES, TIMEPICKER_SIZES, TIMEPICKER_SIZE_CONFIG, buttonPreset, cn, fieldWidthValue, findGnbAncestors, findGnbRailValue, isColorKey, isFieldWidthGrade, loading, resolveColor, useSLayout };
|
|
22450
|
+
export { ACCOUNT_LIST_BOX_ICONS, ACCOUNT_LIST_BOX_ITEM_TONES, ACCOUNT_LIST_BOX_LABELS, ACCOUNT_LIST_BOX_LAYOUT, ACCOUNT_LIST_BOX_TONE_CONFIG, BADGE_COLORS, BUTTON_COLORS, BUTTON_SIZES, CALENDAR_BOARD_DAY_BG, CALENDAR_BOARD_DAY_COLORS, CALENDAR_BOARD_EVENT_COLORS, CALENDAR_BOARD_EVENT_PRESETS, CALENDAR_BOARD_MAX_VISIBLE_EVENTS, COLOR_KEYS, FIELD_WIDTH_GRADES, GNB_COLORS, GNB_COMMON, GNB_FOLD_MS, GNB_FULL_LOGO_WIDTH, GNB_HEADER, GNB_MENU, GNB_MENU_WIDTH, GNB_RAIL, GNB_RAIL_WIDTH, GNB_SYSTEM_COLORS, GNB_SYSTEM_COLOR_CONFIG, GNB_SYSTEM_LAYOUT, GNB_SYSTEM_PLACEMENTS, GNB_SYSTEM_TOP_COLOR_CONFIG, ICONS, IMAGE_FITS, PAGE_BACKGROUNDS, PAGE_CONTENT_HEIGHTS, RangeCalendar, SAccountListBox, SActionModal, SBadge, SBarcodeInput, SButton, SCROLL_AREA_AXES, SCalendar, SCalendarBoard, SCallout, SCard, SCheckbox, SChip2 as SChip, SChipFilter, SChipInput, SCircleProgress, SConfirmModal, SDatePicker, SDatePickerMonthListbox, SDatePickerYearListbox, SDateRangePicker, SDivider, SDraggableGroup, SDraggableItem2 as SDraggableItem, SDraggableList, SDraggableProvider, SDrawer, SDropdownButton2 as SDropdownButton, SEDITOR_DEFAULT_FONT_SIZE, SEDITOR_HEADING_LABELS, SEDITOR_HEADING_LEVELS, SEditor, SExpansionItem, SExpansionList2 as SExpansionList, SField, SFilePicker, SForm, SGhostButton, SGnb, SGnbSystem, SGnbSystemContext, SGuide, SIcon, SImage, SInput, SKeyValueTable, SLAYOUT_MIN_WIDTH, SLayout, SLayoutContext, SLinearProgress, SList2 as SList, SListItem2 as SListItem, SLoadingContainer, SLoadingModal, SLoadingViewport, SModal, SModalOutlet, SNumberInput, SPage, SPagination, SPopover, SPopup, SPortal, SRadio, SRadioButton, SRadioCard, SRadioCardGroup, SRadioGroup, SSPLITTER_UNITS, SScrollArea, SSearchInput, SSectionHeaderCard2 as SSectionHeaderCard, SSelect2 as SSelect, SSplitter2 as SSplitter, SStepper, SSwitch, SSystemActionButton, STEPPER_SIZES, STable, STableBar, STabs, STag, STextLink, STextarea, STimePicker, STimeRangePicker, SToast, SToastContainer, SToggle, STooltip2 as STooltip, STree2 as STree, STreeItem2 as STreeItem, SYSTEM_ACTION_BUTTON_COLORS, SYSTEM_ACTION_BUTTON_COLOR_CONFIG, SYSTEM_ACTION_BUTTON_LAYOUT, SYSTEM_ACTION_BUTTON_TYPES, SYSTEM_ACTION_BUTTON_TYPE_CONFIG, TAG_COLORS, TAG_SHAPES, TAG_SIZES, TIMEPICKER_SIZES, TIMEPICKER_SIZE_CONFIG, buttonPreset, cn, fieldWidthValue, findGnbAncestors, findGnbRailValue, isColorKey, isFieldWidthGrade, loading, resolveColor, useSLayout };
|
|
21763
22451
|
//# sourceMappingURL=index.js.map
|
|
21764
22452
|
//# sourceMappingURL=index.js.map
|