@jenesei-software/jenesei-kit-react 2.3.2 → 2.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/build/button-9k2nzpqW.js +135 -0
  2. package/build/button-9k2nzpqW.js.map +1 -0
  3. package/build/button-C1H35JQG.cjs +3 -0
  4. package/build/button-C1H35JQG.cjs.map +1 -0
  5. package/build/component-button.cjs.js +1 -1
  6. package/build/component-button.es.js +1 -1
  7. package/build/component-date-picker.cjs.js +1 -1
  8. package/build/component-date-picker.es.js +1 -1
  9. package/build/component-input-otp.cjs.js +1 -1
  10. package/build/component-input-otp.es.js +1 -1
  11. package/build/component-input.cjs.js +1 -1
  12. package/build/component-input.es.js +1 -1
  13. package/build/component-pagination.cjs.js +1 -1
  14. package/build/component-pagination.es.js +1 -1
  15. package/build/component-select.cjs.js +1 -1
  16. package/build/component-select.es.js +1 -1
  17. package/build/component-textarea.cjs.js +1 -1
  18. package/build/component-textarea.es.js +1 -1
  19. package/build/components/button/component.d.ts +2 -1
  20. package/build/{context-sonner-B-eO7pwI.cjs → context-sonner-C8aMJPWz.cjs} +2 -2
  21. package/build/{context-sonner-B-eO7pwI.cjs.map → context-sonner-C8aMJPWz.cjs.map} +1 -1
  22. package/build/{context-sonner-CtCttHLD.js → context-sonner-DNJWVKTw.js} +2 -2
  23. package/build/{context-sonner-CtCttHLD.js.map → context-sonner-DNJWVKTw.js.map} +1 -1
  24. package/build/context-sonner.cjs.js +1 -1
  25. package/build/context-sonner.es.js +1 -1
  26. package/build/{date-picker-9rpPgP0a.cjs → date-picker-DRXvfRZx.cjs} +2 -2
  27. package/build/{date-picker-9rpPgP0a.cjs.map → date-picker-DRXvfRZx.cjs.map} +1 -1
  28. package/build/{date-picker-BvKtH7lp.js → date-picker-Sw6n-RRw.js} +3 -3
  29. package/build/{date-picker-BvKtH7lp.js.map → date-picker-Sw6n-RRw.js.map} +1 -1
  30. package/build/index.cjs.js +1 -1
  31. package/build/index.es.js +8 -8
  32. package/build/{input-Buf_HFGH.js → input-BS1SNtLb.js} +3 -3
  33. package/build/{input-Buf_HFGH.js.map → input-BS1SNtLb.js.map} +1 -1
  34. package/build/{input-DMm67Wyr.cjs → input-BW0CKgfw.cjs} +2 -2
  35. package/build/{input-DMm67Wyr.cjs.map → input-BW0CKgfw.cjs.map} +1 -1
  36. package/build/{input-otp-MDjIcfVu.cjs → input-otp-B9zfjb5u.cjs} +2 -2
  37. package/build/{input-otp-MDjIcfVu.cjs.map → input-otp-B9zfjb5u.cjs.map} +1 -1
  38. package/build/{input-otp-q4zKk_nP.js → input-otp-DWTU3oR1.js} +2 -2
  39. package/build/{input-otp-q4zKk_nP.js.map → input-otp-DWTU3oR1.js.map} +1 -1
  40. package/build/{pagination-ZXl2fVKZ.cjs → pagination-CzmrFLcs.cjs} +2 -2
  41. package/build/{pagination-ZXl2fVKZ.cjs.map → pagination-CzmrFLcs.cjs.map} +1 -1
  42. package/build/{pagination-BFTnpYCz.js → pagination-DWlnuh1H.js} +2 -2
  43. package/build/{pagination-BFTnpYCz.js.map → pagination-DWlnuh1H.js.map} +1 -1
  44. package/build/{select-BdGRG7zf.js → select-Bn-24dwy.js} +3 -3
  45. package/build/{select-BdGRG7zf.js.map → select-Bn-24dwy.js.map} +1 -1
  46. package/build/{select-7yVS14II.cjs → select-DcgzvPvR.cjs} +2 -2
  47. package/build/{select-7yVS14II.cjs.map → select-DcgzvPvR.cjs.map} +1 -1
  48. package/build/styles.css +1 -1
  49. package/build/{textarea-DLZq4RT-.js → textarea-BW_LYAhr.js} +5 -5
  50. package/build/textarea-BW_LYAhr.js.map +1 -0
  51. package/build/{textarea-Bm3ki2-6.cjs → textarea-Cly9U5It.cjs} +2 -2
  52. package/build/textarea-Cly9U5It.cjs.map +1 -0
  53. package/package.json +1 -1
  54. package/build/button-6CFvwtSz.cjs +0 -3
  55. package/build/button-6CFvwtSz.cjs.map +0 -1
  56. package/build/button-D6Bg00Uh.js +0 -120
  57. package/build/button-D6Bg00Uh.js.map +0 -1
  58. package/build/textarea-Bm3ki2-6.cjs.map +0 -1
  59. package/build/textarea-DLZq4RT-.js.map +0 -1
@@ -0,0 +1,135 @@
1
+ import { o as w } from "./chunk-cI0lbGMq.js";
2
+ import { i as l, n, r, t as I } from "./utils-BRgi6734.js";
3
+ import { n as z, t as v } from "./functions-DzX-pTN8.js";
4
+ import { t as A } from "./icon-Y-IZxLXB.js";
5
+ import { t as G } from "./isEqual-BHn_Fkkw.js";
6
+ import { useDeepCompareMemoize as f } from "./hooks-use-deep-compare-memoize.es.js";
7
+ import { useMergeRefs as O } from "./hooks-use-merge-refs.es.js";
8
+ import { useTypographyStyles as T } from "./hooks-use-typography-styles.es.js";
9
+ import { jsx as x, jsxs as B } from "react/jsx-runtime";
10
+ import { memo as H, useCallback as S, useMemo as d, useRef as g } from "react";
11
+ var C = /* @__PURE__ */ w(G(), 1), _ = (e) => {
12
+ const o = g(e.onClick), i = g(e.onFocus), s = g(e.onMouseDown), c = g(e.isDisabled);
13
+ o.current = e.onClick, i.current = e.onFocus, s.current = e.onMouseDown, c.current = e.isDisabled;
14
+ const a = S((u) => {
15
+ c.current || o.current?.(u);
16
+ }, []), m = S((u) => {
17
+ i.current?.(u);
18
+ }, []), y = S((u) => {
19
+ s.current?.(u);
20
+ }, []);
21
+ return /* @__PURE__ */ x(R, {
22
+ ...e,
23
+ onClick: e.onClick ? a : void 0,
24
+ onFocus: e.onFocus ? m : void 0,
25
+ onMouseDown: e.onMouseDown ? y : void 0
26
+ });
27
+ }, j = (e) => {
28
+ const o = f(e.icons ?? []), i = f(e.style), s = f(e.sxTypography), c = "iconGroupOrder" in e, a = c ? e.iconGroupOrder : void 0, m = d(() => A({
29
+ icons: o.map((b) => ({
30
+ ...b,
31
+ style: { color: r.genre.button[e.genre].color.index }
32
+ })),
33
+ size: e.size
34
+ }), [
35
+ o,
36
+ e.size,
37
+ e.genre
38
+ ]), y = g(null), u = O(d(() => [y, e.ref], [e.ref])), { className: h, style: F } = T({
39
+ sx: d(() => ({
40
+ variant: I.sizeToController[e.size],
41
+ isNoUserSelect: !0,
42
+ ...s
43
+ }), [e.size, s]),
44
+ style: d(() => ({
45
+ order: 0,
46
+ display: "inline-flex"
47
+ }), [])
48
+ }), { className: D, style: M } = d(() => {
49
+ const b = v([
50
+ n.component.button.root,
51
+ n.control[e.isDisabled ? "none" : e.control ?? "boxShadow"],
52
+ n.transition.color,
53
+ e.isZeroRadius && n.component.button.isZeroRadius,
54
+ e.isHidden && n.component.button.isHidden,
55
+ e.isHiddenBorder && n.component.button.isHiddenBorder,
56
+ e.isFullRadius && n.component.button.isFullRadius,
57
+ e.isFullSize && n.component.button.isFullSize,
58
+ e.isWidthAsHeight && n.component.button.isWidthAsHeight,
59
+ e.isMinWidthAsContent && n.component.button.isMinWidthAsContent,
60
+ e.isZeroPadding && n.component.button.isZeroPadding,
61
+ e.isSizeFitContent && n.component.button.isSizeFitContent,
62
+ e.className
63
+ ]), t = {};
64
+ return t[l.component.button.background] = r.genre.button[e.genre].background.index, t[l.component.button.color] = r.genre.button[e.genre].color.index, t[l.component.button.border] = r.genre.button[e.genre].border.index, t[l.component.button.height] = r.size[e.size].height, t[l.component.button.padding] = r.size[e.size].padding, t[l.component.button.radius] = r.size[e.size].radius, t[l.component.button.gap] = `calc(${r.size[e.size].padding} - 2px)`, {
65
+ className: b,
66
+ style: z([Object.keys(t).length ? t : void 0, i])
67
+ };
68
+ }, [
69
+ e.className,
70
+ i,
71
+ e.genre,
72
+ e.isDisabled,
73
+ e.isFullSize,
74
+ e.isHidden,
75
+ e.isHiddenBorder,
76
+ e.isMinWidthAsContent,
77
+ e.isFullRadius,
78
+ e.isWidthAsHeight,
79
+ e.size,
80
+ e.isZeroRadius,
81
+ e.control,
82
+ e.isZeroPadding,
83
+ e.isSizeFitContent
84
+ ]), { className: N, style: k } = d(() => {
85
+ const b = v([n.component.button.iconGroup, e.isIconGroup && n.component.button.iconGroupIsIconGroup]), t = {};
86
+ return c && (t[l.component.button.iconGroupOrder] = String(a ?? "initial")), {
87
+ className: b,
88
+ style: z([Object.keys(t).length ? t : void 0])
89
+ };
90
+ }, [
91
+ e.isIconGroup,
92
+ c,
93
+ a
94
+ ]);
95
+ return /* @__PURE__ */ B("button", {
96
+ tabIndex: e.tabIndex,
97
+ disabled: e.isDisabled,
98
+ className: D,
99
+ style: M,
100
+ onClick: e.onClick,
101
+ onFocus: e.onFocus,
102
+ onMouseDown: e.onMouseDown,
103
+ type: e.type ?? "button",
104
+ ref: u,
105
+ name: e.name,
106
+ "aria-label": e.ariaLabel,
107
+ id: e.id,
108
+ children: [!e.isOnlyIcon && e.children && /* @__PURE__ */ x("div", {
109
+ className: h,
110
+ style: F,
111
+ children: e.children
112
+ }), /* @__PURE__ */ x("div", {
113
+ className: N,
114
+ style: k,
115
+ children: m
116
+ })]
117
+ });
118
+ }, R = H(j, E);
119
+ _.displayName = "Button";
120
+ R.displayName = "ButtonView";
121
+ function E(e, o) {
122
+ const { icons: i, style: s, sxTypography: c, ...a } = e, { icons: m, style: y, sxTypography: u, ...h } = o;
123
+ return (0, C.default)(i, m) && (0, C.default)(s, y) && (0, C.default)(c, u) && W(a, h);
124
+ }
125
+ function W(e, o) {
126
+ const i = Object.keys(e), s = Object.keys(o);
127
+ if (i.length !== s.length) return !1;
128
+ const c = new Set(s);
129
+ return i.every((a) => c.has(a) && Object.is(e[a], o[a]));
130
+ }
131
+ export {
132
+ _ as t
133
+ };
134
+
135
+ //# sourceMappingURL=button-9k2nzpqW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-9k2nzpqW.js","names":[],"sources":["../src/components/button/component.tsx"],"sourcesContent":["import { getIconComponents } from '@local/components/icon';\nimport { useDeepCompareMemoize } from '@local/hooks/use-deep-compare-memoize';\nimport { useMergeRefs } from '@local/hooks/use-merge-refs';\nimport { useTypographyStyles } from '@local/hooks/use-typography-styles';\nimport { CSS_CLASS, CSS_VARS, CSS_VARS_RAW, EXTRA_VALUE } from '@local/styles/utils';\nimport { setClasses, setStyles } from '@local/styles/utils/functions';\n\nimport isEqual from 'lodash/isEqual';\nimport { FC, memo, Ref, useCallback, useMemo, useRef } from 'react';\n\nimport { IButton } from './component.types';\n\nexport const Button: FC<IButton> = (props) => {\n const onClickRef = useRef(props.onClick);\n const onFocusRef = useRef(props.onFocus);\n const onMouseDownRef = useRef(props.onMouseDown);\n const isDisabledRef = useRef(props.isDisabled);\n\n onClickRef.current = props.onClick;\n onFocusRef.current = props.onFocus;\n onMouseDownRef.current = props.onMouseDown;\n isDisabledRef.current = props.isDisabled;\n\n const handleClick = useCallback<Exclude<IButton['onClick'], undefined>>((event) => {\n if (!isDisabledRef.current) {\n onClickRef.current?.(event);\n }\n }, []);\n\n const handleFocus = useCallback<Exclude<IButton['onFocus'], undefined>>((event) => {\n onFocusRef.current?.(event);\n }, []);\n\n const handleMouseDown = useCallback<Exclude<IButton['onMouseDown'], undefined>>((event) => {\n onMouseDownRef.current?.(event);\n }, []);\n\n return (\n <ButtonView\n {...props}\n onClick={props.onClick ? handleClick : undefined}\n onFocus={props.onFocus ? handleFocus : undefined}\n onMouseDown={props.onMouseDown ? handleMouseDown : undefined}\n />\n );\n};\n\nconst ButtonComponent: FC<IButton> = (props) => {\n const icons = useDeepCompareMemoize(props.icons ?? []);\n const propsStyle = useDeepCompareMemoize(props.style);\n const sxTypography = useDeepCompareMemoize(props.sxTypography);\n const hasIconGroupOrder = 'iconGroupOrder' in props;\n const iconGroupOrder = hasIconGroupOrder ? props.iconGroupOrder : undefined;\n\n const iconComponents = useMemo(\n () =>\n getIconComponents({\n icons: icons.map((e) => ({\n ...e,\n style: { color: CSS_VARS.genre.button[props.genre].color.index },\n })),\n size: props.size,\n }),\n [icons, props.size, props.genre],\n );\n\n const refDefault = useRef<HTMLButtonElement>(null);\n\n const refs = useMemo(() => [refDefault, props.ref], [props.ref]);\n const ref = useMergeRefs(refs);\n\n const typographySx = useMemo(\n () => ({ variant: EXTRA_VALUE.sizeToController[props.size], isNoUserSelect: true, ...sxTypography }),\n [props.size, sxTypography],\n );\n\n const typographyStyle = useMemo(() => ({ order: 0, display: 'inline-flex' }), []);\n\n const { className: classNameTypography, style: styleTypography } = useTypographyStyles({\n sx: typographySx,\n style: typographyStyle,\n });\n\n const { className, style } = useMemo(() => {\n const className = setClasses([\n CSS_CLASS.component.button.root,\n CSS_CLASS.control[props.isDisabled ? 'none' : (props.control ?? 'boxShadow')],\n CSS_CLASS.transition.color,\n props.isZeroRadius && CSS_CLASS.component.button.isZeroRadius,\n props.isHidden && CSS_CLASS.component.button.isHidden,\n props.isHiddenBorder && CSS_CLASS.component.button.isHiddenBorder,\n props.isFullRadius && CSS_CLASS.component.button.isFullRadius,\n props.isFullSize && CSS_CLASS.component.button.isFullSize,\n props.isWidthAsHeight && CSS_CLASS.component.button.isWidthAsHeight,\n props.isMinWidthAsContent && CSS_CLASS.component.button.isMinWidthAsContent,\n props.isZeroPadding && CSS_CLASS.component.button.isZeroPadding,\n props.isSizeFitContent && CSS_CLASS.component.button.isSizeFitContent,\n props.className,\n ]);\n\n const vars: Record<string, string> = {};\n\n vars[CSS_VARS_RAW.component.button.background] = CSS_VARS.genre.button[props.genre].background.index;\n vars[CSS_VARS_RAW.component.button.color] = CSS_VARS.genre.button[props.genre].color.index;\n vars[CSS_VARS_RAW.component.button.border] = CSS_VARS.genre.button[props.genre].border.index;\n\n vars[CSS_VARS_RAW.component.button.height] = CSS_VARS.size[props.size].height;\n vars[CSS_VARS_RAW.component.button.padding] = CSS_VARS.size[props.size].padding;\n vars[CSS_VARS_RAW.component.button.radius] = CSS_VARS.size[props.size].radius;\n vars[CSS_VARS_RAW.component.button.gap] = `calc(${CSS_VARS.size[props.size].padding} - 2px)`;\n\n const style = setStyles([Object.keys(vars).length ? vars : undefined, propsStyle]);\n\n return { className, style };\n }, [\n props.className,\n propsStyle,\n props.genre,\n props.isDisabled,\n props.isFullSize,\n props.isHidden,\n props.isHiddenBorder,\n props.isMinWidthAsContent,\n props.isFullRadius,\n props.isWidthAsHeight,\n props.size,\n props.isZeroRadius,\n props.control,\n props.isZeroPadding,\n props.isSizeFitContent,\n ]);\n\n const { className: classNameIconGroup, style: styleIconGroup } = useMemo(() => {\n const className = setClasses([\n CSS_CLASS.component.button.iconGroup,\n\n props.isIconGroup && CSS_CLASS.component.button.iconGroupIsIconGroup,\n ]);\n\n const vars: Record<string, string> = {};\n\n if (hasIconGroupOrder) vars[CSS_VARS_RAW.component.button.iconGroupOrder] = String(iconGroupOrder ?? 'initial');\n\n const style = setStyles([Object.keys(vars).length ? vars : undefined]);\n\n return { className, style };\n }, [props.isIconGroup, hasIconGroupOrder, iconGroupOrder]);\n\n return (\n <button\n tabIndex={props.tabIndex}\n disabled={props.isDisabled}\n className={className}\n style={style}\n onClick={props.onClick}\n onFocus={props.onFocus}\n onMouseDown={props.onMouseDown}\n type={props.type ?? 'button'}\n ref={ref as Ref<HTMLButtonElement>}\n name={props.name}\n aria-label={props.ariaLabel}\n id={props.id}\n >\n {!props.isOnlyIcon && props.children && (\n <div className={classNameTypography} style={styleTypography}>\n {props.children}\n </div>\n )}\n <div className={classNameIconGroup} style={styleIconGroup}>\n {iconComponents}\n </div>\n </button>\n );\n};\n\nconst ButtonView = memo(ButtonComponent, areButtonPropsEqual);\nButton.displayName = 'Button';\nButtonView.displayName = 'ButtonView';\n\nfunction areButtonPropsEqual(prev: IButton, next: IButton) {\n const { icons: prevIcons, style: prevStyle, sxTypography: prevSxTypography, ...prevRest } = prev;\n const { icons: nextIcons, style: nextStyle, sxTypography: nextSxTypography, ...nextRest } = next;\n\n return (\n isEqual(prevIcons, nextIcons) &&\n isEqual(prevStyle, nextStyle) &&\n isEqual(prevSxTypography, nextSxTypography) &&\n areShallowEqual(prevRest, nextRest)\n );\n}\n\nfunction areShallowEqual<T extends Record<string, unknown>>(prev: T, next: T) {\n const prevKeys = Object.keys(prev);\n const nextKeys = Object.keys(next);\n\n if (prevKeys.length !== nextKeys.length) return false;\n\n const nextKeysSet = new Set(nextKeys);\n\n return prevKeys.every((key) => nextKeysSet.has(key) && Object.is(prev[key], next[key]));\n}\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ const q=require("./chunk-Dd8m0Ver.cjs"),n=require("./utils-DCIq-5FL.cjs"),C=require("./functions-CZrZU5U0.cjs"),M=require("./icon-DyjaxKWq.cjs"),v=require("./isEqual-Q-mEN2md.cjs"),y=require("./hooks-use-deep-compare-memoize.cjs.js"),k=require("./hooks-use-merge-refs.cjs.js"),V=require("./hooks-use-typography-styles.cjs.js");let _=require("react/jsx-runtime"),t=require("react");var b=q.__toESM(v.require_isEqual(),1),A=e=>{const i=(0,t.useRef)(e.onClick),s=(0,t.useRef)(e.onFocus),u=(0,t.useRef)(e.onMouseDown),c=(0,t.useRef)(e.isDisabled);i.current=e.onClick,s.current=e.onFocus,u.current=e.onMouseDown,c.current=e.isDisabled;const S=(0,t.useCallback)(r=>{c.current||i.current?.(r)},[]),l=(0,t.useCallback)(r=>{s.current?.(r)},[]),a=(0,t.useCallback)(r=>{u.current?.(r)},[]);return(0,_.jsx)(g,{...e,onClick:e.onClick?S:void 0,onFocus:e.onFocus?l:void 0,onMouseDown:e.onMouseDown?a:void 0})},D=e=>{const i=y.useDeepCompareMemoize(e.icons??[]),s=y.useDeepCompareMemoize(e.style),u=y.useDeepCompareMemoize(e.sxTypography),c="iconGroupOrder"in e,S=c?e.iconGroupOrder:void 0,l=(0,t.useMemo)(()=>M.getIconComponents({icons:i.map(d=>({...d,style:{color:n.CSS_VARS.genre.button[e.genre].color.index}})),size:e.size}),[i,e.size,e.genre]),a=(0,t.useRef)(null),r=k.useMergeRefs((0,t.useMemo)(()=>[a,e.ref],[e.ref])),{className:m,style:h}=V.useTypographyStyles({sx:(0,t.useMemo)(()=>({variant:n.EXTRA_VALUE.sizeToController[e.size],isNoUserSelect:!0,...u}),[e.size,u]),style:(0,t.useMemo)(()=>({order:0,display:"inline-flex"}),[])}),{className:R,style:f}=(0,t.useMemo)(()=>{const d=C.setClasses([n.CSS_CLASS.component.button.root,n.CSS_CLASS.control[e.isDisabled?"none":e.control??"boxShadow"],n.CSS_CLASS.transition.color,e.isZeroRadius&&n.CSS_CLASS.component.button.isZeroRadius,e.isHidden&&n.CSS_CLASS.component.button.isHidden,e.isHiddenBorder&&n.CSS_CLASS.component.button.isHiddenBorder,e.isFullRadius&&n.CSS_CLASS.component.button.isFullRadius,e.isFullSize&&n.CSS_CLASS.component.button.isFullSize,e.isWidthAsHeight&&n.CSS_CLASS.component.button.isWidthAsHeight,e.isMinWidthAsContent&&n.CSS_CLASS.component.button.isMinWidthAsContent,e.isZeroPadding&&n.CSS_CLASS.component.button.isZeroPadding,e.isSizeFitContent&&n.CSS_CLASS.component.button.isSizeFitContent,e.className]),o={};return o[n.CSS_VARS_RAW.component.button.background]=n.CSS_VARS.genre.button[e.genre].background.index,o[n.CSS_VARS_RAW.component.button.color]=n.CSS_VARS.genre.button[e.genre].color.index,o[n.CSS_VARS_RAW.component.button.border]=n.CSS_VARS.genre.button[e.genre].border.index,o[n.CSS_VARS_RAW.component.button.height]=n.CSS_VARS.size[e.size].height,o[n.CSS_VARS_RAW.component.button.padding]=n.CSS_VARS.size[e.size].padding,o[n.CSS_VARS_RAW.component.button.radius]=n.CSS_VARS.size[e.size].radius,o[n.CSS_VARS_RAW.component.button.gap]=`calc(${n.CSS_VARS.size[e.size].padding} - 2px)`,{className:d,style:C.setStyles([Object.keys(o).length?o:void 0,s])}},[e.className,s,e.genre,e.isDisabled,e.isFullSize,e.isHidden,e.isHiddenBorder,e.isMinWidthAsContent,e.isFullRadius,e.isWidthAsHeight,e.size,e.isZeroRadius,e.control,e.isZeroPadding,e.isSizeFitContent]),{className:x,style:z}=(0,t.useMemo)(()=>{const d=C.setClasses([n.CSS_CLASS.component.button.iconGroup,e.isIconGroup&&n.CSS_CLASS.component.button.iconGroupIsIconGroup]),o={};return c&&(o[n.CSS_VARS_RAW.component.button.iconGroupOrder]=String(S??"initial")),{className:d,style:C.setStyles([Object.keys(o).length?o:void 0])}},[e.isIconGroup,c,S]);return(0,_.jsxs)("button",{tabIndex:e.tabIndex,disabled:e.isDisabled,className:R,style:f,onClick:e.onClick,onFocus:e.onFocus,onMouseDown:e.onMouseDown,type:e.type??"button",ref:r,name:e.name,"aria-label":e.ariaLabel,id:e.id,children:[!e.isOnlyIcon&&e.children&&(0,_.jsx)("div",{className:m,style:h,children:e.children}),(0,_.jsx)("div",{className:x,style:z,children:l})]})},g=(0,t.memo)(D,F);A.displayName="Button";g.displayName="ButtonView";function F(e,i){const{icons:s,style:u,sxTypography:c,...S}=e,{icons:l,style:a,sxTypography:r,...m}=i;return(0,b.default)(s,l)&&(0,b.default)(u,a)&&(0,b.default)(c,r)&&L(S,m)}function L(e,i){const s=Object.keys(e),u=Object.keys(i);if(s.length!==u.length)return!1;const c=new Set(u);return s.every(S=>c.has(S)&&Object.is(e[S],i[S]))}Object.defineProperty(exports,"Button",{enumerable:!0,get:function(){return A}});
2
+
3
+ //# sourceMappingURL=button-C1H35JQG.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-C1H35JQG.cjs","names":[],"sources":["../src/components/button/component.tsx"],"sourcesContent":["import { getIconComponents } from '@local/components/icon';\nimport { useDeepCompareMemoize } from '@local/hooks/use-deep-compare-memoize';\nimport { useMergeRefs } from '@local/hooks/use-merge-refs';\nimport { useTypographyStyles } from '@local/hooks/use-typography-styles';\nimport { CSS_CLASS, CSS_VARS, CSS_VARS_RAW, EXTRA_VALUE } from '@local/styles/utils';\nimport { setClasses, setStyles } from '@local/styles/utils/functions';\n\nimport isEqual from 'lodash/isEqual';\nimport { FC, memo, Ref, useCallback, useMemo, useRef } from 'react';\n\nimport { IButton } from './component.types';\n\nexport const Button: FC<IButton> = (props) => {\n const onClickRef = useRef(props.onClick);\n const onFocusRef = useRef(props.onFocus);\n const onMouseDownRef = useRef(props.onMouseDown);\n const isDisabledRef = useRef(props.isDisabled);\n\n onClickRef.current = props.onClick;\n onFocusRef.current = props.onFocus;\n onMouseDownRef.current = props.onMouseDown;\n isDisabledRef.current = props.isDisabled;\n\n const handleClick = useCallback<Exclude<IButton['onClick'], undefined>>((event) => {\n if (!isDisabledRef.current) {\n onClickRef.current?.(event);\n }\n }, []);\n\n const handleFocus = useCallback<Exclude<IButton['onFocus'], undefined>>((event) => {\n onFocusRef.current?.(event);\n }, []);\n\n const handleMouseDown = useCallback<Exclude<IButton['onMouseDown'], undefined>>((event) => {\n onMouseDownRef.current?.(event);\n }, []);\n\n return (\n <ButtonView\n {...props}\n onClick={props.onClick ? handleClick : undefined}\n onFocus={props.onFocus ? handleFocus : undefined}\n onMouseDown={props.onMouseDown ? handleMouseDown : undefined}\n />\n );\n};\n\nconst ButtonComponent: FC<IButton> = (props) => {\n const icons = useDeepCompareMemoize(props.icons ?? []);\n const propsStyle = useDeepCompareMemoize(props.style);\n const sxTypography = useDeepCompareMemoize(props.sxTypography);\n const hasIconGroupOrder = 'iconGroupOrder' in props;\n const iconGroupOrder = hasIconGroupOrder ? props.iconGroupOrder : undefined;\n\n const iconComponents = useMemo(\n () =>\n getIconComponents({\n icons: icons.map((e) => ({\n ...e,\n style: { color: CSS_VARS.genre.button[props.genre].color.index },\n })),\n size: props.size,\n }),\n [icons, props.size, props.genre],\n );\n\n const refDefault = useRef<HTMLButtonElement>(null);\n\n const refs = useMemo(() => [refDefault, props.ref], [props.ref]);\n const ref = useMergeRefs(refs);\n\n const typographySx = useMemo(\n () => ({ variant: EXTRA_VALUE.sizeToController[props.size], isNoUserSelect: true, ...sxTypography }),\n [props.size, sxTypography],\n );\n\n const typographyStyle = useMemo(() => ({ order: 0, display: 'inline-flex' }), []);\n\n const { className: classNameTypography, style: styleTypography } = useTypographyStyles({\n sx: typographySx,\n style: typographyStyle,\n });\n\n const { className, style } = useMemo(() => {\n const className = setClasses([\n CSS_CLASS.component.button.root,\n CSS_CLASS.control[props.isDisabled ? 'none' : (props.control ?? 'boxShadow')],\n CSS_CLASS.transition.color,\n props.isZeroRadius && CSS_CLASS.component.button.isZeroRadius,\n props.isHidden && CSS_CLASS.component.button.isHidden,\n props.isHiddenBorder && CSS_CLASS.component.button.isHiddenBorder,\n props.isFullRadius && CSS_CLASS.component.button.isFullRadius,\n props.isFullSize && CSS_CLASS.component.button.isFullSize,\n props.isWidthAsHeight && CSS_CLASS.component.button.isWidthAsHeight,\n props.isMinWidthAsContent && CSS_CLASS.component.button.isMinWidthAsContent,\n props.isZeroPadding && CSS_CLASS.component.button.isZeroPadding,\n props.isSizeFitContent && CSS_CLASS.component.button.isSizeFitContent,\n props.className,\n ]);\n\n const vars: Record<string, string> = {};\n\n vars[CSS_VARS_RAW.component.button.background] = CSS_VARS.genre.button[props.genre].background.index;\n vars[CSS_VARS_RAW.component.button.color] = CSS_VARS.genre.button[props.genre].color.index;\n vars[CSS_VARS_RAW.component.button.border] = CSS_VARS.genre.button[props.genre].border.index;\n\n vars[CSS_VARS_RAW.component.button.height] = CSS_VARS.size[props.size].height;\n vars[CSS_VARS_RAW.component.button.padding] = CSS_VARS.size[props.size].padding;\n vars[CSS_VARS_RAW.component.button.radius] = CSS_VARS.size[props.size].radius;\n vars[CSS_VARS_RAW.component.button.gap] = `calc(${CSS_VARS.size[props.size].padding} - 2px)`;\n\n const style = setStyles([Object.keys(vars).length ? vars : undefined, propsStyle]);\n\n return { className, style };\n }, [\n props.className,\n propsStyle,\n props.genre,\n props.isDisabled,\n props.isFullSize,\n props.isHidden,\n props.isHiddenBorder,\n props.isMinWidthAsContent,\n props.isFullRadius,\n props.isWidthAsHeight,\n props.size,\n props.isZeroRadius,\n props.control,\n props.isZeroPadding,\n props.isSizeFitContent,\n ]);\n\n const { className: classNameIconGroup, style: styleIconGroup } = useMemo(() => {\n const className = setClasses([\n CSS_CLASS.component.button.iconGroup,\n\n props.isIconGroup && CSS_CLASS.component.button.iconGroupIsIconGroup,\n ]);\n\n const vars: Record<string, string> = {};\n\n if (hasIconGroupOrder) vars[CSS_VARS_RAW.component.button.iconGroupOrder] = String(iconGroupOrder ?? 'initial');\n\n const style = setStyles([Object.keys(vars).length ? vars : undefined]);\n\n return { className, style };\n }, [props.isIconGroup, hasIconGroupOrder, iconGroupOrder]);\n\n return (\n <button\n tabIndex={props.tabIndex}\n disabled={props.isDisabled}\n className={className}\n style={style}\n onClick={props.onClick}\n onFocus={props.onFocus}\n onMouseDown={props.onMouseDown}\n type={props.type ?? 'button'}\n ref={ref as Ref<HTMLButtonElement>}\n name={props.name}\n aria-label={props.ariaLabel}\n id={props.id}\n >\n {!props.isOnlyIcon && props.children && (\n <div className={classNameTypography} style={styleTypography}>\n {props.children}\n </div>\n )}\n <div className={classNameIconGroup} style={styleIconGroup}>\n {iconComponents}\n </div>\n </button>\n );\n};\n\nconst ButtonView = memo(ButtonComponent, areButtonPropsEqual);\nButton.displayName = 'Button';\nButtonView.displayName = 'ButtonView';\n\nfunction areButtonPropsEqual(prev: IButton, next: IButton) {\n const { icons: prevIcons, style: prevStyle, sxTypography: prevSxTypography, ...prevRest } = prev;\n const { icons: nextIcons, style: nextStyle, sxTypography: nextSxTypography, ...nextRest } = next;\n\n return (\n isEqual(prevIcons, nextIcons) &&\n isEqual(prevStyle, nextStyle) &&\n isEqual(prevSxTypography, nextSxTypography) &&\n areShallowEqual(prevRest, nextRest)\n );\n}\n\nfunction areShallowEqual<T extends Record<string, unknown>>(prev: T, next: T) {\n const prevKeys = Object.keys(prev);\n const nextKeys = Object.keys(next);\n\n if (prevKeys.length !== nextKeys.length) return false;\n\n const nextKeysSet = new Set(nextKeys);\n\n return prevKeys.every((key) => nextKeysSet.has(key) && Object.is(prev[key], next[key]));\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./chunk-Dd8m0Ver.cjs"),e=require("./button-6CFvwtSz.cjs");exports.Button=e.Button;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./chunk-Dd8m0Ver.cjs"),e=require("./button-C1H35JQG.cjs");exports.Button=e.Button;
@@ -1,4 +1,4 @@
1
- import { t as o } from "./button-D6Bg00Uh.js";
1
+ import { t as o } from "./button-9k2nzpqW.js";
2
2
  export {
3
3
  o as Button
4
4
  };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./chunk-Dd8m0Ver.cjs"),e=require("./date-picker-9rpPgP0a.cjs");exports.DatePicker=e.DatePicker;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./chunk-Dd8m0Ver.cjs"),e=require("./date-picker-DRXvfRZx.cjs");exports.DatePicker=e.DatePicker;
@@ -1,4 +1,4 @@
1
- import { t } from "./date-picker-BvKtH7lp.js";
1
+ import { t } from "./date-picker-Sw6n-RRw.js";
2
2
  export {
3
3
  t as DatePicker
4
4
  };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./chunk-Dd8m0Ver.cjs"),e=require("./input-otp-MDjIcfVu.cjs");exports.InputOTP=e.InputOTP;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./chunk-Dd8m0Ver.cjs"),e=require("./input-otp-B9zfjb5u.cjs");exports.InputOTP=e.InputOTP;
@@ -1,4 +1,4 @@
1
- import { t as o } from "./input-otp-q4zKk_nP.js";
1
+ import { t as o } from "./input-otp-DWTU3oR1.js";
2
2
  export {
3
3
  o as InputOTP
4
4
  };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./chunk-Dd8m0Ver.cjs"),e=require("./input-DMm67Wyr.cjs");exports.Input=e.Input;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./chunk-Dd8m0Ver.cjs"),e=require("./input-BW0CKgfw.cjs");exports.Input=e.Input;
@@ -1,4 +1,4 @@
1
- import { t as o } from "./input-Buf_HFGH.js";
1
+ import { t as o } from "./input-BS1SNtLb.js";
2
2
  export {
3
3
  o as Input
4
4
  };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./chunk-Dd8m0Ver.cjs"),e=require("./pagination-ZXl2fVKZ.cjs");exports.Pagination=e.Pagination;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./chunk-Dd8m0Ver.cjs"),e=require("./pagination-CzmrFLcs.cjs");exports.Pagination=e.Pagination;
@@ -1,4 +1,4 @@
1
- import { t } from "./pagination-BFTnpYCz.js";
1
+ import { t } from "./pagination-DWlnuh1H.js";
2
2
  export {
3
3
  t as Pagination
4
4
  };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./chunk-Dd8m0Ver.cjs"),e=require("./select-7yVS14II.cjs");exports.Select=e.Select;exports.SelectMonth=e.SelectMonth;exports.SelectMonths=e.SelectMonths;exports.SelectYear=e.SelectYear;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./chunk-Dd8m0Ver.cjs"),e=require("./select-DcgzvPvR.cjs");exports.Select=e.Select;exports.SelectMonth=e.SelectMonth;exports.SelectMonths=e.SelectMonths;exports.SelectYear=e.SelectYear;
@@ -1,4 +1,4 @@
1
- import { a as t, n as a, r as o, t as r } from "./select-BdGRG7zf.js";
1
+ import { a as t, n as a, r as o, t as r } from "./select-Bn-24dwy.js";
2
2
  export {
3
3
  t as Select,
4
4
  r as SelectMonth,
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./chunk-Dd8m0Ver.cjs"),e=require("./textarea-Bm3ki2-6.cjs");exports.TextArea=e.TextArea;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./chunk-Dd8m0Ver.cjs"),e=require("./textarea-Cly9U5It.cjs");exports.TextArea=e.TextArea;
@@ -1,4 +1,4 @@
1
- import { t } from "./textarea-DLZq4RT-.js";
1
+ import { t } from "./textarea-BW_LYAhr.js";
2
2
  export {
3
3
  t as TextArea
4
4
  };
@@ -1,2 +1,3 @@
1
+ import { FC } from 'react';
1
2
  import { IButton } from './component.types';
2
- export declare const Button: import('react').NamedExoticComponent<IButton>;
3
+ export declare const Button: FC<IButton>;
@@ -1,3 +1,3 @@
1
- const ae=require("./chunk-Dd8m0Ver.cjs"),u=require("./utils-DCIq-5FL.cjs"),P=require("./functions-CZrZU5U0.cjs"),B=require("./proxy-BDese6Pb.cjs"),H=require("./AnimatePresence-DeKd4Eek.cjs"),_=require("./icon-DyjaxKWq.cjs"),z=require("./button-6CFvwtSz.cjs"),O=require("./dist-SXTf0-_7.cjs"),M=require("./v4-BDi_Luux.cjs");let r=require("react/jsx-runtime"),i=require("react");var U=.04,F=.3;var G={content:"Undo",onClick:()=>{}},d=u.CSS_CLASS.context.sonner,W=d.layout,$=d.elementWrapper,K=d.content,Y=d.icon,J=d.contentTitle,Q=d.contentDescription,X=d.buttonWrapper,Z={"bottom-center":d.layoutBottomCenter,"bottom-left":d.layoutBottomLeft,"bottom-right":d.layoutBottomRight,"top-right":d.layoutTopRight,"top-left":d.layoutTopLeft,"top-center":d.layoutTopCenter},p=e=>P.setClasses([W,Z[e]]),ee=e=>({"--context-sonner-gap":`${e.gap}px`,"--context-sonner-z-index":`${e.zIndex??0}`}),ne=e=>{const t=u.CSS_VARS.genre.button[e];return{"--context-sonner-wrapper-background":t.background.index,"--context-sonner-wrapper-border-color":t.border.index,"--context-sonner-wrapper-box-shadow":e==="primary"||e==="secondary"?u.CSS_VARS.palette.shadowPrimaryLight:u.CSS_VARS.palette.shadowSecondaryLight,"--context-sonner-wrapper-box-shadow-hover":e==="primary"||e==="secondary"?u.CSS_VARS.palette.shadowSecondaryLight:u.CSS_VARS.palette.shadowPrimaryLight,"--context-sonner-icon-color":t.color.index,"--context-sonner-title-color":t.color.index,"--context-sonner-description-color":t.color.index}},k=O.createContext(null),te=e=>{const t=(0,i.useMemo)(()=>e.visibleToasts,[e.visibleToasts]),S=(0,i.useMemo)(()=>e?.default?.description,[e?.default?.description]),f=(0,i.useMemo)(()=>e?.default?.title,[e?.default?.title]),g=(0,i.useMemo)(()=>e?.default?.button,[e?.default?.button]),b=(0,i.useMemo)(()=>e?.default?.hidingTime,[e?.default?.hidingTime]),I=(0,i.useMemo)(()=>e?.default?.hidingMode??"clickOnButton",[e?.default?.hidingMode]),E=(0,i.useMemo)(()=>e?.default?.genre??"product",[e?.default?.genre]),w=(0,i.useMemo)(()=>e.position.includes("top"),[e.position]),[C,y]=(0,i.useState)([]),[R,L]=(0,i.useState)(!1),N=(0,i.useCallback)(()=>{L(!0)},[]),T=(0,i.useCallback)(()=>{L(!1)},[]),x=(0,i.useCallback)(n=>{y(a=>{const s=a.find(o=>o.id===n);if(!s)return a;const c=s.index,l=a.filter(o=>o.id!==n).map(o=>({...o,index:o.index>c?o.index-1:o.index}));return l.length===0&&T(),l})},[T]),m=(0,i.useCallback)(n=>{const a=n.id??M.v4(),s=n.hidingTime??b;y(c=>{const l=c.findIndex(h=>h.id===a);let o;if(l!==-1)o=[...c],o[l]={...n,id:a,index:c[l].index};else{o=c.map(v=>({...v,index:v.index+1}));const h={...n,id:a,index:0};o.unshift(h)}return o}),s!==void 0&&setTimeout(()=>{x(a)},s)},[b,x]),D=(0,i.useCallback)((n,a,s)=>{const c=M.v4();return m({...a,id:c,isLoading:!0}),n.then(l=>{m({...s(l,void 0),id:c})}).catch(l=>{m({...s(void 0,l),id:c})})},[m]),q=(0,i.useCallback)(n=>{x(n)},[x]);return(0,i.useEffect)(()=>()=>{y([])},[]),(0,r.jsxs)(k.Provider,{value:{toast:m,promise:D,remove:x,contentHistory:C},children:[(0,r.jsx)("div",{className:p(e.position),style:ee({gap:e.gap,zIndex:e.zIndex??100}),onMouseEnter:N,onMouseLeave:T,children:(0,r.jsx)(H.AnimatePresence,{children:C.map(n=>{const a=n.index,s=t?a>t:!1,c=t?a>t-1:!1,l=t?a===t-1:!1,o=n.genre??E,h=o,v=n.hidingMode??I,V="content"in n?n.content:!1,j="title"in n?n.title:!1,A="description"in n?n.description:!1;return(0,r.jsx)(oe,{isMoreThanLastViewIndexPlusOne:s,isMoreThanLastViewIndex:c,isLastViewIndex:l,isTop:w,id:n.id,icon:n.icon,isLoading:n.isLoading,index:a,buttonGenre:h,hidingMode:v,isHovered:R,genre:o,content:V,title:j||f,description:A||S,button:n.button??g??G,handleOnClick:q},n.id)})})}),e.children]})},ie=e=>(0,r.jsx)(B.motion.div,{layout:!0,initial:{opacity:0,scale:1,y:e.isLastViewIndex?e.isTop?100:-100:e.isTop?-100:100},animate:{y:0,opacity:e.isMoreThanLastViewIndex?0:1,pointerEvents:e.isMoreThanLastViewIndex?"none":"auto",display:e.isMoreThanLastViewIndex?"none":"flex",scale:e.isHovered?1:Math.max(1-e.index*U,.88),marginTop:e.isTop?e.isHovered||e.index===0?"0px":"-65px":"0px",marginBottom:e.isTop||e.isHovered||e.index===0?"0px":"-65px"},style:{zIndex:-e.index},whileInView:{opacity:e.isMoreThanLastViewIndex?0:1},exit:{opacity:0,y:e.isTop?-100:100},transition:{type:"spring",duration:F},children:(0,r.jsxs)("div",{className:$,style:ne(e.genre),role:e.hidingMode==="clickOnSonner"?"button":void 0,tabIndex:e.hidingMode==="clickOnSonner"?0:void 0,onClick:()=>e.hidingMode==="clickOnSonner"&&e.handleOnClick(e.id,"clickOnSonner"),onKeyDown:t=>{e.hidingMode==="clickOnSonner"&&(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),e.handleOnClick(e.id,"clickOnSonner"))},children:[(e.isLoading||e.icon)&&(0,r.jsx)("div",{className:Y,children:e.isLoading?(0,r.jsx)(_.Icon,{size:"medium",type:"loading",name:"Line"}):e.icon&&(0,r.jsx)(_.Icon,{...e.icon,size:e.icon.size??"medium"})}),(0,r.jsx)("div",{className:K,children:e.content?e.content:(0,r.jsxs)(r.Fragment,{children:[e.title&&(0,r.jsx)("div",{className:J,children:e.title}),e.description&&(0,r.jsx)("div",{className:Q,children:e.description})]})}),e.button&&"content"in e.button&&e.button?.content&&(0,r.jsx)("div",{className:X,children:(0,r.jsx)(z.Button,{genre:e.buttonGenre,size:"small",onClick:()=>e.hidingMode==="clickOnButton"&&e.handleOnClick(e.id,"clickOnButton"),children:e.button.content})})]})},e.id),oe=(0,i.memo)(ie),re=e=>{const t=O.useContextSelector(k,S=>S?e.reduce((f,g)=>(f[g]=S[g],f),{}):null);if(!t)throw new Error("useSonner must be used within an ProviderSonner");return t};Object.defineProperty(exports,"ProviderSonner",{enumerable:!0,get:function(){return te}});Object.defineProperty(exports,"useSonner",{enumerable:!0,get:function(){return re}});
1
+ const ae=require("./chunk-Dd8m0Ver.cjs"),u=require("./utils-DCIq-5FL.cjs"),P=require("./functions-CZrZU5U0.cjs"),B=require("./proxy-BDese6Pb.cjs"),H=require("./AnimatePresence-DeKd4Eek.cjs"),_=require("./icon-DyjaxKWq.cjs"),z=require("./button-C1H35JQG.cjs"),O=require("./dist-SXTf0-_7.cjs"),M=require("./v4-BDi_Luux.cjs");let r=require("react/jsx-runtime"),i=require("react");var U=.04,F=.3;var G={content:"Undo",onClick:()=>{}},d=u.CSS_CLASS.context.sonner,W=d.layout,$=d.elementWrapper,K=d.content,Y=d.icon,J=d.contentTitle,Q=d.contentDescription,X=d.buttonWrapper,Z={"bottom-center":d.layoutBottomCenter,"bottom-left":d.layoutBottomLeft,"bottom-right":d.layoutBottomRight,"top-right":d.layoutTopRight,"top-left":d.layoutTopLeft,"top-center":d.layoutTopCenter},p=e=>P.setClasses([W,Z[e]]),ee=e=>({"--context-sonner-gap":`${e.gap}px`,"--context-sonner-z-index":`${e.zIndex??0}`}),ne=e=>{const t=u.CSS_VARS.genre.button[e];return{"--context-sonner-wrapper-background":t.background.index,"--context-sonner-wrapper-border-color":t.border.index,"--context-sonner-wrapper-box-shadow":e==="primary"||e==="secondary"?u.CSS_VARS.palette.shadowPrimaryLight:u.CSS_VARS.palette.shadowSecondaryLight,"--context-sonner-wrapper-box-shadow-hover":e==="primary"||e==="secondary"?u.CSS_VARS.palette.shadowSecondaryLight:u.CSS_VARS.palette.shadowPrimaryLight,"--context-sonner-icon-color":t.color.index,"--context-sonner-title-color":t.color.index,"--context-sonner-description-color":t.color.index}},k=O.createContext(null),te=e=>{const t=(0,i.useMemo)(()=>e.visibleToasts,[e.visibleToasts]),S=(0,i.useMemo)(()=>e?.default?.description,[e?.default?.description]),f=(0,i.useMemo)(()=>e?.default?.title,[e?.default?.title]),g=(0,i.useMemo)(()=>e?.default?.button,[e?.default?.button]),b=(0,i.useMemo)(()=>e?.default?.hidingTime,[e?.default?.hidingTime]),I=(0,i.useMemo)(()=>e?.default?.hidingMode??"clickOnButton",[e?.default?.hidingMode]),E=(0,i.useMemo)(()=>e?.default?.genre??"product",[e?.default?.genre]),w=(0,i.useMemo)(()=>e.position.includes("top"),[e.position]),[C,y]=(0,i.useState)([]),[R,L]=(0,i.useState)(!1),N=(0,i.useCallback)(()=>{L(!0)},[]),T=(0,i.useCallback)(()=>{L(!1)},[]),x=(0,i.useCallback)(n=>{y(a=>{const s=a.find(o=>o.id===n);if(!s)return a;const c=s.index,l=a.filter(o=>o.id!==n).map(o=>({...o,index:o.index>c?o.index-1:o.index}));return l.length===0&&T(),l})},[T]),m=(0,i.useCallback)(n=>{const a=n.id??M.v4(),s=n.hidingTime??b;y(c=>{const l=c.findIndex(h=>h.id===a);let o;if(l!==-1)o=[...c],o[l]={...n,id:a,index:c[l].index};else{o=c.map(v=>({...v,index:v.index+1}));const h={...n,id:a,index:0};o.unshift(h)}return o}),s!==void 0&&setTimeout(()=>{x(a)},s)},[b,x]),D=(0,i.useCallback)((n,a,s)=>{const c=M.v4();return m({...a,id:c,isLoading:!0}),n.then(l=>{m({...s(l,void 0),id:c})}).catch(l=>{m({...s(void 0,l),id:c})})},[m]),q=(0,i.useCallback)(n=>{x(n)},[x]);return(0,i.useEffect)(()=>()=>{y([])},[]),(0,r.jsxs)(k.Provider,{value:{toast:m,promise:D,remove:x,contentHistory:C},children:[(0,r.jsx)("div",{className:p(e.position),style:ee({gap:e.gap,zIndex:e.zIndex??100}),onMouseEnter:N,onMouseLeave:T,children:(0,r.jsx)(H.AnimatePresence,{children:C.map(n=>{const a=n.index,s=t?a>t:!1,c=t?a>t-1:!1,l=t?a===t-1:!1,o=n.genre??E,h=o,v=n.hidingMode??I,V="content"in n?n.content:!1,j="title"in n?n.title:!1,A="description"in n?n.description:!1;return(0,r.jsx)(oe,{isMoreThanLastViewIndexPlusOne:s,isMoreThanLastViewIndex:c,isLastViewIndex:l,isTop:w,id:n.id,icon:n.icon,isLoading:n.isLoading,index:a,buttonGenre:h,hidingMode:v,isHovered:R,genre:o,content:V,title:j||f,description:A||S,button:n.button??g??G,handleOnClick:q},n.id)})})}),e.children]})},ie=e=>(0,r.jsx)(B.motion.div,{layout:!0,initial:{opacity:0,scale:1,y:e.isLastViewIndex?e.isTop?100:-100:e.isTop?-100:100},animate:{y:0,opacity:e.isMoreThanLastViewIndex?0:1,pointerEvents:e.isMoreThanLastViewIndex?"none":"auto",display:e.isMoreThanLastViewIndex?"none":"flex",scale:e.isHovered?1:Math.max(1-e.index*U,.88),marginTop:e.isTop?e.isHovered||e.index===0?"0px":"-65px":"0px",marginBottom:e.isTop||e.isHovered||e.index===0?"0px":"-65px"},style:{zIndex:-e.index},whileInView:{opacity:e.isMoreThanLastViewIndex?0:1},exit:{opacity:0,y:e.isTop?-100:100},transition:{type:"spring",duration:F},children:(0,r.jsxs)("div",{className:$,style:ne(e.genre),role:e.hidingMode==="clickOnSonner"?"button":void 0,tabIndex:e.hidingMode==="clickOnSonner"?0:void 0,onClick:()=>e.hidingMode==="clickOnSonner"&&e.handleOnClick(e.id,"clickOnSonner"),onKeyDown:t=>{e.hidingMode==="clickOnSonner"&&(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),e.handleOnClick(e.id,"clickOnSonner"))},children:[(e.isLoading||e.icon)&&(0,r.jsx)("div",{className:Y,children:e.isLoading?(0,r.jsx)(_.Icon,{size:"medium",type:"loading",name:"Line"}):e.icon&&(0,r.jsx)(_.Icon,{...e.icon,size:e.icon.size??"medium"})}),(0,r.jsx)("div",{className:K,children:e.content?e.content:(0,r.jsxs)(r.Fragment,{children:[e.title&&(0,r.jsx)("div",{className:J,children:e.title}),e.description&&(0,r.jsx)("div",{className:Q,children:e.description})]})}),e.button&&"content"in e.button&&e.button?.content&&(0,r.jsx)("div",{className:X,children:(0,r.jsx)(z.Button,{genre:e.buttonGenre,size:"small",onClick:()=>e.hidingMode==="clickOnButton"&&e.handleOnClick(e.id,"clickOnButton"),children:e.button.content})})]})},e.id),oe=(0,i.memo)(ie),re=e=>{const t=O.useContextSelector(k,S=>S?e.reduce((f,g)=>(f[g]=S[g],f),{}):null);if(!t)throw new Error("useSonner must be used within an ProviderSonner");return t};Object.defineProperty(exports,"ProviderSonner",{enumerable:!0,get:function(){return te}});Object.defineProperty(exports,"useSonner",{enumerable:!0,get:function(){return re}});
2
2
 
3
- //# sourceMappingURL=context-sonner-B-eO7pwI.cjs.map
3
+ //# sourceMappingURL=context-sonner-C8aMJPWz.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-sonner-B-eO7pwI.cjs","names":[],"sources":["../src/contexts/context-sonner/context.constants.ts","../src/contexts/context-sonner/context.styles.tsx","../src/contexts/context-sonner/context.tsx","../src/contexts/context-sonner/context.hooks.ts"],"sourcesContent":["import { IThemeGenreSonner } from '@local/styles/utils/types';\n\nimport { ISonnerProvider } from './context.types';\n\nexport const DEFAULT_PROVIDER_SONNER_Z_INDEX = 100;\nexport const DEFAULT_PROVIDER_SONNER_SCALE = 0.04;\nexport const DEFAULT_PROVIDER_SONNER_Y = 100;\nexport const DEFAULT_PROVIDER_SONNER_DURATION = 0.3;\nexport const DEFAULT_PROVIDER_SONNER_GENRE: IThemeGenreSonner = 'product';\nexport const DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM = 65;\nexport const DEFAULT_PROVIDER_SONNER_BUTTON: ISonnerProvider['default']['button'] = {\n content: 'Undo',\n onClick: () => {},\n};\n","import { CSS_CLASS, CSS_VARS } from '@local/styles/utils';\nimport { setClasses } from '@local/styles/utils/functions';\nimport { IThemeGenreSonner } from '@local/styles/utils/types';\n\nimport { CSSProperties } from 'react';\n\nimport { ISonnerProvider } from './context.types';\n\nexport const SonnerClass = CSS_CLASS.context.sonner;\n\nexport const SonnerLayout = SonnerClass.layout;\nexport const SonnerElementWrapper = SonnerClass.elementWrapper;\nexport const SonnerContent = SonnerClass.content;\nexport const SonnerIcon = SonnerClass.icon;\nexport const SonnerContentTitle = SonnerClass.contentTitle;\nexport const SonnerContentDescription = SonnerClass.contentDescription;\nexport const SonnerButtonWrapper = SonnerClass.buttonWrapper;\n\nconst SONNER_LAYOUT_POSITION_CLASS: Record<ISonnerProvider['position'], string> = {\n 'bottom-center': SonnerClass.layoutBottomCenter,\n 'bottom-left': SonnerClass.layoutBottomLeft,\n 'bottom-right': SonnerClass.layoutBottomRight,\n 'top-right': SonnerClass.layoutTopRight,\n 'top-left': SonnerClass.layoutTopLeft,\n 'top-center': SonnerClass.layoutTopCenter,\n};\n\ntype ISonnerStyleWithVars = CSSProperties & Record<string, string>;\n\nexport const getSonnerLayoutClassName = (position: ISonnerProvider['position']) =>\n setClasses([SonnerLayout, SONNER_LAYOUT_POSITION_CLASS[position]]);\n\nexport const getSonnerLayoutStyle = (props: Pick<ISonnerProvider, 'gap' | 'zIndex'>): ISonnerStyleWithVars => ({\n '--context-sonner-gap': `${props.gap}px`,\n '--context-sonner-z-index': `${props.zIndex ?? 0}`,\n});\n\nexport const getSonnerElementWrapperStyle = (genre: IThemeGenreSonner): ISonnerStyleWithVars => {\n const genreTheme = CSS_VARS.genre.button[genre];\n\n return {\n '--context-sonner-wrapper-background': genreTheme.background.index,\n '--context-sonner-wrapper-border-color': genreTheme.border.index,\n '--context-sonner-wrapper-box-shadow':\n genre === 'primary' || genre === 'secondary'\n ? CSS_VARS.palette.shadowPrimaryLight\n : CSS_VARS.palette.shadowSecondaryLight,\n '--context-sonner-wrapper-box-shadow-hover':\n genre === 'primary' || genre === 'secondary'\n ? CSS_VARS.palette.shadowSecondaryLight\n : CSS_VARS.palette.shadowPrimaryLight,\n '--context-sonner-icon-color': genreTheme.color.index,\n '--context-sonner-title-color': genreTheme.color.index,\n '--context-sonner-description-color': genreTheme.color.index,\n };\n};\n","import { Button } from '@local/components/button';\nimport { Icon } from '@local/components/icon';\n\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { FC, memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport { createContext } from 'use-context-selector';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n DEFAULT_PROVIDER_SONNER_BUTTON,\n DEFAULT_PROVIDER_SONNER_DURATION,\n DEFAULT_PROVIDER_SONNER_GENRE,\n DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM,\n DEFAULT_PROVIDER_SONNER_SCALE,\n DEFAULT_PROVIDER_SONNER_Y,\n DEFAULT_PROVIDER_SONNER_Z_INDEX,\n} from './context.constants';\nimport {\n getSonnerElementWrapperStyle,\n getSonnerLayoutClassName,\n getSonnerLayoutStyle,\n SonnerButtonWrapper,\n SonnerContent,\n SonnerContentDescription,\n SonnerContentTitle,\n SonnerElementWrapper,\n SonnerIcon,\n} from './context.styles';\nimport {\n ISonnerContent,\n ISonnerContentStandard,\n ISonnerContext,\n ISonnerElement,\n ISonnerProvider,\n} from './context.types';\n\nexport const SonnerContext = createContext<ISonnerContext | null>(null);\n\nexport const ProviderSonner: FC<ISonnerProvider> = (props) => {\n const memoVisibleToasts: ISonnerProvider['visibleToasts'] = useMemo(() => props.visibleToasts, [props.visibleToasts]);\n const memoDefaultDescription: ISonnerProvider['default']['description'] = useMemo(\n () => props?.default?.description,\n [props?.default?.description],\n );\n const memoDefaultTitle: ISonnerProvider['default']['title'] = useMemo(\n () => props?.default?.title,\n [props?.default?.title],\n );\n const memoDefaultButton: ISonnerProvider['default']['button'] = useMemo(\n () => props?.default?.button,\n [props?.default?.button],\n );\n const memoDefaultHidingTime: ISonnerProvider['default']['hidingTime'] = useMemo(\n () => props?.default?.hidingTime,\n [props?.default?.hidingTime],\n );\n const memoDefaultHidingMode: ISonnerProvider['default']['hidingMode'] = useMemo(\n () => props?.default?.hidingMode ?? 'clickOnButton',\n [props?.default?.hidingMode],\n );\n const memoDefaultGenre = useMemo(\n () => props?.default?.genre ?? DEFAULT_PROVIDER_SONNER_GENRE,\n [props?.default?.genre],\n );\n\n const isTop = useMemo(() => props.position.includes('top'), [props.position]);\n\n const [contentHistory, setContentHistory] = useState<ISonnerContent[]>([]);\n\n const [isHovered, setIsHovered] = useState(false);\n\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n const remove: ISonnerContext['remove'] = useCallback(\n (id) => {\n setContentHistory((prev) => {\n const itemToRemove = prev.find((item) => item.id === id);\n\n if (!itemToRemove) return prev;\n\n const indexToRemove = itemToRemove.index;\n\n const updatedHistory = prev\n .filter((item) => item.id !== id)\n .map((item) => ({\n ...item,\n index: item.index > indexToRemove ? item.index - 1 : item.index,\n }));\n\n if (updatedHistory.length === 0) handleMouseLeave();\n\n return updatedHistory;\n });\n },\n [handleMouseLeave],\n );\n\n const toast: ISonnerContext['toast'] = useCallback(\n (content) => {\n const id = content.id ?? uuidv4();\n\n const hidingTime = content.hidingTime ?? memoDefaultHidingTime;\n\n setContentHistory((prev) => {\n const existingIndex = prev.findIndex((item) => item.id === id);\n\n let updatedHistory: ISonnerContent[];\n if (existingIndex !== -1) {\n // Replace existing item\n updatedHistory = [...prev];\n updatedHistory[existingIndex] = { ...content, id, index: prev[existingIndex].index };\n } else {\n // Add new item\n updatedHistory = prev.map((item) => ({\n ...item,\n index: item.index + 1,\n }));\n const newContent = { ...content, id, index: 0 };\n updatedHistory.unshift(newContent);\n }\n\n return updatedHistory;\n });\n\n if (hidingTime !== undefined) {\n setTimeout(() => {\n remove(id);\n }, hidingTime);\n }\n },\n [memoDefaultHidingTime, remove],\n );\n\n const promise: ISonnerContext['promise'] = useCallback(\n <T,>(\n promise: Promise<T>,\n expectation: Omit<ISonnerContent, 'index'>,\n localToast: (success: T | undefined, error: unknown | undefined) => Omit<ISonnerContent, 'index'>,\n ) => {\n const id = uuidv4();\n toast({ ...expectation, id, isLoading: true });\n\n return promise\n .then((result) => {\n toast({ ...localToast(result, undefined), id });\n })\n .catch((error) => {\n toast({ ...localToast(undefined, error), id });\n });\n },\n [toast],\n );\n\n const handleOnClick = useCallback(\n (id: ISonnerContentStandard['id']) => {\n remove(id);\n },\n [remove],\n );\n\n useEffect(() => {\n return () => {\n setContentHistory([]);\n };\n }, []);\n return (\n <SonnerContext.Provider value={{ toast, promise, remove, contentHistory }}>\n <div\n className={getSonnerLayoutClassName(props.position)}\n style={getSonnerLayoutStyle({\n gap: props.gap,\n zIndex: props.zIndex ?? DEFAULT_PROVIDER_SONNER_Z_INDEX,\n })}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <AnimatePresence>\n {contentHistory.map((content) => {\n const index = content.index;\n const isMoreThanLastViewIndexPlusOne = memoVisibleToasts ? index > memoVisibleToasts : false;\n const isMoreThanLastViewIndex = memoVisibleToasts ? index > memoVisibleToasts - 1 : false;\n const isLastViewIndex = memoVisibleToasts ? index === memoVisibleToasts - 1 : false;\n const localGenre = content.genre ?? memoDefaultGenre;\n const buttonGenre = localGenre;\n const hidingMode = content.hidingMode ?? memoDefaultHidingMode;\n\n const localContent = 'content' in content ? content.content : false;\n const localTitle = 'title' in content ? content.title : false;\n const localDescription = 'description' in content ? content.description : false;\n return (\n <MemoizedSonnerElement\n isMoreThanLastViewIndexPlusOne={isMoreThanLastViewIndexPlusOne}\n isMoreThanLastViewIndex={isMoreThanLastViewIndex}\n isLastViewIndex={isLastViewIndex}\n isTop={isTop}\n key={content.id}\n id={content.id}\n icon={content.icon}\n isLoading={content.isLoading}\n index={index}\n buttonGenre={buttonGenre}\n hidingMode={hidingMode}\n isHovered={isHovered}\n genre={localGenre}\n content={localContent}\n title={localTitle || memoDefaultTitle}\n description={localDescription || memoDefaultDescription}\n button={content.button ?? memoDefaultButton ?? DEFAULT_PROVIDER_SONNER_BUTTON}\n handleOnClick={handleOnClick}\n />\n );\n })}\n </AnimatePresence>\n </div>\n {props.children}\n </SonnerContext.Provider>\n );\n};\n\nconst SonnerElement = (props: ISonnerElement) => {\n return (\n <motion.div\n key={props.id}\n layout\n initial={{\n opacity: 0,\n scale: 1,\n y: props.isLastViewIndex\n ? !props.isTop\n ? -DEFAULT_PROVIDER_SONNER_Y\n : DEFAULT_PROVIDER_SONNER_Y\n : !props.isTop\n ? DEFAULT_PROVIDER_SONNER_Y\n : -DEFAULT_PROVIDER_SONNER_Y,\n }}\n animate={{\n y: 0,\n opacity: props.isMoreThanLastViewIndex ? 0 : 1,\n pointerEvents: props.isMoreThanLastViewIndex ? 'none' : 'auto',\n display: props.isMoreThanLastViewIndex ? 'none' : 'flex',\n scale: !props.isHovered ? Math.max(1 - props.index * DEFAULT_PROVIDER_SONNER_SCALE, 0.88) : 1,\n marginTop: props.isTop\n ? props.isHovered || props.index === 0\n ? `0px`\n : `-${DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM}px`\n : '0px',\n marginBottom: !props.isTop\n ? props.isHovered || props.index === 0\n ? `0px`\n : `-${DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM}px`\n : '0px',\n }}\n style={{\n zIndex: -props.index,\n }}\n whileInView={{ opacity: props.isMoreThanLastViewIndex ? 0 : 1 }}\n exit={{ opacity: 0, y: !props.isTop ? DEFAULT_PROVIDER_SONNER_Y : -DEFAULT_PROVIDER_SONNER_Y }}\n transition={{ type: 'spring', duration: DEFAULT_PROVIDER_SONNER_DURATION }}\n >\n <div\n className={SonnerElementWrapper}\n style={getSonnerElementWrapperStyle(props.genre)}\n role={props.hidingMode === 'clickOnSonner' ? 'button' : undefined}\n tabIndex={props.hidingMode === 'clickOnSonner' ? 0 : undefined}\n onClick={() => props.hidingMode === 'clickOnSonner' && props.handleOnClick(props.id, 'clickOnSonner')}\n onKeyDown={(event) => {\n if (props.hidingMode !== 'clickOnSonner') return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n props.handleOnClick(props.id, 'clickOnSonner');\n }\n }}\n >\n {(props.isLoading || props.icon) && (\n <div className={SonnerIcon}>\n {props.isLoading ? (\n <Icon size='medium' type='loading' name='Line' />\n ) : (\n props.icon && <Icon {...props.icon} size={props.icon.size ?? 'medium'} />\n )}\n </div>\n )}\n <div className={SonnerContent}>\n {props.content ? (\n props.content\n ) : (\n <>\n {props.title && <div className={SonnerContentTitle}>{props.title}</div>}\n {props.description && <div className={SonnerContentDescription}>{props.description}</div>}\n </>\n )}\n </div>\n\n {props.button && 'content' in props.button && props.button?.content && (\n <div className={SonnerButtonWrapper}>\n <Button\n genre={props.buttonGenre}\n size='small'\n onClick={() => props.hidingMode === 'clickOnButton' && props.handleOnClick(props.id, 'clickOnButton')}\n >\n {props.button.content}\n </Button>\n </div>\n )}\n </div>\n </motion.div>\n );\n};\nconst MemoizedSonnerElement = memo(SonnerElement);\n","import { useContextSelector } from 'use-context-selector';\n\nimport { SonnerContext } from './context';\nimport { ISonnerContext, IUseSonnerDependencies } from './context.types';\n\nexport const useSonner = (props: IUseSonnerDependencies): ISonnerContext => {\n const context = useContextSelector(SonnerContext, (v) => {\n return v\n ? props.reduce((acc, prop) => {\n acc[prop] = v[prop];\n return acc;\n }, {} as any)\n : null;\n });\n if (!context) {\n throw new Error('useSonner must be used within an ProviderSonner');\n }\n return context;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"context-sonner-C8aMJPWz.cjs","names":[],"sources":["../src/contexts/context-sonner/context.constants.ts","../src/contexts/context-sonner/context.styles.tsx","../src/contexts/context-sonner/context.tsx","../src/contexts/context-sonner/context.hooks.ts"],"sourcesContent":["import { IThemeGenreSonner } from '@local/styles/utils/types';\n\nimport { ISonnerProvider } from './context.types';\n\nexport const DEFAULT_PROVIDER_SONNER_Z_INDEX = 100;\nexport const DEFAULT_PROVIDER_SONNER_SCALE = 0.04;\nexport const DEFAULT_PROVIDER_SONNER_Y = 100;\nexport const DEFAULT_PROVIDER_SONNER_DURATION = 0.3;\nexport const DEFAULT_PROVIDER_SONNER_GENRE: IThemeGenreSonner = 'product';\nexport const DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM = 65;\nexport const DEFAULT_PROVIDER_SONNER_BUTTON: ISonnerProvider['default']['button'] = {\n content: 'Undo',\n onClick: () => {},\n};\n","import { CSS_CLASS, CSS_VARS } from '@local/styles/utils';\nimport { setClasses } from '@local/styles/utils/functions';\nimport { IThemeGenreSonner } from '@local/styles/utils/types';\n\nimport { CSSProperties } from 'react';\n\nimport { ISonnerProvider } from './context.types';\n\nexport const SonnerClass = CSS_CLASS.context.sonner;\n\nexport const SonnerLayout = SonnerClass.layout;\nexport const SonnerElementWrapper = SonnerClass.elementWrapper;\nexport const SonnerContent = SonnerClass.content;\nexport const SonnerIcon = SonnerClass.icon;\nexport const SonnerContentTitle = SonnerClass.contentTitle;\nexport const SonnerContentDescription = SonnerClass.contentDescription;\nexport const SonnerButtonWrapper = SonnerClass.buttonWrapper;\n\nconst SONNER_LAYOUT_POSITION_CLASS: Record<ISonnerProvider['position'], string> = {\n 'bottom-center': SonnerClass.layoutBottomCenter,\n 'bottom-left': SonnerClass.layoutBottomLeft,\n 'bottom-right': SonnerClass.layoutBottomRight,\n 'top-right': SonnerClass.layoutTopRight,\n 'top-left': SonnerClass.layoutTopLeft,\n 'top-center': SonnerClass.layoutTopCenter,\n};\n\ntype ISonnerStyleWithVars = CSSProperties & Record<string, string>;\n\nexport const getSonnerLayoutClassName = (position: ISonnerProvider['position']) =>\n setClasses([SonnerLayout, SONNER_LAYOUT_POSITION_CLASS[position]]);\n\nexport const getSonnerLayoutStyle = (props: Pick<ISonnerProvider, 'gap' | 'zIndex'>): ISonnerStyleWithVars => ({\n '--context-sonner-gap': `${props.gap}px`,\n '--context-sonner-z-index': `${props.zIndex ?? 0}`,\n});\n\nexport const getSonnerElementWrapperStyle = (genre: IThemeGenreSonner): ISonnerStyleWithVars => {\n const genreTheme = CSS_VARS.genre.button[genre];\n\n return {\n '--context-sonner-wrapper-background': genreTheme.background.index,\n '--context-sonner-wrapper-border-color': genreTheme.border.index,\n '--context-sonner-wrapper-box-shadow':\n genre === 'primary' || genre === 'secondary'\n ? CSS_VARS.palette.shadowPrimaryLight\n : CSS_VARS.palette.shadowSecondaryLight,\n '--context-sonner-wrapper-box-shadow-hover':\n genre === 'primary' || genre === 'secondary'\n ? CSS_VARS.palette.shadowSecondaryLight\n : CSS_VARS.palette.shadowPrimaryLight,\n '--context-sonner-icon-color': genreTheme.color.index,\n '--context-sonner-title-color': genreTheme.color.index,\n '--context-sonner-description-color': genreTheme.color.index,\n };\n};\n","import { Button } from '@local/components/button';\nimport { Icon } from '@local/components/icon';\n\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { FC, memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport { createContext } from 'use-context-selector';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n DEFAULT_PROVIDER_SONNER_BUTTON,\n DEFAULT_PROVIDER_SONNER_DURATION,\n DEFAULT_PROVIDER_SONNER_GENRE,\n DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM,\n DEFAULT_PROVIDER_SONNER_SCALE,\n DEFAULT_PROVIDER_SONNER_Y,\n DEFAULT_PROVIDER_SONNER_Z_INDEX,\n} from './context.constants';\nimport {\n getSonnerElementWrapperStyle,\n getSonnerLayoutClassName,\n getSonnerLayoutStyle,\n SonnerButtonWrapper,\n SonnerContent,\n SonnerContentDescription,\n SonnerContentTitle,\n SonnerElementWrapper,\n SonnerIcon,\n} from './context.styles';\nimport {\n ISonnerContent,\n ISonnerContentStandard,\n ISonnerContext,\n ISonnerElement,\n ISonnerProvider,\n} from './context.types';\n\nexport const SonnerContext = createContext<ISonnerContext | null>(null);\n\nexport const ProviderSonner: FC<ISonnerProvider> = (props) => {\n const memoVisibleToasts: ISonnerProvider['visibleToasts'] = useMemo(() => props.visibleToasts, [props.visibleToasts]);\n const memoDefaultDescription: ISonnerProvider['default']['description'] = useMemo(\n () => props?.default?.description,\n [props?.default?.description],\n );\n const memoDefaultTitle: ISonnerProvider['default']['title'] = useMemo(\n () => props?.default?.title,\n [props?.default?.title],\n );\n const memoDefaultButton: ISonnerProvider['default']['button'] = useMemo(\n () => props?.default?.button,\n [props?.default?.button],\n );\n const memoDefaultHidingTime: ISonnerProvider['default']['hidingTime'] = useMemo(\n () => props?.default?.hidingTime,\n [props?.default?.hidingTime],\n );\n const memoDefaultHidingMode: ISonnerProvider['default']['hidingMode'] = useMemo(\n () => props?.default?.hidingMode ?? 'clickOnButton',\n [props?.default?.hidingMode],\n );\n const memoDefaultGenre = useMemo(\n () => props?.default?.genre ?? DEFAULT_PROVIDER_SONNER_GENRE,\n [props?.default?.genre],\n );\n\n const isTop = useMemo(() => props.position.includes('top'), [props.position]);\n\n const [contentHistory, setContentHistory] = useState<ISonnerContent[]>([]);\n\n const [isHovered, setIsHovered] = useState(false);\n\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n const remove: ISonnerContext['remove'] = useCallback(\n (id) => {\n setContentHistory((prev) => {\n const itemToRemove = prev.find((item) => item.id === id);\n\n if (!itemToRemove) return prev;\n\n const indexToRemove = itemToRemove.index;\n\n const updatedHistory = prev\n .filter((item) => item.id !== id)\n .map((item) => ({\n ...item,\n index: item.index > indexToRemove ? item.index - 1 : item.index,\n }));\n\n if (updatedHistory.length === 0) handleMouseLeave();\n\n return updatedHistory;\n });\n },\n [handleMouseLeave],\n );\n\n const toast: ISonnerContext['toast'] = useCallback(\n (content) => {\n const id = content.id ?? uuidv4();\n\n const hidingTime = content.hidingTime ?? memoDefaultHidingTime;\n\n setContentHistory((prev) => {\n const existingIndex = prev.findIndex((item) => item.id === id);\n\n let updatedHistory: ISonnerContent[];\n if (existingIndex !== -1) {\n // Replace existing item\n updatedHistory = [...prev];\n updatedHistory[existingIndex] = { ...content, id, index: prev[existingIndex].index };\n } else {\n // Add new item\n updatedHistory = prev.map((item) => ({\n ...item,\n index: item.index + 1,\n }));\n const newContent = { ...content, id, index: 0 };\n updatedHistory.unshift(newContent);\n }\n\n return updatedHistory;\n });\n\n if (hidingTime !== undefined) {\n setTimeout(() => {\n remove(id);\n }, hidingTime);\n }\n },\n [memoDefaultHidingTime, remove],\n );\n\n const promise: ISonnerContext['promise'] = useCallback(\n <T,>(\n promise: Promise<T>,\n expectation: Omit<ISonnerContent, 'index'>,\n localToast: (success: T | undefined, error: unknown | undefined) => Omit<ISonnerContent, 'index'>,\n ) => {\n const id = uuidv4();\n toast({ ...expectation, id, isLoading: true });\n\n return promise\n .then((result) => {\n toast({ ...localToast(result, undefined), id });\n })\n .catch((error) => {\n toast({ ...localToast(undefined, error), id });\n });\n },\n [toast],\n );\n\n const handleOnClick = useCallback(\n (id: ISonnerContentStandard['id']) => {\n remove(id);\n },\n [remove],\n );\n\n useEffect(() => {\n return () => {\n setContentHistory([]);\n };\n }, []);\n return (\n <SonnerContext.Provider value={{ toast, promise, remove, contentHistory }}>\n <div\n className={getSonnerLayoutClassName(props.position)}\n style={getSonnerLayoutStyle({\n gap: props.gap,\n zIndex: props.zIndex ?? DEFAULT_PROVIDER_SONNER_Z_INDEX,\n })}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <AnimatePresence>\n {contentHistory.map((content) => {\n const index = content.index;\n const isMoreThanLastViewIndexPlusOne = memoVisibleToasts ? index > memoVisibleToasts : false;\n const isMoreThanLastViewIndex = memoVisibleToasts ? index > memoVisibleToasts - 1 : false;\n const isLastViewIndex = memoVisibleToasts ? index === memoVisibleToasts - 1 : false;\n const localGenre = content.genre ?? memoDefaultGenre;\n const buttonGenre = localGenre;\n const hidingMode = content.hidingMode ?? memoDefaultHidingMode;\n\n const localContent = 'content' in content ? content.content : false;\n const localTitle = 'title' in content ? content.title : false;\n const localDescription = 'description' in content ? content.description : false;\n return (\n <MemoizedSonnerElement\n isMoreThanLastViewIndexPlusOne={isMoreThanLastViewIndexPlusOne}\n isMoreThanLastViewIndex={isMoreThanLastViewIndex}\n isLastViewIndex={isLastViewIndex}\n isTop={isTop}\n key={content.id}\n id={content.id}\n icon={content.icon}\n isLoading={content.isLoading}\n index={index}\n buttonGenre={buttonGenre}\n hidingMode={hidingMode}\n isHovered={isHovered}\n genre={localGenre}\n content={localContent}\n title={localTitle || memoDefaultTitle}\n description={localDescription || memoDefaultDescription}\n button={content.button ?? memoDefaultButton ?? DEFAULT_PROVIDER_SONNER_BUTTON}\n handleOnClick={handleOnClick}\n />\n );\n })}\n </AnimatePresence>\n </div>\n {props.children}\n </SonnerContext.Provider>\n );\n};\n\nconst SonnerElement = (props: ISonnerElement) => {\n return (\n <motion.div\n key={props.id}\n layout\n initial={{\n opacity: 0,\n scale: 1,\n y: props.isLastViewIndex\n ? !props.isTop\n ? -DEFAULT_PROVIDER_SONNER_Y\n : DEFAULT_PROVIDER_SONNER_Y\n : !props.isTop\n ? DEFAULT_PROVIDER_SONNER_Y\n : -DEFAULT_PROVIDER_SONNER_Y,\n }}\n animate={{\n y: 0,\n opacity: props.isMoreThanLastViewIndex ? 0 : 1,\n pointerEvents: props.isMoreThanLastViewIndex ? 'none' : 'auto',\n display: props.isMoreThanLastViewIndex ? 'none' : 'flex',\n scale: !props.isHovered ? Math.max(1 - props.index * DEFAULT_PROVIDER_SONNER_SCALE, 0.88) : 1,\n marginTop: props.isTop\n ? props.isHovered || props.index === 0\n ? `0px`\n : `-${DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM}px`\n : '0px',\n marginBottom: !props.isTop\n ? props.isHovered || props.index === 0\n ? `0px`\n : `-${DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM}px`\n : '0px',\n }}\n style={{\n zIndex: -props.index,\n }}\n whileInView={{ opacity: props.isMoreThanLastViewIndex ? 0 : 1 }}\n exit={{ opacity: 0, y: !props.isTop ? DEFAULT_PROVIDER_SONNER_Y : -DEFAULT_PROVIDER_SONNER_Y }}\n transition={{ type: 'spring', duration: DEFAULT_PROVIDER_SONNER_DURATION }}\n >\n <div\n className={SonnerElementWrapper}\n style={getSonnerElementWrapperStyle(props.genre)}\n role={props.hidingMode === 'clickOnSonner' ? 'button' : undefined}\n tabIndex={props.hidingMode === 'clickOnSonner' ? 0 : undefined}\n onClick={() => props.hidingMode === 'clickOnSonner' && props.handleOnClick(props.id, 'clickOnSonner')}\n onKeyDown={(event) => {\n if (props.hidingMode !== 'clickOnSonner') return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n props.handleOnClick(props.id, 'clickOnSonner');\n }\n }}\n >\n {(props.isLoading || props.icon) && (\n <div className={SonnerIcon}>\n {props.isLoading ? (\n <Icon size='medium' type='loading' name='Line' />\n ) : (\n props.icon && <Icon {...props.icon} size={props.icon.size ?? 'medium'} />\n )}\n </div>\n )}\n <div className={SonnerContent}>\n {props.content ? (\n props.content\n ) : (\n <>\n {props.title && <div className={SonnerContentTitle}>{props.title}</div>}\n {props.description && <div className={SonnerContentDescription}>{props.description}</div>}\n </>\n )}\n </div>\n\n {props.button && 'content' in props.button && props.button?.content && (\n <div className={SonnerButtonWrapper}>\n <Button\n genre={props.buttonGenre}\n size='small'\n onClick={() => props.hidingMode === 'clickOnButton' && props.handleOnClick(props.id, 'clickOnButton')}\n >\n {props.button.content}\n </Button>\n </div>\n )}\n </div>\n </motion.div>\n );\n};\nconst MemoizedSonnerElement = memo(SonnerElement);\n","import { useContextSelector } from 'use-context-selector';\n\nimport { SonnerContext } from './context';\nimport { ISonnerContext, IUseSonnerDependencies } from './context.types';\n\nexport const useSonner = (props: IUseSonnerDependencies): ISonnerContext => {\n const context = useContextSelector(SonnerContext, (v) => {\n return v\n ? props.reduce((acc, prop) => {\n acc[prop] = v[prop];\n return acc;\n }, {} as any)\n : null;\n });\n if (!context) {\n throw new Error('useSonner must be used within an ProviderSonner');\n }\n return context;\n};\n"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { t as F } from "./functions-DzX-pTN8.js";
3
3
  import { t as G } from "./proxy-BFHkqO7P.js";
4
4
  import { t as W } from "./AnimatePresence-BWc2vFe-.js";
5
5
  import { r as I } from "./icon-Y-IZxLXB.js";
6
- import { t as $ } from "./button-D6Bg00Uh.js";
6
+ import { t as $ } from "./button-9k2nzpqW.js";
7
7
  import { n as j, t as K } from "./dist-ck-7oUux.js";
8
8
  import { t as w } from "./v4-CYaPyb-W.js";
9
9
  import { Fragment as Y, jsx as l, jsxs as b } from "react/jsx-runtime";
@@ -215,4 +215,4 @@ export {
215
215
  Oe as t
216
216
  };
217
217
 
218
- //# sourceMappingURL=context-sonner-CtCttHLD.js.map
218
+ //# sourceMappingURL=context-sonner-DNJWVKTw.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-sonner-CtCttHLD.js","names":[],"sources":["../src/contexts/context-sonner/context.constants.ts","../src/contexts/context-sonner/context.styles.tsx","../src/contexts/context-sonner/context.tsx","../src/contexts/context-sonner/context.hooks.ts"],"sourcesContent":["import { IThemeGenreSonner } from '@local/styles/utils/types';\n\nimport { ISonnerProvider } from './context.types';\n\nexport const DEFAULT_PROVIDER_SONNER_Z_INDEX = 100;\nexport const DEFAULT_PROVIDER_SONNER_SCALE = 0.04;\nexport const DEFAULT_PROVIDER_SONNER_Y = 100;\nexport const DEFAULT_PROVIDER_SONNER_DURATION = 0.3;\nexport const DEFAULT_PROVIDER_SONNER_GENRE: IThemeGenreSonner = 'product';\nexport const DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM = 65;\nexport const DEFAULT_PROVIDER_SONNER_BUTTON: ISonnerProvider['default']['button'] = {\n content: 'Undo',\n onClick: () => {},\n};\n","import { CSS_CLASS, CSS_VARS } from '@local/styles/utils';\nimport { setClasses } from '@local/styles/utils/functions';\nimport { IThemeGenreSonner } from '@local/styles/utils/types';\n\nimport { CSSProperties } from 'react';\n\nimport { ISonnerProvider } from './context.types';\n\nexport const SonnerClass = CSS_CLASS.context.sonner;\n\nexport const SonnerLayout = SonnerClass.layout;\nexport const SonnerElementWrapper = SonnerClass.elementWrapper;\nexport const SonnerContent = SonnerClass.content;\nexport const SonnerIcon = SonnerClass.icon;\nexport const SonnerContentTitle = SonnerClass.contentTitle;\nexport const SonnerContentDescription = SonnerClass.contentDescription;\nexport const SonnerButtonWrapper = SonnerClass.buttonWrapper;\n\nconst SONNER_LAYOUT_POSITION_CLASS: Record<ISonnerProvider['position'], string> = {\n 'bottom-center': SonnerClass.layoutBottomCenter,\n 'bottom-left': SonnerClass.layoutBottomLeft,\n 'bottom-right': SonnerClass.layoutBottomRight,\n 'top-right': SonnerClass.layoutTopRight,\n 'top-left': SonnerClass.layoutTopLeft,\n 'top-center': SonnerClass.layoutTopCenter,\n};\n\ntype ISonnerStyleWithVars = CSSProperties & Record<string, string>;\n\nexport const getSonnerLayoutClassName = (position: ISonnerProvider['position']) =>\n setClasses([SonnerLayout, SONNER_LAYOUT_POSITION_CLASS[position]]);\n\nexport const getSonnerLayoutStyle = (props: Pick<ISonnerProvider, 'gap' | 'zIndex'>): ISonnerStyleWithVars => ({\n '--context-sonner-gap': `${props.gap}px`,\n '--context-sonner-z-index': `${props.zIndex ?? 0}`,\n});\n\nexport const getSonnerElementWrapperStyle = (genre: IThemeGenreSonner): ISonnerStyleWithVars => {\n const genreTheme = CSS_VARS.genre.button[genre];\n\n return {\n '--context-sonner-wrapper-background': genreTheme.background.index,\n '--context-sonner-wrapper-border-color': genreTheme.border.index,\n '--context-sonner-wrapper-box-shadow':\n genre === 'primary' || genre === 'secondary'\n ? CSS_VARS.palette.shadowPrimaryLight\n : CSS_VARS.palette.shadowSecondaryLight,\n '--context-sonner-wrapper-box-shadow-hover':\n genre === 'primary' || genre === 'secondary'\n ? CSS_VARS.palette.shadowSecondaryLight\n : CSS_VARS.palette.shadowPrimaryLight,\n '--context-sonner-icon-color': genreTheme.color.index,\n '--context-sonner-title-color': genreTheme.color.index,\n '--context-sonner-description-color': genreTheme.color.index,\n };\n};\n","import { Button } from '@local/components/button';\nimport { Icon } from '@local/components/icon';\n\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { FC, memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport { createContext } from 'use-context-selector';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n DEFAULT_PROVIDER_SONNER_BUTTON,\n DEFAULT_PROVIDER_SONNER_DURATION,\n DEFAULT_PROVIDER_SONNER_GENRE,\n DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM,\n DEFAULT_PROVIDER_SONNER_SCALE,\n DEFAULT_PROVIDER_SONNER_Y,\n DEFAULT_PROVIDER_SONNER_Z_INDEX,\n} from './context.constants';\nimport {\n getSonnerElementWrapperStyle,\n getSonnerLayoutClassName,\n getSonnerLayoutStyle,\n SonnerButtonWrapper,\n SonnerContent,\n SonnerContentDescription,\n SonnerContentTitle,\n SonnerElementWrapper,\n SonnerIcon,\n} from './context.styles';\nimport {\n ISonnerContent,\n ISonnerContentStandard,\n ISonnerContext,\n ISonnerElement,\n ISonnerProvider,\n} from './context.types';\n\nexport const SonnerContext = createContext<ISonnerContext | null>(null);\n\nexport const ProviderSonner: FC<ISonnerProvider> = (props) => {\n const memoVisibleToasts: ISonnerProvider['visibleToasts'] = useMemo(() => props.visibleToasts, [props.visibleToasts]);\n const memoDefaultDescription: ISonnerProvider['default']['description'] = useMemo(\n () => props?.default?.description,\n [props?.default?.description],\n );\n const memoDefaultTitle: ISonnerProvider['default']['title'] = useMemo(\n () => props?.default?.title,\n [props?.default?.title],\n );\n const memoDefaultButton: ISonnerProvider['default']['button'] = useMemo(\n () => props?.default?.button,\n [props?.default?.button],\n );\n const memoDefaultHidingTime: ISonnerProvider['default']['hidingTime'] = useMemo(\n () => props?.default?.hidingTime,\n [props?.default?.hidingTime],\n );\n const memoDefaultHidingMode: ISonnerProvider['default']['hidingMode'] = useMemo(\n () => props?.default?.hidingMode ?? 'clickOnButton',\n [props?.default?.hidingMode],\n );\n const memoDefaultGenre = useMemo(\n () => props?.default?.genre ?? DEFAULT_PROVIDER_SONNER_GENRE,\n [props?.default?.genre],\n );\n\n const isTop = useMemo(() => props.position.includes('top'), [props.position]);\n\n const [contentHistory, setContentHistory] = useState<ISonnerContent[]>([]);\n\n const [isHovered, setIsHovered] = useState(false);\n\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n const remove: ISonnerContext['remove'] = useCallback(\n (id) => {\n setContentHistory((prev) => {\n const itemToRemove = prev.find((item) => item.id === id);\n\n if (!itemToRemove) return prev;\n\n const indexToRemove = itemToRemove.index;\n\n const updatedHistory = prev\n .filter((item) => item.id !== id)\n .map((item) => ({\n ...item,\n index: item.index > indexToRemove ? item.index - 1 : item.index,\n }));\n\n if (updatedHistory.length === 0) handleMouseLeave();\n\n return updatedHistory;\n });\n },\n [handleMouseLeave],\n );\n\n const toast: ISonnerContext['toast'] = useCallback(\n (content) => {\n const id = content.id ?? uuidv4();\n\n const hidingTime = content.hidingTime ?? memoDefaultHidingTime;\n\n setContentHistory((prev) => {\n const existingIndex = prev.findIndex((item) => item.id === id);\n\n let updatedHistory: ISonnerContent[];\n if (existingIndex !== -1) {\n // Replace existing item\n updatedHistory = [...prev];\n updatedHistory[existingIndex] = { ...content, id, index: prev[existingIndex].index };\n } else {\n // Add new item\n updatedHistory = prev.map((item) => ({\n ...item,\n index: item.index + 1,\n }));\n const newContent = { ...content, id, index: 0 };\n updatedHistory.unshift(newContent);\n }\n\n return updatedHistory;\n });\n\n if (hidingTime !== undefined) {\n setTimeout(() => {\n remove(id);\n }, hidingTime);\n }\n },\n [memoDefaultHidingTime, remove],\n );\n\n const promise: ISonnerContext['promise'] = useCallback(\n <T,>(\n promise: Promise<T>,\n expectation: Omit<ISonnerContent, 'index'>,\n localToast: (success: T | undefined, error: unknown | undefined) => Omit<ISonnerContent, 'index'>,\n ) => {\n const id = uuidv4();\n toast({ ...expectation, id, isLoading: true });\n\n return promise\n .then((result) => {\n toast({ ...localToast(result, undefined), id });\n })\n .catch((error) => {\n toast({ ...localToast(undefined, error), id });\n });\n },\n [toast],\n );\n\n const handleOnClick = useCallback(\n (id: ISonnerContentStandard['id']) => {\n remove(id);\n },\n [remove],\n );\n\n useEffect(() => {\n return () => {\n setContentHistory([]);\n };\n }, []);\n return (\n <SonnerContext.Provider value={{ toast, promise, remove, contentHistory }}>\n <div\n className={getSonnerLayoutClassName(props.position)}\n style={getSonnerLayoutStyle({\n gap: props.gap,\n zIndex: props.zIndex ?? DEFAULT_PROVIDER_SONNER_Z_INDEX,\n })}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <AnimatePresence>\n {contentHistory.map((content) => {\n const index = content.index;\n const isMoreThanLastViewIndexPlusOne = memoVisibleToasts ? index > memoVisibleToasts : false;\n const isMoreThanLastViewIndex = memoVisibleToasts ? index > memoVisibleToasts - 1 : false;\n const isLastViewIndex = memoVisibleToasts ? index === memoVisibleToasts - 1 : false;\n const localGenre = content.genre ?? memoDefaultGenre;\n const buttonGenre = localGenre;\n const hidingMode = content.hidingMode ?? memoDefaultHidingMode;\n\n const localContent = 'content' in content ? content.content : false;\n const localTitle = 'title' in content ? content.title : false;\n const localDescription = 'description' in content ? content.description : false;\n return (\n <MemoizedSonnerElement\n isMoreThanLastViewIndexPlusOne={isMoreThanLastViewIndexPlusOne}\n isMoreThanLastViewIndex={isMoreThanLastViewIndex}\n isLastViewIndex={isLastViewIndex}\n isTop={isTop}\n key={content.id}\n id={content.id}\n icon={content.icon}\n isLoading={content.isLoading}\n index={index}\n buttonGenre={buttonGenre}\n hidingMode={hidingMode}\n isHovered={isHovered}\n genre={localGenre}\n content={localContent}\n title={localTitle || memoDefaultTitle}\n description={localDescription || memoDefaultDescription}\n button={content.button ?? memoDefaultButton ?? DEFAULT_PROVIDER_SONNER_BUTTON}\n handleOnClick={handleOnClick}\n />\n );\n })}\n </AnimatePresence>\n </div>\n {props.children}\n </SonnerContext.Provider>\n );\n};\n\nconst SonnerElement = (props: ISonnerElement) => {\n return (\n <motion.div\n key={props.id}\n layout\n initial={{\n opacity: 0,\n scale: 1,\n y: props.isLastViewIndex\n ? !props.isTop\n ? -DEFAULT_PROVIDER_SONNER_Y\n : DEFAULT_PROVIDER_SONNER_Y\n : !props.isTop\n ? DEFAULT_PROVIDER_SONNER_Y\n : -DEFAULT_PROVIDER_SONNER_Y,\n }}\n animate={{\n y: 0,\n opacity: props.isMoreThanLastViewIndex ? 0 : 1,\n pointerEvents: props.isMoreThanLastViewIndex ? 'none' : 'auto',\n display: props.isMoreThanLastViewIndex ? 'none' : 'flex',\n scale: !props.isHovered ? Math.max(1 - props.index * DEFAULT_PROVIDER_SONNER_SCALE, 0.88) : 1,\n marginTop: props.isTop\n ? props.isHovered || props.index === 0\n ? `0px`\n : `-${DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM}px`\n : '0px',\n marginBottom: !props.isTop\n ? props.isHovered || props.index === 0\n ? `0px`\n : `-${DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM}px`\n : '0px',\n }}\n style={{\n zIndex: -props.index,\n }}\n whileInView={{ opacity: props.isMoreThanLastViewIndex ? 0 : 1 }}\n exit={{ opacity: 0, y: !props.isTop ? DEFAULT_PROVIDER_SONNER_Y : -DEFAULT_PROVIDER_SONNER_Y }}\n transition={{ type: 'spring', duration: DEFAULT_PROVIDER_SONNER_DURATION }}\n >\n <div\n className={SonnerElementWrapper}\n style={getSonnerElementWrapperStyle(props.genre)}\n role={props.hidingMode === 'clickOnSonner' ? 'button' : undefined}\n tabIndex={props.hidingMode === 'clickOnSonner' ? 0 : undefined}\n onClick={() => props.hidingMode === 'clickOnSonner' && props.handleOnClick(props.id, 'clickOnSonner')}\n onKeyDown={(event) => {\n if (props.hidingMode !== 'clickOnSonner') return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n props.handleOnClick(props.id, 'clickOnSonner');\n }\n }}\n >\n {(props.isLoading || props.icon) && (\n <div className={SonnerIcon}>\n {props.isLoading ? (\n <Icon size='medium' type='loading' name='Line' />\n ) : (\n props.icon && <Icon {...props.icon} size={props.icon.size ?? 'medium'} />\n )}\n </div>\n )}\n <div className={SonnerContent}>\n {props.content ? (\n props.content\n ) : (\n <>\n {props.title && <div className={SonnerContentTitle}>{props.title}</div>}\n {props.description && <div className={SonnerContentDescription}>{props.description}</div>}\n </>\n )}\n </div>\n\n {props.button && 'content' in props.button && props.button?.content && (\n <div className={SonnerButtonWrapper}>\n <Button\n genre={props.buttonGenre}\n size='small'\n onClick={() => props.hidingMode === 'clickOnButton' && props.handleOnClick(props.id, 'clickOnButton')}\n >\n {props.button.content}\n </Button>\n </div>\n )}\n </div>\n </motion.div>\n );\n};\nconst MemoizedSonnerElement = memo(SonnerElement);\n","import { useContextSelector } from 'use-context-selector';\n\nimport { SonnerContext } from './context';\nimport { ISonnerContext, IUseSonnerDependencies } from './context.types';\n\nexport const useSonner = (props: IUseSonnerDependencies): ISonnerContext => {\n const context = useContextSelector(SonnerContext, (v) => {\n return v\n ? props.reduce((acc, prop) => {\n acc[prop] = v[prop];\n return acc;\n }, {} as any)\n : null;\n });\n if (!context) {\n throw new Error('useSonner must be used within an ProviderSonner');\n }\n return context;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"context-sonner-DNJWVKTw.js","names":[],"sources":["../src/contexts/context-sonner/context.constants.ts","../src/contexts/context-sonner/context.styles.tsx","../src/contexts/context-sonner/context.tsx","../src/contexts/context-sonner/context.hooks.ts"],"sourcesContent":["import { IThemeGenreSonner } from '@local/styles/utils/types';\n\nimport { ISonnerProvider } from './context.types';\n\nexport const DEFAULT_PROVIDER_SONNER_Z_INDEX = 100;\nexport const DEFAULT_PROVIDER_SONNER_SCALE = 0.04;\nexport const DEFAULT_PROVIDER_SONNER_Y = 100;\nexport const DEFAULT_PROVIDER_SONNER_DURATION = 0.3;\nexport const DEFAULT_PROVIDER_SONNER_GENRE: IThemeGenreSonner = 'product';\nexport const DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM = 65;\nexport const DEFAULT_PROVIDER_SONNER_BUTTON: ISonnerProvider['default']['button'] = {\n content: 'Undo',\n onClick: () => {},\n};\n","import { CSS_CLASS, CSS_VARS } from '@local/styles/utils';\nimport { setClasses } from '@local/styles/utils/functions';\nimport { IThemeGenreSonner } from '@local/styles/utils/types';\n\nimport { CSSProperties } from 'react';\n\nimport { ISonnerProvider } from './context.types';\n\nexport const SonnerClass = CSS_CLASS.context.sonner;\n\nexport const SonnerLayout = SonnerClass.layout;\nexport const SonnerElementWrapper = SonnerClass.elementWrapper;\nexport const SonnerContent = SonnerClass.content;\nexport const SonnerIcon = SonnerClass.icon;\nexport const SonnerContentTitle = SonnerClass.contentTitle;\nexport const SonnerContentDescription = SonnerClass.contentDescription;\nexport const SonnerButtonWrapper = SonnerClass.buttonWrapper;\n\nconst SONNER_LAYOUT_POSITION_CLASS: Record<ISonnerProvider['position'], string> = {\n 'bottom-center': SonnerClass.layoutBottomCenter,\n 'bottom-left': SonnerClass.layoutBottomLeft,\n 'bottom-right': SonnerClass.layoutBottomRight,\n 'top-right': SonnerClass.layoutTopRight,\n 'top-left': SonnerClass.layoutTopLeft,\n 'top-center': SonnerClass.layoutTopCenter,\n};\n\ntype ISonnerStyleWithVars = CSSProperties & Record<string, string>;\n\nexport const getSonnerLayoutClassName = (position: ISonnerProvider['position']) =>\n setClasses([SonnerLayout, SONNER_LAYOUT_POSITION_CLASS[position]]);\n\nexport const getSonnerLayoutStyle = (props: Pick<ISonnerProvider, 'gap' | 'zIndex'>): ISonnerStyleWithVars => ({\n '--context-sonner-gap': `${props.gap}px`,\n '--context-sonner-z-index': `${props.zIndex ?? 0}`,\n});\n\nexport const getSonnerElementWrapperStyle = (genre: IThemeGenreSonner): ISonnerStyleWithVars => {\n const genreTheme = CSS_VARS.genre.button[genre];\n\n return {\n '--context-sonner-wrapper-background': genreTheme.background.index,\n '--context-sonner-wrapper-border-color': genreTheme.border.index,\n '--context-sonner-wrapper-box-shadow':\n genre === 'primary' || genre === 'secondary'\n ? CSS_VARS.palette.shadowPrimaryLight\n : CSS_VARS.palette.shadowSecondaryLight,\n '--context-sonner-wrapper-box-shadow-hover':\n genre === 'primary' || genre === 'secondary'\n ? CSS_VARS.palette.shadowSecondaryLight\n : CSS_VARS.palette.shadowPrimaryLight,\n '--context-sonner-icon-color': genreTheme.color.index,\n '--context-sonner-title-color': genreTheme.color.index,\n '--context-sonner-description-color': genreTheme.color.index,\n };\n};\n","import { Button } from '@local/components/button';\nimport { Icon } from '@local/components/icon';\n\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { FC, memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport { createContext } from 'use-context-selector';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n DEFAULT_PROVIDER_SONNER_BUTTON,\n DEFAULT_PROVIDER_SONNER_DURATION,\n DEFAULT_PROVIDER_SONNER_GENRE,\n DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM,\n DEFAULT_PROVIDER_SONNER_SCALE,\n DEFAULT_PROVIDER_SONNER_Y,\n DEFAULT_PROVIDER_SONNER_Z_INDEX,\n} from './context.constants';\nimport {\n getSonnerElementWrapperStyle,\n getSonnerLayoutClassName,\n getSonnerLayoutStyle,\n SonnerButtonWrapper,\n SonnerContent,\n SonnerContentDescription,\n SonnerContentTitle,\n SonnerElementWrapper,\n SonnerIcon,\n} from './context.styles';\nimport {\n ISonnerContent,\n ISonnerContentStandard,\n ISonnerContext,\n ISonnerElement,\n ISonnerProvider,\n} from './context.types';\n\nexport const SonnerContext = createContext<ISonnerContext | null>(null);\n\nexport const ProviderSonner: FC<ISonnerProvider> = (props) => {\n const memoVisibleToasts: ISonnerProvider['visibleToasts'] = useMemo(() => props.visibleToasts, [props.visibleToasts]);\n const memoDefaultDescription: ISonnerProvider['default']['description'] = useMemo(\n () => props?.default?.description,\n [props?.default?.description],\n );\n const memoDefaultTitle: ISonnerProvider['default']['title'] = useMemo(\n () => props?.default?.title,\n [props?.default?.title],\n );\n const memoDefaultButton: ISonnerProvider['default']['button'] = useMemo(\n () => props?.default?.button,\n [props?.default?.button],\n );\n const memoDefaultHidingTime: ISonnerProvider['default']['hidingTime'] = useMemo(\n () => props?.default?.hidingTime,\n [props?.default?.hidingTime],\n );\n const memoDefaultHidingMode: ISonnerProvider['default']['hidingMode'] = useMemo(\n () => props?.default?.hidingMode ?? 'clickOnButton',\n [props?.default?.hidingMode],\n );\n const memoDefaultGenre = useMemo(\n () => props?.default?.genre ?? DEFAULT_PROVIDER_SONNER_GENRE,\n [props?.default?.genre],\n );\n\n const isTop = useMemo(() => props.position.includes('top'), [props.position]);\n\n const [contentHistory, setContentHistory] = useState<ISonnerContent[]>([]);\n\n const [isHovered, setIsHovered] = useState(false);\n\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n const remove: ISonnerContext['remove'] = useCallback(\n (id) => {\n setContentHistory((prev) => {\n const itemToRemove = prev.find((item) => item.id === id);\n\n if (!itemToRemove) return prev;\n\n const indexToRemove = itemToRemove.index;\n\n const updatedHistory = prev\n .filter((item) => item.id !== id)\n .map((item) => ({\n ...item,\n index: item.index > indexToRemove ? item.index - 1 : item.index,\n }));\n\n if (updatedHistory.length === 0) handleMouseLeave();\n\n return updatedHistory;\n });\n },\n [handleMouseLeave],\n );\n\n const toast: ISonnerContext['toast'] = useCallback(\n (content) => {\n const id = content.id ?? uuidv4();\n\n const hidingTime = content.hidingTime ?? memoDefaultHidingTime;\n\n setContentHistory((prev) => {\n const existingIndex = prev.findIndex((item) => item.id === id);\n\n let updatedHistory: ISonnerContent[];\n if (existingIndex !== -1) {\n // Replace existing item\n updatedHistory = [...prev];\n updatedHistory[existingIndex] = { ...content, id, index: prev[existingIndex].index };\n } else {\n // Add new item\n updatedHistory = prev.map((item) => ({\n ...item,\n index: item.index + 1,\n }));\n const newContent = { ...content, id, index: 0 };\n updatedHistory.unshift(newContent);\n }\n\n return updatedHistory;\n });\n\n if (hidingTime !== undefined) {\n setTimeout(() => {\n remove(id);\n }, hidingTime);\n }\n },\n [memoDefaultHidingTime, remove],\n );\n\n const promise: ISonnerContext['promise'] = useCallback(\n <T,>(\n promise: Promise<T>,\n expectation: Omit<ISonnerContent, 'index'>,\n localToast: (success: T | undefined, error: unknown | undefined) => Omit<ISonnerContent, 'index'>,\n ) => {\n const id = uuidv4();\n toast({ ...expectation, id, isLoading: true });\n\n return promise\n .then((result) => {\n toast({ ...localToast(result, undefined), id });\n })\n .catch((error) => {\n toast({ ...localToast(undefined, error), id });\n });\n },\n [toast],\n );\n\n const handleOnClick = useCallback(\n (id: ISonnerContentStandard['id']) => {\n remove(id);\n },\n [remove],\n );\n\n useEffect(() => {\n return () => {\n setContentHistory([]);\n };\n }, []);\n return (\n <SonnerContext.Provider value={{ toast, promise, remove, contentHistory }}>\n <div\n className={getSonnerLayoutClassName(props.position)}\n style={getSonnerLayoutStyle({\n gap: props.gap,\n zIndex: props.zIndex ?? DEFAULT_PROVIDER_SONNER_Z_INDEX,\n })}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <AnimatePresence>\n {contentHistory.map((content) => {\n const index = content.index;\n const isMoreThanLastViewIndexPlusOne = memoVisibleToasts ? index > memoVisibleToasts : false;\n const isMoreThanLastViewIndex = memoVisibleToasts ? index > memoVisibleToasts - 1 : false;\n const isLastViewIndex = memoVisibleToasts ? index === memoVisibleToasts - 1 : false;\n const localGenre = content.genre ?? memoDefaultGenre;\n const buttonGenre = localGenre;\n const hidingMode = content.hidingMode ?? memoDefaultHidingMode;\n\n const localContent = 'content' in content ? content.content : false;\n const localTitle = 'title' in content ? content.title : false;\n const localDescription = 'description' in content ? content.description : false;\n return (\n <MemoizedSonnerElement\n isMoreThanLastViewIndexPlusOne={isMoreThanLastViewIndexPlusOne}\n isMoreThanLastViewIndex={isMoreThanLastViewIndex}\n isLastViewIndex={isLastViewIndex}\n isTop={isTop}\n key={content.id}\n id={content.id}\n icon={content.icon}\n isLoading={content.isLoading}\n index={index}\n buttonGenre={buttonGenre}\n hidingMode={hidingMode}\n isHovered={isHovered}\n genre={localGenre}\n content={localContent}\n title={localTitle || memoDefaultTitle}\n description={localDescription || memoDefaultDescription}\n button={content.button ?? memoDefaultButton ?? DEFAULT_PROVIDER_SONNER_BUTTON}\n handleOnClick={handleOnClick}\n />\n );\n })}\n </AnimatePresence>\n </div>\n {props.children}\n </SonnerContext.Provider>\n );\n};\n\nconst SonnerElement = (props: ISonnerElement) => {\n return (\n <motion.div\n key={props.id}\n layout\n initial={{\n opacity: 0,\n scale: 1,\n y: props.isLastViewIndex\n ? !props.isTop\n ? -DEFAULT_PROVIDER_SONNER_Y\n : DEFAULT_PROVIDER_SONNER_Y\n : !props.isTop\n ? DEFAULT_PROVIDER_SONNER_Y\n : -DEFAULT_PROVIDER_SONNER_Y,\n }}\n animate={{\n y: 0,\n opacity: props.isMoreThanLastViewIndex ? 0 : 1,\n pointerEvents: props.isMoreThanLastViewIndex ? 'none' : 'auto',\n display: props.isMoreThanLastViewIndex ? 'none' : 'flex',\n scale: !props.isHovered ? Math.max(1 - props.index * DEFAULT_PROVIDER_SONNER_SCALE, 0.88) : 1,\n marginTop: props.isTop\n ? props.isHovered || props.index === 0\n ? `0px`\n : `-${DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM}px`\n : '0px',\n marginBottom: !props.isTop\n ? props.isHovered || props.index === 0\n ? `0px`\n : `-${DEFAULT_PROVIDER_SONNER_MARGIN_BOTTOM}px`\n : '0px',\n }}\n style={{\n zIndex: -props.index,\n }}\n whileInView={{ opacity: props.isMoreThanLastViewIndex ? 0 : 1 }}\n exit={{ opacity: 0, y: !props.isTop ? DEFAULT_PROVIDER_SONNER_Y : -DEFAULT_PROVIDER_SONNER_Y }}\n transition={{ type: 'spring', duration: DEFAULT_PROVIDER_SONNER_DURATION }}\n >\n <div\n className={SonnerElementWrapper}\n style={getSonnerElementWrapperStyle(props.genre)}\n role={props.hidingMode === 'clickOnSonner' ? 'button' : undefined}\n tabIndex={props.hidingMode === 'clickOnSonner' ? 0 : undefined}\n onClick={() => props.hidingMode === 'clickOnSonner' && props.handleOnClick(props.id, 'clickOnSonner')}\n onKeyDown={(event) => {\n if (props.hidingMode !== 'clickOnSonner') return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n props.handleOnClick(props.id, 'clickOnSonner');\n }\n }}\n >\n {(props.isLoading || props.icon) && (\n <div className={SonnerIcon}>\n {props.isLoading ? (\n <Icon size='medium' type='loading' name='Line' />\n ) : (\n props.icon && <Icon {...props.icon} size={props.icon.size ?? 'medium'} />\n )}\n </div>\n )}\n <div className={SonnerContent}>\n {props.content ? (\n props.content\n ) : (\n <>\n {props.title && <div className={SonnerContentTitle}>{props.title}</div>}\n {props.description && <div className={SonnerContentDescription}>{props.description}</div>}\n </>\n )}\n </div>\n\n {props.button && 'content' in props.button && props.button?.content && (\n <div className={SonnerButtonWrapper}>\n <Button\n genre={props.buttonGenre}\n size='small'\n onClick={() => props.hidingMode === 'clickOnButton' && props.handleOnClick(props.id, 'clickOnButton')}\n >\n {props.button.content}\n </Button>\n </div>\n )}\n </div>\n </motion.div>\n );\n};\nconst MemoizedSonnerElement = memo(SonnerElement);\n","import { useContextSelector } from 'use-context-selector';\n\nimport { SonnerContext } from './context';\nimport { ISonnerContext, IUseSonnerDependencies } from './context.types';\n\nexport const useSonner = (props: IUseSonnerDependencies): ISonnerContext => {\n const context = useContextSelector(SonnerContext, (v) => {\n return v\n ? props.reduce((acc, prop) => {\n acc[prop] = v[prop];\n return acc;\n }, {} as any)\n : null;\n });\n if (!context) {\n throw new Error('useSonner must be used within an ProviderSonner');\n }\n return context;\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./chunk-Dd8m0Ver.cjs"),e=require("./context-sonner-B-eO7pwI.cjs");exports.ProviderSonner=e.ProviderSonner;exports.useSonner=e.useSonner;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./chunk-Dd8m0Ver.cjs"),e=require("./context-sonner-C8aMJPWz.cjs");exports.ProviderSonner=e.ProviderSonner;exports.useSonner=e.useSonner;
@@ -1,4 +1,4 @@
1
- import { n as o, t as e } from "./context-sonner-CtCttHLD.js";
1
+ import { n as o, t as e } from "./context-sonner-DNJWVKTw.js";
2
2
  export {
3
3
  o as ProviderSonner,
4
4
  e as useSonner