@liner-fe/prism 3.4.11 → 3.4.12

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/lib/index.css CHANGED
@@ -1918,6 +1918,40 @@
1918
1918
  border: 1px solid var(--accent-label-pink);
1919
1919
  }
1920
1920
 
1921
+ /* esbuild-sass-plugin:css-chunk:src/components/Avatar/style.module.scss */
1922
+ ._avatar_1tgi1_1 {
1923
+ display: inline-flex;
1924
+ align-items: center;
1925
+ justify-content: center;
1926
+ box-sizing: border-box;
1927
+ flex-shrink: 0;
1928
+ overflow: hidden;
1929
+ border-radius: 9999px;
1930
+ background: var(--neutral-container-lowest);
1931
+ }
1932
+ ._small_1tgi1_12 {
1933
+ width: 18px;
1934
+ height: 18px;
1935
+ }
1936
+ ._medium_1tgi1_17 {
1937
+ width: 24px;
1938
+ height: 24px;
1939
+ }
1940
+ ._xlarge_1tgi1_22 {
1941
+ width: 60px;
1942
+ height: 60px;
1943
+ }
1944
+ ._image_1tgi1_27 {
1945
+ width: 100%;
1946
+ height: 100%;
1947
+ object-fit: cover;
1948
+ }
1949
+ ._fallback_1tgi1_33 {
1950
+ display: flex;
1951
+ width: 100%;
1952
+ height: 100%;
1953
+ }
1954
+
1921
1955
  /* esbuild-sass-plugin:css-chunk:src/components/AlertDialog/style.module.scss */
1922
1956
  @keyframes _overlayShow_6ipeu_1 {
1923
1957
  from {
package/lib/index.d.ts CHANGED
@@ -7,7 +7,7 @@ import { IconProps, IconComponentType } from '@liner-fe/icon';
7
7
  import * as react_jsx_runtime from 'react/jsx-runtime';
8
8
  import * as _artsy_fresnel_dist_Media from '@artsy/fresnel/dist/Media';
9
9
  import { breakpointOrigin } from '@liner-fe/design-token';
10
- import { Popover as Popover$1, Tooltip as Tooltip$1, Checkbox as Checkbox$1, RadioGroup, Select as Select$1, Label as Label$1, AlertDialog as AlertDialog$1, Dialog as Dialog$1 } from 'radix-ui';
10
+ import { Popover as Popover$1, Tooltip as Tooltip$1, Checkbox as Checkbox$1, RadioGroup, Select as Select$1, Label as Label$1, Avatar as Avatar$1, AlertDialog as AlertDialog$1, Dialog as Dialog$1 } from 'radix-ui';
11
11
  import * as PopoverPrimitive from '@radix-ui/react-popover';
12
12
  import { PopoverProps, PopoverPortalProps } from '@radix-ui/react-popover';
13
13
  import { Drawer } from 'vaul';
@@ -642,6 +642,47 @@ type BadgeBaseProps = ComponentPropsWithoutRef<'span'> & {
642
642
  type BadgeProps = BadgeBaseProps & BadgeVariantColorProps;
643
643
  declare const Badge: react.ForwardRefExoticComponent<BadgeProps & react.RefAttributes<HTMLSpanElement>>;
644
644
 
645
+ type AvatarSize = 'small' | 'medium' | 'xlarge';
646
+ /**
647
+ * 이미지 로딩 상태(`'idle' | 'loading' | 'loaded' | 'error'`).
648
+ * union 을 직접 정의하지 않고 radix-ui Avatar.Image 의 타입을 그대로 파생해 재사용합니다(drift 방지).
649
+ */
650
+ type AvatarLoadingStatus = Parameters<NonNullable<ComponentPropsWithoutRef<typeof Avatar$1.Image>['onLoadingStatusChange']>>[0];
651
+ type AvatarProps = ComponentPropsWithoutRef<typeof Avatar$1.Root> & {
652
+ /** 아바타 크기. */
653
+ size?: AvatarSize;
654
+ /**
655
+ * 사용자 이미지 URL. prop 전달은 필수이지만 값으로 `undefined` 를 허용합니다(`src?:` 옵셔널 아님).
656
+ * 호출부가 src 를 깜빡 누락하는 것은 막되, 사진이 없으면 `undefined` 를 명시적으로 넘길 수 있습니다.
657
+ * `undefined`/빈 문자열이거나 로드에 실패하면 fallback 이미지를 표시합니다.
658
+ */
659
+ src: string | undefined;
660
+ /** 이미지 대체 텍스트(접근성). 사용자 이름 등을 전달합니다. 장식용이면 빈 문자열(`''`)을 넘기세요. */
661
+ alt: string;
662
+ /** 이미지 로딩 상태가 바뀔 때 호출됩니다. (idle → loading → loaded | error) */
663
+ onLoadingStatusChange?: (status: AvatarLoadingStatus) => void;
664
+ };
665
+ /**
666
+ * 사용자/엔티티를 원형 이미지로 표현하는 Avatar.
667
+ *
668
+ * radix-ui Avatar 를 래핑합니다. `src` 이미지가 로드되기 전·로드에 실패했을 때(빈 URL 포함)는
669
+ * fallback placeholder 이미지를 보여줍니다. 로딩 중 깨진 이미지가 잠깐 보이는 현상이 없습니다.
670
+ */
671
+ declare const Avatar: react.ForwardRefExoticComponent<Omit<Avatar$1.AvatarProps & react.RefAttributes<HTMLSpanElement>, "ref"> & {
672
+ /** 아바타 크기. */
673
+ size?: AvatarSize;
674
+ /**
675
+ * 사용자 이미지 URL. prop 전달은 필수이지만 값으로 `undefined` 를 허용합니다(`src?:` 옵셔널 아님).
676
+ * 호출부가 src 를 깜빡 누락하는 것은 막되, 사진이 없으면 `undefined` 를 명시적으로 넘길 수 있습니다.
677
+ * `undefined`/빈 문자열이거나 로드에 실패하면 fallback 이미지를 표시합니다.
678
+ */
679
+ src: string | undefined;
680
+ /** 이미지 대체 텍스트(접근성). 사용자 이름 등을 전달합니다. 장식용이면 빈 문자열(`''`)을 넘기세요. */
681
+ alt: string;
682
+ /** 이미지 로딩 상태가 바뀔 때 호출됩니다. (idle → loading → loaded | error) */
683
+ onLoadingStatusChange?: (status: AvatarLoadingStatus) => void;
684
+ } & react.RefAttributes<HTMLSpanElement>>;
685
+
645
686
  /**
646
687
  * AlertDialogRoot
647
688
  *
@@ -841,4 +882,4 @@ interface RatioProps extends react.HTMLAttributes<HTMLDivElement> {
841
882
  */
842
883
  declare const Ratio: react.ForwardRefExoticComponent<RatioProps & react.RefAttributes<HTMLDivElement>>;
843
884
 
844
- export { AlertDialog, type AlertDialogAction, type AlertDialogConfirmAction, type AlertDialogContentProps, Badge, type BadgeColor, type BadgeIconProps, type BadgeProps, type BadgeSize, type BadgeVariant, BottomSheet, type BottomSheetAction, type BottomSheetConfirmAction, type BottomSheetContentProps, type BottomSheetMode, type BreakPointsKey, Button, type ButtonIconProps, type ButtonProps, type ButtonSizeType, Caption, Checkbox, CoachMark, type CoachMarkContentProps, type CommonButtonProps, CompactCoachMark, type CompactCoachMarkContentProps, DEFAULT_LEVEL_OPTIONS, DEFAULT_SIZE_OPTIONS, DefaultButton, type DefaultButtonProps, type DefaultLevelType, Dialog, type DialogAction, type DialogConfirmAction, type DialogContentProps, Display, Heading, ICON_LEVEL_OPTIONS, ICON_SIZE_OPTIONS, type ICaptionProps, type IDisplayProps, type IHeadingProps, type IPropsAccent, type IPropsAnswer, type IPropsNormal, type IPropsNormalBold, type IPropsPost, type ITitleProps, IconButton, type IconButtonProps, type ItemProps, LOGOS, Label, List, Loading, type LoadingLevelType, Logo, type LogoCategory, type LogoName, type LogoProps, Media, MediaContextProvider, Paragraph, type ParagraphProps, Popover, type PopoverContentProps, PrimitiveCoachMark, type PrimitiveCoachMarkContentProps, type PrimitiveCoachMarkRootProps, type PromiseToastOptions, RATIO, Radio, Ratio, type RatioProps, Select, type SelectItemProps, type SelectProps, TEXT_LEVEL_OPTIONS, TEXT_SIZE_OPTIONS, Tag, TextButton, type TextButtonProps, type TextSizeType, Textfield, type TextfieldButtonProps, type TextfieldLabelType, type TextfieldProps, Title, type ToastOptions, type ToastType, Toaster, Tooltip, Typography, arrayToStyleObject, isEmptyObject, objectToArray, rootMediaStyle, toast };
885
+ export { AlertDialog, type AlertDialogAction, type AlertDialogConfirmAction, type AlertDialogContentProps, Avatar, type AvatarLoadingStatus, type AvatarProps, type AvatarSize, Badge, type BadgeColor, type BadgeIconProps, type BadgeProps, type BadgeSize, type BadgeVariant, BottomSheet, type BottomSheetAction, type BottomSheetConfirmAction, type BottomSheetContentProps, type BottomSheetMode, type BreakPointsKey, Button, type ButtonIconProps, type ButtonProps, type ButtonSizeType, Caption, Checkbox, CoachMark, type CoachMarkContentProps, type CommonButtonProps, CompactCoachMark, type CompactCoachMarkContentProps, DEFAULT_LEVEL_OPTIONS, DEFAULT_SIZE_OPTIONS, DefaultButton, type DefaultButtonProps, type DefaultLevelType, Dialog, type DialogAction, type DialogConfirmAction, type DialogContentProps, Display, Heading, ICON_LEVEL_OPTIONS, ICON_SIZE_OPTIONS, type ICaptionProps, type IDisplayProps, type IHeadingProps, type IPropsAccent, type IPropsAnswer, type IPropsNormal, type IPropsNormalBold, type IPropsPost, type ITitleProps, IconButton, type IconButtonProps, type ItemProps, LOGOS, Label, List, Loading, type LoadingLevelType, Logo, type LogoCategory, type LogoName, type LogoProps, Media, MediaContextProvider, Paragraph, type ParagraphProps, Popover, type PopoverContentProps, PrimitiveCoachMark, type PrimitiveCoachMarkContentProps, type PrimitiveCoachMarkRootProps, type PromiseToastOptions, RATIO, Radio, Ratio, type RatioProps, Select, type SelectItemProps, type SelectProps, TEXT_LEVEL_OPTIONS, TEXT_SIZE_OPTIONS, Tag, TextButton, type TextButtonProps, type TextSizeType, Textfield, type TextfieldButtonProps, type TextfieldLabelType, type TextfieldProps, Title, type ToastOptions, type ToastType, Toaster, Tooltip, Typography, arrayToStyleObject, isEmptyObject, objectToArray, rootMediaStyle, toast };
package/lib/index.js CHANGED
@@ -2775,13 +2775,70 @@ var Tag = forwardRef20(
2775
2775
  }
2776
2776
  );
2777
2777
 
2778
+ // src/components/Avatar/index.tsx
2779
+ import { forwardRef as forwardRef21 } from "react";
2780
+ import { Avatar as RadixAvatar } from "radix-ui";
2781
+ import { cva as cva12 } from "cva";
2782
+ import clsx22 from "clsx";
2783
+
2784
+ // src/components/Avatar/fallbackImage.ts
2785
+ var FALLBACK_IMAGE_SRC = "https://assets.getliner.com/web/prism/fallback-profile.webp";
2786
+
2787
+ // src/components/Avatar/style.module.scss
2788
+ var style_module_default20 = {
2789
+ "avatar": "_avatar_1tgi1_1",
2790
+ "small": "_small_1tgi1_12",
2791
+ "medium": "_medium_1tgi1_17",
2792
+ "xlarge": "_xlarge_1tgi1_22",
2793
+ "image": "_image_1tgi1_27",
2794
+ "fallback": "_fallback_1tgi1_33"
2795
+ };
2796
+
2797
+ // src/components/Avatar/index.tsx
2798
+ import { jsx as jsx29, jsxs as jsxs16 } from "react/jsx-runtime";
2799
+ var avatarBase = cva12({
2800
+ base: style_module_default20.avatar,
2801
+ variants: {
2802
+ size: {
2803
+ small: style_module_default20.small,
2804
+ medium: style_module_default20.medium,
2805
+ xlarge: style_module_default20.xlarge
2806
+ }
2807
+ }
2808
+ });
2809
+ var Avatar = forwardRef21(
2810
+ ({ size = "medium", src, alt, className, onLoadingStatusChange, ...rest }, ref) => {
2811
+ return /* @__PURE__ */ jsxs16(RadixAvatar.Root, { ref, className: clsx22(avatarBase({ size }), className), ...rest, children: [
2812
+ src ? /* @__PURE__ */ jsx29(
2813
+ RadixAvatar.Image,
2814
+ {
2815
+ className: style_module_default20.image,
2816
+ src,
2817
+ alt,
2818
+ onLoadingStatusChange
2819
+ }
2820
+ ) : null,
2821
+ /* @__PURE__ */ jsx29(RadixAvatar.Fallback, { className: style_module_default20.fallback, children: /* @__PURE__ */ jsx29(
2822
+ "img",
2823
+ {
2824
+ className: style_module_default20.image,
2825
+ src: FALLBACK_IMAGE_SRC,
2826
+ alt,
2827
+ "aria-hidden": alt ? void 0 : true
2828
+ }
2829
+ ) })
2830
+ ] });
2831
+ }
2832
+ );
2833
+ Avatar.displayName = "Avatar";
2834
+
2778
2835
  // src/components/AlertDialog/index.tsx
2779
2836
  import { AlertDialog as AlertDialogPrimitive } from "radix-ui";
2780
- import { clsx as clsx22 } from "clsx";
2781
- import { cva as cva12 } from "cva";
2837
+ import { clsx as clsx23 } from "clsx";
2838
+ import { cva as cva13 } from "cva";
2782
2839
 
2783
2840
  // src/components/AlertDialog/style.module.scss
2784
- var style_module_default20 = {
2841
+ var style_module_default21 = {
2785
2842
  "overlay": "_overlay_6ipeu_20",
2786
2843
  "overlayShow": "_overlayShow_6ipeu_1",
2787
2844
  "content": "_content_6ipeu_30",
@@ -2793,13 +2850,13 @@ var style_module_default20 = {
2793
2850
  };
2794
2851
 
2795
2852
  // src/components/AlertDialog/index.tsx
2796
- import { jsx as jsx29, jsxs as jsxs16 } from "react/jsx-runtime";
2797
- var titleVariants = cva12({ base: [style_module_default20.title, "lp-sys-typo-title4-accent-bold"] });
2798
- var descriptionVariants = cva12({
2799
- base: [style_module_default20.description, "lp-sys-typo-paragraph2-post-regular"]
2853
+ import { jsx as jsx30, jsxs as jsxs17 } from "react/jsx-runtime";
2854
+ var titleVariants = cva13({ base: [style_module_default21.title, "lp-sys-typo-title4-accent-bold"] });
2855
+ var descriptionVariants = cva13({
2856
+ base: [style_module_default21.description, "lp-sys-typo-paragraph2-post-regular"]
2800
2857
  });
2801
- var AlertDialogRoot = /* @__PURE__ */ __name((props) => /* @__PURE__ */ jsx29(AlertDialogPrimitive.Root, { ...props }), "AlertDialogRoot");
2802
- var AlertDialogTrigger = /* @__PURE__ */ __name(({ by }) => /* @__PURE__ */ jsx29(AlertDialogPrimitive.Trigger, { asChild: true, children: by }), "AlertDialogTrigger");
2858
+ var AlertDialogRoot = /* @__PURE__ */ __name((props) => /* @__PURE__ */ jsx30(AlertDialogPrimitive.Root, { ...props }), "AlertDialogRoot");
2859
+ var AlertDialogTrigger = /* @__PURE__ */ __name(({ by }) => /* @__PURE__ */ jsx30(AlertDialogPrimitive.Trigger, { asChild: true, children: by }), "AlertDialogTrigger");
2803
2860
  var AlertDialogContent = /* @__PURE__ */ __name(({
2804
2861
  title,
2805
2862
  description,
@@ -2811,24 +2868,24 @@ var AlertDialogContent = /* @__PURE__ */ __name(({
2811
2868
  ref,
2812
2869
  ...props
2813
2870
  }) => {
2814
- return /* @__PURE__ */ jsxs16(AlertDialogPrimitive.Portal, { container, children: [
2815
- /* @__PURE__ */ jsx29(AlertDialogPrimitive.Overlay, { className: style_module_default20.overlay }),
2816
- /* @__PURE__ */ jsxs16(
2871
+ return /* @__PURE__ */ jsxs17(AlertDialogPrimitive.Portal, { container, children: [
2872
+ /* @__PURE__ */ jsx30(AlertDialogPrimitive.Overlay, { className: style_module_default21.overlay }),
2873
+ /* @__PURE__ */ jsxs17(
2817
2874
  AlertDialogPrimitive.Content,
2818
2875
  {
2819
2876
  ref,
2820
- className: clsx22(style_module_default20.content, className),
2877
+ className: clsx23(style_module_default21.content, className),
2821
2878
  onEscapeKeyDown: (event) => event.preventDefault(),
2822
2879
  ...props,
2823
2880
  children: [
2824
- /* @__PURE__ */ jsxs16("div", { className: style_module_default20.contents, children: [
2825
- title && /* @__PURE__ */ jsx29(AlertDialogPrimitive.Title, { className: titleVariants(), children: title }),
2826
- /* @__PURE__ */ jsx29(AlertDialogPrimitive.Description, { className: descriptionVariants(), children: description })
2881
+ /* @__PURE__ */ jsxs17("div", { className: style_module_default21.contents, children: [
2882
+ title && /* @__PURE__ */ jsx30(AlertDialogPrimitive.Title, { className: titleVariants(), children: title }),
2883
+ /* @__PURE__ */ jsx30(AlertDialogPrimitive.Description, { className: descriptionVariants(), children: description })
2827
2884
  ] }),
2828
2885
  children,
2829
- /* @__PURE__ */ jsxs16("div", { className: style_module_default20.actions, children: [
2830
- /* @__PURE__ */ jsx29(AlertDialogPrimitive.Cancel, { asChild: true, children: /* @__PURE__ */ jsx29(Button, { level: "tertiary", size: "l", onClick: dismiss.onClick, children: dismiss.label }) }),
2831
- /* @__PURE__ */ jsx29(AlertDialogPrimitive.Action, { asChild: true, children: /* @__PURE__ */ jsx29(Button, { level: confirm.level ?? "primary", size: "l", onClick: confirm.onClick, children: confirm.label }) })
2886
+ /* @__PURE__ */ jsxs17("div", { className: style_module_default21.actions, children: [
2887
+ /* @__PURE__ */ jsx30(AlertDialogPrimitive.Cancel, { asChild: true, children: /* @__PURE__ */ jsx30(Button, { level: "tertiary", size: "l", onClick: dismiss.onClick, children: dismiss.label }) }),
2888
+ /* @__PURE__ */ jsx30(AlertDialogPrimitive.Action, { asChild: true, children: /* @__PURE__ */ jsx30(Button, { level: confirm.level ?? "primary", size: "l", onClick: confirm.onClick, children: confirm.label }) })
2832
2889
  ] })
2833
2890
  ]
2834
2891
  }
@@ -2842,15 +2899,15 @@ var AlertDialog = Object.assign(AlertDialogRoot, {
2842
2899
 
2843
2900
  // src/components/Dialog/index.tsx
2844
2901
  import { Dialog as DialogPrimitive3 } from "radix-ui";
2845
- import { clsx as clsx23 } from "clsx";
2902
+ import { clsx as clsx24 } from "clsx";
2846
2903
  import { IconClose as IconClose2 } from "@liner-fe/icon";
2847
2904
 
2848
2905
  // src/components/Dialog/Header.tsx
2849
2906
  import { Dialog as DialogPrimitive } from "radix-ui";
2850
- import { cva as cva13 } from "cva";
2907
+ import { cva as cva14 } from "cva";
2851
2908
 
2852
2909
  // src/components/Dialog/style.module.scss
2853
- var style_module_default21 = {
2910
+ var style_module_default22 = {
2854
2911
  "overlay": "_overlay_424hi_20",
2855
2912
  "overlayShow": "_overlayShow_424hi_1",
2856
2913
  "content": "_content_424hi_30",
@@ -2867,36 +2924,36 @@ var style_module_default21 = {
2867
2924
  };
2868
2925
 
2869
2926
  // src/components/Dialog/Header.tsx
2870
- import { jsx as jsx30, jsxs as jsxs17 } from "react/jsx-runtime";
2871
- var titleVariants2 = cva13({ base: [style_module_default21.title, "lp-sys-typo-title4-accent-bold"] });
2872
- var descriptionVariants2 = cva13({
2873
- base: [style_module_default21.description, "lp-sys-typo-paragraph2-post-regular"]
2927
+ import { jsx as jsx31, jsxs as jsxs18 } from "react/jsx-runtime";
2928
+ var titleVariants2 = cva14({ base: [style_module_default22.title, "lp-sys-typo-title4-accent-bold"] });
2929
+ var descriptionVariants2 = cva14({
2930
+ base: [style_module_default22.description, "lp-sys-typo-paragraph2-post-regular"]
2874
2931
  });
2875
- var DialogHeader = /* @__PURE__ */ __name(({ title, description }) => /* @__PURE__ */ jsxs17("div", { className: style_module_default21.header, children: [
2876
- /* @__PURE__ */ jsx30(DialogPrimitive.Title, { className: titleVariants2(), children: title }),
2877
- description && /* @__PURE__ */ jsx30(DialogPrimitive.Description, { className: descriptionVariants2(), children: description })
2932
+ var DialogHeader = /* @__PURE__ */ __name(({ title, description }) => /* @__PURE__ */ jsxs18("div", { className: style_module_default22.header, children: [
2933
+ /* @__PURE__ */ jsx31(DialogPrimitive.Title, { className: titleVariants2(), children: title }),
2934
+ description && /* @__PURE__ */ jsx31(DialogPrimitive.Description, { className: descriptionVariants2(), children: description })
2878
2935
  ] }), "DialogHeader");
2879
2936
 
2880
2937
  // src/components/Dialog/Footer.tsx
2881
2938
  import { Dialog as DialogPrimitive2 } from "radix-ui";
2882
- import { jsx as jsx31, jsxs as jsxs18 } from "react/jsx-runtime";
2939
+ import { jsx as jsx32, jsxs as jsxs19 } from "react/jsx-runtime";
2883
2940
  var DialogFooter = /* @__PURE__ */ __name(({ dismiss, confirm, extra }) => {
2884
2941
  const hasActions = Boolean(dismiss || confirm);
2885
2942
  const hasFooter = hasActions || Boolean(extra);
2886
2943
  if (!hasFooter) return null;
2887
- return /* @__PURE__ */ jsxs18("div", { className: style_module_default21.footer, children: [
2888
- hasActions && /* @__PURE__ */ jsxs18("div", { className: style_module_default21.actions, children: [
2889
- dismiss && /* @__PURE__ */ jsx31(DialogPrimitive2.Close, { asChild: true, children: /* @__PURE__ */ jsx31(Button, { level: "tertiary", size: "cta", onClick: dismiss.onClick, children: dismiss.label }) }),
2890
- confirm && /* @__PURE__ */ jsx31(DialogPrimitive2.Close, { asChild: true, children: /* @__PURE__ */ jsx31(Button, { level: confirm.level ?? "primary", size: "cta", onClick: confirm.onClick, children: confirm.label }) })
2944
+ return /* @__PURE__ */ jsxs19("div", { className: style_module_default22.footer, children: [
2945
+ hasActions && /* @__PURE__ */ jsxs19("div", { className: style_module_default22.actions, children: [
2946
+ dismiss && /* @__PURE__ */ jsx32(DialogPrimitive2.Close, { asChild: true, children: /* @__PURE__ */ jsx32(Button, { level: "tertiary", size: "cta", onClick: dismiss.onClick, children: dismiss.label }) }),
2947
+ confirm && /* @__PURE__ */ jsx32(DialogPrimitive2.Close, { asChild: true, children: /* @__PURE__ */ jsx32(Button, { level: confirm.level ?? "primary", size: "cta", onClick: confirm.onClick, children: confirm.label }) })
2891
2948
  ] }),
2892
- extra && /* @__PURE__ */ jsx31("div", { className: style_module_default21.extra, children: /* @__PURE__ */ jsx31(DialogPrimitive2.Close, { asChild: true, children: /* @__PURE__ */ jsx31(TextButton, { level: "tertiary", size: "xs", onClick: extra.onClick, children: extra.label }) }) })
2949
+ extra && /* @__PURE__ */ jsx32("div", { className: style_module_default22.extra, children: /* @__PURE__ */ jsx32(DialogPrimitive2.Close, { asChild: true, children: /* @__PURE__ */ jsx32(TextButton, { level: "tertiary", size: "xs", onClick: extra.onClick, children: extra.label }) }) })
2893
2950
  ] });
2894
2951
  }, "DialogFooter");
2895
2952
 
2896
2953
  // src/components/Dialog/index.tsx
2897
- import { jsx as jsx32, jsxs as jsxs19 } from "react/jsx-runtime";
2898
- var DialogRoot = /* @__PURE__ */ __name((props) => /* @__PURE__ */ jsx32(DialogPrimitive3.Root, { ...props }), "DialogRoot");
2899
- var DialogTrigger = /* @__PURE__ */ __name(({ by }) => /* @__PURE__ */ jsx32(DialogPrimitive3.Trigger, { asChild: true, children: by }), "DialogTrigger");
2954
+ import { jsx as jsx33, jsxs as jsxs20 } from "react/jsx-runtime";
2955
+ var DialogRoot = /* @__PURE__ */ __name((props) => /* @__PURE__ */ jsx33(DialogPrimitive3.Root, { ...props }), "DialogRoot");
2956
+ var DialogTrigger = /* @__PURE__ */ __name(({ by }) => /* @__PURE__ */ jsx33(DialogPrimitive3.Trigger, { asChild: true, children: by }), "DialogTrigger");
2900
2957
  var DialogContent = /* @__PURE__ */ __name(({
2901
2958
  illust,
2902
2959
  title,
@@ -2911,23 +2968,23 @@ var DialogContent = /* @__PURE__ */ __name(({
2911
2968
  ref,
2912
2969
  ...props
2913
2970
  }) => {
2914
- return /* @__PURE__ */ jsxs19(DialogPrimitive3.Portal, { container, children: [
2915
- /* @__PURE__ */ jsx32(DialogPrimitive3.Overlay, { className: style_module_default21.overlay }),
2916
- /* @__PURE__ */ jsxs19(DialogPrimitive3.Content, { ref, className: clsx23(style_module_default21.content, className), ...props, children: [
2917
- showClose && /* @__PURE__ */ jsx32(DialogPrimitive3.Close, { asChild: true, children: /* @__PURE__ */ jsx32(
2971
+ return /* @__PURE__ */ jsxs20(DialogPrimitive3.Portal, { container, children: [
2972
+ /* @__PURE__ */ jsx33(DialogPrimitive3.Overlay, { className: style_module_default22.overlay }),
2973
+ /* @__PURE__ */ jsxs20(DialogPrimitive3.Content, { ref, className: clsx24(style_module_default22.content, className), ...props, children: [
2974
+ showClose && /* @__PURE__ */ jsx33(DialogPrimitive3.Close, { asChild: true, children: /* @__PURE__ */ jsx33(
2918
2975
  IconButton,
2919
2976
  {
2920
- className: style_module_default21.close,
2977
+ className: style_module_default22.close,
2921
2978
  "aria-label": "\uB2EB\uAE30",
2922
2979
  level: "quinary",
2923
2980
  size: "m",
2924
2981
  icon: { icon: IconClose2, type: "neutral-label-secondary" }
2925
2982
  }
2926
2983
  ) }),
2927
- illust && /* @__PURE__ */ jsx32("div", { className: style_module_default21.illust, children: illust }),
2928
- /* @__PURE__ */ jsx32(DialogHeader, { title, description }),
2929
- children && /* @__PURE__ */ jsx32("div", { className: style_module_default21.body, children }),
2930
- /* @__PURE__ */ jsx32(DialogFooter, { dismiss, confirm, extra })
2984
+ illust && /* @__PURE__ */ jsx33("div", { className: style_module_default22.illust, children: illust }),
2985
+ /* @__PURE__ */ jsx33(DialogHeader, { title, description }),
2986
+ children && /* @__PURE__ */ jsx33("div", { className: style_module_default22.body, children }),
2987
+ /* @__PURE__ */ jsx33(DialogFooter, { dismiss, confirm, extra })
2931
2988
  ] })
2932
2989
  ] });
2933
2990
  }, "DialogContent");
@@ -2939,14 +2996,14 @@ var Dialog = Object.assign(DialogRoot, {
2939
2996
  // src/components/BottomSheet/index.tsx
2940
2997
  import * as React4 from "react";
2941
2998
  import { Drawer as Drawer3 } from "vaul";
2942
- import { clsx as clsx24 } from "clsx";
2999
+ import { clsx as clsx25 } from "clsx";
2943
3000
 
2944
3001
  // src/components/BottomSheet/Header.tsx
2945
3002
  import { Drawer } from "vaul";
2946
- import { cva as cva14 } from "cva";
3003
+ import { cva as cva15 } from "cva";
2947
3004
 
2948
3005
  // src/components/BottomSheet/style.module.scss
2949
- var style_module_default22 = {
3006
+ var style_module_default23 = {
2950
3007
  "overlay": "_overlay_ifftf_2",
2951
3008
  "content": "_content_ifftf_9",
2952
3009
  "inner": "_inner_ifftf_18",
@@ -2962,47 +3019,47 @@ var style_module_default22 = {
2962
3019
  };
2963
3020
 
2964
3021
  // src/components/BottomSheet/Header.tsx
2965
- import { jsx as jsx33, jsxs as jsxs20 } from "react/jsx-runtime";
2966
- var titleVariants3 = cva14({ base: [style_module_default22.title, "lp-sys-typo-title4-accent-bold"] });
2967
- var descriptionVariants3 = cva14({
2968
- base: [style_module_default22.description, "lp-sys-typo-paragraph2-post-regular"]
3022
+ import { jsx as jsx34, jsxs as jsxs21 } from "react/jsx-runtime";
3023
+ var titleVariants3 = cva15({ base: [style_module_default23.title, "lp-sys-typo-title4-accent-bold"] });
3024
+ var descriptionVariants3 = cva15({
3025
+ base: [style_module_default23.description, "lp-sys-typo-paragraph2-post-regular"]
2969
3026
  });
2970
- var BottomSheetHeader = /* @__PURE__ */ __name(({ title, description }) => /* @__PURE__ */ jsxs20("div", { className: style_module_default22.header, children: [
2971
- /* @__PURE__ */ jsx33(Drawer.Title, { className: titleVariants3(), children: title }),
2972
- description && /* @__PURE__ */ jsx33(Drawer.Description, { className: descriptionVariants3(), children: description })
3027
+ var BottomSheetHeader = /* @__PURE__ */ __name(({ title, description }) => /* @__PURE__ */ jsxs21("div", { className: style_module_default23.header, children: [
3028
+ /* @__PURE__ */ jsx34(Drawer.Title, { className: titleVariants3(), children: title }),
3029
+ description && /* @__PURE__ */ jsx34(Drawer.Description, { className: descriptionVariants3(), children: description })
2973
3030
  ] }), "BottomSheetHeader");
2974
3031
 
2975
3032
  // src/components/BottomSheet/Footer.tsx
2976
3033
  import { Drawer as Drawer2 } from "vaul";
2977
- import { jsx as jsx34, jsxs as jsxs21 } from "react/jsx-runtime";
3034
+ import { jsx as jsx35, jsxs as jsxs22 } from "react/jsx-runtime";
2978
3035
  var BottomSheetFooter = /* @__PURE__ */ __name(({ dismiss, confirm, extra }) => {
2979
3036
  const hasActions = Boolean(dismiss || confirm);
2980
3037
  const hasFooter = hasActions || Boolean(extra);
2981
3038
  if (!hasFooter) return null;
2982
- return /* @__PURE__ */ jsxs21("div", { className: style_module_default22.footer, children: [
2983
- hasActions && /* @__PURE__ */ jsxs21("div", { className: style_module_default22.actions, children: [
2984
- dismiss && /* @__PURE__ */ jsx34(Drawer2.Close, { asChild: true, children: /* @__PURE__ */ jsx34(Button, { level: "tertiary", size: "l", onClick: dismiss.onClick, children: dismiss.label }) }),
2985
- confirm && /* @__PURE__ */ jsx34(Drawer2.Close, { asChild: true, children: /* @__PURE__ */ jsx34(Button, { level: confirm.level ?? "primary", size: "l", onClick: confirm.onClick, children: confirm.label }) })
3039
+ return /* @__PURE__ */ jsxs22("div", { className: style_module_default23.footer, children: [
3040
+ hasActions && /* @__PURE__ */ jsxs22("div", { className: style_module_default23.actions, children: [
3041
+ dismiss && /* @__PURE__ */ jsx35(Drawer2.Close, { asChild: true, children: /* @__PURE__ */ jsx35(Button, { level: "tertiary", size: "l", onClick: dismiss.onClick, children: dismiss.label }) }),
3042
+ confirm && /* @__PURE__ */ jsx35(Drawer2.Close, { asChild: true, children: /* @__PURE__ */ jsx35(Button, { level: confirm.level ?? "primary", size: "l", onClick: confirm.onClick, children: confirm.label }) })
2986
3043
  ] }),
2987
- extra && /* @__PURE__ */ jsx34("div", { className: style_module_default22.extra, children: /* @__PURE__ */ jsx34(Drawer2.Close, { asChild: true, children: /* @__PURE__ */ jsx34(TextButton, { level: "tertiary", size: "xs", onClick: extra.onClick, children: extra.label }) }) })
3044
+ extra && /* @__PURE__ */ jsx35("div", { className: style_module_default23.extra, children: /* @__PURE__ */ jsx35(Drawer2.Close, { asChild: true, children: /* @__PURE__ */ jsx35(TextButton, { level: "tertiary", size: "xs", onClick: extra.onClick, children: extra.label }) }) })
2988
3045
  ] });
2989
3046
  }, "BottomSheetFooter");
2990
3047
 
2991
3048
  // src/components/BottomSheet/index.tsx
2992
- import { jsx as jsx35, jsxs as jsxs22 } from "react/jsx-runtime";
3049
+ import { jsx as jsx36, jsxs as jsxs23 } from "react/jsx-runtime";
2993
3050
  var SNAP_POINTS = [0.5, 1];
2994
3051
  var BottomSheetContext = React4.createContext({
2995
3052
  mode: "auto"
2996
3053
  });
2997
3054
  var BottomSheetRoot = /* @__PURE__ */ __name(({ mode = "auto", children, ...props }) => {
2998
3055
  const value = React4.useMemo(() => ({ mode }), [mode]);
2999
- return /* @__PURE__ */ jsx35(BottomSheetContext.Provider, { value, children: mode === "snap" ? /* @__PURE__ */ jsx35(Drawer3.Root, { snapPoints: SNAP_POINTS, fadeFromIndex: SNAP_POINTS.length - 1, ...props, children }) : (
3056
+ return /* @__PURE__ */ jsx36(BottomSheetContext.Provider, { value, children: mode === "snap" ? /* @__PURE__ */ jsx36(Drawer3.Root, { snapPoints: SNAP_POINTS, fadeFromIndex: SNAP_POINTS.length - 1, ...props, children }) : (
3000
3057
  // auto: handle이 없으므로 handleOnly로 드래그 닫기를 막고, overlay·ESC 닫기는 Content에서 막는다.
3001
3058
  // dismissible은 유지(false면 vaul이 Drawer.Close까지 막는다) → footer 액션 버튼으로만 닫힌다.
3002
- /* @__PURE__ */ jsx35(Drawer3.Root, { handleOnly: true, ...props, children })
3059
+ /* @__PURE__ */ jsx36(Drawer3.Root, { handleOnly: true, ...props, children })
3003
3060
  ) });
3004
3061
  }, "BottomSheetRoot");
3005
- var BottomSheetTrigger = /* @__PURE__ */ __name(({ by }) => /* @__PURE__ */ jsx35(Drawer3.Trigger, { asChild: true, children: by }), "BottomSheetTrigger");
3062
+ var BottomSheetTrigger = /* @__PURE__ */ __name(({ by }) => /* @__PURE__ */ jsx36(Drawer3.Trigger, { asChild: true, children: by }), "BottomSheetTrigger");
3006
3063
  var BottomSheetContent = /* @__PURE__ */ __name(({
3007
3064
  illust,
3008
3065
  title,
@@ -3024,23 +3081,23 @@ var BottomSheetContent = /* @__PURE__ */ __name(({
3024
3081
  onEscapeKeyDown: /* @__PURE__ */ __name((e) => e.preventDefault(), "onEscapeKeyDown"),
3025
3082
  onInteractOutside: /* @__PURE__ */ __name((e) => e.preventDefault(), "onInteractOutside")
3026
3083
  } : {};
3027
- return /* @__PURE__ */ jsxs22(Drawer3.Portal, { container, children: [
3028
- /* @__PURE__ */ jsx35(Drawer3.Overlay, { className: style_module_default22.overlay }),
3029
- /* @__PURE__ */ jsx35(
3084
+ return /* @__PURE__ */ jsxs23(Drawer3.Portal, { container, children: [
3085
+ /* @__PURE__ */ jsx36(Drawer3.Overlay, { className: style_module_default23.overlay }),
3086
+ /* @__PURE__ */ jsx36(
3030
3087
  Drawer3.Content,
3031
3088
  {
3032
3089
  ref,
3033
3090
  "data-mode": mode,
3034
- className: clsx24(style_module_default22.content, className),
3091
+ className: clsx25(style_module_default23.content, className),
3035
3092
  style: styleProp,
3036
3093
  ...autoCloseGuards,
3037
3094
  ...props,
3038
- children: /* @__PURE__ */ jsxs22("div", { className: style_module_default22.inner, children: [
3039
- resolvedShowHandle && /* @__PURE__ */ jsx35(Drawer3.Handle, { className: style_module_default22.handle }),
3040
- illust && /* @__PURE__ */ jsx35("div", { className: style_module_default22.illust, children: illust }),
3041
- /* @__PURE__ */ jsx35(BottomSheetHeader, { title, description }),
3042
- children && /* @__PURE__ */ jsx35("div", { className: style_module_default22.body, children }),
3043
- /* @__PURE__ */ jsx35(BottomSheetFooter, { dismiss, confirm, extra })
3095
+ children: /* @__PURE__ */ jsxs23("div", { className: style_module_default23.inner, children: [
3096
+ resolvedShowHandle && /* @__PURE__ */ jsx36(Drawer3.Handle, { className: style_module_default23.handle }),
3097
+ illust && /* @__PURE__ */ jsx36("div", { className: style_module_default23.illust, children: illust }),
3098
+ /* @__PURE__ */ jsx36(BottomSheetHeader, { title, description }),
3099
+ children && /* @__PURE__ */ jsx36("div", { className: style_module_default23.body, children }),
3100
+ /* @__PURE__ */ jsx36(BottomSheetFooter, { dismiss, confirm, extra })
3044
3101
  ] })
3045
3102
  }
3046
3103
  )
@@ -3054,7 +3111,7 @@ var BottomSheet = Object.assign(BottomSheetRoot, {
3054
3111
  // src/components/Ratio/index.tsx
3055
3112
  import * as React5 from "react";
3056
3113
  import { AspectRatio as AspectRatioPrimitive } from "radix-ui";
3057
- import { jsx as jsx36 } from "react/jsx-runtime";
3114
+ import { jsx as jsx37 } from "react/jsx-runtime";
3058
3115
  var RATIO = {
3059
3116
  "1/1": 1,
3060
3117
  "3/4": 3 / 4,
@@ -3065,11 +3122,12 @@ var RATIO = {
3065
3122
  "21/9": 21 / 9
3066
3123
  };
3067
3124
  var Ratio = React5.forwardRef(
3068
- ({ ratio = 1, children, ...props }, ref) => /* @__PURE__ */ jsx36(AspectRatioPrimitive.Root, { ref, ratio, ...props, children })
3125
+ ({ ratio = 1, children, ...props }, ref) => /* @__PURE__ */ jsx37(AspectRatioPrimitive.Root, { ref, ratio, ...props, children })
3069
3126
  );
3070
3127
  Ratio.displayName = "Ratio";
3071
3128
  export {
3072
3129
  AlertDialog,
3130
+ Avatar,
3073
3131
  Badge2 as Badge,
3074
3132
  BottomSheet,
3075
3133
  Button,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liner-fe/prism",
3
- "version": "3.4.11",
3
+ "version": "3.4.12",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "dependencies": {
@@ -17,10 +17,10 @@
17
17
  "react-dom": "^19.1.0",
18
18
  "jotai": "2.18.0",
19
19
  "vaul": "1.1.2",
20
- "@liner-fe/design-token": "^3.0.4",
21
- "@liner-fe/design-token-primitive": "^0.2.49",
22
- "@liner-fe/icon": "^2.0.22",
23
- "@liner-fe/illust": "^1.0.1"
20
+ "@liner-fe/design-token": "^3.0.5",
21
+ "@liner-fe/icon": "^2.0.23",
22
+ "@liner-fe/illust": "^1.0.1",
23
+ "@liner-fe/design-token-primitive": "^0.2.50"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@chromatic-com/storybook": "^1.5.0",