@jbpark/ui-kit 3.2.1 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/Button.d.mts +12 -0
  2. package/dist/Button.d.mts.map +1 -1
  3. package/dist/Button.mjs +5 -2
  4. package/dist/Button.mjs.map +1 -1
  5. package/dist/components/atoms/checkbox/checkbox.d.mts +7 -3
  6. package/dist/components/atoms/checkbox/checkbox.d.mts.map +1 -1
  7. package/dist/components/atoms/checkbox/checkbox.mjs +17 -9
  8. package/dist/components/atoms/checkbox/checkbox.mjs.map +1 -1
  9. package/dist/components/atoms/checkbox/group.d.mts +8 -9
  10. package/dist/components/atoms/checkbox/group.d.mts.map +1 -1
  11. package/dist/components/atoms/checkbox/group.mjs +11 -12
  12. package/dist/components/atoms/checkbox/group.mjs.map +1 -1
  13. package/dist/components/atoms/color-picker.d.mts +6 -2
  14. package/dist/components/atoms/color-picker.d.mts.map +1 -1
  15. package/dist/components/atoms/color-picker.mjs +18 -10
  16. package/dist/components/atoms/color-picker.mjs.map +1 -1
  17. package/dist/components/atoms/date-picker.d.mts +2 -0
  18. package/dist/components/atoms/date-picker.d.mts.map +1 -1
  19. package/dist/components/atoms/date-picker.mjs +15 -9
  20. package/dist/components/atoms/date-picker.mjs.map +1 -1
  21. package/dist/components/atoms/float-button/back-top.d.mts +1 -0
  22. package/dist/components/atoms/float-button/back-top.d.mts.map +1 -1
  23. package/dist/components/atoms/float-button/back-top.mjs +11 -3
  24. package/dist/components/atoms/float-button/back-top.mjs.map +1 -1
  25. package/dist/components/atoms/input/input.d.mts +2 -1
  26. package/dist/components/atoms/input/input.d.mts.map +1 -1
  27. package/dist/components/atoms/input/input.mjs +5 -2
  28. package/dist/components/atoms/input/input.mjs.map +1 -1
  29. package/dist/components/atoms/input/search.d.mts +2 -0
  30. package/dist/components/atoms/input/search.d.mts.map +1 -1
  31. package/dist/components/atoms/input/search.mjs +9 -4
  32. package/dist/components/atoms/input/search.mjs.map +1 -1
  33. package/dist/components/atoms/option-group.d.mts +15 -0
  34. package/dist/components/atoms/option-group.d.mts.map +1 -0
  35. package/dist/components/atoms/option-group.mjs +9 -0
  36. package/dist/components/atoms/option-group.mjs.map +1 -0
  37. package/dist/components/atoms/popover.d.mts +6 -0
  38. package/dist/components/atoms/popover.d.mts.map +1 -1
  39. package/dist/components/atoms/popover.mjs +75 -160
  40. package/dist/components/atoms/popover.mjs.map +1 -1
  41. package/dist/components/atoms/radio/group.d.mts +6 -9
  42. package/dist/components/atoms/radio/group.d.mts.map +1 -1
  43. package/dist/components/atoms/radio/group.mjs +26 -23
  44. package/dist/components/atoms/radio/group.mjs.map +1 -1
  45. package/dist/components/atoms/radio/radio.d.mts +7 -3
  46. package/dist/components/atoms/radio/radio.d.mts.map +1 -1
  47. package/dist/components/atoms/radio/radio.mjs +18 -11
  48. package/dist/components/atoms/radio/radio.mjs.map +1 -1
  49. package/dist/components/atoms/select.d.mts +1 -1
  50. package/dist/components/atoms/select.d.mts.map +1 -1
  51. package/dist/components/atoms/select.mjs.map +1 -1
  52. package/dist/components/atoms/skeleton/button.mjs +2 -2
  53. package/dist/components/atoms/skeleton/button.mjs.map +1 -1
  54. package/dist/components/atoms/skeleton/skeleton.mjs +2 -2
  55. package/dist/components/atoms/skeleton/skeleton.mjs.map +1 -1
  56. package/dist/components/atoms/spin.d.mts +1 -2
  57. package/dist/components/atoms/spin.d.mts.map +1 -1
  58. package/dist/components/atoms/spin.mjs +12 -10
  59. package/dist/components/atoms/spin.mjs.map +1 -1
  60. package/dist/components/atoms/switch.d.mts.map +1 -1
  61. package/dist/components/atoms/switch.mjs +6 -8
  62. package/dist/components/atoms/switch.mjs.map +1 -1
  63. package/dist/components/organisms/index.d.mts +2 -1
  64. package/dist/components/organisms/toast.d.mts +41 -0
  65. package/dist/components/organisms/toast.d.mts.map +1 -0
  66. package/dist/components/organisms/toast.mjs +197 -0
  67. package/dist/components/organisms/toast.mjs.map +1 -0
  68. package/dist/core/badge.d.mts +1 -1
  69. package/dist/core/button.d.mts +2 -2
  70. package/dist/core/radio-group.d.mts +5 -1
  71. package/dist/core/radio-group.d.mts.map +1 -1
  72. package/dist/core/radio-group.mjs +7 -1
  73. package/dist/core/radio-group.mjs.map +1 -1
  74. package/dist/index.d.mts +2 -1
  75. package/dist/index.mjs +2 -1
  76. package/dist/style.css +40 -123
  77. package/package.json +2 -2
@@ -0,0 +1,197 @@
1
+ 'use client';
2
+
3
+ import { cn } from "../../utils.mjs";
4
+ import Button from "../../Button.mjs";
5
+ import { Check, Info, OctagonAlert, OctagonX, X } from "lucide-react";
6
+ import { useEffect, useState } from "react";
7
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
8
+ import { createPortal } from "react-dom";
9
+ import { createRoot } from "react-dom/client";
10
+ import { v4 } from "uuid";
11
+
12
+ //#region src/components/organisms/toast.tsx
13
+ const isBrowser = typeof window !== "undefined" && typeof document !== "undefined";
14
+ const containerStates = /* @__PURE__ */ new Map();
15
+ const getContainerState = (container) => {
16
+ let state = containerStates.get(container);
17
+ if (!state) {
18
+ state = {
19
+ stack: [],
20
+ update: null
21
+ };
22
+ containerStates.set(container, state);
23
+ }
24
+ return state;
25
+ };
26
+ const createToastRoot = (container) => {
27
+ if (!isBrowser) return null;
28
+ const targetContainer = container || document.body;
29
+ let rootEl = targetContainer.querySelector("#toast-root");
30
+ if (!rootEl) {
31
+ rootEl = document.createElement("div");
32
+ rootEl.setAttribute("id", "toast-root");
33
+ rootEl.setAttribute("role", "region");
34
+ rootEl.setAttribute("aria-label", "Notifications");
35
+ rootEl.style.zIndex = "10000";
36
+ rootEl.style.position = "fixed";
37
+ rootEl.style.right = "0";
38
+ rootEl.style.bottom = "0";
39
+ rootEl.style.display = "flex";
40
+ rootEl.style.flexDirection = "column-reverse";
41
+ rootEl.style.gap = "8px";
42
+ rootEl.style.padding = "16px";
43
+ rootEl.style.pointerEvents = "none";
44
+ targetContainer.appendChild(rootEl);
45
+ }
46
+ return rootEl;
47
+ };
48
+ const TYPE_ICONS = {
49
+ info: /* @__PURE__ */ jsx(Info, { className: "text-blue-400" }),
50
+ success: /* @__PURE__ */ jsx(Check, { className: "text-green-400" }),
51
+ error: /* @__PURE__ */ jsx(OctagonX, { className: "text-red-400" }),
52
+ warning: /* @__PURE__ */ jsx(OctagonAlert, { className: "text-yellow-400" })
53
+ };
54
+ const Toast = ({ type, title, description, icon, closable = true, action, className, onClose }) => {
55
+ return /* @__PURE__ */ jsxs("div", {
56
+ role: "status",
57
+ className: cn("pointer-events-auto flex w-80 items-start gap-3 rounded-lg", "bg-background text-foreground border p-4 shadow-lg", className),
58
+ children: [
59
+ (icon || type) && /* @__PURE__ */ jsx("div", {
60
+ className: "mt-0.5 shrink-0 [&_svg]:size-5",
61
+ children: icon || type && TYPE_ICONS[type]
62
+ }),
63
+ /* @__PURE__ */ jsxs("div", {
64
+ className: "flex-1 space-y-1",
65
+ children: [
66
+ /* @__PURE__ */ jsx("p", {
67
+ className: "text-sm font-medium",
68
+ children: title
69
+ }),
70
+ description && /* @__PURE__ */ jsx("p", {
71
+ className: "text-muted-foreground text-sm",
72
+ children: description
73
+ }),
74
+ action && /* @__PURE__ */ jsx("div", {
75
+ className: "pt-1",
76
+ children: action
77
+ })
78
+ ]
79
+ }),
80
+ closable && /* @__PURE__ */ jsx(Button, {
81
+ type: "text",
82
+ shape: "circle",
83
+ size: "small",
84
+ "aria-label": "Close",
85
+ icon: /* @__PURE__ */ jsx(X, {}),
86
+ onClick: onClose
87
+ })
88
+ ]
89
+ });
90
+ };
91
+ const DEFAULT_DURATION = 4e3;
92
+ const StaticToast = ({ id, duration = DEFAULT_DURATION, container, onClose, ...props }) => {
93
+ const [visible, setVisible] = useState(true);
94
+ const close = () => {
95
+ onClose?.();
96
+ setVisible(false);
97
+ setTimeout(() => {
98
+ Toast.destroy(id);
99
+ }, 200);
100
+ };
101
+ useEffect(() => {
102
+ if (!duration) return;
103
+ const timer = setTimeout(close, duration);
104
+ return () => clearTimeout(timer);
105
+ }, [duration]);
106
+ if (!isBrowser) return null;
107
+ return createPortal(/* @__PURE__ */ jsx("div", {
108
+ className: cn("transition-all duration-200", visible ? "opacity-100" : "translate-x-2 opacity-0"),
109
+ children: /* @__PURE__ */ jsx(Toast, {
110
+ ...props,
111
+ onClose: close
112
+ })
113
+ }), createToastRoot(container));
114
+ };
115
+ const ToastStackRenderer = ({ container }) => {
116
+ const [, forceUpdate] = useState({});
117
+ useEffect(() => {
118
+ const state = getContainerState(container);
119
+ state.update = () => forceUpdate({});
120
+ return () => {
121
+ state.update = null;
122
+ };
123
+ }, [container]);
124
+ const { stack } = getContainerState(container);
125
+ return /* @__PURE__ */ jsx(Fragment$1, { children: stack.map(({ id, ...props }) => /* @__PURE__ */ jsx(StaticToast, {
126
+ id,
127
+ ...props
128
+ }, id)) });
129
+ };
130
+ const toastRoots = /* @__PURE__ */ new Map();
131
+ const renderToast = (props) => {
132
+ if (!isBrowser) return;
133
+ const targetContainer = props.container || document.body;
134
+ const rootElement = createToastRoot(targetContainer);
135
+ if (!toastRoots.has(targetContainer)) {
136
+ const root = createRoot(rootElement);
137
+ toastRoots.set(targetContainer, root);
138
+ root.render(/* @__PURE__ */ jsx(ToastStackRenderer, { container: targetContainer }));
139
+ }
140
+ const state = getContainerState(targetContainer);
141
+ const id = props.id || v4();
142
+ state.stack.push({
143
+ ...props,
144
+ id
145
+ });
146
+ state.update?.();
147
+ return id;
148
+ };
149
+ Toast.destroy = (id) => {
150
+ if (!id) {
151
+ containerStates.forEach((state) => {
152
+ state.stack = [];
153
+ state.update?.();
154
+ });
155
+ toastRoots.forEach((root) => root.unmount());
156
+ toastRoots.clear();
157
+ containerStates.clear();
158
+ return;
159
+ }
160
+ containerStates.forEach((state, container) => {
161
+ if (!state.stack.some((toast) => toast.id === id)) return;
162
+ state.stack = state.stack.filter((toast) => toast.id !== id);
163
+ state.update?.();
164
+ if (!state.stack.length) {
165
+ toastRoots.get(container)?.unmount();
166
+ toastRoots.delete(container);
167
+ containerStates.delete(container);
168
+ }
169
+ });
170
+ };
171
+ Toast.destroyAll = () => {
172
+ Toast.destroy();
173
+ };
174
+ Toast.info = (title, props) => renderToast({
175
+ type: "info",
176
+ title,
177
+ ...props
178
+ });
179
+ Toast.success = (title, props) => renderToast({
180
+ type: "success",
181
+ title,
182
+ ...props
183
+ });
184
+ Toast.error = (title, props) => renderToast({
185
+ type: "error",
186
+ title,
187
+ ...props
188
+ });
189
+ Toast.warning = (title, props) => renderToast({
190
+ type: "warning",
191
+ title,
192
+ ...props
193
+ });
194
+
195
+ //#endregion
196
+ export { Toast as default };
197
+ //# sourceMappingURL=toast.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast.mjs","names":["uuid"],"sources":["../../../src/components/organisms/toast.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Root, createRoot } from 'react-dom/client';\n\nimport { Check, Info, OctagonAlert, OctagonX, X } from 'lucide-react';\nimport { v4 as uuid } from 'uuid';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Button from '../atoms/button';\n\ntype ToastType = 'info' | 'success' | 'error' | 'warning';\n\nexport interface Props {\n type?: ToastType;\n title: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n closable?: boolean;\n action?: React.ReactNode;\n className?: string;\n onClose?: () => void;\n}\n\ninterface StaticProps extends Props {\n id?: string;\n duration?: number;\n container?: HTMLElement;\n}\n\nconst isBrowser =\n typeof window !== 'undefined' && typeof document !== 'undefined';\n\ntype ContainerState = {\n stack: StaticProps[];\n update: (() => void) | null;\n};\n\nconst containerStates = new Map<HTMLElement, ContainerState>();\n\nconst getContainerState = (container: HTMLElement): ContainerState => {\n let state = containerStates.get(container);\n\n if (!state) {\n state = { stack: [], update: null };\n containerStates.set(container, state);\n }\n\n return state;\n};\n\nconst createToastRoot = (container?: HTMLElement) => {\n if (!isBrowser) {\n return null;\n }\n\n const targetContainer = container || document.body;\n let rootEl = targetContainer.querySelector(\n '#toast-root',\n ) as HTMLElement | null;\n\n if (!rootEl) {\n rootEl = document.createElement('div');\n rootEl.setAttribute('id', 'toast-root');\n rootEl.setAttribute('role', 'region');\n rootEl.setAttribute('aria-label', 'Notifications');\n rootEl.style.zIndex = '10000';\n rootEl.style.position = 'fixed';\n rootEl.style.right = '0';\n rootEl.style.bottom = '0';\n rootEl.style.display = 'flex';\n rootEl.style.flexDirection = 'column-reverse';\n rootEl.style.gap = '8px';\n rootEl.style.padding = '16px';\n rootEl.style.pointerEvents = 'none';\n targetContainer.appendChild(rootEl);\n }\n\n return rootEl;\n};\n\nconst TYPE_ICONS: Record<ToastType, React.ReactNode> = {\n info: <Info className=\"text-blue-400\" />,\n success: <Check className=\"text-green-400\" />,\n error: <OctagonX className=\"text-red-400\" />,\n warning: <OctagonAlert className=\"text-yellow-400\" />,\n};\n\nconst Toast = ({\n type,\n title,\n description,\n icon,\n closable = true,\n action,\n className,\n onClose,\n}: Props) => {\n return (\n <div\n role=\"status\"\n className={cn(\n 'pointer-events-auto flex w-80 items-start gap-3 rounded-lg',\n 'bg-background text-foreground border p-4 shadow-lg',\n className,\n //\n )}\n >\n {(icon || type) && (\n <div className=\"mt-0.5 shrink-0 [&_svg]:size-5\">\n {icon || (type && TYPE_ICONS[type])}\n </div>\n )}\n <div className=\"flex-1 space-y-1\">\n <p className=\"text-sm font-medium\">{title}</p>\n {description && (\n <p className=\"text-muted-foreground text-sm\">{description}</p>\n )}\n {action && <div className=\"pt-1\">{action}</div>}\n </div>\n {closable && (\n <Button\n type=\"text\"\n shape=\"circle\"\n size=\"small\"\n aria-label=\"Close\"\n icon={<X />}\n onClick={onClose}\n />\n )}\n </div>\n );\n};\n\nconst DEFAULT_DURATION = 4000;\n\nconst StaticToast = ({\n id,\n duration = DEFAULT_DURATION,\n container,\n onClose,\n ...props\n}: StaticProps) => {\n const [visible, setVisible] = useState(true);\n\n const close = () => {\n onClose?.();\n setVisible(false);\n setTimeout(() => {\n Toast.destroy(id);\n }, 200);\n };\n\n useEffect(() => {\n if (!duration) {\n return;\n }\n\n const timer = setTimeout(close, duration);\n return () => clearTimeout(timer);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [duration]);\n\n if (!isBrowser) {\n return null;\n }\n\n return createPortal(\n <div\n className={cn(\n 'transition-all duration-200',\n visible ? 'opacity-100' : 'translate-x-2 opacity-0',\n )}\n >\n <Toast {...props} onClose={close} />\n </div>,\n createToastRoot(container)!,\n );\n};\n\nconst ToastStackRenderer = ({ container }: { container: HTMLElement }) => {\n const [, forceUpdate] = useState({});\n\n useEffect(() => {\n const state = getContainerState(container);\n state.update = () => forceUpdate({});\n return () => {\n state.update = null;\n };\n }, [container]);\n\n const { stack } = getContainerState(container);\n\n return (\n <>\n {stack.map(({ id, ...props }) => (\n <StaticToast key={id} id={id} {...props} />\n ))}\n </>\n );\n};\n\nconst toastRoots = new Map<HTMLElement, Root>();\n\nconst renderToast = (props: StaticProps) => {\n if (!isBrowser) {\n return;\n }\n\n const targetContainer = props.container || document.body;\n const rootElement = createToastRoot(targetContainer)!;\n\n if (!toastRoots.has(targetContainer)) {\n const root = createRoot(rootElement);\n toastRoots.set(targetContainer, root);\n root.render(<ToastStackRenderer container={targetContainer} />);\n }\n\n const state = getContainerState(targetContainer);\n const id = props.id || uuid();\n state.stack.push({ ...props, id });\n state.update?.();\n\n return id;\n};\n\nToast.destroy = (id?: string) => {\n if (!id) {\n containerStates.forEach(state => {\n state.stack = [];\n state.update?.();\n });\n toastRoots.forEach(root => root.unmount());\n toastRoots.clear();\n containerStates.clear();\n return;\n }\n\n containerStates.forEach((state, container) => {\n if (!state.stack.some(toast => toast.id === id)) {\n return;\n }\n\n state.stack = state.stack.filter(toast => toast.id !== id);\n state.update?.();\n\n if (!state.stack.length) {\n toastRoots.get(container)?.unmount();\n toastRoots.delete(container);\n containerStates.delete(container);\n }\n });\n};\n\nToast.destroyAll = () => {\n Toast.destroy();\n};\n\ntype TriggerOptions = Omit<StaticProps, 'type' | 'title'>;\n\nToast.info = (title: React.ReactNode, props?: TriggerOptions) =>\n renderToast({ type: 'info', title, ...props });\nToast.success = (title: React.ReactNode, props?: TriggerOptions) =>\n renderToast({ type: 'success', title, ...props });\nToast.error = (title: React.ReactNode, props?: TriggerOptions) =>\n renderToast({ type: 'error', title, ...props });\nToast.warning = (title: React.ReactNode, props?: TriggerOptions) =>\n renderToast({ type: 'warning', title, ...props });\n\nexport default Toast;\nexport type { StaticProps as ToastOptions };\n"],"mappings":"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"}
@@ -8,7 +8,7 @@ declare namespace badge_d_exports {
8
8
  export { Badge, Props, badgeVariants };
9
9
  }
10
10
  declare const badgeVariants: (props?: ({
11
- variant?: "default" | "destructive" | "outline" | "secondary" | null | undefined;
11
+ variant?: "default" | "secondary" | "destructive" | "outline" | null | undefined;
12
12
  } & class_variance_authority_types0.ClassProp) | undefined) => string;
13
13
  type Props = React$1.ComponentProps<'span'> & VariantProps<typeof badgeVariants> & {
14
14
  asChild?: boolean;
@@ -8,8 +8,8 @@ declare namespace button_d_exports {
8
8
  export { Button, Props, buttonVariants };
9
9
  }
10
10
  declare const buttonVariants: (props?: ({
11
- variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
12
- size?: "icon" | "default" | "xs" | "sm" | "lg" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
11
+ variant?: "link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined;
12
+ size?: "default" | "icon" | "xs" | "sm" | "lg" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
13
13
  } & class_variance_authority_types0.ClassProp) | undefined) => string;
14
14
  type Props = React$1.ComponentProps<'button'> & VariantProps<typeof buttonVariants> & {
15
15
  asChild?: boolean;
@@ -12,8 +12,12 @@ declare function RadioGroup$1({
12
12
  }: React$1.ComponentProps<typeof RadioGroup.Root>): react_jsx_runtime0.JSX.Element;
13
13
  declare function RadioGroupItem({
14
14
  className,
15
+ asChild,
16
+ children,
15
17
  ...props
16
- }: React$1.ComponentProps<typeof RadioGroup.Item>): react_jsx_runtime0.JSX.Element;
18
+ }: React$1.ComponentProps<typeof RadioGroup.Item> & {
19
+ asChild?: boolean;
20
+ }): react_jsx_runtime0.JSX.Element;
17
21
  //#endregion
18
22
  export { RadioGroup$1 as RadioGroup, radio_group_d_exports };
19
23
  //# sourceMappingURL=radio-group.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"radio-group.d.mts","names":[],"sources":["../../src/core/radio-group.tsx"],"mappings":";;;;;;;;iBASS,YAAA,CAAA;EACP,SAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,UAAA,CAAoB,IAAA,IAAK,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAU/C,cAAA,CAAA;EACP,SAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,UAAA,CAAoB,IAAA,IAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"radio-group.d.mts","names":[],"sources":["../../src/core/radio-group.tsx"],"mappings":";;;;;;;;iBASS,YAAA,CAAA;EACP,SAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,UAAA,CAAoB,IAAA,IAAK,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAU/C,cAAA,CAAA;EACP,SAAA;EACA,OAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,UAAA,CAAoB,IAAA;EACjD,OAAA;AAAA,IACD,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -19,7 +19,13 @@ function RadioGroup$1({ className, ...props }) {
19
19
  ...props
20
20
  });
21
21
  }
22
- function RadioGroupItem({ className, ...props }) {
22
+ function RadioGroupItem({ className, asChild, children, ...props }) {
23
+ if (asChild) return /* @__PURE__ */ jsx(RadioGroup.Item, {
24
+ asChild: true,
25
+ "data-slot": "radio-group-item",
26
+ ...props,
27
+ children
28
+ });
23
29
  return /* @__PURE__ */ jsx(RadioGroup.Item, {
24
30
  "data-slot": "radio-group-item",
25
31
  className: cn(`border-input text-primary focus-visible:border-ring
@@ -1 +1 @@
1
- {"version":3,"file":"radio-group.mjs","names":["RadioGroup","RadioGroupPrimitive"],"sources":["../../src/core/radio-group.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport { CircleIcon } from 'lucide-react';\nimport { RadioGroup as RadioGroupPrimitive } from 'radix-ui';\n\nimport { cn } from '@repo/ui/utils';\n\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn('grid gap-3', className)}\n {...props}\n />\n );\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n `border-input text-primary focus-visible:border-ring\n focus-visible:ring-ring/50 aria-invalid:ring-destructive/20\n dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\n dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border\n shadow-xs transition-[color,box-shadow] outline-none\n focus-visible:ring-[3px] disabled:cursor-not-allowed\n disabled:opacity-50`,\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon\n className=\"fill-primary absolute top-1/2 left-1/2 size-2\n -translate-x-1/2 -translate-y-1/2\"\n />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\nexport { RadioGroup, RadioGroupItem };\n"],"mappings":";;;;;;;;;;;;;;AASA,SAASA,aAAW,EAClB,WACA,GAAG,SACqD;AACxD,QACE,oBAACC,WAAoB;EACnB,aAAU;EACV,WAAW,GAAG,cAAc,UAAU;EACtC,GAAI;GACJ;;AAIN,SAAS,eAAe,EACtB,WACA,GAAG,SACqD;AACxD,QACE,oBAACA,WAAoB;EACnB,aAAU;EACV,WAAW,GACT;;;;;;8BAOA,UACD;EACD,GAAI;YAEJ,oBAACA,WAAoB;GACnB,aAAU;GACV,WAAU;aAEV,oBAAC,cACC,WAAU,iGAEV;IAC4B;GACP"}
1
+ {"version":3,"file":"radio-group.mjs","names":["RadioGroup","RadioGroupPrimitive"],"sources":["../../src/core/radio-group.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport { CircleIcon } from 'lucide-react';\nimport { RadioGroup as RadioGroupPrimitive } from 'radix-ui';\n\nimport { cn } from '@repo/ui/utils';\n\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn('grid gap-3', className)}\n {...props}\n />\n );\n}\n\nfunction RadioGroupItem({\n className,\n asChild,\n children,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item> & {\n asChild?: boolean;\n}) {\n // `asChild` hands the rendered element to `children` entirely (e.g. a\n // `Button`), so the default dot indicator doesn't apply — Radix clones\n // its own role/aria-checked/keyboard handling onto that single child\n // instead of onto its own `<button>`.\n if (asChild) {\n return (\n <RadioGroupPrimitive.Item asChild data-slot=\"radio-group-item\" {...props}>\n {children}\n </RadioGroupPrimitive.Item>\n );\n }\n\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n `border-input text-primary focus-visible:border-ring\n focus-visible:ring-ring/50 aria-invalid:ring-destructive/20\n dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\n dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border\n shadow-xs transition-[color,box-shadow] outline-none\n focus-visible:ring-[3px] disabled:cursor-not-allowed\n disabled:opacity-50`,\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon\n className=\"fill-primary absolute top-1/2 left-1/2 size-2\n -translate-x-1/2 -translate-y-1/2\"\n />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\nexport { RadioGroup, RadioGroupItem };\n"],"mappings":";;;;;;;;;;;;;;AASA,SAASA,aAAW,EAClB,WACA,GAAG,SACqD;AACxD,QACE,oBAACC,WAAoB;EACnB,aAAU;EACV,WAAW,GAAG,cAAc,UAAU;EACtC,GAAI;GACJ;;AAIN,SAAS,eAAe,EACtB,WACA,SACA,UACA,GAAG,SAGF;AAKD,KAAI,QACF,QACE,oBAACA,WAAoB;EAAK;EAAQ,aAAU;EAAmB,GAAI;EAChE;GACwB;AAI/B,QACE,oBAACA,WAAoB;EACnB,aAAU;EACV,WAAW,GACT;;;;;;8BAOA,UACD;EACD,GAAI;YAEJ,oBAACA,WAAoB;GACnB,aAAU;GACV,WAAU;aAEV,oBAAC,cACC,WAAU,iGAEV;IAC4B;GACP"}
package/dist/index.d.mts CHANGED
@@ -29,10 +29,11 @@ import { Drawer, Props as Props$1 } from "./components/organisms/drawer.mjs";
29
29
  import { List } from "./components/organisms/list/index.mjs";
30
30
  import { Modal } from "./components/organisms/modal.mjs";
31
31
  import { Swiper } from "./components/organisms/swiper/index.mjs";
32
+ import { StaticProps, Toast } from "./components/organisms/toast.mjs";
32
33
  import "./components/organisms/index.mjs";
33
34
  import "./components/templates/index.mjs";
34
35
  import { ThemeConfig, ThemeToken } from "./providers/Config/types.mjs";
35
36
  import { useConfig } from "./providers/Config/context.mjs";
36
37
  import { Config, Props } from "./providers/Config/index.mjs";
37
38
  import "./providers/index.mjs";
38
- export { Button, Card, Checkbox, Collapse, ColorPicker, Config, Props as ConfigProps, DatePicker, Drawer, Props$1 as DrawerProps, Dropdown, FloatButton, Input, Layout, List, Marquees, Menu, Modal, Popover, Progress, Radio, Reveals, Select, Skeleton, Space, Spin, Splitter, Swiper, Switch, Tag, ThemeConfig, ThemeToken, Typography, Upload, UploadFile, useConfig };
39
+ export { Button, Card, Checkbox, Collapse, ColorPicker, Config, Props as ConfigProps, DatePicker, Drawer, Props$1 as DrawerProps, Dropdown, FloatButton, Input, Layout, List, Marquees, Menu, Modal, Popover, Progress, Radio, Reveals, Select, Skeleton, Space, Spin, Splitter, Swiper, Switch, Tag, ThemeConfig, ThemeToken, Toast, StaticProps as ToastOptions, Typography, Upload, UploadFile, useConfig };
package/dist/index.mjs CHANGED
@@ -27,8 +27,9 @@ import Drawer from "./components/organisms/drawer.mjs";
27
27
  import List from "./components/organisms/list/index.mjs";
28
28
  import Modal from "./components/organisms/modal.mjs";
29
29
  import Swiper from "./components/organisms/swiper/index.mjs";
30
+ import Toast from "./components/organisms/toast.mjs";
30
31
  import Layout from "./Layout.mjs";
31
32
  import { useConfig } from "./providers/Config/context.mjs";
32
33
  import Config from "./providers/Config/index.mjs";
33
34
 
34
- export { Button, Card, Checkbox, Collapse, ColorPicker, Config, DatePicker, Drawer, Dropdown, FloatButton, Input, Layout, List, Marquees, Menu, Modal, Popover, Progress, Radio, Reveals, Select, Skeleton, Space, Spin, Splitter, Swiper, Switch, Tag, Typography, Upload, useConfig };
35
+ export { Button, Card, Checkbox, Collapse, ColorPicker, Config, DatePicker, Drawer, Dropdown, FloatButton, Input, Layout, List, Marquees, Menu, Modal, Popover, Progress, Radio, Reveals, Select, Skeleton, Space, Spin, Splitter, Swiper, Switch, Tag, Toast, Typography, Upload, useConfig };
package/dist/style.css CHANGED
@@ -204,12 +204,18 @@
204
204
  container-type: inline-size;
205
205
  container-name: field-group;
206
206
  }
207
+ .pointer-events-auto {
208
+ pointer-events: auto;
209
+ }
207
210
  .pointer-events-none {
208
211
  pointer-events: none;
209
212
  }
210
213
  .invisible {
211
214
  visibility: hidden;
212
215
  }
216
+ .visible {
217
+ visibility: visible;
218
+ }
213
219
  .sr-only {
214
220
  position: absolute;
215
221
  width: 1px;
@@ -269,27 +275,15 @@
269
275
  .right-5 {
270
276
  right: calc(var(--spacing) * 5);
271
277
  }
272
- .right-full {
273
- right: 100%;
274
- }
275
- .bottom-4 {
276
- bottom: calc(var(--spacing) * 4);
277
- }
278
278
  .bottom-5 {
279
279
  bottom: calc(var(--spacing) * 5);
280
280
  }
281
- .bottom-full {
282
- bottom: 100%;
283
- }
284
281
  .left-0 {
285
282
  left: calc(var(--spacing) * 0);
286
283
  }
287
284
  .left-1\/2 {
288
285
  left: calc(1/2 * 100%);
289
286
  }
290
- .left-4 {
291
- left: calc(var(--spacing) * 4);
292
- }
293
287
  .left-\[50\%\] {
294
288
  left: 50%;
295
289
  }
@@ -353,6 +347,9 @@
353
347
  .my-1 {
354
348
  margin-block: calc(var(--spacing) * 1);
355
349
  }
350
+ .mt-0\.5 {
351
+ margin-top: calc(var(--spacing) * 0.5);
352
+ }
356
353
  .mt-2 {
357
354
  margin-top: calc(var(--spacing) * 2);
358
355
  }
@@ -577,6 +574,9 @@
577
574
  .w-72 {
578
575
  width: calc(var(--spacing) * 72);
579
576
  }
577
+ .w-80 {
578
+ width: calc(var(--spacing) * 80);
579
+ }
580
580
  .w-100 {
581
581
  width: calc(var(--spacing) * 100);
582
582
  }
@@ -660,6 +660,10 @@
660
660
  --tw-translate-x: calc(calc(1/2 * 100%) * -1);
661
661
  translate: var(--tw-translate-x) var(--tw-translate-y);
662
662
  }
663
+ .translate-x-2 {
664
+ --tw-translate-x: calc(var(--spacing) * 2);
665
+ translate: var(--tw-translate-x) var(--tw-translate-y);
666
+ }
663
667
  .translate-x-\[-50\%\] {
664
668
  --tw-translate-x: -50%;
665
669
  translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -800,6 +804,13 @@
800
804
  .gap-7 {
801
805
  gap: calc(var(--spacing) * 7);
802
806
  }
807
+ .space-y-1 {
808
+ :where(& > :not(:last-child)) {
809
+ --tw-space-y-reverse: 0;
810
+ margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));
811
+ margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)));
812
+ }
813
+ }
803
814
  .space-y-2 {
804
815
  :where(& > :not(:last-child)) {
805
816
  --tw-space-y-reverse: 0;
@@ -870,6 +881,10 @@
870
881
  border-top-left-radius: 30px !important;
871
882
  border-top-right-radius: 30px !important;
872
883
  }
884
+ .rounded-t-lg {
885
+ border-top-left-radius: var(--radius);
886
+ border-top-right-radius: var(--radius);
887
+ }
873
888
  .rounded-l-lg {
874
889
  border-top-left-radius: var(--radius);
875
890
  border-bottom-left-radius: var(--radius);
@@ -894,6 +909,10 @@
894
909
  border-top-right-radius: 0;
895
910
  border-bottom-right-radius: 0;
896
911
  }
912
+ .rounded-b-lg {
913
+ border-bottom-right-radius: var(--radius);
914
+ border-bottom-left-radius: var(--radius);
915
+ }
897
916
  .border {
898
917
  border-style: var(--tw-border-style);
899
918
  border-width: 1px;
@@ -1119,6 +1138,9 @@
1119
1138
  .pt-0 {
1120
1139
  padding-top: calc(var(--spacing) * 0);
1121
1140
  }
1141
+ .pt-1 {
1142
+ padding-top: calc(var(--spacing) * 1);
1143
+ }
1122
1144
  .pt-2 {
1123
1145
  padding-top: calc(var(--spacing) * 2);
1124
1146
  }
@@ -1595,42 +1617,6 @@
1595
1617
  position: absolute;
1596
1618
  }
1597
1619
  }
1598
- .before\:top-0 {
1599
- &::before {
1600
- content: var(--tw-content);
1601
- top: calc(var(--spacing) * 0);
1602
- }
1603
- }
1604
- .before\:top-1\/2 {
1605
- &::before {
1606
- content: var(--tw-content);
1607
- top: calc(1/2 * 100%);
1608
- }
1609
- }
1610
- .before\:right-0 {
1611
- &::before {
1612
- content: var(--tw-content);
1613
- right: calc(var(--spacing) * 0);
1614
- }
1615
- }
1616
- .before\:bottom-0 {
1617
- &::before {
1618
- content: var(--tw-content);
1619
- bottom: calc(var(--spacing) * 0);
1620
- }
1621
- }
1622
- .before\:left-0 {
1623
- &::before {
1624
- content: var(--tw-content);
1625
- left: calc(var(--spacing) * 0);
1626
- }
1627
- }
1628
- .before\:left-1\/2 {
1629
- &::before {
1630
- content: var(--tw-content);
1631
- left: calc(1/2 * 100%);
1632
- }
1633
- }
1634
1620
  .before\:h-0 {
1635
1621
  &::before {
1636
1622
  content: var(--tw-content);
@@ -1643,20 +1629,6 @@
1643
1629
  width: calc(var(--spacing) * 0);
1644
1630
  }
1645
1631
  }
1646
- .before\:-translate-x-1\/2 {
1647
- &::before {
1648
- content: var(--tw-content);
1649
- --tw-translate-x: calc(calc(1/2 * 100%) * -1);
1650
- translate: var(--tw-translate-x) var(--tw-translate-y);
1651
- }
1652
- }
1653
- .before\:-translate-y-1\/2 {
1654
- &::before {
1655
- content: var(--tw-content);
1656
- --tw-translate-y: calc(calc(1/2 * 100%) * -1);
1657
- translate: var(--tw-translate-x) var(--tw-translate-y);
1658
- }
1659
- }
1660
1632
  .before\:border-t-\[9px\] {
1661
1633
  &::before {
1662
1634
  content: var(--tw-content);
@@ -1751,66 +1723,12 @@
1751
1723
  inset-block: calc(var(--spacing) * 0);
1752
1724
  }
1753
1725
  }
1754
- .after\:-top-px {
1755
- &::after {
1756
- content: var(--tw-content);
1757
- top: -1px;
1758
- }
1759
- }
1760
- .after\:top-1\/2 {
1761
- &::after {
1762
- content: var(--tw-content);
1763
- top: calc(1/2 * 100%);
1764
- }
1765
- }
1766
- .after\:top-px {
1767
- &::after {
1768
- content: var(--tw-content);
1769
- top: 1px;
1770
- }
1771
- }
1772
- .after\:-right-px {
1773
- &::after {
1774
- content: var(--tw-content);
1775
- right: -1px;
1776
- }
1777
- }
1778
- .after\:right-px {
1779
- &::after {
1780
- content: var(--tw-content);
1781
- right: 1px;
1782
- }
1783
- }
1784
- .after\:-bottom-px {
1785
- &::after {
1786
- content: var(--tw-content);
1787
- bottom: -1px;
1788
- }
1789
- }
1790
- .after\:bottom-px {
1791
- &::after {
1792
- content: var(--tw-content);
1793
- bottom: 1px;
1794
- }
1795
- }
1796
- .after\:-left-px {
1797
- &::after {
1798
- content: var(--tw-content);
1799
- left: -1px;
1800
- }
1801
- }
1802
1726
  .after\:left-1\/2 {
1803
1727
  &::after {
1804
1728
  content: var(--tw-content);
1805
1729
  left: calc(1/2 * 100%);
1806
1730
  }
1807
1731
  }
1808
- .after\:left-px {
1809
- &::after {
1810
- content: var(--tw-content);
1811
- left: 1px;
1812
- }
1813
- }
1814
1732
  .after\:h-0 {
1815
1733
  &::after {
1816
1734
  content: var(--tw-content);
@@ -1836,13 +1754,6 @@
1836
1754
  translate: var(--tw-translate-x) var(--tw-translate-y);
1837
1755
  }
1838
1756
  }
1839
- .after\:-translate-y-1\/2 {
1840
- &::after {
1841
- content: var(--tw-content);
1842
- --tw-translate-y: calc(calc(1/2 * 100%) * -1);
1843
- translate: var(--tw-translate-x) var(--tw-translate-y);
1844
- }
1845
- }
1846
1757
  .after\:border-t-8 {
1847
1758
  &::after {
1848
1759
  content: var(--tw-content);
@@ -2998,6 +2909,12 @@
2998
2909
  pointer-events: none;
2999
2910
  }
3000
2911
  }
2912
+ .\[\&_svg\]\:size-5 {
2913
+ & svg {
2914
+ width: calc(var(--spacing) * 5);
2915
+ height: calc(var(--spacing) * 5);
2916
+ }
2917
+ }
3001
2918
  .\[\&_svg\]\:shrink-0 {
3002
2919
  & svg {
3003
2920
  flex-shrink: 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbpark/ui-kit",
3
- "version": "3.2.1",
3
+ "version": "3.4.0",
4
4
  "description": "Modern React UI component library built with TypeScript, Tailwind CSS, and Radix UI. Featuring atoms, molecules, organisms and layout templates for building beautiful interfaces.",
5
5
  "keywords": [
6
6
  "react",
@@ -126,7 +126,7 @@
126
126
  },
127
127
  "dependencies": {
128
128
  "@gsap/react": "^2.1.2",
129
- "@jbpark/use-hooks": "^2.6.0",
129
+ "@jbpark/use-hooks": "^2.11.0",
130
130
  "@radix-ui/react-accordion": "^1.2.12",
131
131
  "@radix-ui/react-checkbox": "^1.3.3",
132
132
  "@radix-ui/react-dialog": "^1.1.15",