@dotss/ui 1.1.3 → 1.2.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.
@@ -1,9 +1,9 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("@emotion/react/jsx-runtime"),d=require("react"),u=require("../../hooks/useCheckHoverPossible/useCheckHoverPossible.cjs"),p=require("@emotion/styled"),g=require("../../utils/getContrastingTextColor/getContrastingTextColor.cjs"),h=e=>e&&e.__esModule?e:{default:e},l=h(p),f=l.default.div`
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("@emotion/react/jsx-runtime"),p=require("react"),g=require("../../hooks/useCheckHoverPossible/useCheckHoverPossible.cjs"),h=require("@emotion/styled"),f=require("../../utils/getContrastingTextColor/getContrastingTextColor.cjs"),m=e=>e&&e.__esModule?e:{default:e},l=m(h),b=l.default.div`
2
2
  flex-basis: calc((100% / 3) - ${({theme:{spacing:e}})=>e.content(3)}px);
3
3
  display: inline-flex;
4
4
  align-items: center;
5
5
  justify-content: center;
6
- `,m=l.default.button`
6
+ `,y=l.default.button`
7
7
  display: inline-flex;
8
8
  align-items: center;
9
9
  justify-content: center;
@@ -13,7 +13,7 @@
13
13
  white-space: nowrap;
14
14
  text-overflow: ellipsis;
15
15
  background-color: ${({theme:{palette:{brand:e}}})=>e.primary.main};
16
- color: ${({theme:{palette:{brand:e,grey:t}}})=>g.default(e.primary.main,[t.white,t[100]])};
16
+ color: ${({theme:{palette:{brand:e,grey:t}}})=>f.default(e.primary.main,[t.white,t[100]])};
17
17
  & svg {
18
18
  color: inherit;
19
19
  }
@@ -31,4 +31,4 @@
31
31
  color: ${({theme:{palette:{grey:e}}})=>e[30]};
32
32
  cursor: not-allowed;
33
33
  }
34
- `,b=d.forwardRef(function({children:t,size:r,disabled:i,inlineCSS:n,...s},a){const{isHoverPossible:c}=u.default();return o.jsx(f,{ref:a,...s,css:n,children:o.jsx(m,{type:"button",size:r,disabled:i,isHoverPossible:c,children:t})})});exports.default=b;
34
+ `,v=p.forwardRef(function({children:t,size:r,disabled:i,inlineCSS:n,value:a,buttonProps:s,...c},d){const{isHoverPossible:u}=g.default();return o.jsx(b,{ref:d,...c,css:n,"data-value":a,children:o.jsx(y,{type:"button",size:r,disabled:i,isHoverPossible:u,...s,children:t})})});exports.default=v;
@@ -4,6 +4,7 @@ import { NumberKeypadProps } from '../NumberKeypad';
4
4
 
5
5
  export interface NumberKeypadBlockProps extends GeneralComponentProps<HTMLAttributes<HTMLDivElement> & Pick<NumberKeypadProps, 'size' | 'disabled'>> {
6
6
  value?: string | number;
7
+ buttonProps?: HTMLAttributes<HTMLButtonElement>;
7
8
  }
8
9
  declare const NumberKeypadBlock: import('react').ForwardRefExoticComponent<NumberKeypadBlockProps & import('react').RefAttributes<HTMLDivElement>>;
9
10
  export default NumberKeypadBlock;
@@ -1,14 +1,14 @@
1
1
  import { jsx as o } from "@emotion/react/jsx-runtime";
2
- import { forwardRef as p } from "react";
3
- import d from "../../hooks/useCheckHoverPossible/useCheckHoverPossible.es.js";
2
+ import { forwardRef as h } from "react";
3
+ import m from "../../hooks/useCheckHoverPossible/useCheckHoverPossible.es.js";
4
4
  import n from "@emotion/styled";
5
- import h from "../../utils/getContrastingTextColor/getContrastingTextColor.es.js";
6
- const m = n.div`
5
+ import g from "../../utils/getContrastingTextColor/getContrastingTextColor.es.js";
6
+ const u = n.div`
7
7
  flex-basis: calc((100% / 3) - ${({ theme: { spacing: e } }) => e.content(3)}px);
8
8
  display: inline-flex;
9
9
  align-items: center;
10
10
  justify-content: center;
11
- `, g = n.button`
11
+ `, f = n.button`
12
12
  display: inline-flex;
13
13
  align-items: center;
14
14
  justify-content: center;
@@ -26,7 +26,7 @@ const m = n.div`
26
26
  theme: {
27
27
  palette: { brand: e, grey: t }
28
28
  }
29
- }) => h(e.primary.main, [t.white, t[100]])};
29
+ }) => g(e.primary.main, [t.white, t[100]])};
30
30
  & svg {
31
31
  color: inherit;
32
32
  }
@@ -95,21 +95,22 @@ const m = n.div`
95
95
  }) => e[30]};
96
96
  cursor: not-allowed;
97
97
  }
98
- `, v = p(
99
- function({ children: t, size: r, disabled: i, inlineCSS: l, ...a }, s) {
100
- const { isHoverPossible: c } = d();
101
- return /* @__PURE__ */ o(m, { ref: s, ...a, css: l, children: /* @__PURE__ */ o(
102
- g,
98
+ `, x = h(
99
+ function({ children: t, size: r, disabled: i, inlineCSS: l, value: a, buttonProps: s, ...c }, p) {
100
+ const { isHoverPossible: d } = m();
101
+ return /* @__PURE__ */ o(u, { ref: p, ...c, css: l, "data-value": a, children: /* @__PURE__ */ o(
102
+ f,
103
103
  {
104
104
  type: "button",
105
105
  size: r,
106
106
  disabled: i,
107
- isHoverPossible: c,
107
+ isHoverPossible: d,
108
+ ...s,
108
109
  children: t
109
110
  }
110
111
  ) });
111
112
  }
112
113
  );
113
114
  export {
114
- v as default
115
+ x as default
115
116
  };
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const c=require("@emotion/react/jsx-runtime"),n=require("react"),j=require("../Flexbox/Flexbox.cjs"),q=require("../hooks/useCheckHasFocus/useCheckHasFocus.cjs"),A=require("@emotion/styled"),D=e=>e&&e.__esModule?e:{default:e},d=D(A),L=d.default.div`
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("@emotion/react/jsx-runtime"),n=require("react"),j=require("../Flexbox/Flexbox.cjs"),q=require("../hooks/useCheckHasFocus/useCheckHasFocus.cjs"),A=require("@emotion/styled"),D=e=>e&&e.__esModule?e:{default:e},b=D(A),L=b.default.div`
2
2
  display: flex;
3
3
  align-items: center;
4
4
  gap: ${({theme:{spacing:e}})=>e.content(2)}px;
@@ -11,16 +11,16 @@
11
11
  }
12
12
 
13
13
  @supports not selector(:has(:focus-visible)) {
14
- ${({focusWithin:e,theme:r})=>e?{outline:`${r.palette.grey[100]} solid 2px`,outlineOffset:2}:{}}
14
+ ${({focusWithin:e,theme:o})=>e?{outline:`${o.palette.grey[100]} solid 2px`,outlineOffset:2}:{}}
15
15
  }
16
- `,S=d.default.button`
16
+ `,S=b.default.button`
17
17
  width: 8px;
18
18
  height: 8px;
19
19
  border-radius: 4px;
20
- background-color: ${({theme:{palette:{grey:e}},color:r})=>r==="primary"?e[10]:e[30]};
20
+ background-color: ${({theme:{palette:{grey:e}},color:o})=>o==="primary"?e[10]:e[30]};
21
21
  cursor: pointer;
22
22
  transition: all 150ms ease;
23
23
  transition-property: width, border-radius, background-color, cursor;
24
24
 
25
- ${({theme:{palette:{brand:e}},color:r,isActive:o})=>o?{width:24,borderRadius:8,backgroundColor:r==="primary"?e.primary.pageControl:e.primary.tooltip,cursor:"default"}:null}
26
- `,F=n.forwardRef(function({totalCount:r=1,page:o=1,onChange:l,color:p="primary",inlineCSS:y,tabIdPrefix:b,controlIdPrefix:m,tabProps:x,...h},$){const k=n.useRef(null),R=$??k,f=n.useRef(null),{hasFocus:w}=q.default({ref:f}),P=n.useId(),v=n.useId(),a=`${b??P}-`,I=`${m??v}-`,_=i=>t=>{t.preventDefault(),typeof l=="function"&&l(i)},g=i=>{let t=o;if(i.key==="ArrowLeft"?o>1?t=o-1:o===1&&(t=r):i.key==="ArrowRight"?o<r?t=o+1:o===r&&(t=1):i.key==="Home"?t=1:i.key==="End"&&(t=r),t!==o){const s=document.getElementById(`${a}${t}`);s==null||s.focus(),l==null||l(t)}};return c.jsx(L,{ref:R,role:"tablist",...h,css:y,focusWithin:w,children:c.jsx(j.default,{ref:f,gap:2,children:Array.from({length:r},(i,t)=>{const s=t+1,u=s===o;return c.jsx(S,{id:`${a}${s}`,"aria-controls":`${I}${s}`,isActive:u,"data-page":s,onClick:_(s),role:"tab",type:"button","aria-selected":u,onKeyDown:g,tabIndex:u?0:-1,...x,color:p},t)})})})});exports.default=F;
25
+ ${({theme:{palette:{brand:e}},color:o,isActive:r})=>r?{width:24,borderRadius:8,backgroundColor:o==="primary"?e.primary.pageControl:e.primary.tooltip,cursor:"default"}:null}
26
+ `,F=n.forwardRef(function({totalCount:o=1,page:r=1,onChange:l,color:y="primary",inlineCSS:m,tabIdPrefix:p,controlIdPrefix:x,tabProps:$,...u},h){const k=n.useRef(null),R=h??k,f=n.useRef(null),{hasFocus:w}=q.default({ref:f}),P=n.useId(),v=n.useId(),d=`${p??P}-`,I=`${x??v}-`,_=i=>t=>{t.preventDefault(),typeof l=="function"&&l(i)},g=i=>{let t=r;if(i.key==="ArrowLeft"?r>1?t=r-1:r===1&&(t=o):i.key==="ArrowRight"?r<o?t=r+1:r===o&&(t=1):i.key==="Home"?t=1:i.key==="End"&&(t=o),t!==r){const s=document.getElementById(`${d}${t}`);s==null||s.focus(),l==null||l(t)}};return a.jsx(L,{ref:R,role:"tablist",...u,css:m,focusWithin:w,children:a.jsx(j.default,{ref:f,gap:2,children:Array.from({length:o},(i,t)=>{const s=t+1,c=s===r;return a.jsx(S,{id:`${d}${s}`,"aria-controls":`${I}${s}`,isActive:c,"data-page":s,onClick:_(s),role:"tab",type:"button","aria-selected":c,onKeyDown:g,tabIndex:c?0:-1,"aria-label":`${u==null?void 0:u["aria-label"]} ${s} 이동, 현재 ${r}`,...$,color:y},t)})})})});exports.default=F;
@@ -1,5 +1,5 @@
1
- import { jsx as f } from "@emotion/react/jsx-runtime";
2
- import { forwardRef as D, useRef as u, useId as d } from "react";
1
+ import { jsx as c } from "@emotion/react/jsx-runtime";
2
+ import { forwardRef as D, useRef as d, useId as m } from "react";
3
3
  import F from "../Flexbox/Flexbox.es.js";
4
4
  import E from "../hooks/useCheckHasFocus/useCheckHasFocus.es.js";
5
5
  import p from "@emotion/styled";
@@ -16,8 +16,8 @@ const H = p.div`
16
16
  }
17
17
 
18
18
  @supports not selector(:has(:focus-visible)) {
19
- ${({ focusWithin: t, theme: r }) => t ? {
20
- outline: `${r.palette.grey[100]} solid 2px`,
19
+ ${({ focusWithin: t, theme: o }) => t ? {
20
+ outline: `${o.palette.grey[100]} solid 2px`,
21
21
  outlineOffset: 2
22
22
  } : {}}
23
23
  }
@@ -29,8 +29,8 @@ const H = p.div`
29
29
  theme: {
30
30
  palette: { grey: t }
31
31
  },
32
- color: r
33
- }) => r === "primary" ? t[10] : t[30]};
32
+ color: o
33
+ }) => o === "primary" ? t[10] : t[30]};
34
34
  cursor: pointer;
35
35
  transition: all 150ms ease;
36
36
  transition-property: width, border-radius, background-color, cursor;
@@ -39,59 +39,60 @@ const H = p.div`
39
39
  theme: {
40
40
  palette: { brand: t }
41
41
  },
42
- color: r,
43
- isActive: o
44
- }) => o ? {
42
+ color: o,
43
+ isActive: r
44
+ }) => r ? {
45
45
  width: 24,
46
46
  borderRadius: 8,
47
- backgroundColor: r === "primary" ? t.primary.pageControl : t.primary.tooltip,
47
+ backgroundColor: o === "primary" ? t.primary.pageControl : t.primary.tooltip,
48
48
  cursor: "default"
49
49
  } : null}
50
50
  `, O = D(function({
51
- totalCount: r = 1,
52
- page: o = 1,
51
+ totalCount: o = 1,
52
+ page: r = 1,
53
53
  onChange: l,
54
- color: m = "primary",
54
+ color: b = "primary",
55
55
  inlineCSS: y,
56
- tabIdPrefix: b,
56
+ tabIdPrefix: $,
57
57
  controlIdPrefix: x,
58
58
  tabProps: h,
59
- ...$
59
+ ...n
60
60
  }, k) {
61
- const w = u(null), P = k ?? w, c = u(null), { hasFocus: I } = E({ ref: c }), R = d(), v = d(), a = `${b ?? R}-`, g = `${x ?? v}-`, A = (s) => (e) => {
61
+ const w = d(null), P = k ?? w, a = d(null), { hasFocus: I } = E({ ref: a }), R = m(), v = m(), u = `${$ ?? R}-`, A = `${x ?? v}-`, L = (s) => (e) => {
62
62
  e.preventDefault(), typeof l == "function" && l(s);
63
- }, L = (s) => {
64
- let e = o;
65
- if (s.key === "ArrowLeft" ? o > 1 ? e = o - 1 : o === 1 && (e = r) : s.key === "ArrowRight" ? o < r ? e = o + 1 : o === r && (e = 1) : s.key === "Home" ? e = 1 : s.key === "End" && (e = r), e !== o) {
66
- const i = document.getElementById(`${a}${e}`);
63
+ }, g = (s) => {
64
+ let e = r;
65
+ if (s.key === "ArrowLeft" ? r > 1 ? e = r - 1 : r === 1 && (e = o) : s.key === "ArrowRight" ? r < o ? e = r + 1 : r === o && (e = 1) : s.key === "Home" ? e = 1 : s.key === "End" && (e = o), e !== r) {
66
+ const i = document.getElementById(`${u}${e}`);
67
67
  i == null || i.focus(), l == null || l(e);
68
68
  }
69
69
  };
70
- return /* @__PURE__ */ f(
70
+ return /* @__PURE__ */ c(
71
71
  H,
72
72
  {
73
73
  ref: P,
74
74
  role: "tablist",
75
- ...$,
75
+ ...n,
76
76
  css: y,
77
77
  focusWithin: I,
78
- children: /* @__PURE__ */ f(F, { ref: c, gap: 2, children: Array.from({ length: r }, (s, e) => {
79
- const i = e + 1, n = i === o;
80
- return /* @__PURE__ */ f(
78
+ children: /* @__PURE__ */ c(F, { ref: a, gap: 2, children: Array.from({ length: o }, (s, e) => {
79
+ const i = e + 1, f = i === r;
80
+ return /* @__PURE__ */ c(
81
81
  K,
82
82
  {
83
- id: `${a}${i}`,
84
- "aria-controls": `${g}${i}`,
85
- isActive: n,
83
+ id: `${u}${i}`,
84
+ "aria-controls": `${A}${i}`,
85
+ isActive: f,
86
86
  "data-page": i,
87
- onClick: A(i),
87
+ onClick: L(i),
88
88
  role: "tab",
89
89
  type: "button",
90
- "aria-selected": n,
91
- onKeyDown: L,
92
- tabIndex: n ? 0 : -1,
90
+ "aria-selected": f,
91
+ onKeyDown: g,
92
+ tabIndex: f ? 0 : -1,
93
+ "aria-label": `${n == null ? void 0 : n["aria-label"]} ${i} 이동, 현재 ${r}`,
93
94
  ...h,
94
- color: m
95
+ color: b
95
96
  },
96
97
  e
97
98
  );
@@ -24,4 +24,4 @@
24
24
  ${({theme:{typography:t}})=>({fontSize:t.b4R.size,fontWeight:t.b4R.weight,lineHeight:t.b4R.lineHeight,letterSpacing:t.b4R.letterSpacing,"& svg:not(.tooltip-closer)":{width:24,height:24}})};
25
25
 
26
26
  ${({theme:{palette:{brand:t,grey:r}},placement:m,color:e,offset:c,arrowOffset:d})=>{let o={};const n=(c==null?void 0:c.x)||0,l=(c==null?void 0:c.y)||0,p=(d==null?void 0:d.x)||0,a=(d==null?void 0:d.y)||0;switch(m){case"bottom-left":o={top:`calc(-12px + ${l}px)`,left:`calc(-6px + ${n}px)`,transform:"translateY(-100%)","&:after":{content:'""',position:"absolute",top:"100%",left:`calc(12px + ${p}px)`,borderTop:`8px solid ${e==="primary"?t.primary.tooltip:r[80]}`,borderRight:"6px solid transparent",borderBottom:"8px solid transparent",borderLeft:"6px solid transparent"}};break;case"bottom-center":o={top:`calc(-12px + ${l}px)`,left:"50%",transform:`translate(calc(-50% + ${n}px), -100%)`,"&:after":{content:'""',position:"absolute",top:"100%",left:`calc(50% + ${p}px)`,transform:"translateX(-50%)",borderTop:`8px solid ${e==="primary"?t.primary.tooltip:r[80]}`,borderRight:"6px solid transparent",borderBottom:"8px solid transparent",borderLeft:"6px solid transparent"}};break;case"bottom-right":o={top:`calc(-12px + ${l}px)`,right:`calc(-6px - ${n}px)`,transform:"translateY(-100%)","&:after":{content:'""',position:"absolute",top:"100%",right:`calc(12px - ${p}px)`,borderTop:`8px solid ${e==="primary"?t.primary.tooltip:r[80]}`,borderRight:"6px solid transparent",borderBottom:"8px solid transparent",borderLeft:"6px solid transparent"}};break;case"left-top":o={top:`calc(-6px + ${l}px)`,left:`calc(100% + 12px + ${n}px)`,"&:after":{content:'""',position:"absolute",top:`calc(12px + ${a}px)`,right:"100%",borderTop:"6px solid transparent",borderRight:`8px solid ${e==="primary"?t.primary.tooltip:r[80]}`,borderBottom:"6px solid transparent",borderLeft:"8px solid transparent"}};break;case"left-middle":o={top:"50%",left:`calc(100% + 12px + ${n}px)`,transform:`translateY(calc(-50% + ${l}px))`,"&:after":{content:'""',position:"absolute",top:`calc(50% + ${a}px)`,right:"100%",transform:"translateY(-50%)",borderTop:"6px solid transparent",borderRight:`8px solid ${e==="primary"?t.primary.tooltip:r[80]}`,borderBottom:"6px solid transparent",borderLeft:"8px solid transparent"}};break;case"left-bottom":o={bottom:`calc(-6px - ${l}px)`,left:`calc(100% + 12px + ${n}px)`,"&:after":{content:'""',position:"absolute",bottom:`calc(12px - ${a}px)`,right:"100%",borderTop:"6px solid transparent",borderRight:`8px solid ${e==="primary"?t.primary.tooltip:r[80]}`,borderBottom:"6px solid transparent",borderLeft:"8px solid transparent"}};break;case"top-left":o={left:`calc(-6px + ${n}px)`,transform:`translate(0, calc(12px + ${l}px))`,"&:after":{content:'""',position:"absolute",bottom:"100%",left:`calc(12px + ${p}px)`,borderTop:"8px solid transparent",borderRight:"6px solid transparent",borderBottom:`8px solid ${e==="primary"?t.primary.tooltip:r[80]}`,borderLeft:"6px solid transparent"}};break;case"top-center":o={right:"50%",transform:`translate(calc(50% + ${n}px), calc(12px + ${l}px))`,"&:after":{content:'""',position:"absolute",bottom:"100%",left:`calc(50% + ${p}px)`,transform:"translateX(-50%)",borderTop:"8px solid transparent",borderRight:"6px solid transparent",borderBottom:`8px solid ${e==="primary"?t.primary.tooltip:r[80]}`,borderLeft:"6px solid transparent"}};break;case"top-right":o={right:`calc(-6px - ${n}px)`,transform:`translate(0, calc(12px + ${l}px))`,"&:after":{content:'""',position:"absolute",bottom:"100%",right:`calc(12px - ${p}px)`,borderTop:"8px solid transparent",borderRight:"6px solid transparent",borderBottom:`8px solid ${e==="primary"?t.primary.tooltip:r[80]}`,borderLeft:"6px solid transparent"}};break;case"right-top":o={top:`calc(-6px + ${l}px)`,right:`calc(100% + 12px + ${n}px)`,"&:after":{content:'""',position:"absolute",top:`calc(12px + ${a}px)`,left:"100%",borderTop:"6px solid transparent",borderRight:"8px solid transparent",borderBottom:"6px solid transparent",borderLeft:`8px solid ${e==="primary"?t.primary.tooltip:r[80]}`}};break;case"right-middle":o={top:"50%",right:`calc(100% + 12px + ${n}px)`,transform:`translateY(calc(-50% + ${l}px))`,"&:after":{content:'""',position:"absolute",top:`calc(50% + ${a}px)`,left:"100%",transform:"translateY(-50%)",borderTop:"6px solid transparent",borderRight:"8px solid transparent",borderBottom:"6px solid transparent",borderLeft:`8px solid ${e==="primary"?t.primary.tooltip:r[80]}`}};break;case"right-bottom":o={bottom:`calc(-6px - ${l}px)`,right:`calc(100% + 12px + ${n}px)`,"&:after":{content:'""',position:"absolute",bottom:`calc(12px - ${a}px)`,left:"100%",borderTop:"6px solid transparent",borderRight:"8px solid transparent",borderBottom:"6px solid transparent",borderLeft:`8px solid ${e==="primary"?t.primary.tooltip:r[80]}`}};break}return o}};
27
- `,G=s.forwardRef(function({children:r,placement:m="bottom-center",color:e="primary",title:c,body:d,closer:o,endAdornment:n,inlineCSS:l,open:p=!1,onClose:a,wrapperProps:g,offset:E,arrowOffset:K,...x},Y){const C=s.useId(),D=s.useId(),_=s.useId(),{isKeyboardMode:k}=N.default(),S=s.useRef(null),R=s.useRef(null),T=s.useRef(!0),[z,M]=s.useState(!1),I=(x==null?void 0:x.id)||C,B=(x==null?void 0:x.titleId)||D,L=(x==null?void 0:x.bodyId)||_,v=i=>{(i.key==="Enter"||i.key===" ")&&(a==null||a(i))};return s.useEffect(()=>{R.current&&R.current.getBoundingClientRect().width>=276&&M(!0)},[p]),s.useEffect(()=>{const i=b=>{b.key==="Escape"&&p&&(b.stopPropagation(),a==null||a(b))};return document.addEventListener("keydown",i),()=>document.removeEventListener("keydown",i)},[p,a]),s.useEffect(()=>{var b,h,f;if(T.current){T.current=!1;return}if(p){const $=(b=S.current)==null?void 0:b.querySelector('.tooltip-closer[role="button"]');if($&&k&&$.focus(),!$){const w=(h=S.current)==null?void 0:h.querySelector('[role="button"]');w&&k&&w.focus()}return}const i=(f=S.current)==null?void 0:f.querySelector('[role="button"]');i&&k&&i.focus()},[p,k]),u.jsxs(V,{ref:S,open:p,...g,css:g==null?void 0:g.inlineCSS,children:[s.Children.map(r,i=>{if(!s.isValidElement(i))return i;const b=h=>{var f,$;(h.key==="Enter"||h.key===" ")&&(($=(f=i.props)==null?void 0:f.onClick)==null||$.call(f,h))};return s.cloneElement(i,{inlineCSS:{cursor:"pointer","&:active":{outline:"none"},...i.props.inlineCSS},role:"button",tabIndex:0,"aria-hidden":!1,"aria-expanded":p,"aria-haspopup":"dialog","aria-controls":I,focusable:!0,onKeyDown:b,...i.props})}),u.jsxs(W,{id:I,className:"tooltip",role:"dialog","aria-modal":"true","aria-labelledby":c?B:void 0,"aria-describedby":d?L:void 0,ref:Y,placement:m,color:e,offset:E,arrowOffset:K,...x,css:l,children:[c&&u.jsxs(y.default,{alignItems:"center",justifyContent:"space-between",gap:2,children:[u.jsx(X.default,{id:B,variant:"h5B",color:e==="primary"?"grey.100":"grey.white",children:c}),o&&u.jsx(y.default,{flexShrink:0,children:u.jsx(j.default,{className:"tooltip-closer",name:"CloseLine",size:"xSmall",color:e==="primary"?"grey.100":"grey.white",role:"button","aria-hidden":"false",focusable:"true",tabIndex:0,onClick:a,onKeyDown:v,"aria-label":"닫기",inlineCSS:{marginLeft:"2px",cursor:"pointer","&:active":{outline:"none"}}})})]}),d&&u.jsxs(y.default,{id:L,alignItems:"center",gap:2,ref:R,style:z?{width:"276px",whiteSpace:"wrap"}:{},children:[d,n&&u.jsx(y.default,{flexShrink:0,inlineCSS:{fontSize:"24px"},children:n}),!c&&o&&u.jsx(y.default,{flexShrink:0,children:u.jsx(j.default,{className:"tooltip-closer",name:"CloseLine",size:"xSmall",color:e==="primary"?"grey.100":"grey.white",role:"button","aria-hidden":"false",focusable:"true",tabIndex:0,onClick:a,onKeyDown:v,"aria-label":"닫기",inlineCSS:{marginLeft:"2px",cursor:"pointer","&:active":{outline:"none"}}})})]})]})]})});exports.default=G;
27
+ `,G=s.forwardRef(function({children:r,placement:m="bottom-center",color:e="primary",title:c,body:d,closer:o,endAdornment:n,inlineCSS:l,open:p=!1,onClose:a,wrapperProps:g,offset:E,arrowOffset:K,...x},Y){const C=s.useId(),D=s.useId(),_=s.useId(),{isKeyboardMode:k}=N.default(),S=s.useRef(null),R=s.useRef(null),I=s.useRef(!0),[z,M]=s.useState(!1),B=(x==null?void 0:x.id)||C,L=(x==null?void 0:x.titleId)||D,T=(x==null?void 0:x.bodyId)||_,w=i=>{(i.key==="Enter"||i.key===" ")&&(a==null||a(i))};return s.useEffect(()=>{R.current&&R.current.getBoundingClientRect().width>=276&&M(!0)},[p]),s.useEffect(()=>{const i=b=>{b.key==="Escape"&&p&&(b.stopPropagation(),a==null||a(b))};return document.addEventListener("keydown",i),()=>document.removeEventListener("keydown",i)},[p,a]),s.useEffect(()=>{var b,h,f;if(I.current){I.current=!1;return}if(p){const $=(b=S.current)==null?void 0:b.querySelector('.tooltip-closer[role="button"]');if($&&k&&$.focus(),!$){const v=(h=S.current)==null?void 0:h.querySelector('[role="button"]');v&&k&&v.focus()}return}const i=(f=S.current)==null?void 0:f.querySelector('[role="button"]');i&&k&&i.focus()},[p,k]),u.jsxs(V,{ref:S,open:p,...g,css:g==null?void 0:g.inlineCSS,children:[s.Children.map(r,i=>{if(!s.isValidElement(i))return i;const b=h=>{var f,$;(h.key==="Enter"||h.key===" ")&&(($=(f=i.props)==null?void 0:f.onClick)==null||$.call(f,h))};return s.cloneElement(i,{inlineCSS:{cursor:"pointer","&:active":{outline:"none"},...i.props.inlineCSS},role:"button",tabIndex:0,"aria-hidden":!1,"aria-expanded":p,"aria-haspopup":"dialog","aria-controls":B,focusable:!0,onKeyDown:b,...i.props})}),u.jsxs(W,{id:B,className:"tooltip",role:"dialog","aria-modal":"true","aria-labelledby":c?L:T,"aria-describedby":d?T:void 0,ref:Y,placement:m,color:e,offset:E,arrowOffset:K,...x,css:l,children:[c&&u.jsxs(y.default,{alignItems:"center",justifyContent:"space-between",gap:2,children:[u.jsx(X.default,{id:L,variant:"h5B",color:e==="primary"?"grey.100":"grey.white",children:c}),o&&u.jsx(y.default,{flexShrink:0,children:u.jsx(j.default,{className:"tooltip-closer",name:"CloseLine",size:"xSmall",color:e==="primary"?"grey.100":"grey.white",role:"button","aria-hidden":"false",focusable:"true",tabIndex:0,onClick:a,onKeyDown:w,"aria-label":"닫기",inlineCSS:{marginLeft:"2px",cursor:"pointer","&:active":{outline:"none"}}})})]}),d&&u.jsxs(y.default,{id:T,alignItems:"center",gap:2,ref:R,style:z?{width:"276px",whiteSpace:"wrap"}:{},children:[d,n&&u.jsx(y.default,{flexShrink:0,inlineCSS:{fontSize:"24px"},children:n}),!c&&o&&u.jsx(y.default,{flexShrink:0,children:u.jsx(j.default,{className:"tooltip-closer",name:"CloseLine",size:"xSmall",color:e==="primary"?"grey.100":"grey.white",role:"button","aria-hidden":"false",focusable:"true",tabIndex:0,onClick:a,onKeyDown:w,"aria-label":"닫기",inlineCSS:{marginLeft:"2px",cursor:"pointer","&:active":{outline:"none"}}})})]})]})]})});exports.default=G;
@@ -1,5 +1,5 @@
1
1
  import { jsxs as S, jsx as h } from "@emotion/react/jsx-runtime";
2
- import { forwardRef as V, useId as T, useRef as B, useState as W, useEffect as L, Children as G, isValidElement as J, cloneElement as Q } from "react";
2
+ import { forwardRef as V, useId as B, useRef as L, useState as W, useEffect as w, Children as G, isValidElement as J, cloneElement as Q } from "react";
3
3
  import $ from "../Flexbox/Flexbox.es.js";
4
4
  import C from "../Icon/Icon.es.js";
5
5
  import U from "../Typography/Typography.es.js";
@@ -285,20 +285,20 @@ const _ = z.div`
285
285
  arrowOffset: j,
286
286
  ...d
287
287
  }, X) {
288
- const q = T(), N = T(), F = T(), { isKeyboardMode: g } = Z(), k = B(null), R = B(null), w = B(!0), [H, M] = W(!1), I = (d == null ? void 0 : d.id) || q, v = (d == null ? void 0 : d.titleId) || N, E = (d == null ? void 0 : d.bodyId) || F, K = (i) => {
288
+ const q = B(), N = B(), F = B(), { isKeyboardMode: g } = Z(), k = L(null), R = L(null), I = L(!0), [H, M] = W(!1), v = (d == null ? void 0 : d.id) || q, E = (d == null ? void 0 : d.titleId) || N, T = (d == null ? void 0 : d.bodyId) || F, K = (i) => {
289
289
  (i.key === "Enter" || i.key === " ") && (a == null || a(i));
290
290
  };
291
- return L(() => {
291
+ return w(() => {
292
292
  R.current && R.current.getBoundingClientRect().width >= 276 && M(!0);
293
- }, [l]), L(() => {
293
+ }, [l]), w(() => {
294
294
  const i = (x) => {
295
295
  x.key === "Escape" && l && (x.stopPropagation(), a == null || a(x));
296
296
  };
297
297
  return document.addEventListener("keydown", i), () => document.removeEventListener("keydown", i);
298
- }, [l, a]), L(() => {
298
+ }, [l, a]), w(() => {
299
299
  var x, f, b;
300
- if (w.current) {
301
- w.current = !1;
300
+ if (I.current) {
301
+ I.current = !1;
302
302
  return;
303
303
  }
304
304
  if (l) {
@@ -341,7 +341,7 @@ const _ = z.div`
341
341
  "aria-hidden": !1,
342
342
  "aria-expanded": l,
343
343
  "aria-haspopup": "dialog",
344
- "aria-controls": I,
344
+ "aria-controls": v,
345
345
  focusable: !0,
346
346
  onKeyDown: x,
347
347
  ...i.props
@@ -350,12 +350,12 @@ const _ = z.div`
350
350
  /* @__PURE__ */ S(
351
351
  A,
352
352
  {
353
- id: I,
353
+ id: v,
354
354
  className: "tooltip",
355
355
  role: "dialog",
356
356
  "aria-modal": "true",
357
- "aria-labelledby": s ? v : void 0,
358
- "aria-describedby": c ? E : void 0,
357
+ "aria-labelledby": s ? E : T,
358
+ "aria-describedby": c ? T : void 0,
359
359
  ref: X,
360
360
  placement: m,
361
361
  color: e,
@@ -368,7 +368,7 @@ const _ = z.div`
368
368
  /* @__PURE__ */ h(
369
369
  U,
370
370
  {
371
- id: v,
371
+ id: E,
372
372
  variant: "h5B",
373
373
  color: e === "primary" ? "grey.100" : "grey.white",
374
374
  children: s
@@ -399,7 +399,7 @@ const _ = z.div`
399
399
  c && /* @__PURE__ */ S(
400
400
  $,
401
401
  {
402
- id: E,
402
+ id: T,
403
403
  alignItems: "center",
404
404
  gap: 2,
405
405
  ref: R,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotss/ui",
3
- "version": "1.1.3",
3
+ "version": "1.2.0",
4
4
  "description": "React UI components for Dotss",
5
5
  "type": "module",
6
6
  "main": "./index.cjs",