@wishket/design-system 3.4.2 → 3.5.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/Base/Typography/Typography.d.ts +0 -9
- package/dist/Components/Base/Typography/Typography.js +2 -2
- package/dist/Components/DataDisplays/ImageLabel/ImageLabel.js +1 -1
- package/dist/Components/Feedbacks/DialogBox/DialogBox.js +6 -6
- package/dist/Components/Feedbacks/GlobalLoadingIndicator/GlobalLoadingIndicator.js +1 -1
- package/dist/Components/Feedbacks/Tooltip/Tooltip.js +3 -3
- package/dist/Components/Inputs/AutoCompleteList/AutoCompleteList.d.ts +2 -2
- package/dist/Components/Inputs/AutoCompleteList/AutoCompleteList.js +22 -7
- package/dist/Components/Inputs/AutoCompleteList/AutoCompleteList.types.d.ts +17 -0
- package/dist/Components/Inputs/Autocomplete/Autocomplete.d.ts +3 -1
- package/dist/Components/Inputs/Autocomplete/Autocomplete.js +28 -5
- package/dist/Components/Inputs/Autocomplete/Autocomplete.types.d.ts +18 -0
- package/dist/Components/Inputs/Checkbox/Checkbox.js +4 -4
- package/dist/Components/Inputs/Checkbox/Checkbox.parts.js +3 -3
- package/dist/Components/Inputs/Checkbox/Checkbox.types.d.ts +0 -1
- package/dist/Components/Inputs/CheckboxCard/CheckboxCard.js +4 -4
- package/dist/Components/Inputs/CheckboxCard/CheckboxCard.parts.js +4 -4
- package/dist/Components/Inputs/FileUploader/FileUploader.js +4 -4
- package/dist/Components/Inputs/IconButtonDropdown/IconButtonDropdown.js +4 -4
- package/dist/Components/Inputs/Input/Input.js +1 -1
- package/dist/Components/Inputs/Input/PasswordInput.js +3 -3
- package/dist/Components/Inputs/InputChip/InputChip.d.ts +16 -3
- package/dist/Components/Inputs/InputChip/InputChip.js +13 -4
- package/dist/Components/Inputs/Radio/Radio.js +5 -5
- package/dist/Components/Inputs/RadioCard/RadioCard.js +5 -5
- package/dist/Components/Inputs/RadioCard/RadioCard.parts.js +4 -4
- package/dist/Components/Inputs/RangeSlider/RangeSlider.js +2 -2
- package/dist/Components/Inputs/SearchField/SearchField.js +5 -5
- package/dist/Components/Inputs/TextField/TextField.js +1 -1
- package/dist/Components/Inputs/TextFieldDropdown/TextFieldDropdown.d.ts +24 -3
- package/dist/Components/Inputs/TextFieldDropdown/TextFieldDropdown.js +10 -54
- package/dist/Components/Inputs/TextFieldDropdown/TextFieldDropdown.parts.d.ts +9 -0
- package/dist/Components/Inputs/TextFieldDropdown/TextFieldDropdown.parts.js +1 -1
- package/dist/Components/Inputs/TextFieldTrigger/TextFieldTrigger.d.ts +73 -0
- package/dist/Components/Inputs/TextFieldTrigger/TextFieldTrigger.js +62 -0
- package/dist/Components/Inputs/TextFieldTrigger/index.d.ts +2 -0
- package/dist/Components/Inputs/Textarea/Textarea.js +4 -4
- package/dist/Components/Inputs/index.d.ts +1 -0
- package/dist/Components/Navigations/Drawer/Drawer.js +3 -3
- package/dist/Components/Navigations/Menu/MenuBase.js +3 -3
- package/dist/Components/Utils/BackDrop/BackDrop.js +1 -1
- package/dist/Components/Utils/BackDropLiftContainer/BackDropLiftContainer.js +2 -2
- package/dist/Components/Utils/BottomModalContainer/BottomModalContainer.js +1 -1
- package/dist/Components/Utils/FullModalContainer/FullModalContainer.js +1 -1
- package/dist/Components/Utils/Modal/Modal.js +3 -3
- package/dist/Components/Utils/ModalContainer/ModalContainer.js +2 -2
- package/dist/Components/Wrappers/WithBadge/WithBadge.js +2 -2
- package/dist/Components/Wrappers/WithSnackBar/WithSnackBar.js +3 -3
- package/dist/cjs/Components/Base/Typography/Typography.js +1 -1
- package/dist/cjs/Components/DataDisplays/ImageLabel/ImageLabel.js +3 -3
- package/dist/cjs/Components/Feedbacks/DialogBox/DialogBox.js +6 -6
- package/dist/cjs/Components/Feedbacks/GlobalLoadingIndicator/GlobalLoadingIndicator.js +1 -1
- package/dist/cjs/Components/Feedbacks/Tooltip/Tooltip.js +3 -3
- package/dist/cjs/Components/Inputs/AutoCompleteList/AutoCompleteList.js +22 -7
- package/dist/cjs/Components/Inputs/Autocomplete/Autocomplete.js +25 -4
- package/dist/cjs/Components/Inputs/Checkbox/Checkbox.js +4 -4
- package/dist/cjs/Components/Inputs/Checkbox/Checkbox.parts.js +5 -5
- package/dist/cjs/Components/Inputs/CheckboxCard/CheckboxCard.js +4 -4
- package/dist/cjs/Components/Inputs/CheckboxCard/CheckboxCard.parts.js +4 -4
- package/dist/cjs/Components/Inputs/FileUploader/FileUploader.js +6 -6
- package/dist/cjs/Components/Inputs/IconButtonDropdown/IconButtonDropdown.js +3 -3
- package/dist/cjs/Components/Inputs/Input/Input.js +2 -2
- package/dist/cjs/Components/Inputs/Input/PasswordInput.js +2 -2
- package/dist/cjs/Components/Inputs/InputChip/InputChip.js +36 -2
- package/dist/cjs/Components/Inputs/Radio/Radio.js +6 -6
- package/dist/cjs/Components/Inputs/RadioCard/RadioCard.js +4 -4
- package/dist/cjs/Components/Inputs/RadioCard/RadioCard.parts.js +4 -4
- package/dist/cjs/Components/Inputs/RangeSlider/RangeSlider.js +3 -3
- package/dist/cjs/Components/Inputs/SearchField/SearchField.js +3 -3
- package/dist/cjs/Components/Inputs/TextField/TextField.js +2 -2
- package/dist/cjs/Components/Inputs/TextFieldDropdown/TextFieldDropdown.js +10 -8
- package/dist/cjs/Components/Inputs/TextFieldDropdown/TextFieldDropdown.parts.js +1 -1
- package/dist/cjs/Components/Inputs/TextFieldTrigger/TextFieldTrigger.js +62 -0
- package/dist/cjs/Components/Inputs/Textarea/Textarea.js +5 -5
- package/dist/cjs/Components/Navigations/Drawer/Drawer.js +3 -3
- package/dist/cjs/Components/Navigations/Menu/MenuBase.js +3 -3
- package/dist/cjs/Components/Utils/BackDrop/BackDrop.js +1 -1
- package/dist/cjs/Components/Utils/BackDropLiftContainer/BackDropLiftContainer.js +2 -2
- package/dist/cjs/Components/Utils/BottomModalContainer/BottomModalContainer.js +1 -1
- package/dist/cjs/Components/Utils/FullModalContainer/FullModalContainer.js +1 -1
- package/dist/cjs/Components/Utils/Modal/Modal.js +2 -2
- package/dist/cjs/Components/Utils/ModalContainer/ModalContainer.js +2 -2
- package/dist/cjs/Components/Wrappers/WithBadge/WithBadge.js +1 -1
- package/dist/cjs/Components/Wrappers/WithSnackBar/WithSnackBar.js +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +3 -2
- package/scripts/codemods/add-as-link.ts +9 -5
- package/scripts/codemods/menu-split.ts +25 -11
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{jsxs as t,jsx as e}from"react/jsx-runtime";import{twJoin as r,twMerge as o}from"tailwind-merge";import"../../DataDisplays/Avatar/Avatar.js";import{CountBadge as n}from"../../DataDisplays/CountBadge/CountBadge.js";import{Typography as s}from"../../Base/Typography/Typography.js";import"../../Base/Layouts/Box/Box.js";import"../../Base/Layouts/FullBleed/FullBleed.js";import"react";import{SystemIcon as i}from"../../DataDisplays/SystemIcon/SystemIcon.js";import"../../DataDisplays/SystemIcon/SystemIcon.constants.js";import"../../DataDisplays/Accordion/Accordion.js";import"@wishket/yogokit";import"../../Inputs/AutoCompleteList/AutoCompleteList.parts.js";import"../../Inputs/Input/Input.js";import"../../Inputs/Input/PasswordInput.js";import"../../Inputs/Input/LabelInput.js";import"../../Inputs/Input/InputTypeSelector.js";import"../../Inputs/Button/Button.js";import"../../Inputs/Calendar/Calendar.utils.js";import"../../Inputs/Checkbox/Checkbox.js";import"../../Inputs/ChoiceChip/ChoiceChip.js";import{IconButton as p}from"../../Inputs/IconButton/IconButton.js";import"../../Inputs/Radio/Radio.js";import"../../Inputs/TextField/TextField.js";import"../../Inputs/CommentArea/CommentArea.js";import{IconButtonDropdown as a}from"../../Inputs/IconButtonDropdown/IconButtonDropdown.js";import"../../Inputs/FilterChip/FilterChip.js";function m(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function c(t,e){return e=null!=e?e:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):function(t){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e.push.apply(e,r)}return e}(Object(e)).forEach((function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r))})),t}const u=(t,e,n)=>{const s="sub"===t?"pl-12":"",i={white:r("hover:bg-w-gray-50",n&&"bg-primary-10 text-primary hover:bg-primary-10"),gray:r("hover:bg-w-gray-100",n&&"bg-w-gray-100 hover:bg-w-gray-100")};return o("flex w-full cursor-pointer items-center gap-2 rounded-xl px-4 py-3 text-w-gray-900 text-left",s,i[e])},l=(t,e)=>"white"!==t?"white_gray":e?"primary":"gray",y=({type:o="main",variant:y="white",name:
|
|
2
|
-
return t(C,c(function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{},o=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(r).filter((function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable})))),o.forEach((function(e){m(t,e,r[e])}))}return t}({"data-testid":"design-system-menu",className:u(o,y,
|
|
3
|
-
/*#__PURE__*/e(s,{"data-testid":"design-system-menu-name",variant:"body16",className:"w-full select-none",children:
|
|
1
|
+
import{jsxs as t,jsx as e}from"react/jsx-runtime";import{twJoin as r,twMerge as o}from"tailwind-merge";import"../../DataDisplays/Avatar/Avatar.js";import{CountBadge as n}from"../../DataDisplays/CountBadge/CountBadge.js";import{Typography as s}from"../../Base/Typography/Typography.js";import"../../Base/Layouts/Box/Box.js";import"../../Base/Layouts/FullBleed/FullBleed.js";import"react";import{SystemIcon as i}from"../../DataDisplays/SystemIcon/SystemIcon.js";import"../../DataDisplays/SystemIcon/SystemIcon.constants.js";import"../../DataDisplays/Accordion/Accordion.js";import"@wishket/yogokit";import"../../Inputs/AutoCompleteList/AutoCompleteList.parts.js";import"../../Inputs/Input/Input.js";import"../../Inputs/Input/PasswordInput.js";import"../../Inputs/Input/LabelInput.js";import"../../Inputs/Input/InputTypeSelector.js";import"../../Inputs/Button/Button.js";import"../../Inputs/Calendar/Calendar.utils.js";import"../../Inputs/Checkbox/Checkbox.js";import"../../Inputs/ChoiceChip/ChoiceChip.js";import{IconButton as p}from"../../Inputs/IconButton/IconButton.js";import"../../Inputs/Radio/Radio.js";import"../../Inputs/TextField/TextField.js";import"../../Inputs/TextFieldTrigger/TextFieldTrigger.js";import"../../Inputs/CommentArea/CommentArea.js";import{IconButtonDropdown as a}from"../../Inputs/IconButtonDropdown/IconButtonDropdown.js";import"../../Inputs/FilterChip/FilterChip.js";function m(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function c(t,e){return e=null!=e?e:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):function(t){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e.push.apply(e,r)}return e}(Object(e)).forEach((function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r))})),t}const u=(t,e,n)=>{const s="sub"===t?"pl-12":"",i={white:r("hover:bg-w-gray-50",n&&"bg-primary-10 text-primary hover:bg-primary-10"),gray:r("hover:bg-w-gray-100",n&&"bg-w-gray-100 hover:bg-w-gray-100")};return o("flex w-full cursor-pointer items-center gap-2 rounded-xl px-4 py-3 text-w-gray-900 text-left",s,i[e])},l=(t,e)=>"white"!==t?"white_gray":e?"primary":"gray",y=({type:o="main",variant:y="white",name:g,isSelected:d=!1,badgeCount:j,leadingIcon:I,iconButtonName:b,onOptionClick:f,items:h,selectedItem:w,onItemClick:O,as:C,wrapperProps:x})=>{const B=!!(b&&h&&O&&w),D=!!b&&!!f;/*#__PURE__*/
|
|
2
|
+
return t(C,c(function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{},o=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(r).filter((function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable})))),o.forEach((function(e){m(t,e,r[e])}))}return t}({"data-testid":"design-system-menu",className:u(o,y,d)},x),{children:[I&&/*#__PURE__*/e(i,{testId:"design-system-menu-leading-icon",name:I,className:r("white"===y&&d&&"text-primary")}),
|
|
3
|
+
/*#__PURE__*/e(s,{"data-testid":"design-system-menu-name",variant:"body16",className:"w-full select-none",children:g}),j&&/*#__PURE__*/e(n,{variant:l(y,d),text:j,className:"relative",showZero:!0}),B&&/*#__PURE__*/e(a,{size:"sm",icon:b,items:h,selectedItem:w,onItemClick:O}),D&&/*#__PURE__*/e(p,{size:"sm",className:"shrink-0",onClick:t=>{t.stopPropagation(),f()},children:/*#__PURE__*/e(i,{name:b})})]}))};export{y as MenuBase};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as o}from"react/jsx-runtime";import{twMerge as t}from"tailwind-merge";import{usePreventScroll as e}from"@wishket/yogokit";import"../../Base/Typography/Typography.js";import{Box as r}from"../../Base/Layouts/Box/Box.js";import"../../Base/Layouts/FullBleed/FullBleed.js";const s=({isBlack:s,preventScroll:a,onClick:i})=>(e(a),/*#__PURE__*/o(r,{"data-testid":"design-system--backdrop",onClick:i,className:t("fixed top-0 left-0 z-30 h-dvh w-dvw",s?"bg-black/50":"bg-transparent")}));export{s as BackDrop};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use client";import{jsxs as t,jsx as e}from"react/jsx-runtime";import{useState as i,useEffect as o}from"react";import{twJoin as r,twMerge as
|
|
1
|
+
"use client";import{jsxs as t,jsx as e}from"react/jsx-runtime";import{useState as i,useEffect as o}from"react";import{twJoin as r,twMerge as a}from"tailwind-merge";import"../../Base/Typography/Typography.js";import{Box as s}from"../../Base/Layouts/Box/Box.js";import"../../Base/Layouts/FullBleed/FullBleed.js";import{BackDrop as n}from"../BackDrop/BackDrop.js";const l="duration-300",c=({isOpen:c,onClose:m,children:p,isBackgroundBlack:d=!0,isPreventScroll:u=!0,isBottomSheet:y=!1,isFullSize:B=!1,testId:f})=>{const[k,h]=i(!1),[j,x]=i(!1);return o((()=>{c?(x(!0),requestAnimationFrame((()=>h(!0)))):h(!1)}),[c]),j||c?/*#__PURE__*/t(s,{className:r("fixed inset-0 z-30 flex justify-center transition-opacity",l,y?"items-end":"items-center",k?"opacity-100":"opacity-0"),"data-testid":f||"design-system--backdrop-lift-container",children:[
|
|
2
2
|
/*#__PURE__*/e(n,{onClick:m,isBlack:d,preventScroll:u}),
|
|
3
|
-
/*#__PURE__*/e(
|
|
3
|
+
/*#__PURE__*/e(s,{className:a("z-30 transition-all ease-in",l,(y||B)&&"w-full",k?"translate-y-0 opacity-100":"translate-y-full opacity-0"),onTransitionEnd:()=>{c||x(!1)},children:p})]}):null};export{c as BackDropLiftContainer};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{jsxs as e,jsx as t}from"react/jsx-runtime";import{twJoin as o}from"tailwind-merge";import"
|
|
1
|
+
import{jsxs as e,jsx as t}from"react/jsx-runtime";import{twJoin as o}from"tailwind-merge";import"../../Base/Typography/Typography.js";import{Box as r}from"../../Base/Layouts/Box/Box.js";import"../../Base/Layouts/FullBleed/FullBleed.js";import{useBottomModalContainer as s}from"./useBottomModalContainer.js";const a=({children:a,onClose:l,isFixedHeight:i=!0,className:n})=>{const{containerRef:m,currentTranslate:d}=s({onClose:l});/*#__PURE__*/
|
|
2
2
|
return e(r,{ref:m,style:{transform:`translateY(${d}px)`},className:o("bg-w-white z-30 w-full rounded-t-3xl",i?"h-[60dvh]":"h-fit",n),"data-testid":"design-system--bottom-modal-container",children:[
|
|
3
3
|
/*#__PURE__*/t(r,{className:"flex items-center justify-center pt-2 pb-5","data-testid":"design-system--bottom-modal-container-header",id:"bottom-modal-header",children:/*#__PURE__*/t(r,{className:"bg-w-gray-200 h-1 w-8 rounded-full"})}),a]})};export{a as BottomModalContainer};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e}from"react/jsx-runtime";import{twMerge as
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import{twMerge as o}from"tailwind-merge";import"../../Base/Typography/Typography.js";import{Box as t}from"../../Base/Layouts/Box/Box.js";import"../../Base/Layouts/FullBleed/FullBleed.js";const a=({children:a,className:r})=>/*#__PURE__*/e(t,{"data-testid":"design-system--full-modal-container",className:o("bg-w-white h-dvh w-dvw overflow-auto",r),children:a});export{a as FullModalContainer};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{jsx as o,jsxs as e}from"react/jsx-runtime";import{twMerge as t}from"tailwind-merge";import{BackDropLiftContainer as l}from"../BackDropLiftContainer/BackDropLiftContainer.js";import{BottomModalContainer as r}from"../BottomModalContainer/BottomModalContainer.js";import{FullModalContainer as i}from"../FullModalContainer/FullModalContainer.js";import{ModalContainer as a}from"../ModalContainer/ModalContainer.js";import{Portal as
|
|
1
|
+
import{jsx as o,jsxs as e}from"react/jsx-runtime";import{twMerge as t}from"tailwind-merge";import{BackDropLiftContainer as l}from"../BackDropLiftContainer/BackDropLiftContainer.js";import{BottomModalContainer as r}from"../BottomModalContainer/BottomModalContainer.js";import{FullModalContainer as i}from"../FullModalContainer/FullModalContainer.js";import{ModalContainer as a}from"../ModalContainer/ModalContainer.js";import{Portal as s}from"../Portal/Portal.js";import"../../Base/Typography/Typography.js";import{Box as n}from"../../Base/Layouts/Box/Box.js";import"../../Base/Layouts/FullBleed/FullBleed.js";
|
|
2
2
|
/**
|
|
3
3
|
* 모달 창을 표시하는 컴포넌트입니다.
|
|
4
4
|
*
|
|
@@ -32,5 +32,5 @@ import{jsx as o,jsxs as e}from"react/jsx-runtime";import{twMerge as t}from"tailw
|
|
|
32
32
|
* <Modal isOpen={isOpen} variant="bottom" onClose={handleClose}>
|
|
33
33
|
* <div>바텀 시트 내용</div>
|
|
34
34
|
* </Modal>
|
|
35
|
-
*/const d=({isOpen:d,rootId:m,variant:c="default",size:
|
|
36
|
-
return o(
|
|
35
|
+
*/const d=({isOpen:d,rootId:m,variant:c="default",size:p="md",overflow:u="auto",isBackgroundBlack:f=!0,isFixedHeight:B,isPreventScroll:C=!0,className:h,onClose:g,needCleanup:j=!0,children:x})=>{const y="bottom"===c,F="full"===c;/*#__PURE__*/
|
|
36
|
+
return o(s,{rootId:m,needCleanup:j&&!m,children:/*#__PURE__*/e(l,{isOpen:d,onClose:g,testId:"design-system--modal",isBackgroundBlack:f,isPreventScroll:C,isBottomSheet:y,isFullSize:"full"===p,children:["default"===c&&/*#__PURE__*/o(n,{"data-testid":"design-system--modal-container--box",className:t("full"===p&&"w-full px-5",h),children:/*#__PURE__*/o(a,{size:p,overflow:u,children:x})}),F&&/*#__PURE__*/o(i,{className:h,children:x}),y&&g&&/*#__PURE__*/o(r,{onClose:g,isFixedHeight:B,className:h,children:x})]})})};export{d as Modal};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e}from"react/jsx-runtime";import{twJoin as o}from"tailwind-merge";import"
|
|
2
|
-
"flex items-center justify-center",{xs:"w-[320px]",sm:"w-[400px]",md:"w-[500px]",lg:"w-[600px]",xl:"w-[1000px]",full:"w-full"}[
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import{twJoin as o}from"tailwind-merge";import"../../Base/Typography/Typography.js";import{Box as l}from"../../Base/Layouts/Box/Box.js";import"../../Base/Layouts/FullBleed/FullBleed.js";const r=({size:r="md",overflow:s="auto",children:t})=>/*#__PURE__*/e(l,{"data-testid":"design-system--modal-container",className:o("bg-w-white shadow-modal h-fit max-w-[calc(100vw-40px)] rounded-3xl",// 아직 정해지지 않은 내부 레이아웃
|
|
2
|
+
"flex items-center justify-center",{xs:"w-[320px]",sm:"w-[400px]",md:"w-[500px]",lg:"w-[600px]",xl:"w-[1000px]",full:"w-full"}[r],{auto:"overflow-auto",visible:"overflow-visible",hidden:"overflow-hidden",scroll:"overflow-scroll"}[s]),children:t});export{r as ModalContainer};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{jsxs as a,jsx as t}from"react/jsx-runtime";import{twMerge as s}from"tailwind-merge";import"
|
|
1
|
+
import{jsxs as a,jsx as t}from"react/jsx-runtime";import{twMerge as s}from"tailwind-merge";import"../../Base/Typography/Typography.js";import{Box as r}from"../../Base/Layouts/Box/Box.js";import"../../Base/Layouts/FullBleed/FullBleed.js";import"../../DataDisplays/Avatar/Avatar.js";import{CountBadge as o}from"../../DataDisplays/CountBadge/CountBadge.js";import"react";import"../../DataDisplays/SystemIcon/SystemIcon.constants.js";import{NewBadge as e}from"../../DataDisplays/NewBadge/NewBadge.js";import"../../DataDisplays/Accordion/Accordion.js";
|
|
2
2
|
/**
|
|
3
3
|
* 자식 요소의 우측 상단에 뱃지를 표시하는 래퍼 컴포넌트입니다.
|
|
4
4
|
*
|
|
@@ -19,4 +19,4 @@ import{jsxs as a,jsx as t}from"react/jsx-runtime";import{twMerge as s}from"tailw
|
|
|
19
19
|
* <WithBadge variant="new">
|
|
20
20
|
* <MenuItem>새로운 기능</MenuItem>
|
|
21
21
|
* </WithBadge>
|
|
22
|
-
*/const i=({text:i,children:m,className:
|
|
22
|
+
*/const i=({text:i,children:m,className:p,variant:l="primary",showZero:n=!1})=>/*#__PURE__*/a(r,{className:s("relative w-fit",p),"data-testid":"with-badge",children:[m,"new"===l?/*#__PURE__*/t(e,{className:"absolute top-0 right-0 translate-x-1/2 -translate-y-1/2 transform"}):/*#__PURE__*/t(o,{text:i,variant:l,showZero:n,className:"absolute top-px right-px translate-x-1/2 -translate-y-1/2 transform"})]});export{i as WithBadge};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as a,jsx as t}from"react/jsx-runtime";import{twJoin as s}from"tailwind-merge";import"../../Base/Typography/Typography.js";import{Box as o}from"../../Base/Layouts/Box/Box.js";import"../../Base/Layouts/FullBleed/FullBleed.js";import"../../DataDisplays/Avatar/Avatar.js";import"react";import"../../DataDisplays/SystemIcon/SystemIcon.constants.js";import"../../DataDisplays/Accordion/Accordion.js";import{SnackBar as e}from"../../Feedbacks/SnackBar/SnackBar.js";import"../../Inputs/Button/Button.js";import"@wishket/yogokit";import"react-dom";import"../../Feedbacks/Tooltip/Tooltip.js";import"../../Feedbacks/GlobalLoadingIndicator/GlobalLoadingIndicator.js";
|
|
2
2
|
/**
|
|
3
3
|
* 스낵바를 포함하는 래퍼 컴포넌트입니다.
|
|
4
4
|
* 자식 컴포넌트 상단에 알림 메시지를 표시할 수 있습니다.
|
|
@@ -21,5 +21,5 @@ import{jsxs as t,jsx as a}from"react/jsx-runtime";import{twJoin as s}from"tailwi
|
|
|
21
21
|
* <YourComponent />
|
|
22
22
|
* </WithSnackBar>
|
|
23
23
|
* ```
|
|
24
|
-
*/const
|
|
25
|
-
/*#__PURE__*/
|
|
24
|
+
*/const r=({children:r,isOpen:i,message:l,type:n,onClose:m})=>/*#__PURE__*/a(o,{"data-testid":"design-system-with-message-bar",children:[
|
|
25
|
+
/*#__PURE__*/t(o,{className:"w-full overflow-y-hidden",children:/*#__PURE__*/t(o,{className:s("w-full transform overflow-y-hidden transition-all duration-300 ease-linear",i?"max-h-full translate-y-0":"max-h-0 -translate-y-full"),"data-testid":"design-system-with-message-bar--container",children:/*#__PURE__*/t(o,{className:"pt-8",children:/*#__PURE__*/t(e,{message:l,type:n,onClose:m})})})}),r]});export{r as WithSnackBar};
|
|
@@ -8,4 +8,4 @@ return e.jsx(f,o(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arg
|
|
|
8
8
|
* @param {string} [props.className] - 추가적인 CSS 클래스
|
|
9
9
|
* @param {keyof JSX.IntrinsicElements} [props.as='span'] - 렌더링할 HTML 요소
|
|
10
10
|
* @param {Ref} [props.ref] - 렌더된 요소로 forward되는 ref. as에 따라 추론
|
|
11
|
-
*/
|
|
11
|
+
*/s.displayName="Typography";const l=s;exports.Typography=l;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";var e=require("react/jsx-runtime"),r=require("tailwind-merge");require("
|
|
2
|
-
return e.jsx(
|
|
3
|
-
return e.jsx(
|
|
1
|
+
"use strict";var e=require("react/jsx-runtime"),r=require("tailwind-merge");require("../../Base/Typography/Typography.js");var s=require("../../Base/Layouts/Box/Box.js");require("../../Base/Layouts/FullBleed/FullBleed.js");var a=require("./parts/NewCircle.js"),t=require("./parts/New.js"),i=require("./parts/Beta.js"),u=require("./parts/Ai.js");require("react");exports.ImageLabel=({type:l})=>{const c=()=>{switch(l){case"new_circle":/*#__PURE__*/
|
|
2
|
+
return e.jsx(a.NewCircle,{});case"new":/*#__PURE__*/
|
|
3
|
+
return e.jsx(t.New,{});case"beta":/*#__PURE__*/
|
|
4
4
|
return e.jsx(i.Beta,{});case"ai":/*#__PURE__*/
|
|
5
5
|
return e.jsx(u.Ai,{});default:return null}};/*#__PURE__*/
|
|
6
6
|
return e.jsx(s.Box,{"data-testid":"design-system-imageLabel",className:r.twJoin("text-primary h-fit w-fit","new_circle"!==l&&"pb-1.5"),children:/*#__PURE__*/e.jsx(c,{})})};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use client";"use strict";var e=require("react/jsx-runtime"),r=require("tailwind-merge"),a=require("../../Base/Typography/Typography.js"),
|
|
2
|
-
return e.jsxs(
|
|
3
|
-
/*#__PURE__*/e.jsxs(
|
|
4
|
-
/*#__PURE__*/e.jsx(a.Typography,{variant:"subTitle18",className:"text-w-gray-900 font-medium",children:
|
|
5
|
-
/*#__PURE__*/e.jsx(a.Typography,{variant:"body16",className:"text-w-gray-800 whitespace-break-spaces",children:
|
|
6
|
-
/*#__PURE__*/e.jsxs(
|
|
1
|
+
"use client";"use strict";var e=require("react/jsx-runtime"),r=require("tailwind-merge"),a=require("../../Base/Typography/Typography.js"),s=require("../../Base/Layouts/Box/Box.js");require("../../Base/Layouts/FullBleed/FullBleed.js");var o=require("../../Inputs/Button/Button.js");exports.DialogBox=({title:t,description:l,variant:i="primary",onClose:n,onConfirm:c,confirm:u,close:d="닫기",testId:x})=>{const g="caution"===i;/*#__PURE__*/
|
|
2
|
+
return e.jsxs(s.Box,{className:"bg-w-white shadow-modal tablet:w-[400px] flex h-fit max-w-[calc(100vw-40px)] flex-col items-center gap-8 rounded-3xl p-8 font-normal not-italic","data-testid":x||"design-system--dialog-box",children:[
|
|
3
|
+
/*#__PURE__*/e.jsxs(s.Box,{className:"flex w-full flex-col gap-6",children:[
|
|
4
|
+
/*#__PURE__*/e.jsx(a.Typography,{variant:"subTitle18",className:"text-w-gray-900 font-medium",children:t}),
|
|
5
|
+
/*#__PURE__*/e.jsx(a.Typography,{variant:"body16",className:"text-w-gray-800 whitespace-break-spaces",children:l})]}),
|
|
6
|
+
/*#__PURE__*/e.jsxs(s.Box,{className:"flex w-full items-center justify-end gap-4",children:[d&&/*#__PURE__*/e.jsx(o.Button,{onClick:n,variant:"solid",className:"border-w-bluegray-200 bg-w-bluegray-200 hover:border-w-bluegray-300 hover:bg-w-bluegray-300",children:d}),u&&/*#__PURE__*/e.jsx(o.Button,{onClick:c,variant:"solid",className:r.twJoin(g&&"border-w-orange-500 bg-w-orange-500 hover:border-w-orange-600 hover:bg-w-orange-600"),children:u})]})]})};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use strict";var e=require("react/jsx-runtime"),
|
|
1
|
+
"use client";"use strict";var e=require("react/jsx-runtime"),r=require("react");require("tailwind-merge"),require("@wishket/yogokit"),require("../../Base/Typography/Typography.js"),require("../../Base/Layouts/Box/Box.js"),require("../../Base/Layouts/FullBleed/FullBleed.js");var t=require("../../Utils/Portal/Portal.js"),s=require("../LoadingIndicator/LoadingIndicator.js");function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{},s=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),s.forEach((function(r){n(e,r,t[r])}))}return e}class i{static getInstance(){return i.instance||(i.instance=new i),i.instance}register(e){this.loaderIds.includes(e)||this.loaderIds.push(e)}unregister(e){this.loaderIds=this.loaderIds.filter((r=>r!==e))}getIsLastIndex(e){return this.loaderIds[this.loaderIds.length-1]===e}constructor(){n(this,"loaderIds",[])}}n(i,"instance",void 0);exports.GlobalLoadingIndicator=n=>{const o=i.getInstance(),l=r.useId(),[d,u]=r.useState([]);r.useEffect((()=>(o.register(l),u(o.loaderIds),()=>{o.unregister(l),u(o.loaderIds)})),[l]);return d.indexOf(l)===d.length-1?/*#__PURE__*/e.jsx(t.Portal,{children:/*#__PURE__*/e.jsx("div",{"data-testid":"design-system-globalLoadingIndicator",className:"fixed top-1/2 left-1/2 z-30 aspect-square -translate-x-1/2 -translate-y-1/2",children:/*#__PURE__*/e.jsx(s.LoadingIndicator,a({},n))})}):null},exports.LoadingManager=i;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use client";"use strict";var e=require("react/jsx-runtime"),i=require("tailwind-merge");require("
|
|
1
|
+
"use client";"use strict";var e=require("react/jsx-runtime"),i=require("tailwind-merge");require("../../Base/Typography/Typography.js");var t=require("../../Base/Layouts/Box/Box.js");require("../../Base/Layouts/FullBleed/FullBleed.js");var r=require("./PlainTooltip/PlainTooltip.js"),s=require("./RichTooltip/RichTooltip.js");
|
|
2
2
|
/**
|
|
3
3
|
* 툴팁의 루트 컴포넌트입니다.
|
|
4
4
|
* CSS 기반 hover와 focus로 동작합니다.
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* <Tooltip.Plain variant="up" text="간단한 툴팁" />
|
|
15
15
|
* </Tooltip>
|
|
16
16
|
*/
|
|
17
|
-
const
|
|
17
|
+
const l=({children:r,className:s})=>/*#__PURE__*/e.jsx(t.Box,{className:i.twMerge("group relative inline-block h-fit w-fit",s),"data-testid":"design-system-tooltip",children:r});
|
|
18
18
|
/**
|
|
19
19
|
* 툴팁 트리거 컴포넌트입니다.
|
|
20
20
|
* 데스크톱에서는 CSS hover로, 모바일에서는 터치(focus)로 툴팁을 표시합니다.
|
|
@@ -23,4 +23,4 @@ const s=({children:r,className:l})=>/*#__PURE__*/e.jsx(t.Box,{className:i.twMerg
|
|
|
23
23
|
* <Tooltip.Trigger>
|
|
24
24
|
* <SystemIcon name="medium_information" />
|
|
25
25
|
* </Tooltip.Trigger>
|
|
26
|
-
*/
|
|
26
|
+
*/l.Trigger=({children:i})=>/*#__PURE__*/e.jsx(t.Box,{"data-testid":"design-system-tooltip--trigger",className:"h-fit w-fit focus:outline-hidden",tabIndex:0,children:i}),l.Plain=r.PlainTooltip,l.Rich=s.RichTooltip,exports.Tooltip=l;
|
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
"use client";"use strict";var e=require("react/jsx-runtime"),t=require("tailwind-merge"),r=require("react");require("../../DataDisplays/Avatar/Avatar.js"),require("../../Base/Layouts/Box/Box.js"),require("../../Base/Layouts/FullBleed/FullBleed.js");var
|
|
1
|
+
"use client";"use strict";var e=require("react/jsx-runtime"),t=require("tailwind-merge"),r=require("react");require("../../DataDisplays/Avatar/Avatar.js"),require("../../Base/Typography/Typography.js"),require("../../Base/Layouts/Box/Box.js"),require("../../Base/Layouts/FullBleed/FullBleed.js");var s=require("../../DataDisplays/SystemIcon/SystemIcon.js");require("../../DataDisplays/SystemIcon/SystemIcon.constants.js");var n=require("../../DataDisplays/Divider/Divider.js");require("../../DataDisplays/Accordion/Accordion.js");var i=require("./AutoCompleteList.parts.js");function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},s=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),s.forEach((function(t){o(e,t,r[t])}))}return e}function a(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function c(e,t){if(null==e)return{};var r,s,n=function(e,t){if(null==e)return{};var r,s,n={},i=Object.keys(e);for(s=0;s<i.length;s++)r=i[s],t.indexOf(r)>=0||(n[r]=e[r]);return n}
|
|
2
2
|
/**
|
|
3
3
|
* 자동완성 목록의 Root 컴포넌트입니다.
|
|
4
4
|
* 자동완성 항목들을 감싸는 컨테이너 역할을 합니다.
|
|
5
5
|
*
|
|
6
|
+
* WAI-ARIA APG의 Combobox with List Autocomplete 패턴에 맞춰 실제 목록인
|
|
7
|
+
* `<ul>`에 `role="listbox"`와 `aria-multiselectable="true"`를 항상 부여합니다
|
|
8
|
+
* (`Autocomplete`이 다중 선택 위젯이라 옵션마다 `aria-selected`를 따로 갖습니다).
|
|
9
|
+
* `listboxId`를 넘기면 그 값이 이 `<ul>`의 `id`가 되므로, `Autocomplete`의
|
|
10
|
+
* 입력 필드가 `aria-controls`로 참조할 수 있습니다. `{...rest}`(`className` 제외)와
|
|
11
|
+
* `className`은 그대로 바깥 `<div>`(그림자, IndexBar를 포함하는 레이아웃 전용
|
|
12
|
+
* 래퍼)에 적용됩니다.
|
|
13
|
+
*
|
|
6
14
|
* @param {Object} props
|
|
7
15
|
* @param {ReactNode} props.children - 자동완성 목록에 표시될 자식 컴포넌트들 (AutoCompleteList.Item, AutoCompleteList.Divider)
|
|
16
|
+
* @param {string} [props.listboxId] - 실제 목록(`<ul role="listbox">`)에 부여할 id
|
|
8
17
|
*
|
|
9
18
|
* @example
|
|
10
19
|
* ```tsx
|
|
@@ -21,11 +30,11 @@
|
|
|
21
30
|
* />
|
|
22
31
|
* </AutoCompleteList.Root>
|
|
23
32
|
* ```
|
|
24
|
-
*/(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(
|
|
25
|
-
/*#__PURE__*/e.jsx("ul",{ref:
|
|
26
|
-
return e.jsxs("li",l(
|
|
27
|
-
/*#__PURE__*/e.jsx(i.TextSection,{text:
|
|
28
|
-
/*#__PURE__*/e.jsx(i.CountSection,{count:o})]}))},Divider:()=>/*#__PURE__*/e.jsx(
|
|
33
|
+
*/(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(s=0;s<i.length;s++)r=i[s],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}const u={Root:s=>{var{children:n,className:o,hasIndexBar:u=!1,onIndexClick:p,listboxId:d}=s,y=c(s,["children","className","hasIndexBar","onIndexClick","listboxId"]);const m=r.useRef(null),[x,b]=r.useState(!1);return r.useLayoutEffect((()=>{const e=m.current;if(!e)return;const{scrollHeight:t,clientHeight:r}=e;b(t>r)}),[n]),/*#__PURE__*/e.jsxs("div",a(l({className:t.twMerge("shadow-graymedium flex max-h-[436px] w-full rounded-xl",o)},y),{children:[u&&/*#__PURE__*/e.jsx(i.IndexBar,{onIndexClick:p}),
|
|
34
|
+
/*#__PURE__*/e.jsx("ul",{ref:m,id:d,role:"listbox","aria-multiselectable":"true",className:t.twMerge("bg-w-white flex w-full flex-col py-2 pr-2","scrollbar-list overflow-y-auto",u?"rounded-r-xl":"rounded-xl",x&&"pr-0"),"data-testid":"design-system-autoCompleteList",children:n})]}))},Item:r=>{var{text:n,count:o,leadingIcon:u,iconUrl:p,isInputItem:d=!1,isFocused:y=!1,isSelected:m=!1,inputValue:x,className:b}=r,f=c(r,["text","count","leadingIcon","iconUrl","isInputItem","isFocused","isSelected","inputValue","className"]);/*#__PURE__*/
|
|
35
|
+
return e.jsxs("li",a(l({className:t.twMerge("bg-w-white hover:bg-primary-10 visible ml-2 flex cursor-pointer items-center gap-2 rounded-xl px-4 py-3 select-none",y&&"bg-primary-10",b)},f),{role:"option","aria-selected":m,"data-testid":"design-system-list-item",children:[u&&/*#__PURE__*/e.jsx(s.SystemIcon,{name:u,className:"text-w-gray-600",testId:"design-system-list-item-leading-icon"}),p&&/*#__PURE__*/e.jsx(i.Icon,{iconUrl:p}),
|
|
36
|
+
/*#__PURE__*/e.jsx(i.TextSection,{text:n,isInputItem:d,inputValue:x}),
|
|
37
|
+
/*#__PURE__*/e.jsx(i.CountSection,{count:o})]}))},Divider:()=>/*#__PURE__*/e.jsx(n.Divider,{className:"my-2"})};
|
|
29
38
|
/**
|
|
30
39
|
* 자동완성 목록의 개별 항목 컴포넌트입니다.
|
|
31
40
|
* @param {Object} props
|
|
@@ -34,7 +43,13 @@ return e.jsxs("li",l(a({className:t.twMerge("bg-w-white hover:bg-primary-10 visi
|
|
|
34
43
|
* @param {SystemIconName} [props.leadingIcon] - 항목 앞에 표시될 시스템 아이콘
|
|
35
44
|
* @param {string} [props.iconUrl] - 항목 앞에 표시될 커스텀 아이콘 URL
|
|
36
45
|
* @param {boolean} [props.isInputItem=false] - 입력 항목 여부
|
|
37
|
-
* @param {boolean} [props.isFocused=false] -
|
|
46
|
+
* @param {boolean} [props.isFocused=false] - 키보드 커서(활성 옵션) 여부. 시각 하이라이트(`bg-primary-10`)에만 반영되며 `aria-selected`와는 무관합니다.
|
|
47
|
+
* @param {boolean} [props.isSelected=false] - 실제로 선택된 항목인지 여부. `aria-selected`에 그대로 반영됩니다.
|
|
38
48
|
* @param {string} [props.inputValue] - 입력값 (isInputItem이 true인 경우 사용)
|
|
39
49
|
* @param {string} [props.className] - 추가적인 CSS 클래스
|
|
50
|
+
*
|
|
51
|
+
* `role="option"`이 항상 부여되며, `aria-selected`는 `isSelected`를 그대로 반영합니다.
|
|
52
|
+
* (`isFocused`는 시각 하이라이트 전용이며, `Autocomplete`처럼 다중 선택이 가능한
|
|
53
|
+
* 위젯에서는 커서 위치와 실제 선택 여부가 다르므로 분리했습니다.)
|
|
54
|
+
* `aria-activedescendant`가 가리킬 수 있도록 `id`를 넘겨야 합니다.
|
|
40
55
|
*/exports.AutoCompleteList=u;
|
|
@@ -1,4 +1,25 @@
|
|
|
1
|
-
"use client";"use strict";var e=require("react/jsx-runtime"),t=require("react"),r=require("@wishket/yogokit"),
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use client";"use strict";var e=require("react/jsx-runtime"),t=require("react"),r=require("@wishket/yogokit"),l=require("../AutoCompleteList/AutoCompleteList.js"),s=require("../TextFieldContainer/TextFieldContainer.js");require("../../Base/Typography/Typography.js");var n=require("../../Base/Layouts/Box/Box.js");require("tailwind-merge"),require("../../Base/Layouts/FullBleed/FullBleed.js");var i=require("../Input/Input.js");require("../Input/PasswordInput.js"),require("../Input/LabelInput.js"),require("../Input/InputTypeSelector.js");var a=require("../InputChip/InputChip.js"),o=require("../SupportTextContainer/SupportTextContainer.js"),u=require("./Autocomplete.parts.js"),c=require("./Autocomplete.utils.js");exports.Autocomplete=({skillItems:d,legacySkillItems:p,selectedItems:m,onChipDelete:v,value:h,onValueChange:g,placeholder:f,onSkillItemClick:x,onLegacySkillItemClick:I,onInputItemClick:k,supportingText:y,hasIndexBar:C=!1,isError:j,errorMessage:b,leadingIcon:B,label:S,ariaLabel:w})=>{const[q,D]=t.useState(!1),E=t.useRef(null),A=t.useRef(null),F=t.useRef(null),[L,T]=t.useState(54),[M,R]=t.useState([]),[$,V]=t.useState(-1),N=t.useId(),U=e=>`${N}-option-${e}`,z=t.useCallback((e=>`${N}-chip-${e}`),[N]),[O,P]=t.useState(0),W=t.useRef(null),_=`${N}-label`,H=c.getSortedSkillItems(d),K=c.getSortedSkillItems(p),G=()=>{D(!1)};t.useEffect((()=>{if(!A.current)return;const e=new ResizeObserver((e=>{for(const t of e)t.target===A.current&&T(t.contentRect.height+4)}));return e.observe(A.current),()=>{e.disconnect()}}),[]),r.useClickOutside(E,G),
|
|
2
|
+
// 칩이 줄어들면 activeChipIndex가 범위를 벗어날 수 있다.
|
|
3
|
+
t.useEffect((()=>{P((e=>Math.min(e,Math.max(m.length-1,0))))}),[m.length]),
|
|
4
|
+
// 키보드 삭제 후 포커스 이동: 같은 자리의 칩 → 없으면 마지막 칩 →
|
|
5
|
+
// 칩이 하나도 남지 않으면 입력 필드. 포커스가 body로 유실되지 않게 한다.
|
|
6
|
+
t.useEffect((()=>{var e;const t=W.current;if(null===t)return;var r;if(W.current=null,0===m.length)return void(null===(r=F.current)||void 0===r||r.focus());const l=Math.min(t,m.length-1);P(l),null===(e=document.getElementById(z(l)))||void 0===e||e.focus()}),[m,z]);const J=[...H.map((e=>({type:"static_skill",item:e}))),...K.map((e=>({type:"legacy",item:e}))),...h?[{type:"input",item:h}]:[]],Q=e=>{var t;P(e),null===(t=document.getElementById(z(e)))||void 0===t||t.focus()},X=e=>{const t=m.length-1;if(!(t<0))switch(e.key){case"ArrowRight":e.preventDefault(),Q(Math.min(O+1,t));break;case"ArrowLeft":e.preventDefault(),Q(Math.max(O-1,0));break;case"Home":e.preventDefault(),Q(0);break;case"End":e.preventDefault(),Q(t);break;case"Delete":case"Backspace":case"Enter":case" ":e.preventDefault(),(e=>{
|
|
7
|
+
// activeChipIndex는 clamp effect와 삭제 버튼의 onFocus로 범위 안에 유지되지만,
|
|
8
|
+
// 소비자 콜백에 undefined를 넘기는 일은 어떤 경우에도 없어야 하므로 확인한다.
|
|
9
|
+
const t=m[e];void 0!==t&&(
|
|
10
|
+
// 다음 렌더에서 포커스를 옮기기 위해 위치를 기록해 둔다.
|
|
11
|
+
W.current=e,v(t))})(O)}},Y=e=>{x(e),R([...M,e])},Z=e=>{I(e),R([...M,e])},ee=()=>{""!==h.trim()&&(k(h.trim()),g(""),R([...M,h]))};/*#__PURE__*/
|
|
12
|
+
return e.jsxs("div",{"data-testid":"design-system-autocomplete-root",className:"relative flex w-full flex-col gap-3",ref:E,onKeyDown:e=>{if(!e.nativeEvent.isComposing){
|
|
13
|
+
// Escape는 위젯 안 어디에 포커스가 있든 목록을 닫아야 한다(APG combobox).
|
|
14
|
+
// 칩 삭제 버튼에 포커스를 둔 키보드 사용자가 목록을 닫을 방법이 없어지면
|
|
15
|
+
// 안 되므로, 아래 "입력 필드 한정" 가드보다 먼저 처리한다.
|
|
16
|
+
if("Escape"===e.key){if(!q)return;return e.preventDefault(),void G()}
|
|
17
|
+
// 그 밖의 콤보박스 키 조작은 입력 필드에 포커스가 있을 때만 처리한다.
|
|
18
|
+
// 이 핸들러는 루트 <div>에 붙어 있어, 컨테이너 안의 다른 포커스 가능한
|
|
19
|
+
// 요소(칩의 삭제 버튼)에서 올라온 키 이벤트까지 그대로 받는다. 그대로 두면
|
|
20
|
+
// Enter의 preventDefault가 버튼의 기본 활성화를 막아 삭제가 아예 동작하지
|
|
21
|
+
// 않고, Backspace는 포커스된 칩이 아니라 항상 마지막 칩을 지운다.
|
|
22
|
+
if(e.target===F.current){if(q)switch(e.key){case"ArrowDown":e.preventDefault(),V((e=>{var t;const r=e<J.length-1?e+1:e;return null===(t=document.getElementById(U(r)))||void 0===t||t.scrollIntoView({block:"nearest"}),r}));break;case"ArrowUp":e.preventDefault(),V((e=>{var t;const r=e>0?e-1:e;return null===(t=document.getElementById(U(r)))||void 0===t||t.scrollIntoView({block:"nearest"}),r}));break;case"Enter":if(e.preventDefault(),$>=0&&$<J.length){const{type:e,item:t}=J[$];"static_skill"===e?Y(t):"legacy"===e?Z(t):"input"===e&&ee()}else h.trim()&&ee();break;case"Backspace":h||(e.preventDefault(),v(m[m.length-1]))}}else X(e)}},children:[
|
|
23
|
+
/*#__PURE__*/e.jsxs("div",{ref:A,onClick:()=>{var e;null===(e=F.current)||void 0===e||e.focus()},className:"cursor-text",children:[S&&/*#__PURE__*/e.jsx("span",{id:_,className:"sr-only",children:S}),
|
|
24
|
+
/*#__PURE__*/e.jsxs(s.TextFieldContainer,{isError:j,isFocused:q,testId:"design-system--selectBox",isAutoComplete:!0,children:[m.map(((t,r)=>/*#__PURE__*/e.jsx(a.InputChip,{onDelete:()=>v(t),deleteButtonProps:{id:z(r),tabIndex:r===O?0:-1,onFocus:()=>P(r)},children:t},t))),
|
|
25
|
+
/*#__PURE__*/e.jsx(i.Input,{ref:F,value:h,onChange:e=>{g(e.target.value)},placeholder:f,onFocus:()=>{q||D(!q)},className:"w-fit flex-auto",role:"combobox","aria-label":w,"aria-labelledby":!w&&S?_:void 0,"aria-expanded":q,"aria-controls":N,"aria-autocomplete":"list","aria-activedescendant":$>=0?U($):void 0})]})]}),(y||b)&&/*#__PURE__*/e.jsx(o.SupportTextContainer,{supportMessage:y,errorMessage:b}),q&&/*#__PURE__*/e.jsx(n.Box,{"data-testid":"design-system-autocomplete-list",className:"absolute z-40 w-full",style:{top:L},onMouseLeave:()=>{M.length>0&&(G(),R([]))},children:/*#__PURE__*/e.jsx(l.AutoCompleteList.Root,{listboxId:N,hasIndexBar:C,onIndexClick:e=>{var t;const r=H.findIndex((t=>t.value.toUpperCase().startsWith(e)));-1!==r&&(null===(t=document.getElementById(U(r)))||void 0===t||t.scrollIntoView())},children:/*#__PURE__*/e.jsxs(u.WithDivider,{children:[d.length>0&&/*#__PURE__*/e.jsx(e.Fragment,{children:H.map(((t,r)=>/*#__PURE__*/e.jsx(l.AutoCompleteList.Item,{id:U(r),leadingIcon:B,iconUrl:t.iconUrl,text:t.value,onClick:()=>Y(t),isFocused:$===r,isSelected:m.includes(t.value),inputValue:h},t.value)))}),p.length>0&&/*#__PURE__*/e.jsx(e.Fragment,{children:K.map(((t,r)=>/*#__PURE__*/e.jsx(l.AutoCompleteList.Item,{id:U(H.length+r),text:t.value,count:t.count,onClick:()=>Z(t),isFocused:$===H.length+r,isSelected:m.includes(t.value),inputValue:h},`${t.value}-${r}`)))}),""!==h.trim()&&/*#__PURE__*/e.jsx(l.AutoCompleteList.Item,{id:U(J.length-1),text:h,isInputItem:!0,onClick:()=>ee(),isFocused:$===J.length-1,isSelected:m.includes(h.trim())})]})})})]})};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use client";"use strict";var e=require("react/jsx-runtime"),r=require("react");require("
|
|
1
|
+
"use client";"use strict";var e=require("react/jsx-runtime"),r=require("react");require("../../Base/Typography/Typography.js");var t=require("../../Base/Layouts/Box/Box.js");require("tailwind-merge"),require("../../Base/Layouts/FullBleed/FullBleed.js");var n=require("./Checkbox.parts.js");function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(r){o(e,r,t[r])}))}return e}function s(e,r){if(null==e)return{};var t,n,o=function(e,r){if(null==e)return{};var t,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)t=a[n],r.indexOf(t)>=0||(o[t]=e[t]);return o}
|
|
2
2
|
/**
|
|
3
3
|
* @component
|
|
4
4
|
* @param {Object} props - 체크박스 컴포넌트 프로퍼티
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* console.log('체크박스 상태:', e.target.checked);
|
|
28
28
|
* };
|
|
29
29
|
* <Checkbox onChange={handleChange} />
|
|
30
|
-
*/(e,r);if(Object.getOwnPropertySymbols){var
|
|
30
|
+
*/(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)t=a[n],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}const c=/*#__PURE__*/r.forwardRef(((o,c)=>{var{checked:i=!1,onChange:l,disabled:u=!1,isError:b=!1,type:y="box",className:p}=o,f=s(o,["checked","onChange","disabled","isError","type","className"]);const d=r.useCallback((e=>{u||null==l||l(e)}),[l,u]);/*#__PURE__*/
|
|
31
31
|
return e.jsxs(t.Box,{"data-testid":"design-system-checkbox",className:"group relative flex size-fit",children:[
|
|
32
|
-
/*#__PURE__*/e.jsx("input",
|
|
33
|
-
/*#__PURE__*/e.jsx(n.CheckboxButton,{checked:
|
|
32
|
+
/*#__PURE__*/e.jsx("input",a({ref:c,className:"absolute inset-0 z-10 cursor-pointer opacity-0",type:"checkbox",checked:i,onChange:d,disabled:u},f)),
|
|
33
|
+
/*#__PURE__*/e.jsx(n.CheckboxButton,{checked:i,disabled:u,isError:b,type:y,className:p})]})}));c.displayName="Checkbox",exports.Checkbox=c;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use strict";var r=require("react/jsx-runtime"),e=require("tailwind-merge");const t="text-w-white group-hover:text-w-white",
|
|
2
|
-
return r.jsx("svg",{width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg",
|
|
1
|
+
"use strict";var r=require("react/jsx-runtime"),e=require("tailwind-merge");const t="text-w-white group-hover:text-w-white",s="text-w-gray-200 group-hover:text-w-gray-200",o="stroke-dasharray-[16] stroke-dashoffset-[16] animate-checkbox-check",a=({checked:a,isError:i,disabled:d})=>/*#__PURE__*/r.jsx("svg",{width:"10",height:"8",viewBox:"0 0 10 8",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:e.twMerge("absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2",a&&t,i&&d&&s,!a&&"text-transparent",d&&(!i&&a?t:"text-transparent")),style:{strokeDasharray:a?"16":"0",strokeDashoffset:a?"16":"0"},children:/*#__PURE__*/r.jsx("path",{d:"M1 3.8L4 7L9 1",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",className:a?o:""})}),i=({checked:a,isError:i,disabled:d})=>/*#__PURE__*/r.jsx("svg",{width:"10",height:"8",viewBox:"0 0 10 8",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:e.twMerge("absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2",a&&t,i&&d&&s,!a&&"text-w-gray-200 group-hover:text-w-primary",i&&!a&&"text-w-red-500 group-hover:text-w-red-500",d&&(!i&&a?t:s)),style:{strokeDasharray:a?"16":"0",strokeDashoffset:a?"16":"0"},children:/*#__PURE__*/r.jsx("path",{d:"M1 3.8L4 7L9 1",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",className:a?o:""})}),d=({className:t,checked:s,disabled:o,isError:a})=>{const i="text-w-gray-100",d=a?o?i:"text-w-red-500":o?s?"text-primary-100":i:s?"text-primary":"text-w-gray-200";/*#__PURE__*/
|
|
2
|
+
return r.jsx("svg",{width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:e.twMerge("cursor-pointer",o&&"cursor-not-allowed",d,t),"data-testid":"design-system--sub-checkbox",children:/*#__PURE__*/r.jsx("path",{d:"M4 8.76667L7.75004 12.5L14.0001 5.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})})};exports.CheckboxButton=({type:t="box",disabled:s,checked:o=!1,isError:c,className:n})=>{const l="circle"===t?"rounded-full":"rounded";return"sub"===t?/*#__PURE__*/r.jsx(d,{className:n,checked:o,disabled:s,isError:c}):/*#__PURE__*/r.jsxs("div",{className:e.twMerge("group relative box-border cursor-pointer border",!s&&!c&&"group-focus-within:border-primary-500",!s&&!c&&!o&&"group-focus-within:bg-w-white",{box:"size-4 m-px",circle:"size-[18px]"}[t],l,
|
|
3
3
|
// 비활성화 상태
|
|
4
|
-
o?
|
|
4
|
+
s?o?c?"bg-w-gray-50 border-w-gray-200 cursor-not-allowed":"bg-primary-100 border-primary-100 cursor-not-allowed":"border-w-gray-200 bg-w-gray-50 cursor-not-allowed":
|
|
5
5
|
// 에러 상태
|
|
6
|
-
c?
|
|
6
|
+
c?o?"border-w-red-500 bg-w-red-500":"border-w-red-500 bg-w-white":
|
|
7
7
|
// 정상 상태
|
|
8
|
-
|
|
8
|
+
o?"bg-primary-500 border-primary-500":"group-hover:border-primary-500 border-w-gray-200 bg-white",n),"data-testid":"design-system--checkbox-button",children:["box"===t&&/*#__PURE__*/r.jsx(a,{checked:o,isError:c,disabled:s}),"circle"===t&&/*#__PURE__*/r.jsx(i,{checked:o,isError:c,disabled:s})]})};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use client";"use strict";var e=require("react/jsx-runtime"),t=require("tailwind-merge"),r=require("../../Base/Typography/Typography.js");require("../../Base/Layouts/Box/Box.js"),require("../../Base/Layouts/FullBleed/FullBleed.js");var
|
|
2
|
-
return e.jsx("label",{"data-testid":m
|
|
3
|
-
/*#__PURE__*/e.jsx(
|
|
4
|
-
/*#__PURE__*/e.jsxs(
|
|
1
|
+
"use client";"use strict";var e=require("react/jsx-runtime"),t=require("tailwind-merge"),r=require("../../Base/Typography/Typography.js");require("../../Base/Layouts/Box/Box.js"),require("../../Base/Layouts/FullBleed/FullBleed.js");var s=require("./CheckboxCard.parts.js");exports.CheckboxCard=a=>{const{disabled:i=!1,checked:d=!1,isError:c=!1,onChange:o,isWide:n=!1,containerClassName:l,className:x,iconName:h,title:y,description:g,testId:m,name:u,value:C}=a,b=null!=h?h:n?void 0:"receipt";/*#__PURE__*/
|
|
2
|
+
return e.jsx("label",{"data-testid":m||"design-system-checkboxCard",className:t.twMerge("group",l),children:/*#__PURE__*/e.jsxs(s.CheckboxCardContainer,{"data-testid":"design-system-checkboxCard--container",checked:d,isError:c,isWide:n,disabled:i,className:x,children:[
|
|
3
|
+
/*#__PURE__*/e.jsx(s.StyledCheckbox,{isWide:n,checked:d,onChange:o,isError:c,disabled:i,name:u,value:C}),b&&/*#__PURE__*/e.jsx(s.CheckboxCardIcon,{isError:c,checked:d,iconName:b,disabled:i}),
|
|
4
|
+
/*#__PURE__*/e.jsxs(s.TitleContainer,{isWide:n,"data-testid":"design-system-checkboxCard--titleBox",children:[
|
|
5
5
|
/*#__PURE__*/e.jsx(r.Typography,{"data-testid":"design-system-checkboxCard--title",variant:"body16",className:t.twMerge("font-medium",n?"text-left":"text-center",i?"text-w-gray-300":"text-w-gray-900"),children:y}),g&&/*#__PURE__*/e.jsx(r.Typography,{variant:"body14",className:t.twMerge("font-normal",n?"text-left":"text-center",i?"text-w-gray-300":"text-w-gray-600"),"data-testid":"design-system-checkboxCard--description",children:g})]})]})})};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var e=require("react/jsx-runtime"),r=require("tailwind-merge");require("../../DataDisplays/Avatar/Avatar.js"),require("
|
|
2
|
-
return e.jsx("div",
|
|
3
|
-
return e.jsx("div",{className:r.twMerge("flex size-[60px] shrink-0 items-center justify-center",i&&"opacity-30"),"data-testid":"design-system-checkboxCard--icon",children:/*#__PURE__*/e.jsx(o.ProductIcon,{name:t,disabled:
|
|
4
|
-
return e.jsx(t.Box,{className:r.twJoin(u&&"absolute top-[17px] left-[17px]"),children:/*#__PURE__*/e.jsx(i.Checkbox,
|
|
1
|
+
"use strict";var e=require("react/jsx-runtime"),r=require("tailwind-merge");require("../../DataDisplays/Avatar/Avatar.js"),require("../../Base/Typography/Typography.js");var t=require("../../Base/Layouts/Box/Box.js");require("../../Base/Layouts/FullBleed/FullBleed.js"),require("react"),require("../../DataDisplays/SystemIcon/SystemIcon.constants.js");var o=require("../../DataDisplays/ProductIcon/ProductIcon.js");require("../../DataDisplays/Accordion/Accordion.js");var i=require("../Checkbox/Checkbox.js");function s(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function n(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{},o=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),o.forEach((function(r){s(e,r,t[r])}))}return e}function a(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r.push.apply(r,t)}return r}(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})),e}function c(e,r){if(null==e)return{};var t,o,i=function(e,r){if(null==e)return{};var t,o,i={},s=Object.keys(e);for(o=0;o<s.length;o++)t=s[o],r.indexOf(t)>=0||(i[t]=e[t]);return i}(e,r);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(o=0;o<s.length;o++)t=s[o],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}exports.CheckboxCardContainer=t=>{var{children:o,isWide:i,checked:s,isError:l,disabled:u,className:p}=t,d=c(t,["children","isWide","checked","isError","disabled","className"]);/*#__PURE__*/
|
|
2
|
+
return e.jsx("div",a(n({className:r.twMerge("relative flex h-auto cursor-pointer items-center gap-2 rounded-xl border",i?"min-h-[94px] w-[298px] flex-row gap-3 px-5 py-4":"min-h-fit w-[224px] flex-col justify-center px-4 pt-4 pb-6",!u&&!l&&"group-focus-within:border-primary-500",(()=>{const e=s&&!l;return u?r.twMerge("cursor-not-allowed",e?"border-primary-100":"border-w-gray-200"):l?"border-w-red-500":s?"border-primary-500":"border-w-gray-200 group-hover:border-primary"})(),u?s&&!l?"bg-primary-10":"bg-w-gray-10":s?l?"bg-w-red-10":"bg-primary-10":"bg-w-white",p)},d),{children:o}))},exports.CheckboxCardIcon=({iconName:t,disabled:i,checked:s,isError:n})=>{const a=n||!s;/*#__PURE__*/
|
|
3
|
+
return e.jsx("div",{className:r.twMerge("flex size-[60px] shrink-0 items-center justify-center",i&&"opacity-30"),"data-testid":"design-system-checkboxCard--icon",children:/*#__PURE__*/e.jsx(o.ProductIcon,{name:t,disabled:a})})},exports.StyledCheckbox=o=>{var{isWide:s,className:a}=o,l=c(o,["isWide","className"]);const u=!s;/*#__PURE__*/
|
|
4
|
+
return e.jsx(t.Box,{className:r.twJoin(u&&"absolute top-[17px] left-[17px]"),children:/*#__PURE__*/e.jsx(i.Checkbox,n({className:r.twMerge(u&&"group-hover:border-primary-500",a)},l))})},exports.TitleContainer=({isWide:t,children:o})=>/*#__PURE__*/e.jsx("div",{className:r.twMerge("flex h-auto w-full flex-col justify-between gap-0.5",t?"items-start":"items-center"),children:o});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";var e=require("react/jsx-runtime"),r=require("tailwind-merge"),
|
|
2
|
-
return e.jsxs(
|
|
3
|
-
/*#__PURE__*/e.jsx("input",{ref:b,type:"file",className:"hidden",accept:p,multiple:u,onChange:
|
|
4
|
-
/*#__PURE__*/e.jsxs(
|
|
5
|
-
/*#__PURE__*/e.jsx("button",{type:"button",className:r.twMerge("border-w-gray-200 bg-w-gray-10 text-w-gray-600 flex w-full items-center justify-center gap-3 rounded-xl border border-dashed px-6 py-8",j?"flex-row":"flex-col",c&&"cursor-not-allowed",g&&"border-w-red-500",!c&&!g&&"hover:border-w-gray-400",
|
|
6
|
-
/*#__PURE__*/e.jsx(i.SupportTextContainer,{errorMessage:
|
|
1
|
+
"use strict";var e=require("react/jsx-runtime"),r=require("tailwind-merge"),a=require("react");require("../../Base/Typography/Typography.js");var l=require("../../Base/Layouts/Box/Box.js");require("../../Base/Layouts/FullBleed/FullBleed.js");var i=require("../SupportTextContainer/SupportTextContainer.js"),s=require("./FileUploader.parts.js"),o=require("./FileUploader.hooks.js"),t=require("./FileUploader.utils.js");exports.FileUploader=({files:d=[],onChange:n,accept:p,multiple:u=!0,maxFileSize:x,disabled:c=!1,isError:g=!1,errorMessage:h,supportMessage:m,text:f,isSmall:j=!1,onFileSizeExceeded:F})=>{const{inputRef:b,isDragOver:y,handleInputChange:w,handleButtonClick:v,handleRemoveFile:B,handleDragOver:S,handleDragLeave:q,handleDrop:C}=o.useFileUploader({files:d,onChange:n,maxFileSize:x,disabled:c,onFileSizeExceeded:F}),D=a.useMemo((()=>d.reduce(((e,r)=>e+r.size),0)),[d]),z=t.generateAcceptDescription(p);/*#__PURE__*/
|
|
2
|
+
return e.jsxs(l.Box,{className:"flex w-full flex-col gap-6",children:[
|
|
3
|
+
/*#__PURE__*/e.jsx("input",{ref:b,type:"file",className:"hidden",accept:p,multiple:u,onChange:w,disabled:c,"data-testid":"file-uploader-input"}),d.length>0&&/*#__PURE__*/e.jsx(l.Box,{className:"flex flex-col gap-2",children:d.map(((r,a)=>/*#__PURE__*/e.jsx(s.FileItem,{file:r,onRemove:()=>B(a),disabled:c},`${r.name}-${a}`)))}),
|
|
4
|
+
/*#__PURE__*/e.jsxs(l.Box,{className:"flex flex-col gap-2",children:[
|
|
5
|
+
/*#__PURE__*/e.jsx("button",{type:"button",className:r.twMerge("border-w-gray-200 bg-w-gray-10 text-w-gray-600 flex w-full items-center justify-center gap-3 rounded-xl border border-dashed px-6 py-8",j?"flex-row":"flex-col",c&&"cursor-not-allowed",g&&"border-w-red-500",!c&&!g&&"hover:border-w-gray-400",y&&!c&&!g&&"border-w-gray-400"),disabled:c,onClick:v,onDragOver:S,onDragLeave:q,onDrop:C,children:/*#__PURE__*/e.jsx(s.FileUploadArea,{disabled:c,isSmall:j,text:f,acceptDescription:z})}),
|
|
6
|
+
/*#__PURE__*/e.jsx(i.SupportTextContainer,{errorMessage:h,supportMessage:m,currentFileSize:D,maxFileSize:x})]})]})};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use client";"use strict";var e=require("react/jsx-runtime"),s=require("tailwind-merge");require("../../DataDisplays/Avatar/Avatar.js"),require("
|
|
2
|
-
return e.jsxs("div",{"data-testid":"design-system-icon-button-dropdown",className:"relative w-fit outline-hidden",ref:I,onKeyDown:
|
|
3
|
-
/*#__PURE__*/e.jsx(i.IconButton,{onClick:
|
|
1
|
+
"use client";"use strict";var e=require("react/jsx-runtime"),s=require("tailwind-merge");require("../../DataDisplays/Avatar/Avatar.js"),require("../../Base/Typography/Typography.js"),require("../../Base/Layouts/Box/Box.js"),require("../../Base/Layouts/FullBleed/FullBleed.js"),require("react");var t=require("../../DataDisplays/SystemIcon/SystemIcon.js");require("../../DataDisplays/SystemIcon/SystemIcon.constants.js"),require("../../DataDisplays/Accordion/Accordion.js");var i=require("../IconButton/IconButton.js"),n=require("../List/List.js"),o=require("../../../hooks/useDropdown.js");exports.IconButtonDropdown=({icon:a,items:r,selectedItem:l,onItemClick:c,size:d="sm",align:u="left",disabled:m=!1})=>{const{isListOpen:y,ref:I,focusedIndex:j,handleItemClick:p,toggleListOpen:x,handleKeyDown:h}=o.useDropdown({items:r,onItemClick:c});/*#__PURE__*/
|
|
2
|
+
return e.jsxs("div",{"data-testid":"design-system-icon-button-dropdown",className:"relative w-fit outline-hidden",ref:I,onKeyDown:h,tabIndex:0,children:[
|
|
3
|
+
/*#__PURE__*/e.jsx(i.IconButton,{onClick:x,size:d,className:"outline-hidden",disabled:m,children:/*#__PURE__*/e.jsx(t.SystemIcon,{name:a,className:s.twJoin(m&&"text-w-gray-300")})}),y&&/*#__PURE__*/e.jsx("div",{"data-testid":"design-system-icon-button-dropdown--list-container",className:s.twJoin("absolute -bottom-2 z-40 translate-y-full transform transition-all","right"===u?"right-0":"left-0"),children:/*#__PURE__*/e.jsx(n.List.Root,{className:"max-h-full min-w-40 overflow-y-visible",children:r.map(((s,t)=>/*#__PURE__*/e.jsx(n.List.Item,{text:s.value,leadingIcon:s.leadingIcon,onClick:()=>p(s),selected:s.key===(null==l?void 0:l.key),isFocused:t===j},s.key)))})})]})};
|
|
@@ -23,5 +23,5 @@
|
|
|
23
23
|
*
|
|
24
24
|
* // 에러 상태
|
|
25
25
|
* <Input isError placeholder="에러 상태" />
|
|
26
|
-
*/(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)t=a[n],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}const a=/*#__PURE__*/r.forwardRef(((r,a)=>{var{disabled:l,className:i,isError:
|
|
27
|
-
return e.jsx("input",function(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{},o=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),o.forEach((function(r){n(e,r,t[r])}))}return e}({
|
|
26
|
+
*/(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)t=a[n],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}const a=/*#__PURE__*/r.forwardRef(((r,a)=>{var{disabled:l,className:i,isError:c,isFocused:u}=r,s=o(r,["disabled","className","isError","isFocused"]);/*#__PURE__*/
|
|
27
|
+
return e.jsx("input",function(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{},o=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),o.forEach((function(r){n(e,r,t[r])}))}return e}({ref:a,className:t.twMerge("typo-body16 placeholder:typo-body16 tracking-default placeholder:tracking-default text-w-gray-600 placeholder:text-w-gray-300 disabled:bg-w-gray-10 w-full outline-hidden",l&&"placeholder:typo-body16 text-w-gray-300 placeholder:text-w-gray-200 cursor-not-allowed",i),"data-testid":"design-system--input",disabled:l},s))}));a.displayName="Input",exports.Input=a;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use client";"use strict";var e=require("react/jsx-runtime"),
|
|
2
|
-
return e.jsxs(
|
|
1
|
+
"use client";"use strict";var e=require("react/jsx-runtime"),r=require("react");require("../../DataDisplays/Avatar/Avatar.js"),require("tailwind-merge"),require("../../Base/Typography/Typography.js");var t=require("../../Base/Layouts/Box/Box.js");require("../../Base/Layouts/FullBleed/FullBleed.js");var n=require("../../DataDisplays/SystemIcon/SystemIcon.js");require("../../DataDisplays/SystemIcon/SystemIcon.constants.js"),require("../../DataDisplays/Accordion/Accordion.js");var s=require("./Input.js");function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(r){o(e,r,t[r])}))}return e}function i(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r.push.apply(r,t)}return r}(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})),e}function c(e,r){if(null==e)return{};var t,n,s=function(e,r){if(null==e)return{};var t,n,s={},o=Object.keys(e);for(n=0;n<o.length;n++)t=o[n],r.indexOf(t)>=0||(s[t]=e[t]);return s}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)t=o[n],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}const u=/*#__PURE__*/r.forwardRef(((o,u)=>{var{type:l,disabled:p}=o,y=c(o,["type","disabled"]);const[b,f]=r.useState(!1);/*#__PURE__*/
|
|
2
|
+
return e.jsxs(t.Box,{className:"flex w-full items-center gap-2","data-testid":"design-system--password-input",children:[
|
|
3
3
|
/*#__PURE__*/e.jsx(s.Input,i(a({type:b?"text":"password",ref:u},y),{disabled:p})),
|
|
4
4
|
/*#__PURE__*/e.jsx("button",{onClick:e=>{e.preventDefault(),f((e=>!e))},disabled:p,className:p?"cursor-not-allowed":"cursor-pointer",type:"button",children:/*#__PURE__*/e.jsx(n.SystemIcon,{name:b?"medium_eye_slash":"medium_eye",className:"text-w-gray-400"})})]})}));u.displayName="PasswordInput",exports.PasswordInput=u;
|
|
@@ -1,2 +1,36 @@
|
|
|
1
|
-
"use client";"use strict";var e=require("react/jsx-runtime"),
|
|
2
|
-
|
|
1
|
+
"use client";"use strict";var e=require("react/jsx-runtime"),t=require("tailwind-merge");require("../../DataDisplays/Avatar/Avatar.js");var r=require("../../Base/Typography/Typography.js"),n=require("../../Base/Layouts/Box/Box.js");require("../../Base/Layouts/FullBleed/FullBleed.js"),require("react");var s=require("../../DataDisplays/SystemIcon/SystemIcon.js");function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){a(e,t,r[t])}))}return e}function i(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}
|
|
2
|
+
/**
|
|
3
|
+
* 삭제 가능한 칩(chip) 형태의 입력 컴포넌트입니다.
|
|
4
|
+
*
|
|
5
|
+
* @component
|
|
6
|
+
* @param {Object} props
|
|
7
|
+
* @param {React.ReactNode} props.children - 칩 내부에 표시될 콘텐츠
|
|
8
|
+
* @param {() => void} [props.onDelete] - 삭제 버튼 클릭 시 실행될 콜백 함수. 삭제 버튼은 `<button type="button">`으로 렌더되어 클릭뿐 아니라 키보드(Tab 포커스 + Enter/Space)로도 동작합니다.
|
|
9
|
+
* @param {string} [props.className] - 추가적인 CSS 클래스
|
|
10
|
+
* @param {string} [props.deleteLabel] - 삭제 버튼의 접근 가능한 이름. 미지정 시 `children`이 문자열이면 `"{children} 삭제"`, 아니면 `"삭제"`
|
|
11
|
+
* @param {Object} [props.deleteButtonProps] - 삭제 버튼에 직접 전달할 `id` / `tabIndex` / `onFocus`. 칩 묶음의 roving tabindex 구현용이며 단독 사용 시에는 불필요합니다.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* // 기본 사용
|
|
16
|
+
* <InputChip>태그</InputChip>
|
|
17
|
+
*
|
|
18
|
+
* // 삭제 기능이 있는 칩
|
|
19
|
+
* <InputChip onDelete={() => console.log('삭제됨')}>
|
|
20
|
+
* 삭제 가능한 태그
|
|
21
|
+
* </InputChip>
|
|
22
|
+
*
|
|
23
|
+
* // 커스텀 스타일이 적용된 칩
|
|
24
|
+
* <InputChip className="bg-blue-100">
|
|
25
|
+
* 커스텀 스타일 태그
|
|
26
|
+
* </InputChip>
|
|
27
|
+
* ```
|
|
28
|
+
*/require("../../DataDisplays/SystemIcon/SystemIcon.constants.js"),require("../../DataDisplays/Accordion/Accordion.js");exports.InputChip=({children:a,onDelete:c,className:l,deleteLabel:p,deleteButtonProps:u})=>{
|
|
29
|
+
// 아이콘만 있는 버튼이라 접근 가능한 이름을 명시해야 한다. children이
|
|
30
|
+
// ReactNode라 항상 텍스트는 아니므로, 문자열/숫자일 때만 칩 텍스트를 이름에
|
|
31
|
+
// 넣고 그 외(엘리먼트, 배열 등)에는 일반 라벨로 폴백한다. 임의 ReactNode에서
|
|
32
|
+
// 텍스트를 추출할 일반적인 방법은 없으므로, 그런 경우 소비자가 deleteLabel로
|
|
33
|
+
// 직접 지정한다.
|
|
34
|
+
const y="string"==typeof a||"number"==typeof a?String(a):void 0,b=null!=p?p:y?`${y} 삭제`:"삭제";/*#__PURE__*/
|
|
35
|
+
return e.jsxs(n.Box,{"data-testid":"design-system-input-chip--container",className:t.twMerge("bg-w-gray-100 flex h-6 w-fit max-w-[100px] items-center gap-0.5 rounded-lg px-2 py-px select-none",!!c&&"pr-1.5 pl-2",l),children:[
|
|
36
|
+
/*#__PURE__*/e.jsx(r.Typography,{variant:"body14",className:"text-w-gray-600 h-6 w-full overflow-hidden break-all text-ellipsis whitespace-nowrap",children:a}),!!c&&/*#__PURE__*/e.jsx("button",i(o({},u),{type:"button",onClick:c,"aria-label":b,"data-testid":"design-system-input-chip--delete",className:"flex cursor-pointer items-center",children:/*#__PURE__*/e.jsx(s.SystemIcon,{name:"small_delete",className:"text-w-gray-400"})}))]})};
|