+
{children}
@@ -112,4 +116,4 @@ export const SegmentedControlOption = React.forwardRef<
);
});
-SegmentedControlOption.displayName = "SegmentedControlOption";
+SegmentedControlTrigger.displayName = "SegmentedControlOption";
diff --git a/docs/stories/SegmentedControl.stories.tsx b/docs/stories/SegmentedControl.stories.tsx
index 0dd32dbab..7d7938509 100644
--- a/docs/stories/SegmentedControl.stories.tsx
+++ b/docs/stories/SegmentedControl.stories.tsx
@@ -2,7 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react";
import {
SegmentedControl,
- SegmentedControlOption,
+ SegmentedControlTrigger,
type SegmentedControlProps,
} from "seed-design/ui/segmented-control";
@@ -18,9 +18,9 @@ const Component = () => {
return (
{values.map((value) => (
-
+
{value}
-
+
))}
);
diff --git a/packages/react-headless/tabs/src/useTabs.ts b/packages/react-headless/tabs/src/useTabs.ts
index 1eec6c4b9..813a7d62c 100644
--- a/packages/react-headless/tabs/src/useTabs.ts
+++ b/packages/react-headless/tabs/src/useTabs.ts
@@ -105,24 +105,12 @@ export function useTabs(props: UseTabsProps) {
} = props;
const updateIndicatorStyle = React.useCallback(() => {
- const getLeft = () => {
- const GUTTER = layout === "fill" ? 16 : 0;
- return GUTTER + triggerSize.left;
- };
-
- const getWidth = () => {
- const GUTTER = 16;
-
- if (layout === "hug") return triggerSize.width;
- return triggerSize.width - GUTTER * 2;
- };
-
const rootEl = dom.getRootEl(id);
if (rootEl) {
- rootEl.style.setProperty("--seed-design-tab-indicator-left", `${getLeft()}px`);
- rootEl.style.setProperty("--seed-design-tab-indicator-width", `${getWidth()}px`);
+ rootEl.style.setProperty("--seed-design-tab-indicator-left", `${triggerSize.left}px`);
+ rootEl.style.setProperty("--seed-design-tab-indicator-width", `${triggerSize.width}px`);
}
- }, [layout, triggerSize, id]);
+ }, [triggerSize, id]);
const updateCameraStyle = React.useCallback(() => {
const rootEl = dom.getRootEl(id);
diff --git a/packages/recipe-generator/preset/src/segmented-control.recipe.ts b/packages/recipe-generator/preset/src/segmented-control.recipe.ts
index 5e6e1d955..12b7882b2 100644
--- a/packages/recipe-generator/preset/src/segmented-control.recipe.ts
+++ b/packages/recipe-generator/preset/src/segmented-control.recipe.ts
@@ -110,6 +110,9 @@ const segmentedControl = defineRecipe({
willChange: "left, width",
// XXX: 임의
transition: "left 0.2s, width 0.2s",
+
+ left: "var(--seed-design-segmented-control-indicator-left, 0px)",
+ width: "var(--seed-design-segmented-control-indicator-width, 0px)",
},
},
variants: {},
diff --git a/packages/recipe-generator/preset/src/tabs.recipe.ts b/packages/recipe-generator/preset/src/tabs.recipe.ts
index ba987d0b8..b930aa1eb 100644
--- a/packages/recipe-generator/preset/src/tabs.recipe.ts
+++ b/packages/recipe-generator/preset/src/tabs.recipe.ts
@@ -58,12 +58,20 @@ const tabs = defineRecipe({
padding: `0px ${vars.layoutFill.enabled.root.paddingX}`,
justifyContent: "space-around",
},
+ indicator: {
+ left: "calc(var(--seed-design-tab-indicator-left, 0px) + 16px)",
+ width: "calc(var(--seed-design-tab-indicator-width, 0px) - 32px)",
+ },
},
hug: {
triggerList: {
padding: `0px ${vars.layoutHug.enabled.root.paddingX}`,
justifyContent: "flex-start",
},
+ indicator: {
+ left: "calc(var(--seed-design-tab-indicator-left, 0px))",
+ width: "calc(var(--seed-design-tab-indicator-width, 0px))",
+ },
},
},
},
diff --git a/packages/stylesheet/segmentedControl.css b/packages/stylesheet/segmentedControl.css
index e36bee8db..373abe291 100644
--- a/packages/stylesheet/segmentedControl.css
+++ b/packages/stylesheet/segmentedControl.css
@@ -68,4 +68,6 @@
box-shadow: 0 1px 6px rgba(0, 0, 0, 5%);
will-change: left, width;
transition: left 0.2s, width 0.2s;
+ left: var(--seed-design-segmented-control-indicator-left, 0px);
+ width: var(--seed-design-segmented-control-indicator-width, 0px);
}
\ No newline at end of file
diff --git a/packages/stylesheet/tabs.css b/packages/stylesheet/tabs.css
index abd51b261..080f1a8be 100644
--- a/packages/stylesheet/tabs.css
+++ b/packages/stylesheet/tabs.css
@@ -43,7 +43,15 @@
padding: 0px 0px;
justify-content: space-around;
}
+.tabs__indicator--layout_fill {
+ left: calc(var(--seed-design-tab-indicator-left, 0px) + 16px);
+ width: calc(var(--seed-design-tab-indicator-width, 0px) - 32px);
+}
.tabs__triggerList--layout_hug {
padding: 0px var(--seed-v3-unit-x4);
justify-content: flex-start;
+}
+.tabs__indicator--layout_hug {
+ left: calc(var(--seed-design-tab-indicator-left, 0px));
+ width: calc(var(--seed-design-tab-indicator-width, 0px));
}
\ No newline at end of file