@yuno-payments/dashboard-design-system 0.0.170 → 0.0.172

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 (161) hide show
  1. package/dist/components/atoms/access-denied-alert/access-denied-alert.d.ts +16 -0
  2. package/dist/components/atoms/accordion/accordion.d.ts +66 -0
  3. package/dist/components/atoms/alert/alert.d.ts +26 -1
  4. package/dist/components/atoms/alert/alert.js +9 -8
  5. package/dist/components/atoms/avatar/avatar-group.d.ts +28 -0
  6. package/dist/components/atoms/avatar/avatar.d.ts +25 -0
  7. package/dist/components/atoms/avatar/avatar.js +9 -9
  8. package/dist/components/atoms/badge/badge.d.ts +30 -2
  9. package/dist/components/atoms/badge/badge.js +27 -11
  10. package/dist/components/atoms/button/button.d.ts +44 -0
  11. package/dist/components/atoms/card/card.d.ts +137 -3
  12. package/dist/components/atoms/card/card.js +56 -28
  13. package/dist/components/atoms/checkbox/checkbox.d.ts +38 -2
  14. package/dist/components/atoms/checkbox/checkbox.js +61 -27
  15. package/dist/components/atoms/combobox/combobox.d.ts +18 -0
  16. package/dist/components/atoms/combobox/combobox.js +41 -41
  17. package/dist/components/atoms/combobox/types.d.ts +90 -1
  18. package/dist/components/atoms/currency-field/currency-field.d.ts +38 -0
  19. package/dist/components/atoms/currency-field/currency-field.js +22 -19
  20. package/dist/components/atoms/date-picker/date-picker.d.ts +15 -0
  21. package/dist/components/atoms/date-range-picker/date-range-picker.d.ts +15 -0
  22. package/dist/components/atoms/dots-menu/dots-menu.d.ts +16 -0
  23. package/dist/components/atoms/dots-menu/dots-menu.js +8 -8
  24. package/dist/components/atoms/dots-menu/dots-menu.types.d.ts +52 -0
  25. package/dist/components/atoms/dropdown-menu/dropdown-menu.d.ts +50 -0
  26. package/dist/components/atoms/field/field.d.ts +55 -0
  27. package/dist/components/atoms/field/field.js +53 -46
  28. package/dist/components/atoms/filter/filter-date-range.d.ts +12 -2
  29. package/dist/components/atoms/filter/filter-date-range.js +203 -168
  30. package/dist/components/atoms/filter/filter.d.ts +6 -0
  31. package/dist/components/atoms/filter/filter.js +91 -76
  32. package/dist/components/atoms/filter/index.d.ts +1 -1
  33. package/dist/components/atoms/filter-dropdown/filter-dropdown.d.ts +208 -2
  34. package/dist/components/atoms/filter-dropdown/filter-dropdown.js +214 -160
  35. package/dist/components/atoms/icon/aida-logo.d.ts +3 -0
  36. package/dist/components/atoms/icon/aida-logo.js +64 -0
  37. package/dist/components/atoms/icon/icon-list.d.ts +5 -0
  38. package/dist/components/atoms/icon/icon-list.js +394 -384
  39. package/dist/components/atoms/icon/icon.d.ts +29 -0
  40. package/dist/components/atoms/index.d.ts +3 -2
  41. package/dist/components/atoms/label/index.d.ts +1 -1
  42. package/dist/components/atoms/label/label.d.ts +11 -0
  43. package/dist/components/atoms/label/label.js +28 -0
  44. package/dist/components/atoms/link/link.d.ts +20 -0
  45. package/dist/components/atoms/loading/index.d.ts +1 -0
  46. package/dist/components/atoms/loading/loading.d.ts +39 -0
  47. package/dist/components/atoms/loading/loading.js +37 -0
  48. package/dist/components/atoms/multi-select/multi-select.d.ts +1 -1
  49. package/dist/components/atoms/multi-select/multi-select.js +6 -6
  50. package/dist/components/atoms/multi-values-field/multi-values-field.d.ts +16 -0
  51. package/dist/components/atoms/multi-values-field/multi-values-field.js +109 -87
  52. package/dist/components/atoms/multi-values-field/multi-values-field.types.d.ts +81 -0
  53. package/dist/components/atoms/otp-field/otp-field.d.ts +32 -0
  54. package/dist/components/atoms/password-field/password-field.d.ts +23 -0
  55. package/dist/components/atoms/password-field/password-field.js +1 -1
  56. package/dist/components/atoms/progress/progress.d.ts +15 -0
  57. package/dist/components/atoms/protected-field/protected-field.d.ts +10 -0
  58. package/dist/components/atoms/protected-field/protected-field.types.d.ts +14 -0
  59. package/dist/components/atoms/radio-group/radio-group-option.js +11 -11
  60. package/dist/components/atoms/radio-group/radio-group.d.ts +50 -1
  61. package/dist/components/atoms/radio-group/radio-group.js +13 -12
  62. package/dist/components/atoms/search-field/search-field.d.ts +14 -0
  63. package/dist/components/atoms/search-field/search-field.js +17 -17
  64. package/dist/components/atoms/search-field/search-field.types.d.ts +57 -0
  65. package/dist/components/atoms/select/index.d.ts +2 -0
  66. package/dist/components/atoms/select/search-select.d.ts +22 -0
  67. package/dist/components/atoms/select/search-select.js +201 -0
  68. package/dist/components/atoms/select/select.d.ts +83 -1
  69. package/dist/components/atoms/select/select.js +21 -21
  70. package/dist/components/atoms/separator/separator.d.ts +17 -0
  71. package/dist/components/atoms/skeleton/index.d.ts +9 -0
  72. package/dist/components/atoms/switch/switch.d.ts +56 -2
  73. package/dist/components/atoms/switch/switch.js +64 -32
  74. package/dist/components/atoms/tabs/index.d.ts +16 -0
  75. package/dist/components/atoms/textarea/textarea.d.ts +32 -0
  76. package/dist/components/atoms/textarea/textarea.js +1 -1
  77. package/dist/components/atoms/time-picker/time-picker.d.ts +73 -2
  78. package/dist/components/atoms/time-picker/time-picker.js +218 -3
  79. package/dist/components/atoms/toaster/index.d.ts +15 -0
  80. package/dist/components/atoms/toggle-group/toggle-group.d.ts +26 -1
  81. package/dist/components/atoms/toggle-group/toggle-group.js +15 -14
  82. package/dist/components/atoms/tooltip/tooltip.d.ts +53 -2
  83. package/dist/components/atoms/typography/typography.d.ts +18 -0
  84. package/dist/components/molecules/breadcrumb/breadcrumb.d.ts +50 -0
  85. package/dist/components/molecules/breadcrumb/breadcrumb.js +17 -17
  86. package/dist/components/molecules/dialog-content/dialog-content.d.ts +16 -0
  87. package/dist/components/molecules/dialog-footer/dialog-footer.d.ts +20 -0
  88. package/dist/components/molecules/dialog-header/dialog-header.d.ts +31 -0
  89. package/dist/components/molecules/empty/empty-icon.js +6 -6
  90. package/dist/components/molecules/empty/empty.d.ts +16 -1
  91. package/dist/components/molecules/empty/empty.js +37 -34
  92. package/dist/components/molecules/highlight-banner/highlight-banner.d.ts +17 -0
  93. package/dist/components/molecules/pagination/pagination.d.ts +49 -0
  94. package/dist/components/organisms/data-table/components/cells/data-table-list-cell.d.ts +41 -0
  95. package/dist/components/organisms/data-table/components/column-header/data-table-column-header-content.js +1 -1
  96. package/dist/components/organisms/data-table/components/column-header/data-table-column-header-menu.js +18 -18
  97. package/dist/components/organisms/data-table/components/column-header/data-table-column-header.d.ts +18 -0
  98. package/dist/components/organisms/data-table/components/column-header/data-table-column-header.js +10 -10
  99. package/dist/components/organisms/data-table/components/data-table-body.d.ts +18 -0
  100. package/dist/components/organisms/data-table/components/data-table-header.d.ts +12 -0
  101. package/dist/components/organisms/data-table/components/data-table-header.js +7 -7
  102. package/dist/components/organisms/data-table/components/states/data-table-loading.d.ts +24 -0
  103. package/dist/components/organisms/data-table/components/states/data-table-loading.js +6 -6
  104. package/dist/components/organisms/data-table/data-table.d.ts +133 -4
  105. package/dist/components/organisms/data-table/data-table.js +132 -100
  106. package/dist/components/organisms/data-table/data-table.types.d.ts +35 -26
  107. package/dist/components/organisms/data-table/hooks/use-data-table-columns.js +57 -41
  108. package/dist/components/organisms/data-table/hooks/use-data-table-state.d.ts +8 -2
  109. package/dist/components/organisms/data-table/hooks/use-data-table-state.js +82 -47
  110. package/dist/components/organisms/data-table/utils/data-table-constants.d.ts +8 -2
  111. package/dist/components/organisms/data-table/utils/data-table-constants.js +16 -10
  112. package/dist/components/organisms/data-table/utils/data-table-styles.d.ts +1652 -0
  113. package/dist/components/organisms/data-table/utils/data-table-styles.js +29 -14
  114. package/dist/components/organisms/dialog/dialog.d.ts +67 -1
  115. package/dist/components/organisms/dialog/dialog.js +78 -61
  116. package/dist/components/organisms/index.d.ts +2 -0
  117. package/dist/components/organisms/sheet/sheet.d.ts +69 -0
  118. package/dist/components/organisms/sheet/sheet.js +34 -33
  119. package/dist/components/organisms/tutorial/index.d.ts +2 -0
  120. package/dist/components/organisms/tutorial/tutorial.d.ts +16 -0
  121. package/dist/components/organisms/tutorial/tutorial.js +114 -0
  122. package/dist/components/organisms/tutorial/tutorial.types.d.ts +15 -0
  123. package/dist/hooks/index.d.ts +3 -0
  124. package/dist/hooks/use-body-scroll-lock.d.ts +13 -0
  125. package/dist/hooks/use-escape-key.d.ts +14 -0
  126. package/dist/hooks/use-media-query.d.ts +20 -0
  127. package/dist/hooks/use-media-query.js +21 -0
  128. package/dist/index.css +1 -1
  129. package/dist/index.d.ts +2 -0
  130. package/dist/index.js +173 -162
  131. package/dist/lib/notification-alert.d.ts +42 -0
  132. package/dist/lib/notification-alert.js +75 -0
  133. package/dist/node_modules/@phosphor-icons/react/dist/csr/File.es.js +8 -0
  134. package/dist/node_modules/@phosphor-icons/react/dist/csr/Microphone.es.js +8 -0
  135. package/dist/node_modules/@phosphor-icons/react/dist/csr/Stop.es.js +8 -0
  136. package/dist/node_modules/@phosphor-icons/react/dist/csr/Table.es.js +8 -0
  137. package/dist/node_modules/@phosphor-icons/react/dist/defs/File.es.js +30 -0
  138. package/dist/node_modules/@phosphor-icons/react/dist/defs/Microphone.es.js +36 -0
  139. package/dist/node_modules/@phosphor-icons/react/dist/defs/Stop.es.js +36 -0
  140. package/dist/node_modules/@phosphor-icons/react/dist/defs/Table.es.js +30 -0
  141. package/dist/vendor/shadcn/avatar.js +19 -19
  142. package/dist/vendor/shadcn/badge.js +15 -15
  143. package/dist/vendor/shadcn/card.js +7 -7
  144. package/dist/vendor/shadcn/date-picker.d.ts +2 -2
  145. package/dist/vendor/shadcn/date-picker.js +1 -1
  146. package/dist/vendor/shadcn/date-range-picker.d.ts +2 -2
  147. package/dist/vendor/shadcn/date-range-picker.js +1 -1
  148. package/dist/vendor/shadcn/dialog.js +2 -2
  149. package/dist/vendor/shadcn/input-group.js +17 -17
  150. package/dist/vendor/shadcn/input.js +7 -7
  151. package/dist/vendor/shadcn/popover.js +1 -1
  152. package/dist/vendor/shadcn/select.js +2 -2
  153. package/dist/vendor/shadcn/sonner.d.ts +26 -1
  154. package/dist/vendor/shadcn/sonner.js +12 -8
  155. package/dist/vendor/shadcn/table.js +30 -30
  156. package/dist/vendor/shadcn/textarea.js +9 -9
  157. package/dist/vendor/shadcn/time-picker.d.ts +1 -2
  158. package/dist/vendor/shadcn/time-picker.js +17 -23
  159. package/dist/vendor/shadcn/toggle.js +13 -13
  160. package/dist/vendor/shadcn/tooltip.js +25 -15
  161. package/package.json +1 -1
@@ -1,23 +1,38 @@
1
1
  import { cn as o } from "../../../../lib/utils.js";
2
- import { getPinnedStyles as s } from "./data-table-utils.js";
3
- import { PINNED_SHADOW_CLASS as S } from "./data-table-constants.js";
4
- function p(t, n, r) {
5
- const i = t.getIsPinned();
2
+ import { getPinnedStyles as p } from "./data-table-utils.js";
3
+ import { PINNED_SHADOW_CLASS as l } from "./data-table-constants.js";
4
+ function f(t, r, d) {
5
+ const s = t.getIsPinned(), e = t.getSize(), i = t.id === "_spacer", a = t.columnDef.enableResizing === !1 && !i;
6
6
  return {
7
7
  style: {
8
- width: `${t.getSize()}px`,
9
- // Don't set minWidth/maxWidth in CSS as TanStack Table handles this internally
10
- // Setting these can interfere with the resize functionality
11
- ...s(
12
- i,
13
- (e) => t.getStart(e),
14
- (e) => t.getAfter(e),
15
- r
8
+ // Spacer column should not have a fixed width, let it absorb remaining space
9
+ ...i ? {
10
+ width: "auto",
11
+ minWidth: 0
12
+ } : a ? {
13
+ width: `${e}px`,
14
+ minWidth: `${e}px`,
15
+ maxWidth: `${e}px`
16
+ } : {
17
+ width: `${e}px`
18
+ },
19
+ ...p(
20
+ s,
21
+ (n) => t.getStart(n),
22
+ (n) => t.getAfter(n),
23
+ d
16
24
  )
17
25
  },
18
- className: o(n, i && S)
26
+ className: o(
27
+ r,
28
+ s && l,
29
+ // Add a class to identify fixed-size columns
30
+ a && "data-table-fixed-column",
31
+ // Hide spacer column visually
32
+ i && "data-table-spacer"
33
+ )
19
34
  };
20
35
  }
21
36
  export {
22
- p as getCellStyles
37
+ f as getCellStyles
23
38
  };
@@ -7,22 +7,88 @@ declare const dialogVariants: (props?: ({
7
7
  export type VerticalAlign = "start" | "center" | "end";
8
8
  export type VariantButtonType = "primary" | "secondary" | "tertiary" | "text" | "outlined" | "contained";
9
9
  export type SizeButtonType = "small" | "large" | "medium";
10
+ /**
11
+ * Props for the Dialog component
12
+ */
10
13
  export interface DialogProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title">, VariantProps<typeof dialogVariants> {
14
+ /**
15
+ * Dialog title (text or custom element)
16
+ */
11
17
  title?: React.ReactElement | string;
18
+ /**
19
+ * Whether the dialog is open
20
+ */
12
21
  open: boolean;
22
+ /**
23
+ * Callback fired when the dialog should close
24
+ */
13
25
  closeIcon: () => void;
26
+ /**
27
+ * Array of button configurations to display in the footer
28
+ */
14
29
  buttons?: ButtonProps[];
30
+ /**
31
+ * Custom width for the dialog container
32
+ */
15
33
  widthContainer?: number | string;
34
+ /**
35
+ * Custom height for the dialog container
36
+ */
16
37
  heightContainer?: number | string;
38
+ /**
39
+ * Callback fired when the back button is clicked
40
+ */
17
41
  backButtonAction?: () => void;
42
+ /**
43
+ * Whether to show the footer with action buttons
44
+ * @default true
45
+ */
18
46
  showActions?: boolean;
47
+ /**
48
+ * Additional action elements to display in the header
49
+ */
19
50
  otherActions?: React.ReactNode;
51
+ /**
52
+ * Whether to show the header
53
+ * @default true
54
+ */
20
55
  withHeader?: boolean;
56
+ /**
57
+ * Content to display in the dialog body
58
+ */
21
59
  children: React.ReactNode;
60
+ /**
61
+ * Additional CSS classes for the header
62
+ */
22
63
  headerClassName?: string;
64
+ /**
65
+ * Additional CSS classes for the content area
66
+ */
23
67
  contentClassName?: string;
68
+ /**
69
+ * Additional CSS classes for the footer
70
+ */
24
71
  footerClassName?: string;
25
72
  }
73
+ /**
74
+ * Modal dialog component with header, content, and footer sections.
75
+ * Features backdrop click to close, ESC key support, and body scroll locking.
76
+ * Responsive: fullscreen on mobile, centered modal on desktop.
77
+ *
78
+ * @example
79
+ * ```tsx
80
+ * <Dialog
81
+ * open={isOpen}
82
+ * closeIcon={() => setIsOpen(false)}
83
+ * title="Confirm Action"
84
+ * buttons={[
85
+ * { children: 'Cancel', variant: 'outline', onClick: handleCancel },
86
+ * { children: 'Confirm', onClick: handleConfirm }
87
+ * ]}
88
+ * >
89
+ * <p>Are you sure you want to proceed?</p>
90
+ * </Dialog>
91
+ * ```
92
+ */
26
93
  declare const Dialog: React.ForwardRefExoticComponent<DialogProps & React.RefAttributes<HTMLDivElement>>;
27
94
  export { Dialog };
28
- export type { DialogProps };
@@ -1,14 +1,15 @@
1
1
  import { j as e } from "../../../_virtual/jsx-runtime.js";
2
- import * as l from "react";
3
- import { cva as m } from "../../../node_modules/class-variance-authority/dist/index.js";
4
- import { cn as n, normalizeDimension as d } from "../../../lib/utils.js";
5
- import { useBodyScrollLock as E } from "../../../hooks/use-body-scroll-lock.js";
6
- import { useEscapeKey as V } from "../../../hooks/use-escape-key.js";
7
- import { DialogHeader as L } from "../../molecules/dialog-header/dialog-header.js";
8
- import { DialogContent as M } from "../../molecules/dialog-content/dialog-content.js";
9
- import { DialogFooter as S } from "../../molecules/dialog-footer/dialog-footer.js";
10
- const A = m(
11
- "fixed inset-0 z-50 flex items-center justify-center p-4",
2
+ import * as t from "react";
3
+ import { createPortal as M } from "react-dom";
4
+ import { cva as x } from "../../../node_modules/class-variance-authority/dist/index.js";
5
+ import { cn as n, normalizeDimension as f } from "../../../lib/utils.js";
6
+ import { useBodyScrollLock as T } from "../../../hooks/use-body-scroll-lock.js";
7
+ import { useEscapeKey as B } from "../../../hooks/use-escape-key.js";
8
+ import { DialogHeader as C } from "../../molecules/dialog-header/dialog-header.js";
9
+ import { DialogContent as F } from "../../molecules/dialog-content/dialog-content.js";
10
+ import { DialogFooter as R } from "../../molecules/dialog-footer/dialog-footer.js";
11
+ const H = x(
12
+ "fixed inset-0 z-dialog flex items-center justify-center p-4",
12
13
  {
13
14
  variants: {
14
15
  verticalAlign: {
@@ -21,7 +22,7 @@ const A = m(
21
22
  verticalAlign: "center"
22
23
  }
23
24
  }
24
- ), B = m(
25
+ ), I = x(
25
26
  "relative bg-background rounded-lg shadow-lg border border-border max-h-[90vh] overflow-hidden flex flex-col",
26
27
  {
27
28
  variants: {
@@ -37,80 +38,96 @@ const A = m(
37
38
  size: "default"
38
39
  }
39
40
  }
40
- ), C = l.forwardRef(
41
+ ), K = t.forwardRef(
41
42
  ({
42
- className: f,
43
- verticalAlign: c,
44
- title: u,
45
- open: r,
46
- closeIcon: a,
47
- buttons: x = [],
48
- widthContainer: s,
49
- heightContainer: o,
50
- backButtonAction: g,
51
- showActions: w = !0,
52
- otherActions: v,
53
- withHeader: p = !0,
54
- children: h,
55
- headerClassName: b,
56
- contentClassName: j,
57
- footerClassName: z,
58
- ...N
59
- }, k) => {
60
- const [i, y] = l.useState(!1);
61
- if (l.useEffect(() => {
62
- const t = () => {
63
- y(window.innerWidth <= 599);
43
+ className: g,
44
+ verticalAlign: w,
45
+ title: p,
46
+ open: a,
47
+ closeIcon: o,
48
+ buttons: v = [],
49
+ widthContainer: r,
50
+ heightContainer: m,
51
+ backButtonAction: b,
52
+ showActions: y = !0,
53
+ otherActions: h,
54
+ withHeader: j = !0,
55
+ children: z,
56
+ headerClassName: N,
57
+ contentClassName: k,
58
+ footerClassName: D,
59
+ ...E
60
+ }, V) => {
61
+ const [s, S] = t.useState(!1), [l, d] = t.useState(a), [c, u] = t.useState(!1);
62
+ if (t.useEffect(() => {
63
+ const i = () => {
64
+ S(window.innerWidth <= 599);
64
65
  };
65
- return t(), window.addEventListener("resize", t), () => window.removeEventListener("resize", t);
66
- }, []), E(r), V(r, a), !r) return null;
67
- const D = {
68
- width: s && !i ? d(s) : void 0,
69
- height: o && !i ? d(o) : void 0
70
- };
71
- return /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
66
+ return i(), window.addEventListener("resize", i), () => window.removeEventListener("resize", i);
67
+ }, []), t.useEffect(() => {
68
+ if (a)
69
+ d(!0), setTimeout(() => u(!0), 10);
70
+ else if (l) {
71
+ u(!1);
72
+ const i = setTimeout(() => {
73
+ d(!1);
74
+ }, 600);
75
+ return () => clearTimeout(i);
76
+ }
77
+ }, [a, l]), T(a), B(a, o), !l) return null;
78
+ const A = {
79
+ width: r && !s ? f(r) : void 0,
80
+ height: m && !s ? f(m) : void 0
81
+ }, L = /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
72
82
  /* @__PURE__ */ e.jsx(
73
83
  "div",
74
84
  {
75
- className: "fixed inset-0 z-50 bg-black/25",
76
- onClick: a,
85
+ className: n(
86
+ "fixed inset-0 z-dialog bg-black/25 transition-opacity duration-600 ease-out",
87
+ c ? "opacity-100" : "opacity-0"
88
+ ),
89
+ onClick: o,
77
90
  "aria-hidden": "true"
78
91
  }
79
92
  ),
80
- /* @__PURE__ */ e.jsx("div", { className: n(A({ verticalAlign: c })), children: /* @__PURE__ */ e.jsxs(
93
+ /* @__PURE__ */ e.jsx("div", { className: n(H({ verticalAlign: w })), children: /* @__PURE__ */ e.jsxs(
81
94
  "div",
82
95
  {
83
- ref: k,
96
+ ref: V,
84
97
  className: n(
85
- B({
86
- size: i ? "fullscreen" : "default"
98
+ I({
99
+ size: s ? "fullscreen" : "default"
87
100
  }),
88
- f
101
+ "transition-all duration-600 ease-out",
102
+ c ? "opacity-100 scale-100 translate-y-0" : "opacity-0 scale-98 -translate-y-2",
103
+ r && !s && "max-w-none",
104
+ g
89
105
  ),
90
- style: D,
106
+ style: A,
91
107
  role: "dialog",
92
108
  "aria-modal": "true",
93
- ...N,
109
+ ...E,
94
110
  children: [
95
- p && /* @__PURE__ */ e.jsx(
96
- L,
111
+ j && /* @__PURE__ */ e.jsx(
112
+ C,
97
113
  {
98
- title: u,
99
- onClose: a,
100
- onBack: g,
101
- otherActions: v,
102
- className: b
114
+ title: p,
115
+ onClose: o,
116
+ onBack: b,
117
+ otherActions: h,
118
+ className: N
103
119
  }
104
120
  ),
105
- /* @__PURE__ */ e.jsx(M, { className: j, children: h }),
106
- w && /* @__PURE__ */ e.jsx(S, { buttons: x, className: z })
121
+ /* @__PURE__ */ e.jsx(F, { className: k, children: z }),
122
+ y && /* @__PURE__ */ e.jsx(R, { buttons: v, className: D })
107
123
  ]
108
124
  }
109
125
  ) })
110
126
  ] });
127
+ return M(L, document.body);
111
128
  }
112
129
  );
113
- C.displayName = "Dialog";
130
+ K.displayName = "Dialog";
114
131
  export {
115
- C as Dialog
132
+ K as Dialog
116
133
  };
@@ -1,3 +1,5 @@
1
1
  export * from './data-table';
2
2
  export { Dialog } from './dialog';
3
3
  export { Sheet } from './sheet';
4
+ export { Tutorial } from './tutorial';
5
+ export type { TutorialProps, TutorialButtonProps } from './tutorial';
@@ -5,21 +5,90 @@ declare const sheetVariants: (props?: ({
5
5
  side?: "left" | "right" | "bottom" | "top" | null | undefined;
6
6
  isOpen?: boolean | null | undefined;
7
7
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
8
+ /**
9
+ * Props for the Sheet component
10
+ */
8
11
  export interface SheetProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title">, VariantProps<typeof sheetVariants> {
12
+ /**
13
+ * Sheet title (text or custom element)
14
+ */
9
15
  title?: React.ReactElement | string;
16
+ /**
17
+ * Optional description displayed below the title
18
+ */
10
19
  description?: React.ReactElement | string;
20
+ /**
21
+ * Whether the sheet is open
22
+ */
11
23
  open: boolean;
24
+ /**
25
+ * Callback fired when the sheet should close
26
+ */
12
27
  onClose: () => void;
28
+ /**
29
+ * Array of button configurations to display in the footer
30
+ */
13
31
  buttons?: ButtonProps[];
32
+ /**
33
+ * Custom width for the sheet (applies to left/right sides)
34
+ */
14
35
  width?: number | string;
36
+ /**
37
+ * Custom height for the sheet (applies to top/bottom sides)
38
+ */
15
39
  height?: number | string;
40
+ /**
41
+ * Whether to show the header section
42
+ * @default true
43
+ */
16
44
  showHeader?: boolean;
45
+ /**
46
+ * Whether to show the footer section
47
+ * @default true
48
+ */
17
49
  showFooter?: boolean;
50
+ /**
51
+ * Content to display in the sheet body
52
+ */
18
53
  children: React.ReactNode;
54
+ /**
55
+ * Additional CSS classes for the header
56
+ */
19
57
  headerClassName?: string;
58
+ /**
59
+ * Additional CSS classes for the content area
60
+ */
20
61
  contentClassName?: string;
62
+ /**
63
+ * Additional CSS classes for the footer
64
+ */
21
65
  footerClassName?: string;
66
+ /**
67
+ * Whether to disable buttons during loading state
68
+ * @default false
69
+ */
22
70
  loading?: boolean;
23
71
  }
72
+ /**
73
+ * Slide-out panel component that appears from the sides (or top/bottom) of the screen.
74
+ * Features smooth animations, backdrop overlay, ESC key support, and body scroll locking.
75
+ *
76
+ * @example
77
+ * ```tsx
78
+ * <Sheet
79
+ * open={isOpen}
80
+ * onClose={() => setIsOpen(false)}
81
+ * side="right"
82
+ * title="Edit Profile"
83
+ * description="Update your personal information"
84
+ * buttons={[
85
+ * { children: 'Cancel', variant: 'outline', onClick: handleCancel },
86
+ * { children: 'Save', onClick: handleSave }
87
+ * ]}
88
+ * >
89
+ * <form>...</form>
90
+ * </Sheet>
91
+ * ```
92
+ */
24
93
  declare const Sheet: React.ForwardRefExoticComponent<SheetProps & React.RefAttributes<HTMLDivElement>>;
25
94
  export { Sheet };
@@ -1,14 +1,15 @@
1
1
  import { j as e } from "../../../_virtual/jsx-runtime.js";
2
2
  import * as i from "react";
3
+ import { createPortal as H } from "react-dom";
3
4
  import { cva as g } from "../../../node_modules/class-variance-authority/dist/index.js";
4
5
  import { normalizeDimension as p, cn as r } from "../../../lib/utils.js";
5
- import { useBodyScrollLock as H } from "../../../hooks/use-body-scroll-lock.js";
6
- import { useEscapeKey as M } from "../../../hooks/use-escape-key.js";
7
- import { Typography as x } from "../../atoms/typography/typography.js";
8
- import { Button as b } from "../../atoms/button/button.js";
9
- import { Icon as R } from "../../atoms/icon/icon.js";
10
- const W = g(
11
- "fixed z-50 bg-background shadow-lg transition-transform duration-300 ease-in-out",
6
+ import { useBodyScrollLock as M } from "../../../hooks/use-body-scroll-lock.js";
7
+ import { useEscapeKey as R } from "../../../hooks/use-escape-key.js";
8
+ import { Icon as W } from "../../atoms/icon/icon.js";
9
+ import { Button as x } from "../../atoms/button/button.js";
10
+ import { Typography as b } from "../../atoms/typography/typography.js";
11
+ const D = g(
12
+ "fixed z-sheet bg-background shadow-lg transition-transform duration-300 ease-in-out",
12
13
  {
13
14
  variants: {
14
15
  side: {
@@ -37,8 +38,8 @@ const W = g(
37
38
  isOpen: !1
38
39
  }
39
40
  }
40
- ), C = g(
41
- "fixed inset-0 z-50 bg-black/50 transition-opacity duration-300",
41
+ ), F = g(
42
+ "fixed inset-0 z-sheet bg-black/50 transition-opacity duration-300",
42
43
  {
43
44
  variants: {
44
45
  isOpen: {
@@ -50,10 +51,10 @@ const W = g(
50
51
  isOpen: !1
51
52
  }
52
53
  }
53
- ), D = i.forwardRef(
54
+ ), K = i.forwardRef(
54
55
  ({
55
56
  className: y,
56
- side: t = "right",
57
+ side: s = "right",
57
58
  title: l,
58
59
  description: o,
59
60
  open: a,
@@ -71,26 +72,25 @@ const W = g(
71
72
  ...V
72
73
  }, E) => {
73
74
  const [I, f] = i.useState(!1), [u, h] = i.useState(!1);
74
- if (H(a), M(a, n), i.useEffect(() => {
75
+ if (M(a), R(a, n), i.useEffect(() => {
75
76
  if (a) {
76
77
  f(!0);
77
- const s = setTimeout(() => h(!0), 10);
78
- return () => clearTimeout(s);
78
+ const t = setTimeout(() => h(!0), 10);
79
+ return () => clearTimeout(t);
79
80
  } else {
80
81
  h(!1);
81
- const s = setTimeout(() => f(!1), 300);
82
- return () => clearTimeout(s);
82
+ const t = setTimeout(() => f(!1), 300);
83
+ return () => clearTimeout(t);
83
84
  }
84
85
  }, [a]), !I) return null;
85
86
  const d = p(j), m = p(v), A = {
86
- ...d && (t === "left" || t === "right") ? { width: d, maxWidth: d } : {},
87
- ...m && (t === "top" || t === "bottom") ? { height: m, maxHeight: m } : {}
88
- };
89
- return /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
87
+ ...d && (s === "left" || s === "right") ? { width: d, maxWidth: d } : {},
88
+ ...m && (s === "top" || s === "bottom") ? { height: m, maxHeight: m } : {}
89
+ }, B = /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
90
90
  /* @__PURE__ */ e.jsx(
91
91
  "div",
92
92
  {
93
- className: C({ isOpen: u }),
93
+ className: F({ isOpen: u }),
94
94
  onClick: n,
95
95
  "aria-hidden": "true"
96
96
  }
@@ -99,7 +99,7 @@ const W = g(
99
99
  "div",
100
100
  {
101
101
  ref: E,
102
- className: r(W({ side: t, isOpen: u }), y),
102
+ className: r(D({ side: s, isOpen: u }), y),
103
103
  style: A,
104
104
  role: "dialog",
105
105
  "aria-modal": "true",
@@ -117,7 +117,7 @@ const W = g(
117
117
  children: [
118
118
  /* @__PURE__ */ e.jsxs("div", { className: "flex flex-col gap-1", children: [
119
119
  l && /* @__PURE__ */ e.jsx(
120
- x,
120
+ b,
121
121
  {
122
122
  id: "sheet-title",
123
123
  as: "h2",
@@ -127,7 +127,7 @@ const W = g(
127
127
  }
128
128
  ),
129
129
  o && /* @__PURE__ */ e.jsx(
130
- x,
130
+ b,
131
131
  {
132
132
  id: "sheet-description",
133
133
  variant: "muted",
@@ -137,14 +137,14 @@ const W = g(
137
137
  )
138
138
  ] }),
139
139
  /* @__PURE__ */ e.jsx(
140
- b,
140
+ x,
141
141
  {
142
142
  variant: "ghost",
143
143
  size: "icon",
144
144
  onClick: n,
145
145
  "aria-label": "Close",
146
146
  className: "h-6 w-6",
147
- children: /* @__PURE__ */ e.jsx(R, { name: "X", size: "md" })
147
+ children: /* @__PURE__ */ e.jsx(W, { name: "X", size: "md" })
148
148
  }
149
149
  )
150
150
  ]
@@ -158,13 +158,13 @@ const W = g(
158
158
  "flex items-center justify-end gap-3 border-t border-border p-6",
159
159
  z
160
160
  ),
161
- children: c.map((s, B) => /* @__PURE__ */ e.jsx(
162
- b,
161
+ children: c.map((t, C) => /* @__PURE__ */ e.jsx(
162
+ x,
163
163
  {
164
- disabled: T || s.disabled,
165
- ...s
164
+ disabled: T || t.disabled,
165
+ ...t
166
166
  },
167
- B
167
+ C
168
168
  ))
169
169
  }
170
170
  )
@@ -172,9 +172,10 @@ const W = g(
172
172
  }
173
173
  )
174
174
  ] });
175
+ return H(B, document.body);
175
176
  }
176
177
  );
177
- D.displayName = "Sheet";
178
+ K.displayName = "Sheet";
178
179
  export {
179
- D as Sheet
180
+ K as Sheet
180
181
  };
@@ -0,0 +1,2 @@
1
+ export { Tutorial } from './tutorial';
2
+ export type { TutorialProps, TutorialButtonProps } from './tutorial.types';
@@ -0,0 +1,16 @@
1
+ import { TutorialProps } from './tutorial.types';
2
+ /**
3
+ * Tutorial component that renders a customizable tooltip for guided tours.
4
+ * Designed to be used with react-joyride as a custom tooltip component.
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * <ReactJoyride
9
+ * tooltipComponent={(props) => (
10
+ * <Tutorial {...props} buttonGroup={buttons} width={400} />
11
+ * )}
12
+ * />
13
+ * ```
14
+ */
15
+ declare const Tutorial: import('react').ForwardRefExoticComponent<TutorialProps & import('react').RefAttributes<HTMLDivElement>>;
16
+ export { Tutorial };