@cystackapp/ui 1.5.0 → 2.0.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 (166) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +77 -47
  3. package/dist/assets/background-pattern-grid.svg.js +7 -0
  4. package/dist/assets/empty-cloud.svg.js +5 -0
  5. package/dist/components/accordion/Accordion.d.ts +20 -0
  6. package/dist/components/accordion/Accordion.js +36 -0
  7. package/dist/components/accordion/AccordionTestStory.d.ts +3 -0
  8. package/dist/components/alert/Alert.d.ts +15 -0
  9. package/dist/components/alert/Alert.js +54 -0
  10. package/dist/components/avatar/Avatar.d.ts +13 -0
  11. package/dist/components/avatar/Avatar.js +64 -0
  12. package/dist/components/background-pattern/BackgroundPatternGrid.d.ts +1 -0
  13. package/dist/components/background-pattern/BackgroundPatternGrid.js +6 -0
  14. package/dist/components/badge/Badge.d.ts +1 -1
  15. package/dist/components/badge/BadgeTestStory.d.ts +1 -1
  16. package/dist/components/badge/variants/BadgeMore.d.ts +1 -1
  17. package/dist/components/badge/variants/BadgeMoreTestStory.d.ts +1 -1
  18. package/dist/components/badge/variants/BadgeTag.d.ts +1 -1
  19. package/dist/components/banner/Banner.d.ts +9 -0
  20. package/dist/components/banner/Banner.js +21 -0
  21. package/dist/components/breadcrumb/Breadcrumb.d.ts +13 -0
  22. package/dist/components/breadcrumb/Breadcrumb.js +36 -0
  23. package/dist/components/button/ButtonLoader.d.ts +1 -1
  24. package/dist/components/button/ButtonTestStory.d.ts +5 -5
  25. package/dist/components/card/Card.d.ts +1 -1
  26. package/dist/components/card/Card.stories-ct.d.ts +1 -1
  27. package/dist/components/card/CardBody.d.ts +1 -1
  28. package/dist/components/card/CardHeader.d.ts +1 -1
  29. package/dist/components/chart/chart-legend/ChartLegend.d.ts +38 -0
  30. package/dist/components/chart/chart-legend/ChartLegend.js +57 -0
  31. package/dist/components/chart/chart-legend/ChartLegendItem.d.ts +19 -0
  32. package/dist/components/chart/chart-legend/ChartLegendItem.js +30 -0
  33. package/dist/components/chart/chart-legend/types.d.ts +49 -0
  34. package/dist/components/chart/donut-chart/DonutChart.d.ts +55 -0
  35. package/dist/components/chart/donut-chart/DonutChart.js +110 -0
  36. package/dist/components/chart/donut-chart/DonutSegments.d.ts +25 -0
  37. package/dist/components/chart/donut-chart/DonutSegments.js +51 -0
  38. package/dist/components/chart/donut-chart/donut-tooltip.d.ts +20 -0
  39. package/dist/components/chart/donut-chart/donut-tooltip.js +37 -0
  40. package/dist/components/chart/types.d.ts +8 -0
  41. package/dist/components/checkbox/CheckboxTestStory.d.ts +7 -7
  42. package/dist/components/collapsible/Collapsible.d.ts +1 -1
  43. package/dist/components/combobox/Combobox.d.ts +1 -1
  44. package/dist/components/divider/Divider.d.ts +9 -0
  45. package/dist/components/divider/Divider.js +28 -0
  46. package/dist/components/drawer/Drawer.d.ts +8 -0
  47. package/dist/components/drawer/Drawer.js +68 -0
  48. package/dist/components/dropdown/Dropdown.d.ts +45 -0
  49. package/dist/components/dropdown/Dropdown.js +133 -0
  50. package/dist/components/dropdown/DropdownMenu.d.ts +20 -0
  51. package/dist/components/dropdown/DropdownMenu.js +78 -0
  52. package/dist/components/dropdown/DropdownMenuItem.d.ts +13 -0
  53. package/dist/components/dropdown/DropdownMenuItem.js +49 -0
  54. package/dist/components/dropdown/DropdownTestStory.d.ts +5 -0
  55. package/dist/components/dropdown/dropdown-utils.d.ts +4 -0
  56. package/dist/components/dropdown/dropdown-utils.js +14 -0
  57. package/dist/components/dropdown/types.d.ts +48 -0
  58. package/dist/components/dropdown/use-dropdown-keyboard.d.ts +12 -0
  59. package/dist/components/dropdown/use-dropdown-keyboard.js +49 -0
  60. package/dist/components/empty-state/EmptyState.d.ts +26 -0
  61. package/dist/components/empty-state/EmptyState.js +36 -0
  62. package/dist/components/error-state/ErrorState.d.ts +1 -1
  63. package/dist/components/featured-icon/FeaturedIcon.d.ts +12 -0
  64. package/dist/components/featured-icon/FeaturedIcon.js +44 -0
  65. package/dist/components/form-field/FormField.d.ts +13 -0
  66. package/dist/components/form-field/FormField.js +21 -0
  67. package/dist/components/keyboard-shortcut-label/KeyboardShortcutLabel.d.ts +8 -0
  68. package/dist/components/keyboard-shortcut-label/KeyboardShortcutLabel.js +18 -0
  69. package/dist/components/loading-state/Loader.d.ts +20 -0
  70. package/dist/components/loading-state/Loader.js +38 -0
  71. package/dist/components/loading-state/LoadingState.d.ts +15 -0
  72. package/dist/components/loading-state/LoadingState.js +47 -0
  73. package/dist/components/loading-state/locale/en.json.d.ts +6 -0
  74. package/dist/components/loading-state/locale/en.json.js +7 -0
  75. package/dist/components/loading-state/locale/vi.json.d.ts +6 -0
  76. package/dist/components/loading-state/locale/vi.json.js +7 -0
  77. package/dist/components/media/Media.d.ts +7 -0
  78. package/dist/components/media/Media.js +25 -0
  79. package/dist/components/modal/helpers/HeaderIcon.d.ts +1 -1
  80. package/dist/components/modal/helpers/Title.d.ts +1 -1
  81. package/dist/components/notification/NotificationBanner.d.ts +9 -0
  82. package/dist/components/notification/NotificationBanner.js +97 -0
  83. package/dist/components/notification/icons.d.ts +5 -0
  84. package/dist/components/notification/icons.js +29 -0
  85. package/dist/components/notification/index.d.ts +4 -0
  86. package/dist/components/notification/index.js +26 -0
  87. package/dist/components/notification/locale/en.json.d.ts +8 -0
  88. package/dist/components/notification/locale/en.json.js +7 -0
  89. package/dist/components/notification/locale/vi.json.d.ts +8 -0
  90. package/dist/components/notification/locale/vi.json.js +7 -0
  91. package/dist/components/operating-system-icon/OperatingSystemIcon.d.ts +6 -0
  92. package/dist/components/operating-system-icon/OperatingSystemIcon.js +19 -0
  93. package/dist/components/operating-system-icon/assets/logo-android.svg.js +5 -0
  94. package/dist/components/operating-system-icon/assets/logo-apple.svg.js +5 -0
  95. package/dist/components/operating-system-icon/assets/logo-ubuntu.svg.js +5 -0
  96. package/dist/components/operating-system-icon/assets/logo-windows-10.svg.js +5 -0
  97. package/dist/components/page-title/PageTitle.d.ts +1 -1
  98. package/dist/components/popover/Popover.d.ts +1 -1
  99. package/dist/components/progress-bar/ProgressBar.d.ts +9 -0
  100. package/dist/components/progress-bar/ProgressBar.js +31 -0
  101. package/dist/components/radio/Radio.d.ts +4 -0
  102. package/dist/components/radio/Radio.js +55 -0
  103. package/dist/components/searchbox/Searchbox.d.ts +7 -0
  104. package/dist/components/searchbox/Searchbox.js +15 -0
  105. package/dist/components/select/Select.d.ts +11 -0
  106. package/dist/components/select/Select.js +44 -0
  107. package/dist/components/skeleton/Skeleton.d.ts +14 -0
  108. package/dist/components/skeleton/Skeleton.js +12 -0
  109. package/dist/components/switch/Switch.d.ts +1 -1
  110. package/dist/components/table/Table.d.ts +32 -0
  111. package/dist/components/table/Table.js +128 -0
  112. package/dist/components/table/TableActionButton.d.ts +15 -0
  113. package/dist/components/table/TableActionButton.js +50 -0
  114. package/dist/components/table/TableCell.d.ts +8 -0
  115. package/dist/components/table/TableCell.js +26 -0
  116. package/dist/components/table/TableHeader.d.ts +15 -0
  117. package/dist/components/table/TableHeader.js +36 -0
  118. package/dist/components/table/TableHeaderCell.d.ts +10 -0
  119. package/dist/components/table/TableHeaderCell.js +35 -0
  120. package/dist/components/table/TablePagination.d.ts +6 -0
  121. package/dist/components/table/TablePagination.js +69 -0
  122. package/dist/components/table/TableRow.d.ts +12 -0
  123. package/dist/components/table/TableRow.js +9 -0
  124. package/dist/components/table/expandable/ExpandableTable.d.ts +30 -0
  125. package/dist/components/table/expandable/ExpandableTable.js +156 -0
  126. package/dist/components/table/hooks/use-fit-page-height.d.ts +14 -0
  127. package/dist/components/table/hooks/use-fit-page-height.js +21 -0
  128. package/dist/components/table/hooks/use-row-selection.d.ts +27 -0
  129. package/dist/components/table/hooks/use-row-selection.js +35 -0
  130. package/dist/components/table/locale/en.json.d.ts +13 -0
  131. package/dist/components/table/locale/en.json.js +21 -0
  132. package/dist/components/table/locale/vi.json.d.ts +13 -0
  133. package/dist/components/table/locale/vi.json.js +21 -0
  134. package/dist/components/table/table-utils.d.ts +10 -0
  135. package/dist/components/table/table-utils.js +10 -0
  136. package/dist/components/table/types.d.ts +84 -0
  137. package/dist/components/tabs/Tabs.d.ts +27 -0
  138. package/dist/components/tabs/Tabs.js +75 -0
  139. package/dist/components/tabs/TabsTestStory.d.ts +4 -0
  140. package/dist/components/tags-input/TagsInput.d.ts +18 -0
  141. package/dist/components/tags-input/TagsInput.js +78 -0
  142. package/dist/components/tags-input/TagsInputTestStory.d.ts +3 -0
  143. package/dist/components/textarea/Textarea.d.ts +7 -0
  144. package/dist/components/textarea/Textarea.js +36 -0
  145. package/dist/components/toast/ToastSlice.d.ts +1 -1
  146. package/dist/components/toast/index.d.ts +1 -1
  147. package/dist/components/tooltip/Tooltip.d.ts +1 -1
  148. package/dist/filters/FilterDropdown.d.ts +9 -0
  149. package/dist/filters/FilterDropdown.js +57 -0
  150. package/dist/filters/types.d.ts +11 -0
  151. package/dist/filters/url-params.d.ts +5 -0
  152. package/dist/filters/url-params.js +20 -0
  153. package/dist/filters/use-filters.d.ts +13 -0
  154. package/dist/filters/use-filters.js +63 -0
  155. package/dist/hooks/use-countdown.d.ts +4 -0
  156. package/dist/hooks/use-countdown.js +18 -0
  157. package/dist/i18n/resources.js +23 -0
  158. package/dist/index.d.ts +52 -0
  159. package/dist/index.js +122 -40
  160. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +421 -350
  161. package/dist/utils/key-typeguard.d.ts +5 -0
  162. package/dist/utils/key-typeguard.js +6 -0
  163. package/dist/utils/use-debounce.d.ts +1 -0
  164. package/dist/utils/use-debounce.js +11 -0
  165. package/package.json +28 -6
  166. package/theme.css +4 -1
@@ -0,0 +1,18 @@
1
+ import { jsxs as s, jsx as o } from "react/jsx-runtime";
2
+ import { cn as m } from "../../utils/cn.js";
3
+ const x = ({ name: e, Icon: r, className: t }) => /* @__PURE__ */ s(
4
+ "div",
5
+ {
6
+ className: m(
7
+ "px-1 py-px flex items-center gap-1 text-xs font-medium text-gray-v2 border border-gray-v2-200 rounded-md",
8
+ t
9
+ ),
10
+ children: [
11
+ e,
12
+ r && /* @__PURE__ */ o(r, { className: "size-3.5 shrink-0" })
13
+ ]
14
+ }
15
+ );
16
+ export {
17
+ x as KeyboardShortcutLabel
18
+ };
@@ -0,0 +1,20 @@
1
+ interface LoaderProps {
2
+ /** Size of the loader in rem. Default 4. */
3
+ baseSize?: number;
4
+ /** Number of dot particles. Default 16. */
5
+ particleCount?: number;
6
+ /** Override the default brand color with a custom hex/rgb value. */
7
+ color?: string;
8
+ }
9
+ /**
10
+ * Rotating-dot spinner. Can be used standalone or inside other components.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * <Loader /> // default 4 rem, 16 dots
15
+ * <Loader baseSize={1} /> // small inline spinner
16
+ * <Loader color="#e53e3e" /> // custom color
17
+ * ```
18
+ */
19
+ export declare const Loader: ({ baseSize, particleCount, color, }: LoaderProps) => import("react").JSX.Element;
20
+ export {};
@@ -0,0 +1,38 @@
1
+ import { jsx as e } from "react/jsx-runtime";
2
+ const n = 0.1, m = 0.1, s = 1, I = ({
3
+ baseSize: r = 4,
4
+ particleCount: t = 16,
5
+ color: l
6
+ }) => {
7
+ const a = {
8
+ position: "absolute",
9
+ height: r * n + "rem",
10
+ width: r * m + "rem",
11
+ left: r * (0.5 - m / 2) + "rem",
12
+ top: r * (0.5 - n) / 4 + "rem",
13
+ transformOrigin: r * m / 2 + "rem " + r * 0.45 + "rem"
14
+ };
15
+ return /* @__PURE__ */ e(
16
+ "div",
17
+ {
18
+ className: "relative",
19
+ style: { height: r + "rem", width: r + "rem" },
20
+ children: Array.from({ length: t }, (d, o) => /* @__PURE__ */ e(
21
+ "span",
22
+ {
23
+ className: "animate-pseudo-rotate h-2 w-2 rounded-full bg-brand-v2-600",
24
+ style: {
25
+ ...a,
26
+ backgroundColor: l,
27
+ rotate: 360 / t * o + "deg",
28
+ animationDelay: -(s / t) * o + "s"
29
+ }
30
+ },
31
+ o
32
+ ))
33
+ }
34
+ );
35
+ };
36
+ export {
37
+ I as Loader
38
+ };
@@ -0,0 +1,15 @@
1
+ interface Props {
2
+ className?: string;
3
+ text?: string;
4
+ }
5
+ /**
6
+ * Loading state for CyStack Platform, with a little bit of fun.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * <LoadingState />
11
+ * <LoadingState className="min-h-screen" />
12
+ * ```
13
+ */
14
+ export declare const LoadingState: ({ className, text }: Props) => import("react").JSX.Element;
15
+ export {};
@@ -0,0 +1,47 @@
1
+ import { jsx as e, jsxs as n } from "react/jsx-runtime";
2
+ import { useState as p, useMemo as g, useEffect as x } from "react";
3
+ import { useTranslation as v } from "react-i18next";
4
+ import { cn as N } from "../../utils/cn.js";
5
+ import { Loader as c } from "./Loader.js";
6
+ const T = 5e3, L = ({ className: l, text: o }) => {
7
+ const { t: i } = v("components/loading-state"), [m, d] = p(!1), f = g(() => {
8
+ const t = {
9
+ normal: 9994,
10
+ cat: 6
11
+ }, r = Object.keys(t), u = r.reduce((a, h) => a + t[h], 0);
12
+ let s = Math.floor(Math.random() * u);
13
+ for (const a of r)
14
+ if (s -= t[a], s < 0) return a;
15
+ return "normal";
16
+ }, []);
17
+ return x(() => {
18
+ const t = setTimeout(() => {
19
+ d(!0);
20
+ }, T);
21
+ return () => clearTimeout(t);
22
+ }, []), /* @__PURE__ */ e(
23
+ "div",
24
+ {
25
+ className: N(
26
+ "flex h-40 w-full items-center justify-center py-12",
27
+ l
28
+ ),
29
+ children: f === "cat" ? /* @__PURE__ */ n("div", { className: "relative", children: [
30
+ /* @__PURE__ */ e(
31
+ "img",
32
+ {
33
+ src: "/loading-cat.jpg",
34
+ className: "max-h-40 overflow-hidden object-cover"
35
+ }
36
+ ),
37
+ /* @__PURE__ */ e("div", { className: "absolute left-18 top-18", children: /* @__PURE__ */ e(c, { baseSize: 1 }) })
38
+ ] }) : /* @__PURE__ */ n("div", { className: "flex flex-col items-center gap-5", children: [
39
+ /* @__PURE__ */ e(c, {}),
40
+ o ? /* @__PURE__ */ e("span", { className: "text-lg font-medium text-gray-v2-700", children: o }) : m ? /* @__PURE__ */ e("span", { className: "text-lg font-medium text-gray-v2-700", children: i("loading") }) : null
41
+ ] })
42
+ }
43
+ );
44
+ };
45
+ export {
46
+ L as LoadingState
47
+ };
@@ -0,0 +1,6 @@
1
+ declare const _default: {
2
+ "loading": "Loading..."
3
+ }
4
+ ;
5
+
6
+ export default _default;
@@ -0,0 +1,7 @@
1
+ const n = "Loading...", o = {
2
+ loading: n
3
+ };
4
+ export {
5
+ o as default,
6
+ n as loading
7
+ };
@@ -0,0 +1,6 @@
1
+ declare const _default: {
2
+ "loading": "Đang tải..."
3
+ }
4
+ ;
5
+
6
+ export default _default;
@@ -0,0 +1,7 @@
1
+ const t = "Đang tải...", n = {
2
+ loading: t
3
+ };
4
+ export {
5
+ n as default,
6
+ t as loading
7
+ };
@@ -0,0 +1,7 @@
1
+ import { ObjectHTMLAttributes } from 'react';
2
+ interface Props extends Omit<ObjectHTMLAttributes<HTMLObjectElement>, "data"> {
3
+ data?: HTMLObjectElement["data"] | null;
4
+ }
5
+ /** Extends a HTML Object tag since it can display multiple types of media with fallback. */
6
+ export declare const Media: import('react').ForwardRefExoticComponent<Props & import('react').RefAttributes<HTMLObjectElement>>;
7
+ export {};
@@ -0,0 +1,25 @@
1
+ import { jsx as a } from "react/jsx-runtime";
2
+ import { forwardRef as r } from "react";
3
+ import { cn as i } from "../../utils/cn.js";
4
+ import { Image02 as t } from "@untitled-ui/icons-react";
5
+ const l = r(
6
+ ({ ...e }, c) => e.data ? /* @__PURE__ */ a(
7
+ "object",
8
+ {
9
+ type: "image/png",
10
+ ref: c,
11
+ ...e,
12
+ data: e.data,
13
+ className: i(
14
+ "flex justify-center items-center size-7 shrink-0 object-cover",
15
+ e.className
16
+ ),
17
+ children: e.children ? e.children : /* @__PURE__ */ a(t, { className: "size-full text-gray-v2-400" })
18
+ },
19
+ e.data
20
+ ) : e.children ? e.children : /* @__PURE__ */ a("div", { className: i("size-7 shrink-0 object-cover", e.className), children: /* @__PURE__ */ a(t, { className: "size-full text-gray-v2-400" }) })
21
+ );
22
+ l.displayName = "Media";
23
+ export {
24
+ l as Media
25
+ };
@@ -4,5 +4,5 @@ interface Props {
4
4
  type?: IconType;
5
5
  Icon: (props: SVGProps<SVGSVGElement>) => ReactNode;
6
6
  }
7
- export declare const ModalHeaderIcon: ({ type, Icon }: Props) => import("react/jsx-runtime").JSX.Element;
7
+ export declare const ModalHeaderIcon: ({ type, Icon }: Props) => import("react").JSX.Element;
8
8
  export {};
@@ -2,5 +2,5 @@ import { ReactNode } from 'react';
2
2
  interface Props {
3
3
  children: ReactNode;
4
4
  }
5
- export declare const ModalTitle: ({ children }: Props) => import("react/jsx-runtime").JSX.Element;
5
+ export declare const ModalTitle: ({ children }: Props) => import("react").JSX.Element;
6
6
  export {};
@@ -0,0 +1,9 @@
1
+ import { InternalToastProps } from '../toast/types';
2
+ import { Observable } from '../../utils/observable';
3
+ interface Props {
4
+ toast: InternalToastProps;
5
+ observable: Observable<InternalToastProps>;
6
+ }
7
+ /** Just notification's UI. */
8
+ export declare const NotificationBanner: ({ toast, observable }: Props) => import("react").JSX.Element;
9
+ export {};
@@ -0,0 +1,97 @@
1
+ import { jsxs as o, jsx as r } from "react/jsx-runtime";
2
+ import { useState as g, useRef as u, useMemo as x, useCallback as l, useEffect as y } from "react";
3
+ import { useTranslation as v } from "react-i18next";
4
+ import { XClose as w } from "@untitled-ui/icons-react";
5
+ import { iconByNotificationType as b } from "./icons.js";
6
+ const H = ({ toast: e, observable: i }) => {
7
+ var d, m;
8
+ const { t: c } = v("components/notification"), [p, f] = g(!1), n = u(null), s = x(() => ["peach"].includes(e.type) ? "gradient" : "normal", [e.type]), a = l(
9
+ (t) => {
10
+ i.notify({ ...t, status: "dismissed" });
11
+ },
12
+ [i]
13
+ ), h = l(
14
+ (t) => {
15
+ i.notify({ ...t, status: "destroyed" });
16
+ },
17
+ [i]
18
+ );
19
+ return y(() => {
20
+ f(!0);
21
+ }, []), /* @__PURE__ */ o(
22
+ "div",
23
+ {
24
+ ref: n,
25
+ style: p ? e.status === "dismissed" ? (
26
+ // The last state before toast is destroyed
27
+ {
28
+ height: 0,
29
+ minHeight: 0,
30
+ opacity: 0,
31
+ paddingTop: 0,
32
+ paddingBottom: 0,
33
+ borderWidth: 0
34
+ }
35
+ ) : (
36
+ // The stable state
37
+ {
38
+ height: (m = n.current) == null ? void 0 : m.offsetHeight,
39
+ paddingTop: "1rem",
40
+ paddingBottom: "1rem",
41
+ borderWidth: "1px"
42
+ }
43
+ ) : (
44
+ // The first state: before toast is mounted
45
+ {
46
+ transform: "translate(0, 100%)",
47
+ height: (d = n.current) == null ? void 0 : d.offsetHeight,
48
+ paddingTop: "1rem",
49
+ paddingBottom: "1rem",
50
+ borderWidth: "1px"
51
+ }
52
+ ),
53
+ className: "v2 relative px-4 w-[80vw] flex items-start gap-4 rounded-lg duration-300 ease-out overflow-hidden border-gray-v2-300 bg-white shadow-xs",
54
+ onTransitionEnd: (t) => {
55
+ t.target === t.currentTarget && t.propertyName === "height" && h(e);
56
+ },
57
+ children: [
58
+ b[e.type],
59
+ /* @__PURE__ */ o("div", { className: "flex flex-col gap-3", children: [
60
+ /* @__PURE__ */ o("div", { className: "flex flex-col gap-1", children: [
61
+ /* @__PURE__ */ r("span", { className: "text-sm font-semibold text-gray-v2-700 min-h-[1em] wrap-break-words", children: e.message }),
62
+ e.detail ? /* @__PURE__ */ r(
63
+ "span",
64
+ {
65
+ className: `text-sm min-h-[1em] wrap-break-words ${s === "gradient" ? "text-white" : "text-gray-v2-600"}`,
66
+ children: e.detail
67
+ }
68
+ ) : null
69
+ ] }),
70
+ /* @__PURE__ */ r(
71
+ "button",
72
+ {
73
+ className: "text-sm font-semibold text-brand-v2-700 hover:text-brand-v2-800 w-fit",
74
+ onClick: () => {
75
+ a(e);
76
+ },
77
+ children: c("button.ok")
78
+ }
79
+ )
80
+ ] }),
81
+ /* @__PURE__ */ r(
82
+ "button",
83
+ {
84
+ className: `absolute m-2 top-2 right-2 flex text-gray-v2-400 ${s === "gradient" ? "bg-transparent hover:bg-transparent" : void 0}`,
85
+ onClick: () => {
86
+ a(e);
87
+ },
88
+ children: /* @__PURE__ */ r(w, { className: "h-5 w-5 min-w-5" })
89
+ }
90
+ )
91
+ ]
92
+ }
93
+ );
94
+ };
95
+ export {
96
+ H as NotificationBanner
97
+ };
@@ -0,0 +1,5 @@
1
+ import { ReactNode } from 'react';
2
+ import { ToastType } from '../toast/types';
3
+ export declare const iconByNotificationType: {
4
+ [S in ToastType]: ReactNode;
5
+ };
@@ -0,0 +1,29 @@
1
+ import { jsx as e, jsxs as o } from "react/jsx-runtime";
2
+ import { InfoCircle as a, AlertTriangle as c, AlertCircle as n, CheckCircle as i } from "@untitled-ui/icons-react";
3
+ const r = ({
4
+ colorClassName: s,
5
+ children: l
6
+ }) => /* @__PURE__ */ o("div", { className: "relative flex", children: [
7
+ l,
8
+ /* @__PURE__ */ e(
9
+ "span",
10
+ {
11
+ className: "absolute -top-[0.21rem] -left-[0.21rem] h-[1.67rem] w-[1.67rem] rounded-full border-[1.67px] opacity-30 " + s
12
+ }
13
+ ),
14
+ /* @__PURE__ */ e(
15
+ "span",
16
+ {
17
+ className: "absolute -top-[0.47rem] -left-[0.47rem] h-[2.19rem] w-[2.19rem] rounded-full border-[1.67px] opacity-10 " + s
18
+ }
19
+ )
20
+ ] }), d = {
21
+ success: /* @__PURE__ */ e(r, { colorClassName: "border-success-v2-600", children: /* @__PURE__ */ e(i, { className: "h-5 w-5 min-w-5 text-success-v2-600" }) }),
22
+ error: /* @__PURE__ */ e(r, { colorClassName: "border-error-v2-600", children: /* @__PURE__ */ e(n, { className: "h-5 w-5 min-w-5 text-error-v2-600" }) }),
23
+ warning: /* @__PURE__ */ e(r, { colorClassName: "border-warning-v2-600", children: /* @__PURE__ */ e(c, { className: "h-5 w-5 min-w-5 text-warning-v2-600" }) }),
24
+ info: /* @__PURE__ */ e(r, { colorClassName: "border-blue-v2-600", children: /* @__PURE__ */ e(a, { className: "h-5 w-5 min-w-5 text-blue-v2-600" }) }),
25
+ peach: /* @__PURE__ */ e(r, { colorClassName: "border-brand-v2-600", children: /* @__PURE__ */ e(a, { className: "h-5 w-5 min-w-5 text-brand-v2-600" }) })
26
+ };
27
+ export {
28
+ d as iconByNotificationType
29
+ };
@@ -0,0 +1,4 @@
1
+ import { WrittenOnTheToast } from '../toast/types';
2
+ /** Where we store notifications that requires user interaction. */
3
+ export declare const NotificationBox: () => import("react").JSX.Element;
4
+ export declare const createNotification: (newToast: WrittenOnTheToast) => void;
@@ -0,0 +1,26 @@
1
+ import { jsx as i } from "react/jsx-runtime";
2
+ import { useToastList as n } from "../toast/use-toast-list.js";
3
+ import { Observable as r } from "../../utils/observable.js";
4
+ import { NotificationBanner as a } from "./NotificationBanner.js";
5
+ const s = () => window.isSecureContext ? crypto.randomUUID() : crypto.getRandomValues(new Uint32Array(1))[0].toString(), e = new r(), p = () => {
6
+ const o = n(e);
7
+ return /* @__PURE__ */ i("div", { className: "flex flex-col gap-2", children: o.map((t) => /* @__PURE__ */ i(
8
+ a,
9
+ {
10
+ toast: t,
11
+ observable: e
12
+ },
13
+ `toast-${t.id}`
14
+ )) });
15
+ }, d = (o) => {
16
+ const t = {
17
+ ...o,
18
+ id: s(),
19
+ status: "stable"
20
+ };
21
+ e.notify(t);
22
+ };
23
+ export {
24
+ p as NotificationBox,
25
+ d as createNotification
26
+ };
@@ -0,0 +1,8 @@
1
+ declare const _default: {
2
+ "button": {
3
+ "ok": "Ok, got it"
4
+ }
5
+ }
6
+ ;
7
+
8
+ export default _default;
@@ -0,0 +1,7 @@
1
+ const t = { ok: "Ok, got it" }, o = {
2
+ button: t
3
+ };
4
+ export {
5
+ t as button,
6
+ o as default
7
+ };
@@ -0,0 +1,8 @@
1
+ declare const _default: {
2
+ "button": {
3
+ "ok": "Đã hiểu"
4
+ }
5
+ }
6
+ ;
7
+
8
+ export default _default;
@@ -0,0 +1,7 @@
1
+ const o = { ok: "Đã hiểu" }, t = {
2
+ button: o
3
+ };
4
+ export {
5
+ o as button,
6
+ t as default
7
+ };
@@ -0,0 +1,6 @@
1
+ import { SVGAttributes } from 'react';
2
+ interface Props extends SVGAttributes<SVGSVGElement> {
3
+ osName: string | null | undefined;
4
+ }
5
+ export declare const OperatingSystemIcon: ({ osName, ...props }: Props) => import("react").JSX.Element;
6
+ export {};
@@ -0,0 +1,19 @@
1
+ import { jsx as i } from "react/jsx-runtime";
2
+ import m from "./assets/logo-windows-10.svg.js";
3
+ import p from "./assets/logo-apple.svg.js";
4
+ import g from "./assets/logo-ubuntu.svg.js";
5
+ import d from "./assets/logo-android.svg.js";
6
+ import { Monitor01 as u } from "@untitled-ui/icons-react";
7
+ import { keyTypeguard as f } from "../../utils/key-typeguard.js";
8
+ const r = {
9
+ windows: m,
10
+ darwin: p,
11
+ ubuntu: g,
12
+ android: d
13
+ }, l = ({ osName: o, ...t }) => {
14
+ const n = o != null && f(o, r) ? r[o] : u;
15
+ return /* @__PURE__ */ i(n, { ...t });
16
+ };
17
+ export {
18
+ l as OperatingSystemIcon
19
+ };
@@ -0,0 +1,5 @@
1
+ import * as C from "react";
2
+ const t = (e) => /* @__PURE__ */ C.createElement("svg", { width: 24, height: 24, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...e }, /* @__PURE__ */ C.createElement("path", { d: "M23.933 18.3905C23.9251 18.3416 23.9176 18.2933 23.9094 18.2449C23.7018 16.9981 23.297 15.792 22.71 14.6714C22.1354 13.5734 21.3938 12.5703 20.5116 11.6978C19.8674 11.0599 19.1531 10.4962 18.3822 10.0173C18.3868 10.0098 18.3907 10.0016 18.3953 9.99398C18.6374 9.57762 18.8802 9.16173 19.1224 8.74518L19.8326 7.5255C20.0031 7.23374 20.1731 6.94123 20.3424 6.64947C20.4282 6.50228 20.4784 6.33729 20.4891 6.16749C20.4999 5.99769 20.4709 5.82772 20.4045 5.67097C20.3136 5.45478 20.155 5.27358 19.9523 5.15427C19.8092 5.06985 19.6489 5.0185 19.4832 5.004C19.414 4.99815 19.3444 4.99872 19.2753 5.00568C19.1021 5.02327 18.9357 5.08149 18.7895 5.17556C18.6434 5.26963 18.5217 5.39687 18.4345 5.54683C18.2645 5.83869 18.0944 6.1311 17.9247 6.42286L17.2145 7.64263C16.9723 8.05909 16.7295 8.47498 16.4874 8.89143C16.461 8.93689 16.4343 8.98224 16.4079 9.02835C16.3712 9.0137 16.3348 8.99914 16.2981 8.98523C14.9631 8.47843 13.5148 8.20123 12.0009 8.20123C11.9595 8.20123 11.9185 8.20123 11.8768 8.20179C10.5308 8.21514 9.23756 8.44819 8.031 8.86633C7.89188 8.91469 7.75372 8.96578 7.61663 9.01958C7.59206 8.97711 7.56675 8.93455 7.54256 8.89199C7.30041 8.47554 7.05759 8.05965 6.81553 7.64319L6.10528 6.42333C5.93484 6.13157 5.76478 5.83915 5.59538 5.5473C5.49058 5.36689 5.33627 5.21999 5.15055 5.12384C4.96483 5.02769 4.75541 4.98628 4.54688 5.00447C4.38087 5.01849 4.22025 5.06994 4.07719 5.15492C3.92009 5.24772 3.78872 5.37806 3.69497 5.53414C3.66862 5.57838 3.64509 5.62439 3.62541 5.67162C3.52271 5.91412 3.51058 6.1852 3.59119 6.43583C3.61547 6.50919 3.64687 6.58087 3.68709 6.65013C3.85746 6.9419 4.02743 7.23391 4.197 7.52615C4.43419 7.93281 4.67081 8.33937 4.90763 8.74592C5.14969 9.16238 5.39213 9.57827 5.63419 9.99473C5.63606 9.99827 5.6385 10.0017 5.64028 10.0052C5.15315 10.3065 4.68814 10.6419 4.24875 11.0088C3.46278 11.6655 2.76347 12.4186 2.1675 13.2502C1.84262 13.7034 1.55003 14.1787 1.29188 14.6726C0.846133 15.5237 0.504838 16.425 0.275344 17.3572C0.203327 17.6512 0.142316 17.9477 0.0924375 18.2461C0.0842813 18.2945 0.0767813 18.3434 0.0692813 18.3917C0.0421861 18.5665 0.0190864 18.7419 0 18.9177H24C23.9808 18.7412 23.9579 18.5658 23.9312 18.3916L23.933 18.3905Z", fill: "#34A853" }), /* @__PURE__ */ C.createElement("path", { d: "M18.2431 15.6134C18.7233 15.2952 18.7931 14.5588 18.3988 13.9689C18.0048 13.3788 17.2961 13.1586 16.8161 13.4768C16.3359 13.795 16.2659 14.5314 16.6602 15.1214C17.0543 15.7114 17.7632 15.9317 18.2431 15.6134ZM7.36137 15.1234C7.75568 14.5335 7.68574 13.7972 7.20555 13.4789C6.72527 13.1606 6.0168 13.3809 5.62249 13.9708C5.22846 14.5609 5.2983 15.2972 5.7783 15.6155C6.25849 15.9338 6.96733 15.7135 7.36137 15.1234Z", fill: "#202124" }));
3
+ export {
4
+ t as default
5
+ };
@@ -0,0 +1,5 @@
1
+ import * as E from "react";
2
+ const A = (w) => /* @__PURE__ */ E.createElement("svg", { width: 24, height: 24, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", ...w }, /* @__PURE__ */ E.createElement("rect", { x: 1, y: 1, width: 22, height: 22, fill: "url(#pattern0)" }), /* @__PURE__ */ E.createElement("defs", null, /* @__PURE__ */ E.createElement("pattern", { id: "pattern0", patternContentUnits: "objectBoundingBox", width: 1, height: 1 }, /* @__PURE__ */ E.createElement("use", { xlinkHref: "#image0_381_4816", transform: "scale(0.00195312)" })), /* @__PURE__ */ E.createElement("image", { id: "image0_381_4816", width: 512, height: 512, xlinkHref: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAMAAADDpiTIAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAgFzAAIBcwEsWO2LAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAwBQTFRF////AwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEAwEEtRVHvgAAAP90Uk5TAAECAwQF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" })));
3
+ export {
4
+ A as default
5
+ };
@@ -0,0 +1,5 @@
1
+ import * as e from "react";
2
+ const r = (t) => /* @__PURE__ */ e.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: 285, height: 285, viewBox: "-142.5 -142.5 285 285", xmlnsXlink: "http://www.w3.org/1999/xlink", ...t }, /* @__PURE__ */ e.createElement("circle", { fill: "#DD4814", r: 141.732 }), /* @__PURE__ */ e.createElement("g", { id: "U", fill: "#FFFFFF" }, /* @__PURE__ */ e.createElement("circle", { cx: -96.3772, r: 18.9215 }), /* @__PURE__ */ e.createElement("path", { d: "M-45.6059,68.395C-62.1655,57.3316-74.4844,40.4175-79.6011,20.6065-73.623,15.7354-69.8047,8.3164-69.8047,0-69.8047-8.3164-73.623-15.7354-79.6011-20.6065-74.4844-40.4175-62.1655-57.3316-45.6059-68.395L-31.7715-45.2212C-45.9824-35.2197-55.2754-18.7026-55.2754,0-55.2754,18.7026-45.9824,35.2197-31.7715,45.2212Z" })), /* @__PURE__ */ e.createElement("use", { xlinkHref: "#U", transform: "rotate(120)" }), /* @__PURE__ */ e.createElement("use", { xlinkHref: "#U", transform: "rotate(240)" }));
3
+ export {
4
+ r as default
5
+ };
@@ -0,0 +1,5 @@
1
+ import * as e from "react";
2
+ const a = (t) => /* @__PURE__ */ e.createElement("svg", { width: 24, height: 24, viewBox: "0 0 24 24", fill: "#0078D6", xmlns: "http://www.w3.org/2000/svg", ...t }, /* @__PURE__ */ e.createElement("path", { d: "M2 5.00313V11.5238H9.61905V3.90479L2 5.00313Z" }), /* @__PURE__ */ e.createElement("path", { d: "M2 12.4762H9.61905V20.0952L2 19.0249V12.4762Z" }), /* @__PURE__ */ e.createElement("path", { d: "M10.5715 3.57985L22.0001 2V11.5238H10.5715V3.57985Z" }), /* @__PURE__ */ e.createElement("path", { d: "M10.5715 12.4762H22.0001V22L10.5715 20.3786V12.4762Z" }));
3
+ export {
4
+ a as default
5
+ };
@@ -3,5 +3,5 @@ interface Props {
3
3
  id?: string;
4
4
  children: ReactNode;
5
5
  }
6
- export declare const PageTitle: ({ id, children }: Props) => import("react/jsx-runtime").JSX.Element;
6
+ export declare const PageTitle: ({ id, children }: Props) => import("react").JSX.Element;
7
7
  export {};
@@ -4,5 +4,5 @@ interface Props {
4
4
  contentClassName?: string;
5
5
  children: ReactNode;
6
6
  }
7
- export declare const Popover: ({ content, contentClassName, children }: Props) => import("react/jsx-runtime").JSX.Element;
7
+ export declare const Popover: ({ content, contentClassName, children }: Props) => import("react").JSX.Element;
8
8
  export {};
@@ -0,0 +1,9 @@
1
+ interface Props {
2
+ /** Progress in the 0–100 range; values outside are clamped. */
3
+ value: number;
4
+ /** Shows the percentage label after the bar. */
5
+ showLabel?: boolean;
6
+ className?: string;
7
+ }
8
+ export declare const ProgressBar: ({ value, showLabel, className }: Props) => import("react").JSX.Element;
9
+ export {};
@@ -0,0 +1,31 @@
1
+ import { jsxs as r, jsx as e } from "react/jsx-runtime";
2
+ import { cn as t } from "../../utils/cn.js";
3
+ const d = ({ value: l, showLabel: s = !1, className: n }) => {
4
+ const a = Math.min(100, Math.max(0, l));
5
+ return /* @__PURE__ */ r("div", { className: t("flex items-center gap-3", n), children: [
6
+ /* @__PURE__ */ e(
7
+ "div",
8
+ {
9
+ role: "progressbar",
10
+ "aria-valuenow": a,
11
+ "aria-valuemin": 0,
12
+ "aria-valuemax": 100,
13
+ className: "flex-1 h-2 rounded-full bg-gray-v2-100 overflow-hidden",
14
+ children: /* @__PURE__ */ e(
15
+ "div",
16
+ {
17
+ className: "h-full rounded-full bg-brand-v2-600 transition-all duration-300",
18
+ style: { width: `${a}%` }
19
+ }
20
+ )
21
+ }
22
+ ),
23
+ s && /* @__PURE__ */ r("span", { className: "text-sm font-medium text-gray-v2-700 tabular-nums", children: [
24
+ Math.round(a),
25
+ "%"
26
+ ] })
27
+ ] });
28
+ };
29
+ export {
30
+ d as ProgressBar
31
+ };
@@ -0,0 +1,4 @@
1
+ import { InputHTMLAttributes } from 'react';
2
+ type Props = InputHTMLAttributes<HTMLInputElement>;
3
+ export declare const Radio: import('react').ForwardRefExoticComponent<Props & import('react').RefAttributes<HTMLInputElement>>;
4
+ export {};
@@ -0,0 +1,55 @@
1
+ import { jsxs as o, jsx as i } from "react/jsx-runtime";
2
+ import { forwardRef as t } from "react";
3
+ import { cn as l } from "../../utils/cn.js";
4
+ const n = t(
5
+ ({ checked: a, className: r, ...e }, s) => /* @__PURE__ */ o(
6
+ "label",
7
+ {
8
+ className: l(
9
+ "relative size-5 shrink-0 block rounded-full bg-white transition-all ease-out border",
10
+ a && !e.disabled ? "border-brand-v2-600" : "border-gray-v2-300",
11
+ { "bg-gray-v2-50": e.disabled },
12
+ r
13
+ ),
14
+ children: [
15
+ /* @__PURE__ */ i(
16
+ "input",
17
+ {
18
+ ref: s,
19
+ ...e,
20
+ checked: a,
21
+ className: l(
22
+ "absolute top-0 left-0 z-10 size-full rounded-full appearance-none",
23
+ "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand-v2-400",
24
+ e.disabled ? "cursor-not-allowed" : "cursor-pointer"
25
+ ),
26
+ type: "radio"
27
+ }
28
+ ),
29
+ /* @__PURE__ */ i(
30
+ "span",
31
+ {
32
+ className: l(
33
+ "relative size-full transition-all ease-out rounded-full flex justify-center items-center",
34
+ { "bg-brand-v2-600": !e.disabled },
35
+ { "scale-75 opacity-0": !a }
36
+ ),
37
+ children: /* @__PURE__ */ i(
38
+ "span",
39
+ {
40
+ className: l(
41
+ "size-2 rounded-full transition-all ease-out",
42
+ e.disabled ? "bg-gray-v2-300" : "bg-white"
43
+ )
44
+ }
45
+ )
46
+ }
47
+ )
48
+ ]
49
+ }
50
+ )
51
+ );
52
+ n.displayName = "Radio";
53
+ export {
54
+ n as Radio
55
+ };