@oneplatformdev/ui 0.1.99-beta.247 → 0.1.99-beta.249

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ ## 0.1.99-beta.249 (2026-03-11)
2
+
3
+ ### 🧱 Updated Dependencies
4
+
5
+ - Updated @oneplatformdev/utils to 0.1.99-beta.249
6
+ - Updated @oneplatformdev/hooks to 0.1.99-beta.249
7
+ - Updated @oneplatformdev/tokens to 0.1.99-beta.249
8
+
9
+ ## 0.1.99-beta.248 (2026-03-10)
10
+
11
+ ### 🧱 Updated Dependencies
12
+
13
+ - Updated @oneplatformdev/utils to 0.1.99-beta.248
14
+ - Updated @oneplatformdev/hooks to 0.1.99-beta.248
15
+ - Updated @oneplatformdev/tokens to 0.1.99-beta.248
16
+
1
17
  ## 0.1.99-beta.247 (2026-03-09)
2
18
 
3
19
  ### 🧱 Updated Dependencies
@@ -1 +1 @@
1
- {"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../src/Dialog/Dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AAMzD,iBAAS,MAAM,CAAC,EACE,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,2CAEnE;AAED,iBAAS,aAAa,CAAC,EACE,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,2CAE7E;AAED,iBAAS,YAAY,CAAC,EACE,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,MAAM,CAAC,2CAE3E;AAED,iBAAS,WAAW,CAAC,EACE,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,2CAEzE;AAED,iBAAS,aAAa,CAAC,EACE,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,2CAW7E;AAED,iBAAS,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG;IACnF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;KAChE,CAAA;CACF,2CA0DA;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAQzE;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWzE;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,2CA2B7E;AAED,iBAAS,iBAAiB,CAAC,EACE,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,WAAW,CAAC,2CAYrF;AAED,OAAO,EACL,MAAM,EACN,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,EACb,eAAe,EAChB,CAAA"}
1
+ {"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../src/Dialog/Dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AAOzD,iBAAS,MAAM,CAAC,EACE,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,2CAEnE;AAED,iBAAS,aAAa,CAAC,EACE,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,2CAE7E;AAED,iBAAS,YAAY,CAAC,EACE,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,MAAM,CAAC,2CAE3E;AAED,iBAAS,WAAW,CAAC,EACE,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,2CAEzE;AAED,iBAAS,aAAa,CAAC,EACE,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,2CAW7E;AAED,iBAAS,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG;IACnF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;KAChE,CAAA;CACF,2CAqEA;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAQzE;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWzE;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,2CA2B7E;AAED,iBAAS,iBAAiB,CAAC,EACE,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,WAAW,CAAC,2CAYrF;AAED,OAAO,EACL,MAAM,EACN,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,EACb,eAAe,EAChB,CAAA"}
package/Dialog/Dialog.js CHANGED
@@ -1,30 +1,32 @@
1
- import { jsx as e, jsxs as l } from "react/jsx-runtime";
1
+ import { jsx as e, jsxs as c } from "react/jsx-runtime";
2
+ import * as g from "react";
2
3
  import * as a from "@radix-ui/react-dialog";
3
- import { XIcon as u } from "lucide-react";
4
+ import { XIcon as p } from "lucide-react";
4
5
  import { cn as n } from "@oneplatformdev/utils";
5
- import { ButtonIcon as f } from "../ButtonIcon/ButtonIcon.js";
6
+ import { ButtonIcon as m } from "../ButtonIcon/ButtonIcon.js";
6
7
  import "../ButtonIcon/buttonIconVariants.js";
7
- function y({
8
+ import { useDialogClosePosition as x } from "./useDialogClosePosition.js";
9
+ function z({
8
10
  ...t
9
11
  }) {
10
12
  return /* @__PURE__ */ e(a.Root, { "data-slot": "dialog", ...t });
11
13
  }
12
- function w({
14
+ function P({
13
15
  ...t
14
16
  }) {
15
17
  return /* @__PURE__ */ e(a.Trigger, { "data-slot": "dialog-trigger", ...t });
16
18
  }
17
- function g({
19
+ function h({
18
20
  ...t
19
21
  }) {
20
22
  return /* @__PURE__ */ e(a.Portal, { "data-slot": "dialog-portal", ...t });
21
23
  }
22
- function D({
24
+ function k({
23
25
  ...t
24
26
  }) {
25
27
  return /* @__PURE__ */ e(a.Close, { "data-slot": "dialog-close", ...t });
26
28
  }
27
- function p({
29
+ function v({
28
30
  className: t,
29
31
  ...o
30
32
  }) {
@@ -40,18 +42,21 @@ function p({
40
42
  }
41
43
  );
42
44
  }
43
- function N(t) {
45
+ function j(t) {
44
46
  const {
45
47
  className: o,
46
48
  children: i,
47
49
  showCloseButton: s = !0,
48
- style: r,
49
- slotProps: c,
50
- ...d
51
- } = t;
52
- return /* @__PURE__ */ e(g, { "data-slot": "dialog-portal", children: /* @__PURE__ */ e(p, { ...c?.overlay, children: /* @__PURE__ */ l(
50
+ style: d,
51
+ slotProps: u,
52
+ ...f
53
+ } = t, l = g.useRef(null), r = x(l, {
54
+ enabled: s
55
+ });
56
+ return /* @__PURE__ */ e(h, { "data-slot": "dialog-portal", children: /* @__PURE__ */ e(v, { ...u?.overlay, children: /* @__PURE__ */ c(
53
57
  a.Content,
54
58
  {
59
+ ref: l,
55
60
  "data-slot": "dialog-content",
56
61
  "data-closable": JSON.stringify(s),
57
62
  className: n(
@@ -65,14 +70,14 @@ function N(t) {
65
70
  "outline-none focus:outline-none focus-visible:outline-none",
66
71
  o
67
72
  ),
68
- ...d,
73
+ ...f,
69
74
  style: {
70
75
  pointerEvents: "auto",
71
- ...r || {}
76
+ ...d || {}
72
77
  },
73
78
  children: [
74
79
  i,
75
- s && /* @__PURE__ */ l(
80
+ s && /* @__PURE__ */ c(
76
81
  a.Close,
77
82
  {
78
83
  "data-slot": "dialog-close",
@@ -85,13 +90,17 @@ function N(t) {
85
90
  '[&_svg]:shrink-0 [&_svg:not([class*="size-"])]:size-5',
86
91
  "cursor-pointer size-10 flex items-center justify-center"
87
92
  ),
93
+ style: {
94
+ top: r.top,
95
+ right: r.right
96
+ },
88
97
  children: [
89
98
  /* @__PURE__ */ e(
90
- f,
99
+ m,
91
100
  {
92
101
  variant: "ghost",
93
102
  color: "secondary",
94
- icon: u
103
+ icon: p
95
104
  }
96
105
  ),
97
106
  /* @__PURE__ */ e("span", { className: "sr-only", children: "Close" })
@@ -102,7 +111,7 @@ function N(t) {
102
111
  }
103
112
  ) }) });
104
113
  }
105
- function C({ className: t, ...o }) {
114
+ function R({ className: t, ...o }) {
106
115
  return /* @__PURE__ */ e(
107
116
  "div",
108
117
  {
@@ -112,7 +121,7 @@ function C({ className: t, ...o }) {
112
121
  }
113
122
  );
114
123
  }
115
- function z({ className: t, ...o }) {
124
+ function T({ className: t, ...o }) {
116
125
  return /* @__PURE__ */ e(
117
126
  "div",
118
127
  {
@@ -125,7 +134,7 @@ function z({ className: t, ...o }) {
125
134
  }
126
135
  );
127
136
  }
128
- function k(t) {
137
+ function O(t) {
129
138
  const {
130
139
  className: o,
131
140
  children: i,
@@ -155,7 +164,7 @@ function k(t) {
155
164
  }
156
165
  );
157
166
  }
158
- function j({
167
+ function _({
159
168
  className: t,
160
169
  ...o
161
170
  }) {
@@ -173,16 +182,16 @@ function j({
173
182
  );
174
183
  }
175
184
  export {
176
- y as Dialog,
177
- D as DialogClose,
178
- N as DialogContent,
179
- j as DialogDescription,
180
- z as DialogFooter,
181
- C as DialogHeader,
182
- p as DialogOverlay,
183
- g as DialogPortal,
185
+ z as Dialog,
186
+ k as DialogClose,
187
+ j as DialogContent,
188
+ _ as DialogDescription,
189
+ T as DialogFooter,
190
+ R as DialogHeader,
191
+ v as DialogOverlay,
192
+ h as DialogPortal,
184
193
  a as DialogPrimitive,
185
- k as DialogTitle,
186
- w as DialogTrigger
194
+ O as DialogTitle,
195
+ P as DialogTrigger
187
196
  };
188
197
  //# sourceMappingURL=Dialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Dialog.js","sources":["../../src/Dialog/Dialog.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"@oneplatformdev/utils\"\nimport { ButtonIcon } from \"../ButtonIcon\";\n\nfunction Dialog({\n ...props\n }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n }: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent(props: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n slotProps?: {\n overlay?: React.ComponentProps<typeof DialogPrimitive.Overlay>;\n }\n}) {\n const {\n className,\n children,\n showCloseButton = true,\n style,\n slotProps,\n ...rest\n } = props;\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay {...slotProps?.overlay}>\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n data-closable={JSON.stringify(showCloseButton)}\n className={cn(\n 'group group/content',\n 'fixed top-[50%] left-[50%] z-50 translate-x-[-50%] translate-y-[-50%]',\n 'flex flex-col w-full max-w-[calc(100%-2rem)] sm:max-w-2xl gap-3',\n 'max-h-[90%] overflow-auto overscroll-none',\n 'bg-background rounded-lg border shadow-lg duration-200 p-6',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n \"focus:outline-none focus-visible:outline-none focus:ring-0 focus-visible:ring-0 focus:ring-transparent\",\n 'outline-none focus:outline-none focus-visible:outline-none',\n className\n )}\n {...rest}\n style={{\n pointerEvents: 'auto',\n ...(style || {}),\n }}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className={cn(\n 'absolute top-6 right-6 rounded-2xl opacity-70 transition-opacity hover:opacity-100',\n 'data-[state=open]:bg-accent data-[state=open]:text-muted-foreground',\n 'ring-offset-background focus:ring-transparent focus:ring-0 focus:ring-offset-0 focus:outline-hidden',\n 'focus:outline-none focus:ring-0',\n 'disabled:pointer-events-none [&_svg]:pointer-events-none',\n '[&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-5',\n 'cursor-pointer size-10 flex items-center justify-center',\n )}\n >\n <ButtonIcon\n variant='ghost'\n color='secondary'\n icon={XIcon}\n />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogOverlay>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-4 justify-center text-center sm:text-left min-h-10\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end pt-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle(props: React.ComponentProps<typeof DialogPrimitive.Title>) {\n const {\n className,\n children,\n ...rest\n } = props;\n return (\n <DialogPrimitive.Title\n asChild\n data-slot=\"dialog-title\"\n className={cn(\n \"flex items-center min-h-10\",\n \"group-data-[closable='true']/content:pr-13\",\n className\n )}\n {...rest}\n >\n <span\n className={cn(\n \"text-lg leading-[1.2] font-bold text-[#06080D]\",\n 'whitespace-pre-wrap wrap-break-word line-clamp-10',\n )}\n >\n {children}\n </span>\n </DialogPrimitive.Title>\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n }: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\n \"text-[#06080D] font-medium text-base\",\n 'whitespace-pre-wrap wrap-break-word line-clamp-10',\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n DialogPrimitive\n}\n"],"names":["Dialog","props","DialogPrimitive","DialogTrigger","DialogPortal","DialogClose","DialogOverlay","className","jsx","cn","DialogContent","children","showCloseButton","style","slotProps","rest","jsxs","ButtonIcon","XIcon","DialogHeader","DialogFooter","DialogTitle","DialogDescription"],"mappings":"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"}
1
+ {"version":3,"file":"Dialog.js","sources":["../../src/Dialog/Dialog.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"@oneplatformdev/utils\"\nimport { ButtonIcon } from \"../ButtonIcon\";\nimport { useDialogClosePosition } from \"./useDialogClosePosition\";\n\nfunction Dialog({\n ...props\n }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n }: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent(props: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n slotProps?: {\n overlay?: React.ComponentProps<typeof DialogPrimitive.Overlay>;\n }\n}) {\n const {\n className,\n children,\n showCloseButton = true,\n style,\n slotProps,\n ...rest\n } = props;\n\n const contentRef = React.useRef<HTMLDivElement | null>(null);\n const closePosition = useDialogClosePosition(contentRef, {\n enabled: showCloseButton,\n });\n\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay {...slotProps?.overlay}>\n <DialogPrimitive.Content\n ref={contentRef}\n data-slot=\"dialog-content\"\n data-closable={JSON.stringify(showCloseButton)}\n className={cn(\n 'group group/content',\n 'fixed top-[50%] left-[50%] z-50 translate-x-[-50%] translate-y-[-50%]',\n 'flex flex-col w-full max-w-[calc(100%-2rem)] sm:max-w-2xl gap-3',\n 'max-h-[90%] overflow-auto overscroll-none',\n 'bg-background rounded-lg border shadow-lg duration-200 p-6',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n \"focus:outline-none focus-visible:outline-none focus:ring-0 focus-visible:ring-0 focus:ring-transparent\",\n 'outline-none focus:outline-none focus-visible:outline-none',\n className\n )}\n {...rest}\n style={{\n pointerEvents: 'auto',\n ...(style || {}),\n }}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className={cn(\n 'absolute top-6 right-6 rounded-2xl opacity-70 transition-opacity hover:opacity-100',\n 'data-[state=open]:bg-accent data-[state=open]:text-muted-foreground',\n 'ring-offset-background focus:ring-transparent focus:ring-0 focus:ring-offset-0 focus:outline-hidden',\n 'focus:outline-none focus:ring-0',\n 'disabled:pointer-events-none [&_svg]:pointer-events-none',\n '[&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-5',\n 'cursor-pointer size-10 flex items-center justify-center',\n )}\n style={{\n top: closePosition.top,\n right: closePosition.right,\n }}\n >\n <ButtonIcon\n variant='ghost'\n color='secondary'\n icon={XIcon}\n />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogOverlay>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-4 justify-center text-center sm:text-left min-h-10\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end pt-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle(props: React.ComponentProps<typeof DialogPrimitive.Title>) {\n const {\n className,\n children,\n ...rest\n } = props;\n return (\n <DialogPrimitive.Title\n asChild\n data-slot=\"dialog-title\"\n className={cn(\n \"flex items-center min-h-10\",\n \"group-data-[closable='true']/content:pr-13\",\n className\n )}\n {...rest}\n >\n <span\n className={cn(\n \"text-lg leading-[1.2] font-bold text-[#06080D]\",\n 'whitespace-pre-wrap wrap-break-word line-clamp-10',\n )}\n >\n {children}\n </span>\n </DialogPrimitive.Title>\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n }: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\n \"text-[#06080D] font-medium text-base\",\n 'whitespace-pre-wrap wrap-break-word line-clamp-10',\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n DialogPrimitive\n}\n"],"names":["Dialog","props","DialogPrimitive","DialogTrigger","DialogPortal","DialogClose","DialogOverlay","className","jsx","cn","DialogContent","children","showCloseButton","style","slotProps","rest","contentRef","React","closePosition","useDialogClosePosition","jsxs","ButtonIcon","XIcon","DialogHeader","DialogFooter","DialogTitle","DialogDescription"],"mappings":"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"}
@@ -20,26 +20,32 @@ function I(p) {
20
20
  }, [t, r]);
21
21
  return /* @__PURE__ */ o("div", { className: "p-10", children: /* @__PURE__ */ e(b, { open: y, onOpenChange: d, children: [
22
22
  /* @__PURE__ */ o(O, { asChild: !0, children: /* @__PURE__ */ o(l, { variant: "outlined", children: C }) }),
23
- /* @__PURE__ */ e(B, { showCloseButton: u, children: [
24
- /* @__PURE__ */ e(v, { children: [
25
- /* @__PURE__ */ e(w, { children: [
26
- h,
27
- " 123"
28
- ] }),
29
- a ? /* @__PURE__ */ o(T, { children: a }) : null
30
- ] }),
31
- /* @__PURE__ */ o("div", { className: c ? "max-h-[50vh] overflow-auto pr-1" : void 0, children: c ? /* @__PURE__ */ o("div", { className: "space-y-3 text-sm leading-6", children: Array.from({ length: 30 }).map((n, g) => /* @__PURE__ */ e("p", { children: [
32
- "#",
33
- g + 1,
34
- ". ",
35
- s,
36
- " Lorem ipsum dolor sit amet, consectetur adipiscing elit."
37
- ] }, g)) }) : /* @__PURE__ */ o("p", { className: "text-sm leading-6", children: s }) }),
38
- m ? /* @__PURE__ */ e(F, { children: [
39
- /* @__PURE__ */ o(L, { asChild: !0, children: /* @__PURE__ */ o(l, { color: "secondary", children: "Cancel" }) }),
40
- /* @__PURE__ */ o(l, { onClick: () => d(!1), children: "Save" })
41
- ] }) : null
42
- ] })
23
+ /* @__PURE__ */ e(
24
+ B,
25
+ {
26
+ showCloseButton: u,
27
+ children: [
28
+ /* @__PURE__ */ e(v, { children: [
29
+ /* @__PURE__ */ e(w, { children: [
30
+ h,
31
+ " 123"
32
+ ] }),
33
+ a ? /* @__PURE__ */ o(T, { children: a }) : null
34
+ ] }),
35
+ /* @__PURE__ */ o("div", { className: c ? "max-h-[50vh] overflow-auto pr-1" : void 0, children: c ? /* @__PURE__ */ o("div", { className: "space-y-3 text-sm leading-6", children: Array.from({ length: 30 }).map((n, g) => /* @__PURE__ */ e("p", { children: [
36
+ "#",
37
+ g + 1,
38
+ ". ",
39
+ s,
40
+ " Lorem ipsum dolor sit amet, consectetur adipiscing elit."
41
+ ] }, g)) }) : /* @__PURE__ */ o("p", { className: "text-sm leading-6", children: s }) }),
42
+ m ? /* @__PURE__ */ e(F, { children: [
43
+ /* @__PURE__ */ o(L, { asChild: !0, children: /* @__PURE__ */ o(l, { color: "secondary", children: "Cancel" }) }),
44
+ /* @__PURE__ */ o(l, { onClick: () => d(!1), children: "Save" })
45
+ ] }) : null
46
+ ]
47
+ }
48
+ )
43
49
  ] }) });
44
50
  }
45
51
  const W = {
@@ -1 +1 @@
1
- {"version":3,"file":"Dialog.stories.js","sources":["../../src/Dialog/Dialog.stories.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { Meta, StoryObj } from \"@storybook/react\";\n\nimport {\n Dialog,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n DialogClose,\n} from \"./Dialog\";\nimport { Button } from \"../Button\";\nimport { useCallback, useState } from \"react\";\nimport { DialogControlsProps } from \"./Dialog.types\";\n\ntype DialogDemoProps = DialogControlsProps & {\n title: string;\n description?: string;\n showCloseButton?: boolean;\n withFooter?: boolean;\n initialOpen?: boolean;\n triggerLabel?: string;\n bodyText?: string;\n longBody?: boolean;\n};\n\n// TODO: create cmp like alert\nfunction DialogDemo(props: DialogDemoProps) {\n const {\n open: controlledOpen,\n onOpenChange,\n title,\n description,\n showCloseButton = true,\n withFooter = true,\n initialOpen = false,\n triggerLabel = \"Open dialog\",\n bodyText = \"Some content inside dialog…\",\n longBody = false,\n } = props;\n\n const [ internalOpen, setInternalOpen ] = useState(initialOpen);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n const setOpen = useCallback((next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n }, [ isControlled, onOpenChange ]);\n\n return (\n <div className=\"p-10\">\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger asChild>\n <Button variant='outlined'>\n {triggerLabel}\n </Button>\n </DialogTrigger>\n\n <DialogContent showCloseButton={showCloseButton}>\n <DialogHeader>\n <DialogTitle>{title} 123</DialogTitle>\n {description ? <DialogDescription>{description}</DialogDescription> : null}\n </DialogHeader>\n\n <div className={longBody ? \"max-h-[50vh] overflow-auto pr-1\" : undefined}>\n {longBody ? (\n <div className=\"space-y-3 text-sm leading-6\">\n {Array.from({ length: 30 }).map((_, i) => (\n <p key={i}>\n #{i + 1}. {bodyText} Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n </p>\n ))}\n </div>\n ) : (\n <p className=\"text-sm leading-6\">{bodyText}</p>\n )}\n </div>\n\n {withFooter ? (\n <DialogFooter>\n <DialogClose asChild>\n <Button color='secondary'>\n Cancel\n </Button>\n </DialogClose>\n\n <Button onClick={() => setOpen(false)}>\n Save\n </Button>\n </DialogFooter>\n ) : null}\n </DialogContent>\n </Dialog>\n </div>\n );\n}\n\nconst meta: Meta<typeof DialogDemo> = {\n title: \"UI/Dialog\",\n component: DialogDemo,\n parameters: {\n layout: \"fullscreen\",\n },\n argTypes: {\n title: { control: \"text\" },\n description: { control: \"text\" },\n showCloseButton: { control: \"boolean\" },\n withFooter: { control: \"boolean\" },\n initialOpen: { control: \"boolean\" },\n triggerLabel: { control: \"text\" },\n bodyText: { control: \"text\" },\n longBody: { control: \"boolean\" },\n },\n args: {\n title: \"Dialog title\",\n description: \"Dialog description\",\n showCloseButton: true,\n withFooter: true,\n initialOpen: false,\n triggerLabel: \"Open dialog\",\n bodyText: \"Some content inside dialog…\",\n longBody: false,\n },\n};\nexport default meta;\n\ntype Story = StoryObj<typeof DialogDemo>;\n\nexport const Default: Story = {};\n\nexport const WithoutDescription: Story = {\n args: {\n description: \"\",\n },\n};\n\nexport const NoCloseButton: Story = {\n args: {\n showCloseButton: false,\n },\n};\n\nexport const NoFooter: Story = {\n args: {\n withFooter: false,\n },\n};\n\nexport const LongContentScrollable: Story = {\n args: {\n longBody: true,\n bodyText: \"Long text line\",\n },\n};\n\nexport const InitiallyOpen: Story = {\n args: {\n initialOpen: true,\n },\n};\n"],"names":["DialogDemo","props","controlledOpen","onOpenChange","title","description","showCloseButton","withFooter","initialOpen","triggerLabel","bodyText","longBody","internalOpen","setInternalOpen","useState","isControlled","open","setOpen","useCallback","next","jsx","Dialog","DialogTrigger","Button","jsxs","DialogContent","DialogHeader","DialogTitle","DialogDescription","_","i","DialogFooter","DialogClose","meta","Default","WithoutDescription","NoCloseButton","NoFooter","LongContentScrollable","InitiallyOpen"],"mappings":"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"}
1
+ {"version":3,"file":"Dialog.stories.js","sources":["../../src/Dialog/Dialog.stories.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { Meta, StoryObj } from \"@storybook/react\";\n\nimport {\n Dialog,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n DialogClose,\n} from \"./Dialog\";\nimport { Button } from \"../Button\";\nimport { useCallback, useState } from \"react\";\nimport { DialogControlsProps } from \"./Dialog.types\";\n\ntype DialogDemoProps = DialogControlsProps & {\n title: string;\n description?: string;\n showCloseButton?: boolean;\n withFooter?: boolean;\n initialOpen?: boolean;\n triggerLabel?: string;\n bodyText?: string;\n longBody?: boolean;\n};\n\n// TODO: create cmp like alert\nfunction DialogDemo(props: DialogDemoProps) {\n const {\n open: controlledOpen,\n onOpenChange,\n title,\n description,\n showCloseButton = true,\n withFooter = true,\n initialOpen = false,\n triggerLabel = \"Open dialog\",\n bodyText = \"Some content inside dialog…\",\n longBody = false,\n } = props;\n\n const [ internalOpen, setInternalOpen ] = useState(initialOpen);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n const setOpen = useCallback((next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n }, [ isControlled, onOpenChange ]);\n\n return (\n <div className=\"p-10\">\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger asChild>\n <Button variant='outlined'>\n {triggerLabel}\n </Button>\n </DialogTrigger>\n\n <DialogContent\n showCloseButton={showCloseButton}\n >\n <DialogHeader>\n <DialogTitle>{title} 123</DialogTitle>\n {description ? <DialogDescription>{description}</DialogDescription> : null}\n </DialogHeader>\n\n <div className={longBody ? \"max-h-[50vh] overflow-auto pr-1\" : undefined}>\n {longBody ? (\n <div className=\"space-y-3 text-sm leading-6\">\n {Array.from({ length: 30 }).map((_, i) => (\n <p key={i}>\n #{i + 1}. {bodyText} Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n </p>\n ))}\n </div>\n ) : (\n <p className=\"text-sm leading-6\">{bodyText}</p>\n )}\n </div>\n\n {withFooter ? (\n <DialogFooter>\n <DialogClose asChild>\n <Button color='secondary'>\n Cancel\n </Button>\n </DialogClose>\n\n <Button onClick={() => setOpen(false)}>\n Save\n </Button>\n </DialogFooter>\n ) : null}\n </DialogContent>\n </Dialog>\n </div>\n );\n}\n\nconst meta: Meta<typeof DialogDemo> = {\n title: \"UI/Dialog\",\n component: DialogDemo,\n parameters: {\n layout: \"fullscreen\",\n },\n argTypes: {\n title: { control: \"text\" },\n description: { control: \"text\" },\n showCloseButton: { control: \"boolean\" },\n withFooter: { control: \"boolean\" },\n initialOpen: { control: \"boolean\" },\n triggerLabel: { control: \"text\" },\n bodyText: { control: \"text\" },\n longBody: { control: \"boolean\" },\n },\n args: {\n title: \"Dialog title\",\n description: \"Dialog description\",\n showCloseButton: true,\n withFooter: true,\n initialOpen: false,\n triggerLabel: \"Open dialog\",\n bodyText: \"Some content inside dialog…\",\n longBody: false,\n },\n};\nexport default meta;\n\ntype Story = StoryObj<typeof DialogDemo>;\n\nexport const Default: Story = {};\n\nexport const WithoutDescription: Story = {\n args: {\n description: \"\",\n },\n};\n\nexport const NoCloseButton: Story = {\n args: {\n showCloseButton: false,\n },\n};\n\nexport const NoFooter: Story = {\n args: {\n withFooter: false,\n },\n};\n\nexport const LongContentScrollable: Story = {\n args: {\n longBody: true,\n bodyText: \"Long text line\",\n },\n};\n\nexport const InitiallyOpen: Story = {\n args: {\n initialOpen: true,\n },\n};\n"],"names":["DialogDemo","props","controlledOpen","onOpenChange","title","description","showCloseButton","withFooter","initialOpen","triggerLabel","bodyText","longBody","internalOpen","setInternalOpen","useState","isControlled","open","setOpen","useCallback","next","jsx","Dialog","DialogTrigger","Button","jsxs","DialogContent","DialogHeader","DialogTitle","DialogDescription","_","i","DialogFooter","DialogClose","meta","Default","WithoutDescription","NoCloseButton","NoFooter","LongContentScrollable","InitiallyOpen"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+ type UseDialogClosePositionOptions = {
3
+ enabled?: boolean;
4
+ titleSelector?: string;
5
+ };
6
+ type DialogClosePosition = {
7
+ top?: number;
8
+ right?: number;
9
+ };
10
+ export declare function useDialogClosePosition(contentRef: React.RefObject<HTMLElement | null>, options?: UseDialogClosePositionOptions): DialogClosePosition;
11
+ export {};
12
+ //# sourceMappingURL=useDialogClosePosition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDialogClosePosition.d.ts","sourceRoot":"","sources":["../../src/Dialog/useDialogClosePosition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,KAAK,6BAA6B,GAAG;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAC/C,OAAO,CAAC,EAAE,6BAA6B,uBAuFxC"}
@@ -0,0 +1,53 @@
1
+ import * as c from "react";
2
+ function h(s, l) {
3
+ const {
4
+ enabled: a = !0,
5
+ titleSelector: u = '[data-slot="dialog-title"]'
6
+ } = l ?? {}, [d, g] = c.useState({}), r = c.useCallback((t) => {
7
+ g((e) => e.top === t.top && e.right === t.right ? e : t);
8
+ }, []), o = c.useCallback(() => {
9
+ const t = s.current;
10
+ if (!a || !t) {
11
+ r({});
12
+ return;
13
+ }
14
+ const e = t.querySelector(u);
15
+ if (!e) {
16
+ r({});
17
+ return;
18
+ }
19
+ const n = t.getBoundingClientRect(), i = e.getBoundingClientRect();
20
+ if (n.width <= 0 || n.height <= 0 || i.width <= 0 || i.height <= 0) {
21
+ r({});
22
+ return;
23
+ }
24
+ r({
25
+ top: Math.round(i.top - n.top),
26
+ right: Math.round(n.right - i.right)
27
+ });
28
+ }, [s, a, r, u]);
29
+ return c.useEffect(() => {
30
+ if (!a) {
31
+ r({});
32
+ return;
33
+ }
34
+ let t = 0, e = 0;
35
+ const n = s.current;
36
+ if (!n) return;
37
+ t = requestAnimationFrame(() => {
38
+ e = requestAnimationFrame(() => {
39
+ o();
40
+ });
41
+ });
42
+ const i = new ResizeObserver(() => {
43
+ o();
44
+ });
45
+ return i.observe(n), window.addEventListener("resize", o), () => {
46
+ cancelAnimationFrame(t), cancelAnimationFrame(e), i.disconnect(), window.removeEventListener("resize", o);
47
+ };
48
+ }, [s, a, o, r]), d;
49
+ }
50
+ export {
51
+ h as useDialogClosePosition
52
+ };
53
+ //# sourceMappingURL=useDialogClosePosition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDialogClosePosition.js","sources":["../../src/Dialog/useDialogClosePosition.ts"],"sourcesContent":["import * as React from 'react';\n\ntype UseDialogClosePositionOptions = {\n enabled?: boolean;\n titleSelector?: string;\n};\n\ntype DialogClosePosition = {\n top?: number;\n right?: number;\n};\n\nexport function useDialogClosePosition(\n contentRef: React.RefObject<HTMLElement | null>,\n options?: UseDialogClosePositionOptions,\n) {\n const {\n enabled = true,\n titleSelector = '[data-slot=\"dialog-title\"]',\n } = options ?? {};\n\n const [position, setPosition] = React.useState<DialogClosePosition>({});\n\n const setIfChanged = React.useCallback((next: DialogClosePosition) => {\n setPosition((prev) => {\n if (prev.top === next.top && prev.right === next.right) {\n return prev;\n }\n\n return next;\n });\n }, []);\n\n const measure = React.useCallback(() => {\n const contentEl = contentRef.current;\n\n if (!enabled || !contentEl) {\n setIfChanged({});\n return;\n }\n\n const titleEl = contentEl.querySelector<HTMLElement>(titleSelector);\n\n if (!titleEl) {\n setIfChanged({});\n return;\n }\n\n const contentRect = contentEl.getBoundingClientRect();\n const titleRect = titleEl.getBoundingClientRect();\n\n if (\n contentRect.width <= 0 ||\n contentRect.height <= 0 ||\n titleRect.width <= 0 ||\n titleRect.height <= 0\n ) {\n setIfChanged({});\n return;\n }\n\n setIfChanged({\n top: Math.round(titleRect.top - contentRect.top),\n right: Math.round(contentRect.right - titleRect.right),\n });\n }, [contentRef, enabled, setIfChanged, titleSelector]);\n\n React.useEffect(() => {\n if (!enabled) {\n setIfChanged({});\n return;\n }\n\n let raf1 = 0;\n let raf2 = 0;\n\n const contentEl = contentRef.current;\n if (!contentEl) return;\n\n raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => {\n measure();\n });\n });\n\n const resizeObserver = new ResizeObserver(() => {\n measure();\n });\n\n resizeObserver.observe(contentEl);\n window.addEventListener('resize', measure);\n\n return () => {\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n resizeObserver.disconnect();\n window.removeEventListener('resize', measure);\n };\n }, [contentRef, enabled, measure, setIfChanged]);\n\n return position;\n}\n"],"names":["useDialogClosePosition","contentRef","options","enabled","titleSelector","position","setPosition","React","setIfChanged","next","prev","measure","contentEl","titleEl","contentRect","titleRect","raf1","raf2","resizeObserver"],"mappings":";AAYO,SAASA,EACdC,GACAC,GACA;AACA,QAAM;AAAA,IACJ,SAAAC,IAAU;AAAA,IACV,eAAAC,IAAgB;AAAA,EAAA,IACdF,KAAW,CAAA,GAET,CAACG,GAAUC,CAAW,IAAIC,EAAM,SAA8B,CAAA,CAAE,GAEhEC,IAAeD,EAAM,YAAY,CAACE,MAA8B;AACpE,IAAAH,EAAY,CAACI,MACPA,EAAK,QAAQD,EAAK,OAAOC,EAAK,UAAUD,EAAK,QACxCC,IAGFD,CACR;AAAA,EACH,GAAG,CAAA,CAAE,GAECE,IAAUJ,EAAM,YAAY,MAAM;AACtC,UAAMK,IAAYX,EAAW;AAE7B,QAAI,CAACE,KAAW,CAACS,GAAW;AAC1B,MAAAJ,EAAa,CAAA,CAAE;AACf;AAAA,IACF;AAEA,UAAMK,IAAUD,EAAU,cAA2BR,CAAa;AAElE,QAAI,CAACS,GAAS;AACZ,MAAAL,EAAa,CAAA,CAAE;AACf;AAAA,IACF;AAEA,UAAMM,IAAcF,EAAU,sBAAA,GACxBG,IAAYF,EAAQ,sBAAA;AAE1B,QACEC,EAAY,SAAS,KACrBA,EAAY,UAAU,KACtBC,EAAU,SAAS,KACnBA,EAAU,UAAU,GACpB;AACA,MAAAP,EAAa,CAAA,CAAE;AACf;AAAA,IACF;AAEA,IAAAA,EAAa;AAAA,MACX,KAAK,KAAK,MAAMO,EAAU,MAAMD,EAAY,GAAG;AAAA,MAC/C,OAAO,KAAK,MAAMA,EAAY,QAAQC,EAAU,KAAK;AAAA,IAAA,CACtD;AAAA,EACH,GAAG,CAACd,GAAYE,GAASK,GAAcJ,CAAa,CAAC;AAErD,SAAAG,EAAM,UAAU,MAAM;AACpB,QAAI,CAACJ,GAAS;AACZ,MAAAK,EAAa,CAAA,CAAE;AACf;AAAA,IACF;AAEA,QAAIQ,IAAO,GACPC,IAAO;AAEX,UAAML,IAAYX,EAAW;AAC7B,QAAI,CAACW,EAAW;AAEhB,IAAAI,IAAO,sBAAsB,MAAM;AACjC,MAAAC,IAAO,sBAAsB,MAAM;AACjC,QAAAN,EAAA;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAED,UAAMO,IAAiB,IAAI,eAAe,MAAM;AAC9C,MAAAP,EAAA;AAAA,IACF,CAAC;AAED,WAAAO,EAAe,QAAQN,CAAS,GAChC,OAAO,iBAAiB,UAAUD,CAAO,GAElC,MAAM;AACX,2BAAqBK,CAAI,GACzB,qBAAqBC,CAAI,GACzBC,EAAe,WAAA,GACf,OAAO,oBAAoB,UAAUP,CAAO;AAAA,IAC9C;AAAA,EACF,GAAG,CAACV,GAAYE,GAASQ,GAASH,CAAY,CAAC,GAExCH;AACT;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneplatformdev/ui",
3
- "version": "0.1.99-beta.247",
3
+ "version": "0.1.99-beta.249",
4
4
  "description": "UI component library for OnePlatform",
5
5
  "author": "One Platform Development Team",
6
6
  "keywords": [
@@ -106,9 +106,9 @@
106
106
  "recharts": "^3.2.0",
107
107
  "sonner": "^2.0.7",
108
108
  "vaul": "^1.1.2",
109
- "@oneplatformdev/tokens": "^0.1.99-beta.247",
110
- "@oneplatformdev/utils": "^0.1.99-beta.247",
111
- "@oneplatformdev/hooks": "^0.1.99-beta.247"
109
+ "@oneplatformdev/tokens": "^0.1.99-beta.249",
110
+ "@oneplatformdev/hooks": "^0.1.99-beta.249",
111
+ "@oneplatformdev/utils": "^0.1.99-beta.249"
112
112
  },
113
113
  "scripts": {
114
114
  "chromatic": "chromatic"