@olundot/ui 0.20.0-next.2 → 0.20.0-next.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @olundot/ui
2
2
 
3
+ ## 0.20.0-next.3
4
+
5
+ ### Minor Changes
6
+
7
+ - b7176ad: `OlunLogo`가 `@olundot/tokens/brand`의 정본 데이터만 그린다. 모양이 바뀐다.
8
+
9
+ - 워드마크: Pretendard 800 글자(`<span>`) 대신 Montserrat 700 윤곽 SVG(자간 +0.03em). 접근 가능한 이름은 `role="img"` + `aria-label`(`OLUN`, 워드마크만이면 `OLUN.`)이다.
10
+ - MASTER(기본형): SVG 하나로 그리고 `symbolSize` 하나로 통째로 확대·축소한다. 간격 12px(`--space-3`) 대신 대문자 높이 H 기준 고정 비율(링 바깥 지름 1.24H, 궤도 점 끝 → O 0.55H)을 쓴다. 높이는 잉크에 맞춰 예전 심볼 상자보다 낮다(기본 `symbolSize` 28에서 약 17px).
11
+ - `fontSize`: 워드마크만 쓸 때(`showSymbol={false}`)의 글자 크기로만 쓴다. MASTER에서는 무시한다.
12
+ - 워드마크만 쓸 때 마침표 색이 `--accent`에서 `--accent-pop`으로 바뀐다(궤도 점과 같은 색 표식 `olun-accent`).
13
+ - `OlunSymbol`: 모양과 크기는 그대로다.
14
+
15
+ ### Patch Changes
16
+
17
+ - 15f638e: 겹친 오버레이를 한 동작으로 함께 닫아도 포커스가 `<body>`로 떨어지지 않고 바깥 오버레이를 연 요소로 돌아간다. 바깥 오버레이가 먼저 사라지는 동안 안쪽 오버레이가 닫히는 애니메이션 중이어도 해당한다. Trigger가 있는 경우와 닫히는 동안 포커스가 다른 요소로 옮겨 간 경우는 그대로다.
18
+ - Updated dependencies [b7176ad]
19
+ - @olundot/tokens@0.18.0-next.1
20
+
3
21
  ## 0.20.0-next.2
4
22
 
5
23
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -52,10 +52,10 @@ type GhostDefaultActionStyle = {
52
52
  };
53
53
 
54
54
  declare const buttonCva: (props?: ({
55
- size?: "xs" | "sm" | "md" | "lg" | "xl" | "default" | "icon" | "icon-xs" | null | undefined;
55
+ size?: "default" | "md" | "xs" | "sm" | "lg" | "xl" | "icon" | "icon-xs" | null | undefined;
56
56
  appearance?: "filled" | "outline" | "ghost" | null | undefined;
57
57
  tone?: "primary" | "neutral" | "danger" | null | undefined;
58
- variant?: "primary" | "secondary" | "destructive" | "default" | "outline" | "ghost" | "danger" | "emergency" | "subtle" | "link" | null | undefined;
58
+ variant?: "default" | "outline" | "ghost" | "primary" | "danger" | "emergency" | "subtle" | "destructive" | "secondary" | "link" | null | undefined;
59
59
  } & class_variance_authority_types.ClassProp) | undefined) => string;
60
60
  type ButtonVariantsOptions = Parameters<typeof buttonCva>[0];
61
61
  declare function buttonVariants(options?: ButtonVariantsOptions): string;
@@ -96,7 +96,7 @@ type CopyButtonProps = Omit<ButtonProps, 'children' | 'leadingIcon' | 'loading'
96
96
  variant?: ButtonVariant;
97
97
  duration?: number;
98
98
  };
99
- declare const CopyButton: React.ForwardRefExoticComponent<Omit<ButtonProps, "variant" | "size" | "children" | "leadingIcon" | "trailingIcon" | "loading"> & {
99
+ declare const CopyButton: React.ForwardRefExoticComponent<Omit<ButtonProps, "size" | "variant" | "children" | "leadingIcon" | "trailingIcon" | "loading"> & {
100
100
  value: string;
101
101
  label?: React.ReactNode;
102
102
  copiedLabel?: React.ReactNode;
@@ -107,13 +107,13 @@ declare const CopyButton: React.ForwardRefExoticComponent<Omit<ButtonProps, "var
107
107
  } & React.RefAttributes<HTMLButtonElement>>;
108
108
 
109
109
  declare const inputVariants: (props?: ({
110
- size?: "sm" | "md" | "lg" | null | undefined;
110
+ size?: "md" | "sm" | "lg" | null | undefined;
111
111
  fullWidth?: boolean | null | undefined;
112
112
  surface?: SurfaceLevel | null | undefined;
113
113
  } & class_variance_authority_types.ClassProp) | undefined) => string;
114
114
  declare const inputMessageVariants: (props?: ({
115
- state?: "error" | "success" | "default" | null | undefined;
116
- size?: "sm" | "md" | "lg" | null | undefined;
115
+ state?: "default" | "error" | "success" | null | undefined;
116
+ size?: "md" | "sm" | "lg" | null | undefined;
117
117
  } & class_variance_authority_types.ClassProp) | undefined) => string;
118
118
  type InputState = NonNullable<VariantProps<typeof inputMessageVariants>["state"]>;
119
119
  /** Canonical size type (0.2.0+). Use `size` prop with these values. */
@@ -161,11 +161,11 @@ interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "
161
161
  declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
162
162
 
163
163
  declare const fileUploadZoneVariants: (props?: ({
164
- size?: "compact" | "default" | null | undefined;
164
+ size?: "default" | "compact" | null | undefined;
165
165
  surface?: SurfaceLevel | null | undefined;
166
166
  } & class_variance_authority_types.ClassProp) | undefined) => string;
167
167
  declare const fileUploadIconVariants: (props?: ({
168
- size?: "compact" | "default" | null | undefined;
168
+ size?: "default" | "compact" | null | undefined;
169
169
  } & class_variance_authority_types.ClassProp) | undefined) => string;
170
170
  interface FileUploadZoneProps extends Omit<React.LabelHTMLAttributes<HTMLLabelElement>, "onChange">, VariantProps<typeof fileUploadZoneVariants> {
171
171
  accept?: string;
@@ -203,12 +203,12 @@ interface InlineAlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'childre
203
203
  declare const InlineAlert: React.ForwardRefExoticComponent<InlineAlertProps & React.RefAttributes<HTMLDivElement>>;
204
204
 
205
205
  declare const textareaVariants: (props?: ({
206
- size?: "sm" | "md" | "lg" | null | undefined;
206
+ size?: "md" | "sm" | "lg" | null | undefined;
207
207
  fullWidth?: boolean | null | undefined;
208
208
  surface?: SurfaceLevel | null | undefined;
209
209
  } & class_variance_authority_types.ClassProp) | undefined) => string;
210
210
  declare const textareaMessageVariants: (props?: ({
211
- state?: "error" | "success" | "default" | null | undefined;
211
+ state?: "default" | "error" | "success" | null | undefined;
212
212
  } & class_variance_authority_types.ClassProp) | undefined) => string;
213
213
  type TextareaState = NonNullable<VariantProps<typeof textareaMessageVariants>["state"]>;
214
214
  /** Canonical size type (0.2.0+). Use `size` prop with these values. */
@@ -257,14 +257,14 @@ interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaEl
257
257
  declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
258
258
 
259
259
  declare const selectVariants: (props?: ({
260
- size?: "sm" | "md" | "lg" | null | undefined;
260
+ size?: "md" | "sm" | "lg" | null | undefined;
261
261
  fullWidth?: boolean | null | undefined;
262
262
  appearance?: "inline" | "field" | null | undefined;
263
263
  surface?: SurfaceLevel | null | undefined;
264
264
  } & class_variance_authority_types.ClassProp) | undefined) => string;
265
265
  declare const selectMessageVariants: (props?: ({
266
- state?: "error" | "success" | "default" | null | undefined;
267
- size?: "sm" | "md" | "lg" | null | undefined;
266
+ state?: "default" | "error" | "success" | null | undefined;
267
+ size?: "md" | "sm" | "lg" | null | undefined;
268
268
  } & class_variance_authority_types.ClassProp) | undefined) => string;
269
269
  type SelectState = NonNullable<VariantProps<typeof selectMessageVariants>["state"]>;
270
270
  /** Canonical size type (0.2.0+). Use `size` prop with these values. */
@@ -1475,7 +1475,7 @@ interface StatusDotProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'ch
1475
1475
  declare const StatusDot: React.ForwardRefExoticComponent<StatusDotProps & React.RefAttributes<HTMLSpanElement>>;
1476
1476
 
1477
1477
  declare const notificationBadgeVariants: (props?: ({
1478
- size?: "sm" | "md" | null | undefined;
1478
+ size?: "md" | "sm" | null | undefined;
1479
1479
  placement?: "none" | "inline" | "corner" | null | undefined;
1480
1480
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1481
1481
  type NotificationBadgeSize = NonNullable<VariantProps<typeof notificationBadgeVariants>['size']>;
@@ -1488,13 +1488,13 @@ declare const NotificationBadge: React.ForwardRefExoticComponent<NotificationBad
1488
1488
 
1489
1489
  declare const chipVariants: (props?: ({
1490
1490
  variant?: "filter" | "choice" | "removable" | "status-filter" | null | undefined;
1491
- tone?: "muted" | "accent" | "warning" | "success" | "neutral" | "danger" | null | undefined;
1492
- size?: "sm" | "md" | "lg" | null | undefined;
1491
+ tone?: "accent" | "neutral" | "danger" | "success" | "warning" | "muted" | null | undefined;
1492
+ size?: "md" | "sm" | "lg" | null | undefined;
1493
1493
  pressed?: boolean | null | undefined;
1494
1494
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1495
1495
  declare const chipCountVariants: (props?: ({
1496
- tone?: "muted" | "accent" | "warning" | "success" | "neutral" | "danger" | null | undefined;
1497
- size?: "sm" | "md" | "lg" | null | undefined;
1496
+ tone?: "accent" | "neutral" | "danger" | "success" | "warning" | "muted" | null | undefined;
1497
+ size?: "md" | "sm" | "lg" | null | undefined;
1498
1498
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1499
1499
  type ChipVariant = NonNullable<VariantProps<typeof chipVariants>["variant"]>;
1500
1500
  type ChipTone = NonNullable<VariantProps<typeof chipVariants>["tone"]>;
@@ -1508,7 +1508,7 @@ interface ChipProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>,
1508
1508
  declare const Chip: React.ForwardRefExoticComponent<ChipProps & React.RefAttributes<HTMLButtonElement>>;
1509
1509
 
1510
1510
  declare const emptyStateBaseVariants: (props?: ({
1511
- size?: "sm" | "md" | "lg" | null | undefined;
1511
+ size?: "md" | "sm" | "lg" | null | undefined;
1512
1512
  bordered?: boolean | null | undefined;
1513
1513
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1514
1514
  type EmptyStateTone = "neutral" | "muted" | "raised";
@@ -1519,7 +1519,7 @@ interface EmptyStateVariantOptions extends VariantProps<typeof emptyStateBaseVar
1519
1519
  }
1520
1520
  declare function emptyStateVariants({ size, tone, surface, bordered, className, }?: EmptyStateVariantOptions): string;
1521
1521
  declare const emptyStateIconVariants: (props?: ({
1522
- size?: "sm" | "md" | "lg" | null | undefined;
1522
+ size?: "md" | "sm" | "lg" | null | undefined;
1523
1523
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1524
1524
  type EmptyStateSize = NonNullable<VariantProps<typeof emptyStateBaseVariants>["size"]>;
1525
1525
  interface EmptyStateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title">, VariantProps<typeof emptyStateBaseVariants> {
@@ -1538,7 +1538,7 @@ interface EmptyStateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "ti
1538
1538
  declare const EmptyState: React.ForwardRefExoticComponent<EmptyStateProps & React.RefAttributes<HTMLDivElement>>;
1539
1539
 
1540
1540
  declare const errorStateVariants: (props?: ({
1541
- size?: "sm" | "md" | "lg" | null | undefined;
1541
+ size?: "md" | "sm" | "lg" | null | undefined;
1542
1542
  surface?: SurfaceLevel | null | undefined;
1543
1543
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1544
1544
  interface ErrorStateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title">, VariantProps<typeof errorStateVariants> {
@@ -1558,7 +1558,7 @@ declare const skeletonVariants: (props?: ({
1558
1558
  shape?: "text" | "block" | "circle" | null | undefined;
1559
1559
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1560
1560
  declare const spinnerVariants: (props?: ({
1561
- size?: "sm" | "md" | "lg" | 16 | 24 | 32 | null | undefined;
1561
+ size?: "md" | "sm" | "lg" | 16 | 24 | 32 | null | undefined;
1562
1562
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1563
1563
  interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof skeletonVariants> {
1564
1564
  }
@@ -1591,7 +1591,7 @@ interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {
1591
1591
  declare const Spinner: React.ForwardRefExoticComponent<SpinnerProps & React.RefAttributes<HTMLSpanElement>>;
1592
1592
 
1593
1593
  declare const iconButtonCva: (props?: ({
1594
- size?: "sm" | "md" | "lg" | null | undefined;
1594
+ size?: "md" | "sm" | "lg" | null | undefined;
1595
1595
  pressed?: boolean | null | undefined;
1596
1596
  appearance?: "filled" | "outline" | "ghost" | null | undefined;
1597
1597
  tone?: "primary" | "neutral" | "danger" | null | undefined;
@@ -1781,7 +1781,7 @@ interface ActionFooterProps extends Omit<React.HTMLAttributes<HTMLDivElement>, '
1781
1781
  declare const ActionFooter: React.ForwardRefExoticComponent<ActionFooterProps & React.RefAttributes<HTMLDivElement>>;
1782
1782
 
1783
1783
  declare const toastVariants: (props?: ({
1784
- variant?: "error" | "warning" | "info" | "success" | "default" | null | undefined;
1784
+ variant?: "default" | "error" | "success" | "info" | "warning" | null | undefined;
1785
1785
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1786
1786
  declare const toastViewportVariants: (props?: class_variance_authority_types.ClassProp | undefined) => string;
1787
1787
  type ToastVariant = NonNullable<VariantProps<typeof toastVariants>['variant']>;
@@ -1835,19 +1835,19 @@ interface ToastProviderProps extends React.HTMLAttributes<HTMLDivElement> {
1835
1835
  declare function ToastProvider({ children, maxToasts, className, ...props }: ToastProviderProps): react_jsx_runtime.JSX.Element;
1836
1836
 
1837
1837
  declare const otpFieldVariants: (props?: ({
1838
- size?: "compact" | "default" | null | undefined;
1838
+ size?: "default" | "compact" | null | undefined;
1839
1839
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1840
1840
  declare const otpFieldGroupVariants: (props?: ({
1841
- size?: "compact" | "default" | null | undefined;
1841
+ size?: "default" | "compact" | null | undefined;
1842
1842
  fluid?: boolean | null | undefined;
1843
1843
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1844
1844
  declare const otpCellVariants: (props?: ({
1845
- size?: "compact" | "default" | null | undefined;
1845
+ size?: "default" | "compact" | null | undefined;
1846
1846
  fluid?: boolean | null | undefined;
1847
1847
  surface?: SurfaceLevel | null | undefined;
1848
1848
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1849
1849
  declare const otpFieldMessageVariants: (props?: ({
1850
- state?: "error" | "default" | null | undefined;
1850
+ state?: "default" | "error" | null | undefined;
1851
1851
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1852
1852
  type OTPFieldSize = NonNullable<VariantProps<typeof otpCellVariants>["size"]>;
1853
1853
  interface OTPFieldProps extends Omit<React.FieldsetHTMLAttributes<HTMLFieldSetElement>, "onChange" | "children" | "defaultValue" | "value">, VariantProps<typeof otpFieldVariants> {
@@ -1874,10 +1874,10 @@ interface OTPFieldProps extends Omit<React.FieldsetHTMLAttributes<HTMLFieldSetEl
1874
1874
  declare const OTPField: React.ForwardRefExoticComponent<OTPFieldProps & React.RefAttributes<HTMLFieldSetElement>>;
1875
1875
 
1876
1876
  declare const searchFieldVariants: (props?: ({
1877
- size?: "sm" | "md" | "lg" | null | undefined;
1877
+ size?: "md" | "sm" | "lg" | null | undefined;
1878
1878
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1879
1879
  declare const searchFieldInputVariants: (props?: ({
1880
- size?: "sm" | "md" | "lg" | null | undefined;
1880
+ size?: "md" | "sm" | "lg" | null | undefined;
1881
1881
  hasClear?: boolean | null | undefined;
1882
1882
  surface?: SurfaceLevel | null | undefined;
1883
1883
  } & class_variance_authority_types.ClassProp) | undefined) => string;
@@ -1901,14 +1901,14 @@ declare const checkboxVariants: (props?: ({
1901
1901
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1902
1902
  declare const checkboxRootVariants: (props?: class_variance_authority_types.ClassProp | undefined) => string;
1903
1903
  declare const checkboxBoxVariants: (props?: ({
1904
- size?: "sm" | "md" | null | undefined;
1904
+ size?: "md" | "sm" | null | undefined;
1905
1905
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1906
1906
  declare const checkboxGroupItemVariants: (props?: ({
1907
- appearance?: "card" | "plain" | null | undefined;
1907
+ appearance?: "plain" | "card" | null | undefined;
1908
1908
  density?: "compact" | "comfortable" | null | undefined;
1909
1909
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1910
1910
  declare const checkboxGroupBoxVariants: (props?: ({
1911
- appearance?: "card" | "plain" | null | undefined;
1911
+ appearance?: "plain" | "card" | null | undefined;
1912
1912
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1913
1913
  type CheckboxSize = NonNullable<VariantProps<typeof checkboxBoxVariants>["size"]>;
1914
1914
  type CheckboxCheckedState = React.ComponentProps<typeof Checkbox$1.Root>["checked"];
@@ -1933,7 +1933,7 @@ interface CheckboxProps extends Omit<React.ComponentPropsWithoutRef<typeof Check
1933
1933
  declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLButtonElement>>;
1934
1934
 
1935
1935
  declare const checkboxGroupVariants: (props?: ({
1936
- appearance?: "card" | "plain" | null | undefined;
1936
+ appearance?: "plain" | "card" | null | undefined;
1937
1937
  orientation?: "horizontal" | "vertical" | null | undefined;
1938
1938
  columns?: "one" | "two" | "three" | null | undefined;
1939
1939
  } & class_variance_authority_types.ClassProp) | undefined) => string;
@@ -1954,16 +1954,16 @@ interface CheckboxGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>,
1954
1954
  declare const CheckboxGroup: React.ForwardRefExoticComponent<CheckboxGroupProps & React.RefAttributes<HTMLDivElement>>;
1955
1955
 
1956
1956
  declare const radioGroupVariants: (props?: ({
1957
- appearance?: "card" | "plain" | null | undefined;
1957
+ appearance?: "plain" | "card" | null | undefined;
1958
1958
  orientation?: "horizontal" | "vertical" | null | undefined;
1959
1959
  columns?: "one" | "two" | "three" | null | undefined;
1960
1960
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1961
1961
  declare const radioVariants: (props?: ({
1962
- appearance?: "card" | "plain" | null | undefined;
1962
+ appearance?: "plain" | "card" | null | undefined;
1963
1963
  density?: "compact" | "comfortable" | null | undefined;
1964
1964
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1965
1965
  declare const radioControlVariants: (props?: ({
1966
- appearance?: "card" | "plain" | null | undefined;
1966
+ appearance?: "plain" | "card" | null | undefined;
1967
1967
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1968
1968
  type RadioGroupAppearance = NonNullable<VariantProps<typeof radioGroupVariants>["appearance"]>;
1969
1969
  type RadioGroupColumns = NonNullable<VariantProps<typeof radioGroupVariants>["columns"]>;
@@ -2055,11 +2055,11 @@ declare function TreeView<T extends TreeNode>({ nodes, selectedId, selectionAria
2055
2055
  /**
2056
2056
  * OLUN 브랜드 로고.
2057
2057
  *
2058
- * - symbol: O 원형 테두리 + 우하단 accent-pop 작은 circle (32px 초과/이하 두 비율)
2059
- * - wordmark: "OLUN" + 마지막 "." 은 accent 색상
2060
- * - 조합: symbol과 함께 쓰면 wordmark의 "."를 뺀다. 궤도 점은 symbol이 맡는다(점 두 개 경쟁 방지).
2058
+ * - symbol: O 링 + 우하단 accent-pop 궤도 점 (32px 초과/이하 두 광학 비율)
2059
+ * - wordmark: Montserrat 700 윤곽 `OLUN` + 단독일 때 accent-pop 마침표
2060
+ * - MASTER: symbol과 함께 쓰면 wordmark의 "."를 뺀다. 궤도 점이 마침표를 맡는다(점 두 개 경쟁 방지).
2061
2061
  *
2062
- * 레퍼런스: apps/web/docs/wireframes/ref/shell-wireframe.html Topbar 브랜드 영역.
2062
+ * 기하는 `@olundot/tokens/brand`의 정본 데이터(scripts/brand/build-brand-svg.mjs가 생성)에서만 온다.
2063
2063
  */
2064
2064
  interface OlunSymbolProps {
2065
2065
  /** 심볼 크기 px (기본 28) */
@@ -2068,9 +2068,15 @@ interface OlunSymbolProps {
2068
2068
  }
2069
2069
  declare function OlunSymbol({ size, className }: OlunSymbolProps): react_jsx_runtime.JSX.Element;
2070
2070
  interface OlunLogoProps {
2071
- /** 심볼 크기 px (기본 28) */
2071
+ /**
2072
+ * MASTER 크기. 심볼 240 상자 기준 px (기본 28).
2073
+ * 워드마크와 간격은 고정 비율로 함께 커진다. 32px 이하는 아이콘 비율 심볼을 쓴다.
2074
+ */
2072
2075
  symbolSize?: number;
2073
- /** wordmark font-size px (기본 18) */
2076
+ /**
2077
+ * 워드마크만 쓸 때(`showSymbol={false}`) 글자 크기 px (기본 18).
2078
+ * MASTER에서는 쓰지 않는다. MASTER 크기는 `symbolSize` 하나로 정한다.
2079
+ */
2074
2080
  fontSize?: number;
2075
2081
  /** 심볼 표시 여부 (기본 true) */
2076
2082
  showSymbol?: boolean;
package/dist/index.js CHANGED
@@ -3672,6 +3672,7 @@ function useOverlayAction({
3672
3672
 
3673
3673
  // src/lib/use-return-focus.ts
3674
3674
  import * as React21 from "react";
3675
+ var closingOverlay = '[role="dialog"][data-state="closed"], [role="alertdialog"][data-state="closed"]';
3675
3676
  function useReturnFocus() {
3676
3677
  const returnTo = React21.useRef(null);
3677
3678
  const onOpenAutoFocus = React21.useCallback((event) => {
@@ -3687,7 +3688,9 @@ function useReturnFocus() {
3687
3688
  returnTo.current = null;
3688
3689
  if (!target?.isConnected) return;
3689
3690
  const active = document.activeElement;
3690
- if (active instanceof HTMLElement && active !== document.body && active !== target) return;
3691
+ if (active instanceof HTMLElement && active !== document.body && active !== target && !active.closest(closingOverlay)) {
3692
+ return;
3693
+ }
3691
3694
  event.preventDefault();
3692
3695
  target.focus();
3693
3696
  }, []);
@@ -10569,36 +10572,46 @@ function TreeView({
10569
10572
  }
10570
10573
 
10571
10574
  // src/components/branding/olun-logo.tsx
10572
- import { jsx as jsx64, jsxs as jsxs50 } from "react/jsx-runtime";
10573
- var SYMBOL_LARGE = { stroke: 24, dotX: 184, dotY: 180, dotR: 13 };
10574
- var SYMBOL_SMALL = { stroke: 18, dotX: 185, dotY: 175, dotR: 22 };
10575
+ import { OLUN_MASTER, OLUN_SYMBOL, OLUN_WORDMARK } from "@olundot/tokens/brand";
10576
+ import { Fragment as Fragment13, jsx as jsx64, jsxs as jsxs50 } from "react/jsx-runtime";
10577
+ var ACCENT_FILL = "var(--accent-pop)";
10578
+ var INK = { color: "var(--text-primary)" };
10579
+ var INK_TIGHT = { ...INK, display: "block", overflow: "visible" };
10580
+ function symbolGeometry(size) {
10581
+ return size > OLUN_SYMBOL.smallMax ? OLUN_SYMBOL.large : OLUN_SYMBOL.small;
10582
+ }
10583
+ function SymbolCircles({ size }) {
10584
+ const { ring } = OLUN_SYMBOL;
10585
+ const g = symbolGeometry(size);
10586
+ return /* @__PURE__ */ jsxs50(Fragment13, { children: [
10587
+ /* @__PURE__ */ jsx64(
10588
+ "circle",
10589
+ {
10590
+ className: "olun-logo__ring",
10591
+ cx: ring.cx,
10592
+ cy: ring.cy,
10593
+ r: ring.r,
10594
+ stroke: "currentColor",
10595
+ strokeWidth: g.stroke,
10596
+ fill: "none"
10597
+ }
10598
+ ),
10599
+ /* @__PURE__ */ jsx64("circle", { className: "olun-accent olun-logo__dot", cx: g.dot.cx, cy: g.dot.cy, r: g.dot.r, fill: ACCENT_FILL })
10600
+ ] });
10601
+ }
10575
10602
  function OlunSymbol({ size = 28, className }) {
10576
- const g = size > 32 ? SYMBOL_LARGE : SYMBOL_SMALL;
10577
- return /* @__PURE__ */ jsxs50(
10603
+ return /* @__PURE__ */ jsx64(
10578
10604
  "svg",
10579
10605
  {
10580
10606
  width: size,
10581
10607
  height: size,
10582
- viewBox: "0 0 240 240",
10608
+ viewBox: `0 0 ${OLUN_SYMBOL.box} ${OLUN_SYMBOL.box}`,
10583
10609
  fill: "none",
10584
10610
  xmlns: "http://www.w3.org/2000/svg",
10585
10611
  className,
10612
+ style: INK,
10586
10613
  "aria-hidden": "true",
10587
- children: [
10588
- /* @__PURE__ */ jsx64(
10589
- "circle",
10590
- {
10591
- cx: "108",
10592
- cy: "120",
10593
- r: "60",
10594
- stroke: "currentColor",
10595
- strokeWidth: g.stroke,
10596
- fill: "none",
10597
- style: { color: "var(--text-primary)" }
10598
- }
10599
- ),
10600
- /* @__PURE__ */ jsx64("circle", { cx: g.dotX, cy: g.dotY, r: g.dotR, fill: "var(--accent-pop)" })
10601
- ]
10614
+ children: /* @__PURE__ */ jsx64(SymbolCircles, { size })
10602
10615
  }
10603
10616
  );
10604
10617
  }
@@ -10608,33 +10621,61 @@ function OlunLogo({
10608
10621
  showSymbol = true,
10609
10622
  className
10610
10623
  }) {
10624
+ if (!showSymbol) {
10625
+ const { full } = OLUN_WORDMARK;
10626
+ const height2 = fontSize * full.height / OLUN_WORDMARK.unitsPerEm;
10627
+ return /* @__PURE__ */ jsxs50(
10628
+ "svg",
10629
+ {
10630
+ width: height2 * full.width / full.height,
10631
+ height: height2,
10632
+ viewBox: full.viewBox,
10633
+ fill: "none",
10634
+ xmlns: "http://www.w3.org/2000/svg",
10635
+ className,
10636
+ style: INK_TIGHT,
10637
+ role: "img",
10638
+ "aria-label": "OLUN.",
10639
+ children: [
10640
+ /* @__PURE__ */ jsx64("path", { className: "olun-logo__wordmark", fill: "currentColor", d: full.letters }),
10641
+ /* @__PURE__ */ jsx64(
10642
+ "circle",
10643
+ {
10644
+ className: "olun-accent olun-logo__period",
10645
+ cx: full.period.cx,
10646
+ cy: full.period.cy,
10647
+ r: full.period.r,
10648
+ fill: ACCENT_FILL
10649
+ }
10650
+ )
10651
+ ]
10652
+ }
10653
+ );
10654
+ }
10655
+ const layout = symbolSize > OLUN_SYMBOL.smallMax ? OLUN_MASTER.large : OLUN_MASTER.small;
10656
+ const height = symbolSize * layout.height / (OLUN_SYMBOL.box * layout.symbol.scale);
10611
10657
  return /* @__PURE__ */ jsxs50(
10612
- "div",
10658
+ "svg",
10613
10659
  {
10660
+ width: height * layout.width / layout.height,
10661
+ height,
10662
+ viewBox: layout.viewBox,
10663
+ fill: "none",
10664
+ xmlns: "http://www.w3.org/2000/svg",
10614
10665
  className,
10615
- style: {
10616
- display: "flex",
10617
- alignItems: "center",
10618
- gap: "var(--space-3)"
10619
- },
10666
+ style: INK_TIGHT,
10667
+ role: "img",
10668
+ "aria-label": "OLUN",
10620
10669
  children: [
10621
- showSymbol && /* @__PURE__ */ jsx64(OlunSymbol, { size: symbolSize }),
10622
- /* @__PURE__ */ jsxs50(
10623
- "span",
10670
+ /* @__PURE__ */ jsx64(
10671
+ "g",
10624
10672
  {
10625
- style: {
10626
- fontFamily: "var(--font-display)",
10627
- fontWeight: 800,
10628
- fontSize: `${fontSize}px`,
10629
- letterSpacing: "-0.02em",
10630
- color: "var(--text-primary)"
10631
- },
10632
- children: [
10633
- "OLUN",
10634
- !showSymbol && /* @__PURE__ */ jsx64("span", { style: { color: "var(--accent)" }, children: "." })
10635
- ]
10673
+ className: "olun-logo__symbol",
10674
+ transform: `translate(${layout.symbol.x} ${layout.symbol.y}) scale(${layout.symbol.scale})`,
10675
+ children: /* @__PURE__ */ jsx64(SymbolCircles, { size: symbolSize })
10636
10676
  }
10637
- )
10677
+ ),
10678
+ /* @__PURE__ */ jsx64("path", { className: "olun-logo__wordmark", fill: "currentColor", d: layout.letters })
10638
10679
  ]
10639
10680
  }
10640
10681
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@olundot/ui",
3
- "version": "0.20.0-next.2",
3
+ "version": "0.20.0-next.3",
4
4
  "description": "OLUN. shared React UI components built on OLUN design tokens",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -44,7 +44,7 @@
44
44
  "lucide-react": "^1.8.0",
45
45
  "radix-ui": "^1.4.3",
46
46
  "tailwind-merge": "^3.5.0",
47
- "@olundot/tokens": "^0.18.0-next.0"
47
+ "@olundot/tokens": "^0.18.0-next.1"
48
48
  },
49
49
  "peerDependencies": {
50
50
  "react": ">=18",