sellmate-design-system-react 0.2.0 → 0.3.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.
- package/dist/components/SActionModal/SActionModal.cjs +2 -0
- package/dist/components/SActionModal/SActionModal.cjs.map +1 -1
- package/dist/components/SActionModal/SActionModal.js +2 -0
- package/dist/components/SActionModal/SActionModal.js.map +1 -1
- package/dist/components/SBarcodeInput/SBarcodeInput.cjs +2 -0
- package/dist/components/SBarcodeInput/SBarcodeInput.cjs.map +1 -1
- package/dist/components/SBarcodeInput/SBarcodeInput.js +2 -0
- package/dist/components/SBarcodeInput/SBarcodeInput.js.map +1 -1
- package/dist/components/SCalendar/SCalendar.cjs +2 -0
- package/dist/components/SCalendar/SCalendar.cjs.map +1 -1
- package/dist/components/SCalendar/SCalendar.js +2 -0
- package/dist/components/SCalendar/SCalendar.js.map +1 -1
- package/dist/components/SChip/SChip.cjs +2 -0
- package/dist/components/SChip/SChip.cjs.map +1 -1
- package/dist/components/SChip/SChip.js +2 -0
- package/dist/components/SChip/SChip.js.map +1 -1
- package/dist/components/SChipInput/SChipInput.cjs +2 -0
- package/dist/components/SChipInput/SChipInput.cjs.map +1 -1
- package/dist/components/SChipInput/SChipInput.js +2 -0
- package/dist/components/SChipInput/SChipInput.js.map +1 -1
- package/dist/components/SConfirmModal/SConfirmModal.cjs +2 -0
- package/dist/components/SConfirmModal/SConfirmModal.cjs.map +1 -1
- package/dist/components/SConfirmModal/SConfirmModal.js +2 -0
- package/dist/components/SConfirmModal/SConfirmModal.js.map +1 -1
- package/dist/components/SDatePicker/SDatePicker.cjs +2 -0
- package/dist/components/SDatePicker/SDatePicker.cjs.map +1 -1
- package/dist/components/SDatePicker/SDatePicker.js +2 -0
- package/dist/components/SDatePicker/SDatePicker.js.map +1 -1
- package/dist/components/SDateRangePicker/SDateRangePicker.cjs +2 -0
- package/dist/components/SDateRangePicker/SDateRangePicker.cjs.map +1 -1
- package/dist/components/SDateRangePicker/SDateRangePicker.js +2 -0
- package/dist/components/SDateRangePicker/SDateRangePicker.js.map +1 -1
- package/dist/components/SField/SField.cjs +2 -0
- package/dist/components/SField/SField.cjs.map +1 -1
- package/dist/components/SField/SField.js +2 -0
- package/dist/components/SField/SField.js.map +1 -1
- package/dist/components/SFilePicker/SFilePicker.cjs +2 -0
- package/dist/components/SFilePicker/SFilePicker.cjs.map +1 -1
- package/dist/components/SFilePicker/SFilePicker.js +2 -0
- package/dist/components/SFilePicker/SFilePicker.js.map +1 -1
- package/dist/components/SGhostButton/SGhostButton.cjs +2 -0
- package/dist/components/SGhostButton/SGhostButton.cjs.map +1 -1
- package/dist/components/SGhostButton/SGhostButton.d.ts +3 -1
- package/dist/components/SGhostButton/SGhostButton.js +2 -0
- package/dist/components/SGhostButton/SGhostButton.js.map +1 -1
- package/dist/components/SGnb/SGnb.cjs +394 -213
- package/dist/components/SGnb/SGnb.cjs.map +1 -1
- package/dist/components/SGnb/SGnb.d.ts +16 -12
- package/dist/components/SGnb/SGnb.js +375 -214
- package/dist/components/SGnb/SGnb.js.map +1 -1
- package/dist/components/SGnb/gnb.config.d.ts +35 -11
- package/dist/components/SGnb/index.d.ts +1 -1
- package/dist/components/SGuide/SGuide.cjs +2 -0
- package/dist/components/SGuide/SGuide.cjs.map +1 -1
- package/dist/components/SGuide/SGuide.js +2 -0
- package/dist/components/SGuide/SGuide.js.map +1 -1
- package/dist/components/SInput/SInput.cjs +2 -0
- package/dist/components/SInput/SInput.cjs.map +1 -1
- package/dist/components/SInput/SInput.js +2 -0
- package/dist/components/SInput/SInput.js.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs +2 -0
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.js +2 -0
- package/dist/components/SKeyValueTable/SKeyValueTable.js.map +1 -1
- package/dist/components/SLayout/SLayout.cjs +26 -8
- package/dist/components/SLayout/SLayout.cjs.map +1 -1
- package/dist/components/SLayout/SLayout.d.ts +15 -9
- package/dist/components/SLayout/SLayout.js +26 -8
- package/dist/components/SLayout/SLayout.js.map +1 -1
- package/dist/components/SLayout/index.d.ts +1 -1
- package/dist/components/SLoadingModal/SLoadingModal.cjs +2 -0
- package/dist/components/SLoadingModal/SLoadingModal.cjs.map +1 -1
- package/dist/components/SLoadingModal/SLoadingModal.js +2 -0
- package/dist/components/SLoadingModal/SLoadingModal.js.map +1 -1
- package/dist/components/SModalContainer/SModalContainer.cjs +2 -0
- package/dist/components/SModalContainer/SModalContainer.cjs.map +1 -1
- package/dist/components/SModalContainer/SModalContainer.js +2 -0
- package/dist/components/SModalContainer/SModalContainer.js.map +1 -1
- package/dist/components/SNumberInput/SNumberInput.cjs +2 -0
- package/dist/components/SNumberInput/SNumberInput.cjs.map +1 -1
- package/dist/components/SNumberInput/SNumberInput.js +2 -0
- package/dist/components/SNumberInput/SNumberInput.js.map +1 -1
- package/dist/components/SPage/SPage.cjs +27 -9
- package/dist/components/SPage/SPage.cjs.map +1 -1
- package/dist/components/SPage/SPage.d.ts +2 -2
- package/dist/components/SPage/SPage.js +27 -9
- package/dist/components/SPage/SPage.js.map +1 -1
- package/dist/components/SPopover/SPopover.cjs +2 -0
- package/dist/components/SPopover/SPopover.cjs.map +1 -1
- package/dist/components/SPopover/SPopover.js +2 -0
- package/dist/components/SPopover/SPopover.js.map +1 -1
- package/dist/components/SSelect/SSelect.cjs +2 -0
- package/dist/components/SSelect/SSelect.cjs.map +1 -1
- package/dist/components/SSelect/SSelect.js +2 -0
- package/dist/components/SSelect/SSelect.js.map +1 -1
- package/dist/components/STable/STable.cjs +2 -0
- package/dist/components/STable/STable.cjs.map +1 -1
- package/dist/components/STable/STable.js +2 -0
- package/dist/components/STable/STable.js.map +1 -1
- package/dist/components/STextarea/STextarea.cjs +2 -0
- package/dist/components/STextarea/STextarea.cjs.map +1 -1
- package/dist/components/STextarea/STextarea.js +2 -0
- package/dist/components/STextarea/STextarea.js.map +1 -1
- package/dist/components/SToast/SToast.cjs +2 -0
- package/dist/components/SToast/SToast.cjs.map +1 -1
- package/dist/components/SToast/SToast.js +2 -0
- package/dist/components/SToast/SToast.js.map +1 -1
- package/dist/components/SToast/SToastContainer.cjs +2 -0
- package/dist/components/SToast/SToastContainer.cjs.map +1 -1
- package/dist/components/SToast/SToastContainer.js +2 -0
- package/dist/components/SToast/SToastContainer.js.map +1 -1
- package/dist/components/STooltip/STooltip.cjs +2 -0
- package/dist/components/STooltip/STooltip.cjs.map +1 -1
- package/dist/components/STooltip/STooltip.js +2 -0
- package/dist/components/STooltip/STooltip.js.map +1 -1
- package/dist/index.cjs +157 -134
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +156 -134
- package/dist/index.js.map +1 -1
- package/dist/styles.css +344 -6
- package/dist/theme.css +4 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -3943,6 +3943,7 @@ function SGhostButton({
|
|
|
3943
3943
|
size = "sm",
|
|
3944
3944
|
intent = "default",
|
|
3945
3945
|
ariaLabel = "",
|
|
3946
|
+
ariaPressed,
|
|
3946
3947
|
tooltipText,
|
|
3947
3948
|
disabled = false,
|
|
3948
3949
|
onClick,
|
|
@@ -3979,6 +3980,7 @@ function SGhostButton({
|
|
|
3979
3980
|
disabled,
|
|
3980
3981
|
"aria-disabled": disabled ? "true" : void 0,
|
|
3981
3982
|
"aria-label": ariaLabel.trim() || void 0,
|
|
3983
|
+
"aria-pressed": ariaPressed,
|
|
3982
3984
|
tabIndex: disabled ? -1 : void 0,
|
|
3983
3985
|
onClick: (e) => {
|
|
3984
3986
|
if (disabled) {
|
|
@@ -4906,13 +4908,27 @@ var belt = (p) => `var(--cmp-gnbBelt-${p})`;
|
|
|
4906
4908
|
var box = (p) => `var(--cmp-gnbBox-${p})`;
|
|
4907
4909
|
var light = (p) => `var(--cmp-light-${p})`;
|
|
4908
4910
|
var dark = (p) => `var(--cmp-dark-${p})`;
|
|
4909
|
-
var
|
|
4910
|
-
|
|
4911
|
-
|
|
4911
|
+
var GNB_HEADER = {
|
|
4912
|
+
fix: {
|
|
4913
|
+
topHeight: belt("top-height"),
|
|
4914
|
+
topPaddingX: belt("top-paddingX"),
|
|
4915
|
+
topGap: belt("top-gap"),
|
|
4916
|
+
logoHeight: belt("logo-height")
|
|
4917
|
+
},
|
|
4918
|
+
full: {
|
|
4919
|
+
topHeight: box("top-height"),
|
|
4912
4920
|
topPaddingX: box("paddingX"),
|
|
4913
4921
|
topGap: box("gap"),
|
|
4914
4922
|
// 상단바 gap (버튼 간 세부 gap 은 --cmp-gnbBox-button-gap)
|
|
4915
|
-
|
|
4923
|
+
logoHeight: box("logo-height")
|
|
4924
|
+
}
|
|
4925
|
+
};
|
|
4926
|
+
var GNB_MENU = {
|
|
4927
|
+
box: {
|
|
4928
|
+
// menu.body.padding 은 전방향 토큰 → 세로 패딩과 아이템 좌우 여백 양쪽에 쓴다
|
|
4929
|
+
bodyPaddingY: box("menu-body-padding"),
|
|
4930
|
+
itemMarginX: box("menu-body-padding"),
|
|
4931
|
+
itemPaddingY: box("item-paddingY"),
|
|
4916
4932
|
itemPaddingRight: box("item-paddingRight"),
|
|
4917
4933
|
itemGap: box("item-gap"),
|
|
4918
4934
|
itemRadius: box("item-radius"),
|
|
@@ -4932,9 +4948,10 @@ var GNB_LAYOUT = {
|
|
|
4932
4948
|
// token: gnbBox.item.typography.default.lineHeight
|
|
4933
4949
|
},
|
|
4934
4950
|
belt: {
|
|
4935
|
-
|
|
4936
|
-
|
|
4937
|
-
|
|
4951
|
+
bodyPaddingY: belt("body-paddingY"),
|
|
4952
|
+
itemMarginX: "0px",
|
|
4953
|
+
// belt 토큰에 가로 여백 없음 → 풀폭 행 (들여쓰기는 depth*-paddingLeft 전담)
|
|
4954
|
+
itemPaddingY: belt("item-paddingY"),
|
|
4938
4955
|
itemPaddingRight: belt("item-paddingRight"),
|
|
4939
4956
|
itemGap: belt("item-gap"),
|
|
4940
4957
|
itemRadius: "0px",
|
|
@@ -4964,7 +4981,9 @@ var GNB_COLORS = {
|
|
|
4964
4981
|
itemBgHover: light("item-bg-hover"),
|
|
4965
4982
|
itemBgSelected: light("item-bg-selected"),
|
|
4966
4983
|
itemColorDefault: light("item-fg-default"),
|
|
4967
|
-
|
|
4984
|
+
itemColorHover: light("item-fg-hover"),
|
|
4985
|
+
itemColorActive: light("item-fg-selected"),
|
|
4986
|
+
itemChevron: light("item-chevron")
|
|
4968
4987
|
},
|
|
4969
4988
|
dark: {
|
|
4970
4989
|
panelBg: dark("bg"),
|
|
@@ -4973,18 +4992,19 @@ var GNB_COLORS = {
|
|
|
4973
4992
|
itemBgHover: dark("item-bg-hover"),
|
|
4974
4993
|
itemBgSelected: dark("item-bg-selected"),
|
|
4975
4994
|
itemColorDefault: dark("item-fg-default"),
|
|
4976
|
-
|
|
4995
|
+
itemColorHover: dark("item-fg-hover"),
|
|
4996
|
+
itemColorActive: dark("item-fg-selected"),
|
|
4997
|
+
itemChevron: dark("item-chevron")
|
|
4977
4998
|
}
|
|
4978
4999
|
};
|
|
4979
5000
|
var GNB_COMMON = {
|
|
4980
|
-
|
|
4981
|
-
|
|
4982
|
-
|
|
4983
|
-
|
|
4984
|
-
|
|
4985
|
-
|
|
4986
|
-
|
|
4987
|
-
// 48 (belt 토큰 공유)
|
|
5001
|
+
/** 접힘 레일 폭. header="full" 은 접으면 메뉴만 사라져 레일이 없으므로 fix 전용. */
|
|
5002
|
+
foldWidth: belt("fold-width"),
|
|
5003
|
+
/**
|
|
5004
|
+
* 상단바 아이콘 버튼 사이 간격. fix 레일(세로 스택)의 gap·상하 여백에 쓴다.
|
|
5005
|
+
* 레일 전용 여백 토큰이 따로 없어 같은 값(8px)인 이 토큰으로 재해석했다.
|
|
5006
|
+
*/
|
|
5007
|
+
buttonGap: box("button-gap")
|
|
4988
5008
|
};
|
|
4989
5009
|
var GNB_MENU_WIDTH = 240;
|
|
4990
5010
|
function findGnbAncestors(items, value) {
|
|
@@ -5008,6 +5028,7 @@ function useSLayout() {
|
|
|
5008
5028
|
}
|
|
5009
5029
|
var SLayout = react.forwardRef(function SLayout2({
|
|
5010
5030
|
type = "box",
|
|
5031
|
+
header = "fix",
|
|
5011
5032
|
folded,
|
|
5012
5033
|
defaultFolded = false,
|
|
5013
5034
|
onFoldedChange,
|
|
@@ -5027,22 +5048,23 @@ var SLayout = react.forwardRef(function SLayout2({
|
|
|
5027
5048
|
[isControlled, onFoldedChange]
|
|
5028
5049
|
);
|
|
5029
5050
|
const ctx = react.useMemo(
|
|
5030
|
-
() => ({ type, folded: currentFolded, setFolded }),
|
|
5031
|
-
[type, currentFolded, setFolded]
|
|
5051
|
+
() => ({ type, header, folded: currentFolded, setFolded }),
|
|
5052
|
+
[type, header, currentFolded, setFolded]
|
|
5032
5053
|
);
|
|
5033
|
-
const
|
|
5034
|
-
const frameStyle =
|
|
5054
|
+
const isFullHeader = header === "full";
|
|
5055
|
+
const frameStyle = isFullHeader ? {
|
|
5035
5056
|
gridTemplateColumns: `${currentFolded ? 0 : GNB_MENU_WIDTH}px 1fr`,
|
|
5036
|
-
gridTemplateRows: `${
|
|
5057
|
+
gridTemplateRows: `${GNB_HEADER[header].topHeight} 1fr`
|
|
5037
5058
|
} : void 0;
|
|
5038
5059
|
return /* @__PURE__ */ jsxRuntime.jsx(SLayoutContext.Provider, { value: ctx, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5039
5060
|
"div",
|
|
5040
5061
|
{
|
|
5041
5062
|
ref,
|
|
5042
5063
|
"data-type": type,
|
|
5064
|
+
"data-header": header,
|
|
5043
5065
|
className: cn(
|
|
5044
5066
|
"box-border h-full overflow-hidden",
|
|
5045
|
-
|
|
5067
|
+
isFullHeader ? "grid" : "flex flex-row",
|
|
5046
5068
|
className
|
|
5047
5069
|
),
|
|
5048
5070
|
style: { ...frameStyle, ...style },
|
|
@@ -5051,9 +5073,10 @@ var SLayout = react.forwardRef(function SLayout2({
|
|
|
5051
5073
|
}
|
|
5052
5074
|
) });
|
|
5053
5075
|
});
|
|
5054
|
-
var DEPTH_PADDING_LEFT = (
|
|
5076
|
+
var DEPTH_PADDING_LEFT = (M, depth) => depth === 1 ? M.depth1PaddingLeft : depth === 2 ? M.depth2PaddingLeft : M.depth3PaddingLeft;
|
|
5055
5077
|
var SGnb = react.forwardRef(function SGnb2({
|
|
5056
5078
|
type: typeProp,
|
|
5079
|
+
header: headerProp,
|
|
5057
5080
|
color = "light",
|
|
5058
5081
|
items,
|
|
5059
5082
|
value = "",
|
|
@@ -5062,14 +5085,17 @@ var SGnb = react.forwardRef(function SGnb2({
|
|
|
5062
5085
|
onFoldChange,
|
|
5063
5086
|
onLauncherClick,
|
|
5064
5087
|
logo,
|
|
5065
|
-
|
|
5088
|
+
ariaLabel = "global navigation",
|
|
5066
5089
|
className,
|
|
5067
|
-
style
|
|
5090
|
+
style,
|
|
5091
|
+
...rest
|
|
5068
5092
|
}, ref) {
|
|
5069
5093
|
const layout = react.useContext(SLayoutContext);
|
|
5070
5094
|
const type = typeProp ?? layout?.type ?? "box";
|
|
5095
|
+
const header = headerProp ?? layout?.header ?? "fix";
|
|
5071
5096
|
const folded = foldedProp ?? layout?.folded ?? false;
|
|
5072
|
-
const
|
|
5097
|
+
const H = GNB_HEADER[header];
|
|
5098
|
+
const M = GNB_MENU[type];
|
|
5073
5099
|
const C = GNB_COLORS[color];
|
|
5074
5100
|
const [expandedKeys, setExpandedKeys] = react.useState(
|
|
5075
5101
|
() => new Set(findGnbAncestors(items, value))
|
|
@@ -5079,6 +5105,7 @@ var SGnb = react.forwardRef(function SGnb2({
|
|
|
5079
5105
|
const ancestors = findGnbAncestors(items, value);
|
|
5080
5106
|
if (ancestors.length === 0) return;
|
|
5081
5107
|
setExpandedKeys((prev) => {
|
|
5108
|
+
if (ancestors.every((a) => prev.has(a))) return prev;
|
|
5082
5109
|
const next = new Set(prev);
|
|
5083
5110
|
ancestors.forEach((a) => next.add(a));
|
|
5084
5111
|
return next;
|
|
@@ -5103,148 +5130,142 @@ var SGnb = react.forwardRef(function SGnb2({
|
|
|
5103
5130
|
const handleFoldToggle = () => {
|
|
5104
5131
|
const next = !folded;
|
|
5105
5132
|
onFoldChange?.(next);
|
|
5106
|
-
layout?.setFolded(next);
|
|
5133
|
+
if (foldedProp === void 0) layout?.setFolded(next);
|
|
5107
5134
|
};
|
|
5108
|
-
const iconBtnClass = "inline-flex shrink-0 cursor-pointer items-center justify-center rounded-md border-0 bg-transparent p-1.5";
|
|
5109
5135
|
const renderItem = (item, depth) => {
|
|
5110
5136
|
const hasChildren = !!(item.children && item.children.length > 0);
|
|
5111
5137
|
const isSelected = !hasChildren && item.value === value;
|
|
5112
5138
|
const isExpanded = expandedKeys.has(item.value);
|
|
5113
|
-
const isHovered = hoveredKey === item.value;
|
|
5114
|
-
const bg = isSelected ? C.itemBgSelected : isHovered && !item.disabled ? C.itemBgHover : C.itemBgDefault;
|
|
5139
|
+
const isHovered = hoveredKey === item.value && !item.disabled;
|
|
5115
5140
|
const itemStyle = {
|
|
5116
|
-
gap:
|
|
5117
|
-
paddingTop:
|
|
5118
|
-
paddingBottom:
|
|
5119
|
-
paddingRight:
|
|
5120
|
-
paddingLeft: DEPTH_PADDING_LEFT(
|
|
5121
|
-
marginLeft:
|
|
5122
|
-
marginRight:
|
|
5123
|
-
borderRadius:
|
|
5124
|
-
backgroundColor:
|
|
5125
|
-
color: isSelected ? C.itemColorActive : C.itemColorDefault,
|
|
5126
|
-
|
|
5127
|
-
|
|
5128
|
-
|
|
5141
|
+
gap: M.itemGap,
|
|
5142
|
+
paddingTop: M.itemPaddingY,
|
|
5143
|
+
paddingBottom: M.itemPaddingY,
|
|
5144
|
+
paddingRight: M.itemPaddingRight,
|
|
5145
|
+
paddingLeft: DEPTH_PADDING_LEFT(M, depth),
|
|
5146
|
+
marginLeft: M.itemMarginX,
|
|
5147
|
+
marginRight: M.itemMarginX,
|
|
5148
|
+
borderRadius: M.itemRadius,
|
|
5149
|
+
backgroundColor: isSelected ? C.itemBgSelected : isHovered ? C.itemBgHover : C.itemBgDefault,
|
|
5150
|
+
color: isSelected ? C.itemColorActive : isHovered ? C.itemColorHover : C.itemColorDefault,
|
|
5151
|
+
// <button> 의 UA 폰트(Arial 13.3px)를 끊고 앱 폰트를 잇는다
|
|
5152
|
+
fontFamily: "inherit",
|
|
5153
|
+
fontSize: depth === 1 ? M.depth1FontSize : M.itemFontSize,
|
|
5154
|
+
lineHeight: `${depth === 1 ? M.depth1LineHeight : M.itemLineHeight}px`,
|
|
5155
|
+
fontWeight: depth === 1 || isSelected ? M.depth1FontWeight : 400,
|
|
5129
5156
|
opacity: item.disabled ? 0.4 : 1,
|
|
5130
5157
|
cursor: item.disabled ? "not-allowed" : "pointer"
|
|
5131
5158
|
};
|
|
5132
|
-
return
|
|
5133
|
-
|
|
5134
|
-
|
|
5135
|
-
|
|
5136
|
-
|
|
5137
|
-
|
|
5138
|
-
|
|
5139
|
-
|
|
5140
|
-
|
|
5141
|
-
|
|
5142
|
-
|
|
5143
|
-
|
|
5144
|
-
|
|
5145
|
-
|
|
5146
|
-
|
|
5147
|
-
|
|
5148
|
-
|
|
5149
|
-
|
|
5150
|
-
|
|
5151
|
-
|
|
5152
|
-
|
|
5153
|
-
|
|
5154
|
-
|
|
5155
|
-
|
|
5156
|
-
|
|
5157
|
-
|
|
5158
|
-
|
|
5159
|
-
|
|
5160
|
-
|
|
5161
|
-
|
|
5162
|
-
|
|
5163
|
-
|
|
5164
|
-
|
|
5165
|
-
|
|
5166
|
-
|
|
5167
|
-
|
|
5168
|
-
|
|
5169
|
-
|
|
5170
|
-
|
|
5171
|
-
|
|
5172
|
-
|
|
5173
|
-
|
|
5174
|
-
|
|
5175
|
-
|
|
5176
|
-
|
|
5177
|
-
|
|
5178
|
-
|
|
5159
|
+
return (
|
|
5160
|
+
// li 를 flex-col 로 둬야 버튼이 좌우 마진만큼 안쪽으로 들어가고,
|
|
5161
|
+
// 하위 ul 은 마진 없이 전폭을 써서 depth*-paddingLeft 가 들여쓰기를 단독으로 책임진다.
|
|
5162
|
+
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex flex-col", children: [
|
|
5163
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
5164
|
+
"button",
|
|
5165
|
+
{
|
|
5166
|
+
type: "button",
|
|
5167
|
+
disabled: item.disabled,
|
|
5168
|
+
"aria-expanded": hasChildren ? isExpanded : void 0,
|
|
5169
|
+
"aria-current": isSelected ? "page" : void 0,
|
|
5170
|
+
className: "box-border flex select-none items-center border-none bg-transparent text-left transition-colors duration-150",
|
|
5171
|
+
style: itemStyle,
|
|
5172
|
+
onClick: () => handleItemClick(item),
|
|
5173
|
+
onMouseEnter: () => setHoveredKey(item.value),
|
|
5174
|
+
onMouseLeave: () => setHoveredKey((prev) => prev === item.value ? null : prev),
|
|
5175
|
+
children: [
|
|
5176
|
+
depth === 1 && item.icon && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: item.icon, size: M.depth1Icon, className: "shrink-0" }),
|
|
5177
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap", children: item.label }),
|
|
5178
|
+
item.tag !== void 0 && item.tag !== "" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
5179
|
+
STag,
|
|
5180
|
+
{
|
|
5181
|
+
shape: "square",
|
|
5182
|
+
size: "xs",
|
|
5183
|
+
color: item.tagColor ?? "blue",
|
|
5184
|
+
label: item.tag,
|
|
5185
|
+
className: "shrink-0"
|
|
5186
|
+
}
|
|
5187
|
+
),
|
|
5188
|
+
hasChildren && /* @__PURE__ */ jsxRuntime.jsx(
|
|
5189
|
+
SIcon,
|
|
5190
|
+
{
|
|
5191
|
+
name: "chevronDown",
|
|
5192
|
+
size: M.itemArrow,
|
|
5193
|
+
color: C.itemChevron,
|
|
5194
|
+
rotate: isExpanded ? 180 : 0,
|
|
5195
|
+
className: "shrink-0 transition-transform duration-150"
|
|
5196
|
+
}
|
|
5197
|
+
)
|
|
5198
|
+
]
|
|
5199
|
+
}
|
|
5200
|
+
),
|
|
5201
|
+
hasChildren && isExpanded && /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "m-0 flex list-none flex-col p-0", children: item.children.map((child) => renderItem(child, depth + 1)) })
|
|
5202
|
+
] }, item.value)
|
|
5203
|
+
);
|
|
5204
|
+
};
|
|
5205
|
+
const railFolded = folded && header === "fix";
|
|
5206
|
+
const rootWidth = header === "full" ? "100%" : folded ? GNB_COMMON.foldWidth : GNB_MENU_WIDTH;
|
|
5207
|
+
const rootStyle = {
|
|
5208
|
+
width: rootWidth,
|
|
5209
|
+
...header === "full" ? { gridArea: "1 / 1 / -1 / -1", pointerEvents: "none" } : { backgroundColor: C.panelBg },
|
|
5210
|
+
...style
|
|
5179
5211
|
};
|
|
5180
|
-
const railFolded = folded && type === "belt";
|
|
5181
|
-
const rootWidth = type === "box" ? "100%" : folded ? GNB_COMMON.foldWidth : GNB_MENU_WIDTH;
|
|
5182
|
-
const inBoxGrid = !!layout && type === "box";
|
|
5183
|
-
const rootStyle = react.useMemo(
|
|
5184
|
-
() => ({
|
|
5185
|
-
width: rootWidth,
|
|
5186
|
-
...inBoxGrid ? { gridArea: "1 / 1 / -1 / -1" } : null,
|
|
5187
|
-
...style
|
|
5188
|
-
}),
|
|
5189
|
-
[rootWidth, inBoxGrid, style]
|
|
5190
|
-
);
|
|
5191
|
-
const iconColor = C.itemColorDefault;
|
|
5192
5212
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5193
5213
|
"div",
|
|
5194
5214
|
{
|
|
5195
5215
|
ref,
|
|
5196
|
-
className: cn(
|
|
5197
|
-
"box-border flex flex-col",
|
|
5198
|
-
type === "box" && !inBoxGrid ? "h-auto" : "h-full",
|
|
5199
|
-
className
|
|
5200
|
-
),
|
|
5216
|
+
className: cn("box-border flex h-full shrink-0 flex-col", className),
|
|
5201
5217
|
style: rootStyle,
|
|
5202
5218
|
"data-type": type,
|
|
5219
|
+
"data-header": header,
|
|
5203
5220
|
"data-color": color,
|
|
5221
|
+
...rest,
|
|
5204
5222
|
children: [
|
|
5205
5223
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
5206
5224
|
"div",
|
|
5207
5225
|
{
|
|
5208
5226
|
className: cn("box-border flex items-center", railFolded && "flex-col"),
|
|
5209
5227
|
style: {
|
|
5210
|
-
gap: railFolded ?
|
|
5211
|
-
height: railFolded ? "auto" :
|
|
5212
|
-
padding: railFolded ?
|
|
5228
|
+
gap: railFolded ? GNB_COMMON.buttonGap : H.topGap,
|
|
5229
|
+
height: railFolded ? "auto" : H.topHeight,
|
|
5230
|
+
padding: railFolded ? `${GNB_COMMON.buttonGap} 0` : `0 ${H.topPaddingX}`,
|
|
5213
5231
|
borderBottom: `1px solid ${C.topBorder}`,
|
|
5214
5232
|
backgroundColor: C.panelBg,
|
|
5215
|
-
|
|
5233
|
+
pointerEvents: "auto",
|
|
5234
|
+
// 아이콘 버튼은 자체 ghostButton 토큰을 쓰므로, 이 색은 logo 슬롯 상속용
|
|
5235
|
+
color: C.itemColorDefault
|
|
5216
5236
|
},
|
|
5217
5237
|
children: [
|
|
5218
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5219
|
-
|
|
5238
|
+
onLauncherClick && /* @__PURE__ */ jsxRuntime.jsx(
|
|
5239
|
+
SGhostButton,
|
|
5220
5240
|
{
|
|
5221
|
-
|
|
5222
|
-
|
|
5223
|
-
|
|
5241
|
+
icon: "launcher",
|
|
5242
|
+
size: "xs",
|
|
5243
|
+
intent: color === "dark" ? "inverse" : "default",
|
|
5244
|
+
ariaLabel: "app launcher",
|
|
5224
5245
|
onClick: onLauncherClick,
|
|
5225
|
-
|
|
5246
|
+
className: "shrink-0"
|
|
5226
5247
|
}
|
|
5227
5248
|
),
|
|
5228
|
-
!railFolded && logo && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center", style: { height:
|
|
5229
|
-
!railFolded && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 flex-1", children: search }),
|
|
5249
|
+
!railFolded && logo && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center", style: { height: H.logoHeight }, children: logo }),
|
|
5230
5250
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5231
|
-
|
|
5251
|
+
SGhostButton,
|
|
5232
5252
|
{
|
|
5233
|
-
|
|
5234
|
-
|
|
5235
|
-
"
|
|
5236
|
-
|
|
5253
|
+
icon: "sidebar",
|
|
5254
|
+
size: "xs",
|
|
5255
|
+
intent: color === "dark" ? "inverse" : "default",
|
|
5256
|
+
ariaLabel: "toggle navigation",
|
|
5257
|
+
ariaPressed: folded,
|
|
5237
5258
|
onClick: handleFoldToggle,
|
|
5238
|
-
|
|
5259
|
+
className: cn("shrink-0", !railFolded && "ml-auto")
|
|
5239
5260
|
}
|
|
5240
5261
|
)
|
|
5241
5262
|
]
|
|
5242
5263
|
}
|
|
5243
5264
|
),
|
|
5244
5265
|
!folded && /* @__PURE__ */ jsxRuntime.jsx(
|
|
5245
|
-
"
|
|
5266
|
+
"nav",
|
|
5246
5267
|
{
|
|
5247
|
-
|
|
5268
|
+
"aria-label": ariaLabel,
|
|
5248
5269
|
className: "flex flex-col overflow-y-auto",
|
|
5249
5270
|
style: {
|
|
5250
5271
|
width: GNB_MENU_WIDTH,
|
|
@@ -5253,11 +5274,12 @@ var SGnb = react.forwardRef(function SGnb2({
|
|
|
5253
5274
|
flexShrink: 1,
|
|
5254
5275
|
flexBasis: "auto",
|
|
5255
5276
|
minHeight: 0,
|
|
5256
|
-
paddingTop:
|
|
5257
|
-
paddingBottom:
|
|
5258
|
-
backgroundColor: C.panelBg
|
|
5277
|
+
paddingTop: M.bodyPaddingY,
|
|
5278
|
+
paddingBottom: M.bodyPaddingY,
|
|
5279
|
+
backgroundColor: C.panelBg,
|
|
5280
|
+
pointerEvents: "auto"
|
|
5259
5281
|
},
|
|
5260
|
-
children: items.map((item) => renderItem(item, 1))
|
|
5282
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "m-0 flex list-none flex-col p-0", children: items.map((item) => renderItem(item, 1)) })
|
|
5261
5283
|
}
|
|
5262
5284
|
)
|
|
5263
5285
|
]
|
|
@@ -5266,7 +5288,7 @@ var SGnb = react.forwardRef(function SGnb2({
|
|
|
5266
5288
|
});
|
|
5267
5289
|
var SPage = react.forwardRef(function SPage2({ className, style, children, ...rest }, ref) {
|
|
5268
5290
|
const layout = react.useContext(SLayoutContext);
|
|
5269
|
-
const gridStyle = layout?.
|
|
5291
|
+
const gridStyle = layout?.header === "full" ? { gridColumn: 2, gridRow: 2 } : void 0;
|
|
5270
5292
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5271
5293
|
"main",
|
|
5272
5294
|
{
|
|
@@ -9818,7 +9840,8 @@ exports.BUTTON_SIZES = BUTTON_SIZES;
|
|
|
9818
9840
|
exports.COLOR_KEYS = COLOR_KEYS;
|
|
9819
9841
|
exports.GNB_COLORS = GNB_COLORS;
|
|
9820
9842
|
exports.GNB_COMMON = GNB_COMMON;
|
|
9821
|
-
exports.
|
|
9843
|
+
exports.GNB_HEADER = GNB_HEADER;
|
|
9844
|
+
exports.GNB_MENU = GNB_MENU;
|
|
9822
9845
|
exports.GNB_MENU_WIDTH = GNB_MENU_WIDTH;
|
|
9823
9846
|
exports.ICONS = ICONS;
|
|
9824
9847
|
exports.SActionModal = SActionModal;
|