@acronis-platform/ui-react 0.38.0 → 0.43.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 (78) hide show
  1. package/dist/components/ui/data-table/data-table-column-header.js +48 -0
  2. package/dist/components/ui/data-table/data-table-column-header.js.map +1 -0
  3. package/dist/components/ui/data-table/data-table-pagination.js +89 -0
  4. package/dist/components/ui/data-table/data-table-pagination.js.map +1 -0
  5. package/dist/components/ui/data-table/data-table-toolbar.js +46 -0
  6. package/dist/components/ui/data-table/data-table-toolbar.js.map +1 -0
  7. package/dist/components/ui/data-table/data-table-view-options.js +40 -0
  8. package/dist/components/ui/data-table/data-table-view-options.js.map +1 -0
  9. package/dist/components/ui/data-table/data-table.js +89 -0
  10. package/dist/components/ui/data-table/data-table.js.map +1 -0
  11. package/dist/components/ui/dropdown-menu/dropdown-menu.js +159 -0
  12. package/dist/components/ui/dropdown-menu/dropdown-menu.js.map +1 -0
  13. package/dist/components/ui/empty/empty.js +78 -0
  14. package/dist/components/ui/empty/empty.js.map +1 -0
  15. package/dist/components/ui/label/label.js +12 -0
  16. package/dist/components/ui/label/label.js.map +1 -0
  17. package/dist/components/ui/popover/popover.js +48 -0
  18. package/dist/components/ui/popover/popover.js.map +1 -0
  19. package/dist/components/ui/progress/progress.js +30 -0
  20. package/dist/components/ui/progress/progress.js.map +1 -0
  21. package/dist/components/ui/separator/separator.js +22 -0
  22. package/dist/components/ui/separator/separator.js.map +1 -0
  23. package/dist/components/ui/spinner/spinner.js +38 -0
  24. package/dist/components/ui/spinner/spinner.js.map +1 -0
  25. package/dist/components/ui/table/table.js +8 -8
  26. package/dist/components/ui/table/table.js.map +1 -1
  27. package/dist/components/ui/tabs/tabs.js +44 -0
  28. package/dist/components/ui/tabs/tabs.js.map +1 -0
  29. package/dist/components/ui/toast/toast.js +83 -0
  30. package/dist/components/ui/toast/toast.js.map +1 -0
  31. package/dist/components/ui/widget-placeholder/widget-placeholder.js +106 -0
  32. package/dist/components/ui/widget-placeholder/widget-placeholder.js.map +1 -0
  33. package/dist/index.js +210 -142
  34. package/dist/index.js.map +1 -1
  35. package/dist/node_modules/.pnpm/@tanstack_react-table@8.21.3_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@tanstack/react-table/build/lib/index.js +104 -0
  36. package/dist/node_modules/.pnpm/@tanstack_react-table@8.21.3_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@tanstack/react-table/build/lib/index.js.map +1 -0
  37. package/dist/node_modules/.pnpm/@tanstack_table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.js +1900 -0
  38. package/dist/node_modules/.pnpm/@tanstack_table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.js.map +1 -0
  39. package/dist/react.js +210 -142
  40. package/dist/react.js.map +1 -1
  41. package/dist/src/components/ui/data-table/data-table-column-header.d.ts +8 -0
  42. package/dist/src/components/ui/data-table/data-table-pagination.d.ts +8 -0
  43. package/dist/src/components/ui/data-table/data-table-toolbar.d.ts +9 -0
  44. package/dist/src/components/ui/data-table/data-table-view-options.d.ts +6 -0
  45. package/dist/src/components/ui/data-table/data-table.d.ts +24 -0
  46. package/dist/src/components/ui/data-table/data-table.docs.d.ts +22 -0
  47. package/dist/src/components/ui/data-table/index.d.ts +5 -0
  48. package/dist/src/components/ui/dropdown-menu/dropdown-menu.d.ts +39 -0
  49. package/dist/src/components/ui/dropdown-menu/dropdown-menu.docs.d.ts +25 -0
  50. package/dist/src/components/ui/dropdown-menu/index.d.ts +1 -0
  51. package/dist/src/components/ui/empty/empty.d.ts +9 -0
  52. package/dist/src/components/ui/empty/index.d.ts +1 -0
  53. package/dist/src/components/ui/label/index.d.ts +1 -0
  54. package/dist/src/components/ui/label/label.d.ts +5 -0
  55. package/dist/src/components/ui/label/label.docs.d.ts +10 -0
  56. package/dist/src/components/ui/popover/index.d.ts +1 -0
  57. package/dist/src/components/ui/popover/popover.d.ts +27 -0
  58. package/dist/src/components/ui/popover/popover.docs.d.ts +25 -0
  59. package/dist/src/components/ui/progress/index.d.ts +1 -0
  60. package/dist/src/components/ui/progress/progress.d.ts +9 -0
  61. package/dist/src/components/ui/progress/progress.docs.d.ts +16 -0
  62. package/dist/src/components/ui/separator/index.d.ts +1 -0
  63. package/dist/src/components/ui/separator/separator.d.ts +3 -0
  64. package/dist/src/components/ui/spinner/index.d.ts +1 -0
  65. package/dist/src/components/ui/spinner/spinner.d.ts +9 -0
  66. package/dist/src/components/ui/tabs/index.d.ts +1 -0
  67. package/dist/src/components/ui/tabs/tabs.d.ts +6 -0
  68. package/dist/src/components/ui/tabs/tabs.docs.d.ts +25 -0
  69. package/dist/src/components/ui/tag/tag.d.ts +1 -1
  70. package/dist/src/components/ui/toast/index.d.ts +1 -0
  71. package/dist/src/components/ui/toast/toast.d.ts +48 -0
  72. package/dist/src/components/ui/toast/toast.docs.d.ts +12 -0
  73. package/dist/src/components/ui/widget-placeholder/index.d.ts +1 -0
  74. package/dist/src/components/ui/widget-placeholder/widget-placeholder.d.ts +18 -0
  75. package/dist/src/components/ui/widget-placeholder/widget-placeholder.docs.d.ts +14 -0
  76. package/dist/src/index.d.ts +12 -0
  77. package/dist/ui-react.css +1 -1
  78. package/package.json +5 -3
@@ -0,0 +1,48 @@
1
+ import { jsx as e, jsxs as o } from "react/jsx-runtime";
2
+ import { ArrowDownIcon as a, ArrowUpIcon as d, ArrowsDownUpIcon as c, EyeCrossedIcon as l } from "@acronis-platform/icons-react/stroke-mono";
3
+ import { cn as s } from "../../../lib/utils.js";
4
+ import { DropdownMenu as p, DropdownMenuTrigger as g, DropdownMenuContent as m, DropdownMenuItem as n, DropdownMenuSeparator as f } from "../dropdown-menu/dropdown-menu.js";
5
+ import { Button as u } from "../button/button.js";
6
+ function I({
7
+ column: r,
8
+ title: t,
9
+ className: i
10
+ }) {
11
+ return r.getCanSort() ? /* @__PURE__ */ e("div", { className: s("flex items-center gap-2", i), children: /* @__PURE__ */ o(p, { children: [
12
+ /* @__PURE__ */ o(
13
+ g,
14
+ {
15
+ render: /* @__PURE__ */ e(
16
+ u,
17
+ {
18
+ variant: "ghost",
19
+ className: "-ml-2 h-8 gap-2 px-2 data-[popup-open]:bg-accent"
20
+ }
21
+ ),
22
+ children: [
23
+ /* @__PURE__ */ e("span", { children: t }),
24
+ r.getIsSorted() === "desc" ? /* @__PURE__ */ e(a, {}) : r.getIsSorted() === "asc" ? /* @__PURE__ */ e(d, {}) : /* @__PURE__ */ e(c, {})
25
+ ]
26
+ }
27
+ ),
28
+ /* @__PURE__ */ o(m, { align: "start", children: [
29
+ /* @__PURE__ */ o(n, { onClick: () => r.toggleSorting(!1), children: [
30
+ /* @__PURE__ */ e(d, { className: "text-muted-foreground" }),
31
+ "Asc"
32
+ ] }),
33
+ /* @__PURE__ */ o(n, { onClick: () => r.toggleSorting(!0), children: [
34
+ /* @__PURE__ */ e(a, { className: "text-muted-foreground" }),
35
+ "Desc"
36
+ ] }),
37
+ /* @__PURE__ */ e(f, {}),
38
+ /* @__PURE__ */ o(n, { onClick: () => r.toggleVisibility(!1), children: [
39
+ /* @__PURE__ */ e(l, { className: "text-muted-foreground" }),
40
+ "Hide"
41
+ ] })
42
+ ] })
43
+ ] }) }) : /* @__PURE__ */ e("div", { className: s(i), children: t });
44
+ }
45
+ export {
46
+ I as DataTableColumnHeader
47
+ };
48
+ //# sourceMappingURL=data-table-column-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-column-header.js","sources":["../../../../src/components/ui/data-table/data-table-column-header.tsx"],"sourcesContent":["import * as React from 'react';\nimport type { Column } from '@tanstack/react-table';\nimport {\n ArrowDownIcon,\n ArrowsDownUpIcon,\n ArrowUpIcon,\n EyeCrossedIcon,\n} from '@acronis-platform/icons-react/stroke-mono';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '../button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../dropdown-menu';\n\ninterface DataTableColumnHeaderProps<TData, TValue>\n extends React.HTMLAttributes<HTMLDivElement> {\n column: Column<TData, TValue>;\n title: string;\n}\n\nexport function DataTableColumnHeader<TData, TValue>({\n column,\n title,\n className,\n}: DataTableColumnHeaderProps<TData, TValue>) {\n if (!column.getCanSort()) {\n return <div className={cn(className)}>{title}</div>;\n }\n\n return (\n <div className={cn('flex items-center gap-2', className)}>\n <DropdownMenu>\n <DropdownMenuTrigger\n render={\n <Button\n variant=\"ghost\"\n // ui-react's ghost button has 0 horizontal padding, so add a small\n // padding for a comfortable click/hover target and negate it on the\n // left (-ml-2 px-2) so the label still sits flush at the cell's\n // padding edge — aligned with the body cells below.\n className=\"-ml-2 h-8 gap-2 px-2 data-[popup-open]:bg-accent\"\n />\n }\n >\n <span>{title}</span>\n {column.getIsSorted() === 'desc' ? (\n <ArrowDownIcon />\n ) : column.getIsSorted() === 'asc' ? (\n <ArrowUpIcon />\n ) : (\n <ArrowsDownUpIcon />\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n <DropdownMenuItem onClick={() => column.toggleSorting(false)}>\n <ArrowUpIcon className=\"text-muted-foreground\" />\n Asc\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => column.toggleSorting(true)}>\n <ArrowDownIcon className=\"text-muted-foreground\" />\n Desc\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={() => column.toggleVisibility(false)}>\n <EyeCrossedIcon className=\"text-muted-foreground\" />\n Hide\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n}\n"],"names":["DataTableColumnHeader","column","title","className","jsx","cn","DropdownMenu","jsxs","DropdownMenuTrigger","Button","ArrowDownIcon","ArrowUpIcon","ArrowsDownUpIcon","DropdownMenuContent","DropdownMenuItem","DropdownMenuSeparator","EyeCrossedIcon"],"mappings":";;;;;AAyBO,SAASA,EAAqC;AAAA,EACnD,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC;AACF,GAA8C;AAC5C,SAAKF,EAAO,eAKV,gBAAAG,EAAC,SAAI,WAAWC,EAAG,2BAA2BF,CAAS,GACrD,4BAACG,GAAA,EACC,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,QACE,gBAAAJ;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YAKR,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAId,UAAA;AAAA,UAAA,gBAAAL,EAAC,UAAM,UAAAF,EAAA,CAAM;AAAA,UACZD,EAAO,YAAA,MAAkB,2BACvBS,GAAA,CAAA,CAAc,IACbT,EAAO,YAAA,MAAkB,QAC3B,gBAAAG,EAACO,GAAA,CAAA,CAAY,sBAEZC,GAAA,CAAA,CAAiB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGtB,gBAAAL,EAACM,GAAA,EAAoB,OAAM,SACzB,UAAA;AAAA,MAAA,gBAAAN,EAACO,KAAiB,SAAS,MAAMb,EAAO,cAAc,EAAK,GACzD,UAAA;AAAA,QAAA,gBAAAG,EAACO,GAAA,EAAY,WAAU,wBAAA,CAAwB;AAAA,QAAE;AAAA,MAAA,GAEnD;AAAA,wBACCG,GAAA,EAAiB,SAAS,MAAMb,EAAO,cAAc,EAAI,GACxD,UAAA;AAAA,QAAA,gBAAAG,EAACM,GAAA,EAAc,WAAU,wBAAA,CAAwB;AAAA,QAAE;AAAA,MAAA,GAErD;AAAA,wBACCK,GAAA,EAAsB;AAAA,wBACtBD,GAAA,EAAiB,SAAS,MAAMb,EAAO,iBAAiB,EAAK,GAC5D,UAAA;AAAA,QAAA,gBAAAG,EAACY,GAAA,EAAe,WAAU,wBAAA,CAAwB;AAAA,QAAE;AAAA,MAAA,EAAA,CAEtD;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF,sBA3CQ,OAAA,EAAI,WAAWX,EAAGF,CAAS,GAAI,UAAAD,GAAM;AA6CjD;"}
@@ -0,0 +1,89 @@
1
+ import { jsxs as a, jsx as n } from "react/jsx-runtime";
2
+ import { ChevronFirstIcon as o, ChevronLeftIcon as l, ChevronRightIcon as s, ChevronLastIcon as c } from "@acronis-platform/icons-react/stroke-mono";
3
+ import { InputSelect as d, InputSelectTrigger as g, InputSelectValue as m, InputSelectContent as p, InputSelectItem as h } from "../input-select/input-select.js";
4
+ import { ButtonIcon as i } from "../button-icon/button-icon.js";
5
+ function C({
6
+ table: e,
7
+ pageSizeOptions: r = [10, 20, 30, 40, 50]
8
+ }) {
9
+ return /* @__PURE__ */ a("div", { className: "flex items-center justify-between px-2", children: [
10
+ /* @__PURE__ */ a("div", { className: "flex-1 text-sm text-muted-foreground", children: [
11
+ e.getFilteredSelectedRowModel().rows.length,
12
+ " of",
13
+ " ",
14
+ e.getFilteredRowModel().rows.length,
15
+ " row(s) selected."
16
+ ] }),
17
+ /* @__PURE__ */ a("div", { className: "flex items-center gap-6 lg:gap-8", children: [
18
+ /* @__PURE__ */ a("div", { className: "flex items-center gap-2", children: [
19
+ /* @__PURE__ */ n("p", { className: "text-sm font-medium", children: "Rows per page" }),
20
+ /* @__PURE__ */ a(
21
+ d,
22
+ {
23
+ value: `${e.getState().pagination.pageSize}`,
24
+ onValueChange: (t) => e.setPageSize(Number(t)),
25
+ children: [
26
+ /* @__PURE__ */ n(g, { "aria-label": "Rows per page", className: "h-8 w-[70px]", children: /* @__PURE__ */ n(m, {}) }),
27
+ /* @__PURE__ */ n(p, { children: r.map((t) => /* @__PURE__ */ n(h, { value: `${t}`, children: t }, t)) })
28
+ ]
29
+ }
30
+ )
31
+ ] }),
32
+ /* @__PURE__ */ a("div", { className: "flex w-[100px] items-center justify-center text-sm font-medium", children: [
33
+ "Page ",
34
+ e.getState().pagination.pageIndex + 1,
35
+ " of",
36
+ " ",
37
+ e.getPageCount()
38
+ ] }),
39
+ /* @__PURE__ */ a("div", { className: "flex items-center gap-2", children: [
40
+ /* @__PURE__ */ n(
41
+ i,
42
+ {
43
+ variant: "secondary",
44
+ "aria-label": "Go to first page",
45
+ className: "hidden lg:inline-flex",
46
+ onClick: () => e.setPageIndex(0),
47
+ disabled: !e.getCanPreviousPage(),
48
+ children: /* @__PURE__ */ n(o, {})
49
+ }
50
+ ),
51
+ /* @__PURE__ */ n(
52
+ i,
53
+ {
54
+ variant: "secondary",
55
+ "aria-label": "Go to previous page",
56
+ onClick: () => e.previousPage(),
57
+ disabled: !e.getCanPreviousPage(),
58
+ children: /* @__PURE__ */ n(l, {})
59
+ }
60
+ ),
61
+ /* @__PURE__ */ n(
62
+ i,
63
+ {
64
+ variant: "secondary",
65
+ "aria-label": "Go to next page",
66
+ onClick: () => e.nextPage(),
67
+ disabled: !e.getCanNextPage(),
68
+ children: /* @__PURE__ */ n(s, {})
69
+ }
70
+ ),
71
+ /* @__PURE__ */ n(
72
+ i,
73
+ {
74
+ variant: "secondary",
75
+ "aria-label": "Go to last page",
76
+ className: "hidden lg:inline-flex",
77
+ onClick: () => e.setPageIndex(e.getPageCount() - 1),
78
+ disabled: !e.getCanNextPage(),
79
+ children: /* @__PURE__ */ n(c, {})
80
+ }
81
+ )
82
+ ] })
83
+ ] })
84
+ ] });
85
+ }
86
+ export {
87
+ C as DataTablePagination
88
+ };
89
+ //# sourceMappingURL=data-table-pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-pagination.js","sources":["../../../../src/components/ui/data-table/data-table-pagination.tsx"],"sourcesContent":["import type { Table } from '@tanstack/react-table';\nimport {\n ChevronFirstIcon,\n ChevronLastIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from '@acronis-platform/icons-react/stroke-mono';\n\nimport { ButtonIcon } from '../button-icon';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../select';\n\ninterface DataTablePaginationProps<TData> {\n table: Table<TData>;\n /** Page-size options offered in the rows-per-page select. */\n pageSizeOptions?: number[];\n}\n\nexport function DataTablePagination<TData>({\n table,\n pageSizeOptions = [10, 20, 30, 40, 50],\n}: DataTablePaginationProps<TData>) {\n return (\n <div className=\"flex items-center justify-between px-2\">\n <div className=\"flex-1 text-sm text-muted-foreground\">\n {table.getFilteredSelectedRowModel().rows.length} of{' '}\n {table.getFilteredRowModel().rows.length} row(s) selected.\n </div>\n <div className=\"flex items-center gap-6 lg:gap-8\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-medium\">Rows per page</p>\n <Select\n value={`${table.getState().pagination.pageSize}`}\n onValueChange={(value) => table.setPageSize(Number(value))}\n >\n <SelectTrigger aria-label=\"Rows per page\" className=\"h-8 w-[70px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((pageSize) => (\n <SelectItem key={pageSize} value={`${pageSize}`}>\n {pageSize}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"flex w-[100px] items-center justify-center text-sm font-medium\">\n Page {table.getState().pagination.pageIndex + 1} of{' '}\n {table.getPageCount()}\n </div>\n <div className=\"flex items-center gap-2\">\n <ButtonIcon\n variant=\"secondary\"\n aria-label=\"Go to first page\"\n className=\"hidden lg:inline-flex\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n >\n <ChevronFirstIcon />\n </ButtonIcon>\n <ButtonIcon\n variant=\"secondary\"\n aria-label=\"Go to previous page\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n <ChevronLeftIcon />\n </ButtonIcon>\n <ButtonIcon\n variant=\"secondary\"\n aria-label=\"Go to next page\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n <ChevronRightIcon />\n </ButtonIcon>\n <ButtonIcon\n variant=\"secondary\"\n aria-label=\"Go to last page\"\n className=\"hidden lg:inline-flex\"\n onClick={() => table.setPageIndex(table.getPageCount() - 1)}\n disabled={!table.getCanNextPage()}\n >\n <ChevronLastIcon />\n </ButtonIcon>\n </div>\n </div>\n </div>\n );\n}\n"],"names":["DataTablePagination","table","pageSizeOptions","jsxs","jsx","Select","value","SelectTrigger","SelectValue","SelectContent","pageSize","SelectItem","ButtonIcon","ChevronFirstIcon","ChevronLeftIcon","ChevronRightIcon","ChevronLastIcon"],"mappings":";;;;AAuBO,SAASA,EAA2B;AAAA,EACzC,OAAAC;AAAA,EACA,iBAAAC,IAAkB,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE;AACvC,GAAoC;AAClC,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,wCACZ,UAAA;AAAA,MAAAF,EAAM,8BAA8B,KAAK;AAAA,MAAO;AAAA,MAAI;AAAA,MACpDA,EAAM,sBAAsB,KAAK;AAAA,MAAO;AAAA,IAAA,GAC3C;AAAA,IACA,gBAAAE,EAAC,OAAA,EAAI,WAAU,oCACb,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,QAAA,gBAAAC,EAAC,KAAA,EAAE,WAAU,uBAAsB,UAAA,iBAAa;AAAA,QAChD,gBAAAD;AAAA,UAACE;AAAAA,UAAA;AAAA,YACC,OAAO,GAAGJ,EAAM,SAAA,EAAW,WAAW,QAAQ;AAAA,YAC9C,eAAe,CAACK,MAAUL,EAAM,YAAY,OAAOK,CAAK,CAAC;AAAA,YAEzD,UAAA;AAAA,cAAA,gBAAAF,EAACG,KAAc,cAAW,iBAAgB,WAAU,gBAClD,UAAA,gBAAAH,EAACI,KAAY,EAAA,CACf;AAAA,cACA,gBAAAJ,EAACK,GAAA,EACE,UAAAP,EAAgB,IAAI,CAACQ,MACpB,gBAAAN,EAACO,GAAA,EAA0B,OAAO,GAAGD,CAAQ,IAC1C,UAAAA,EAAA,GADcA,CAEjB,CACD,EAAA,CACH;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACF,GACF;AAAA,MACA,gBAAAP,EAAC,OAAA,EAAI,WAAU,kEAAiE,UAAA;AAAA,QAAA;AAAA,QACxEF,EAAM,SAAA,EAAW,WAAW,YAAY;AAAA,QAAE;AAAA,QAAI;AAAA,QACnDA,EAAM,aAAA;AAAA,MAAa,GACtB;AAAA,MACA,gBAAAE,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,QAAA,gBAAAC;AAAA,UAACQ;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,cAAW;AAAA,YACX,WAAU;AAAA,YACV,SAAS,MAAMX,EAAM,aAAa,CAAC;AAAA,YACnC,UAAU,CAACA,EAAM,mBAAA;AAAA,YAEjB,4BAACY,GAAA,CAAA,CAAiB;AAAA,UAAA;AAAA,QAAA;AAAA,QAEpB,gBAAAT;AAAA,UAACQ;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,cAAW;AAAA,YACX,SAAS,MAAMX,EAAM,aAAA;AAAA,YACrB,UAAU,CAACA,EAAM,mBAAA;AAAA,YAEjB,4BAACa,GAAA,CAAA,CAAgB;AAAA,UAAA;AAAA,QAAA;AAAA,QAEnB,gBAAAV;AAAA,UAACQ;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,cAAW;AAAA,YACX,SAAS,MAAMX,EAAM,SAAA;AAAA,YACrB,UAAU,CAACA,EAAM,eAAA;AAAA,YAEjB,4BAACc,GAAA,CAAA,CAAiB;AAAA,UAAA;AAAA,QAAA;AAAA,QAEpB,gBAAAX;AAAA,UAACQ;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,cAAW;AAAA,YACX,WAAU;AAAA,YACV,SAAS,MAAMX,EAAM,aAAaA,EAAM,aAAA,IAAiB,CAAC;AAAA,YAC1D,UAAU,CAACA,EAAM,eAAA;AAAA,YAEjB,4BAACe,GAAA,CAAA,CAAgB;AAAA,UAAA;AAAA,QAAA;AAAA,MACnB,EAAA,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1,46 @@
1
+ import { jsxs as l, jsx as r } from "react/jsx-runtime";
2
+ import { TimesIcon as m } from "@acronis-platform/icons-react/stroke-mono";
3
+ import { DataTableViewOptions as c } from "./data-table-view-options.js";
4
+ import { InputText as p } from "../input-text/input-text.js";
5
+ import { Button as u } from "../button/button.js";
6
+ function F({
7
+ table: e,
8
+ searchKey: t,
9
+ searchPlaceholder: n = "Filter…"
10
+ }) {
11
+ var i;
12
+ const s = e.getState().columnFilters.length > 0;
13
+ return /* @__PURE__ */ l("div", { className: "flex items-center justify-between", children: [
14
+ /* @__PURE__ */ l("div", { className: "flex flex-1 items-center gap-2", children: [
15
+ t && /* @__PURE__ */ r(
16
+ p,
17
+ {
18
+ placeholder: n,
19
+ value: ((i = e.getColumn(t)) == null ? void 0 : i.getFilterValue()) ?? "",
20
+ onChange: (a) => {
21
+ var o;
22
+ return (o = e.getColumn(t)) == null ? void 0 : o.setFilterValue(a.target.value);
23
+ },
24
+ className: "h-8 w-[150px] lg:w-[250px]"
25
+ }
26
+ ),
27
+ s && /* @__PURE__ */ l(
28
+ u,
29
+ {
30
+ variant: "ghost",
31
+ onClick: () => e.resetColumnFilters(),
32
+ className: "h-8 gap-2",
33
+ children: [
34
+ "Reset",
35
+ /* @__PURE__ */ r(m, {})
36
+ ]
37
+ }
38
+ )
39
+ ] }),
40
+ /* @__PURE__ */ r(c, { table: e })
41
+ ] });
42
+ }
43
+ export {
44
+ F as DataTableToolbar
45
+ };
46
+ //# sourceMappingURL=data-table-toolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-toolbar.js","sources":["../../../../src/components/ui/data-table/data-table-toolbar.tsx"],"sourcesContent":["import type { Table } from '@tanstack/react-table';\nimport { TimesIcon } from '@acronis-platform/icons-react/stroke-mono';\n\nimport { Button } from '../button';\nimport { InputText } from '../input-text';\nimport { DataTableViewOptions } from './data-table-view-options';\n\ninterface DataTableToolbarProps<TData> {\n table: Table<TData>;\n /** Column id to wire the search box to (client-side text filter). */\n searchKey?: string;\n searchPlaceholder?: string;\n}\n\nexport function DataTableToolbar<TData>({\n table,\n searchKey,\n searchPlaceholder = 'Filter…',\n}: DataTableToolbarProps<TData>) {\n const isFiltered = table.getState().columnFilters.length > 0;\n\n return (\n <div className=\"flex items-center justify-between\">\n <div className=\"flex flex-1 items-center gap-2\">\n {searchKey && (\n <InputText\n placeholder={searchPlaceholder}\n value={\n (table.getColumn(searchKey)?.getFilterValue() as string) ?? ''\n }\n onChange={(event) =>\n table.getColumn(searchKey)?.setFilterValue(event.target.value)\n }\n className=\"h-8 w-[150px] lg:w-[250px]\"\n />\n )}\n {isFiltered && (\n <Button\n variant=\"ghost\"\n onClick={() => table.resetColumnFilters()}\n className=\"h-8 gap-2\"\n >\n Reset\n <TimesIcon />\n </Button>\n )}\n </div>\n <DataTableViewOptions table={table} />\n </div>\n );\n}\n"],"names":["DataTableToolbar","table","searchKey","searchPlaceholder","isFiltered","jsxs","jsx","InputText","_a","event","Button","TimesIcon","DataTableViewOptions"],"mappings":";;;;;AAcO,SAASA,EAAwB;AAAA,EACtC,OAAAC;AAAA,EACA,WAAAC;AAAA,EACA,mBAAAC,IAAoB;AACtB,GAAiC;;AAC/B,QAAMC,IAAaH,EAAM,SAAA,EAAW,cAAc,SAAS;AAE3D,SACE,gBAAAI,EAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,kCACZ,UAAA;AAAA,MAAAH,KACC,gBAAAI;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,aAAaJ;AAAA,UACb,SACGK,IAAAP,EAAM,UAAUC,CAAS,MAAzB,gBAAAM,EAA4B,qBAA+B;AAAA,UAE9D,UAAU,CAACC,MAAA;;AACT,oBAAAD,IAAAP,EAAM,UAAUC,CAAS,MAAzB,gBAAAM,EAA4B,eAAeC,EAAM,OAAO;AAAA;AAAA,UAE1D,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAGbL,KACC,gBAAAC;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,SAAS,MAAMT,EAAM,mBAAA;AAAA,UACrB,WAAU;AAAA,UACX,UAAA;AAAA,YAAA;AAAA,8BAEEU,GAAA,CAAA,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACb,GAEJ;AAAA,IACA,gBAAAL,EAACM,KAAqB,OAAAX,EAAA,CAAc;AAAA,EAAA,GACtC;AAEJ;"}
@@ -0,0 +1,40 @@
1
+ import { jsxs as o, jsx as n } from "react/jsx-runtime";
2
+ import { CogIcon as t } from "@acronis-platform/icons-react/stroke-mono";
3
+ import { DropdownMenu as a, DropdownMenuTrigger as d, DropdownMenuContent as l, DropdownMenuLabel as p, DropdownMenuSeparator as s, DropdownMenuCheckboxItem as c } from "../dropdown-menu/dropdown-menu.js";
4
+ import { Button as g } from "../button/button.js";
5
+ function w({
6
+ table: r
7
+ }) {
8
+ return /* @__PURE__ */ o(a, { children: [
9
+ /* @__PURE__ */ o(
10
+ d,
11
+ {
12
+ render: /* @__PURE__ */ n(g, { variant: "secondary", className: "ml-auto hidden h-8 gap-2 lg:flex" }),
13
+ children: [
14
+ /* @__PURE__ */ n(t, {}),
15
+ "View"
16
+ ]
17
+ }
18
+ ),
19
+ /* @__PURE__ */ o(l, { align: "end", className: "w-[150px]", children: [
20
+ /* @__PURE__ */ n(p, { children: "Toggle columns" }),
21
+ /* @__PURE__ */ n(s, {}),
22
+ r.getAllColumns().filter(
23
+ (e) => typeof e.accessorFn < "u" && e.getCanHide()
24
+ ).map((e) => /* @__PURE__ */ n(
25
+ c,
26
+ {
27
+ className: "capitalize",
28
+ checked: e.getIsVisible(),
29
+ onCheckedChange: (i) => e.toggleVisibility(!!i),
30
+ children: e.id
31
+ },
32
+ e.id
33
+ ))
34
+ ] })
35
+ ] });
36
+ }
37
+ export {
38
+ w as DataTableViewOptions
39
+ };
40
+ //# sourceMappingURL=data-table-view-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-view-options.js","sources":["../../../../src/components/ui/data-table/data-table-view-options.tsx"],"sourcesContent":["import type { Table } from '@tanstack/react-table';\nimport { CogIcon } from '@acronis-platform/icons-react/stroke-mono';\n\nimport { Button } from '../button';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../dropdown-menu';\n\ninterface DataTableViewOptionsProps<TData> {\n table: Table<TData>;\n}\n\nexport function DataTableViewOptions<TData>({\n table,\n}: DataTableViewOptionsProps<TData>) {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger\n render={\n <Button variant=\"secondary\" className=\"ml-auto hidden h-8 gap-2 lg:flex\" />\n }\n >\n <CogIcon />\n View\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-[150px]\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter(\n (column) =>\n typeof column.accessorFn !== 'undefined' && column.getCanHide()\n )\n .map((column) => (\n <DropdownMenuCheckboxItem\n key={column.id}\n className=\"capitalize\"\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n >\n {column.id}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"],"names":["DataTableViewOptions","table","DropdownMenu","jsxs","DropdownMenuTrigger","jsx","Button","CogIcon","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","column","DropdownMenuCheckboxItem","value"],"mappings":";;;;AAiBO,SAASA,EAA4B;AAAA,EAC1C,OAAAC;AACF,GAAqC;AACnC,2BACGC,GAAA,EACC,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,QACE,gBAAAC,EAACC,GAAA,EAAO,SAAQ,aAAY,WAAU,oCAAmC;AAAA,QAG3E,UAAA;AAAA,UAAA,gBAAAD,EAACE,GAAA,EAAQ;AAAA,UAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGb,gBAAAJ,EAACK,GAAA,EAAoB,OAAM,OAAM,WAAU,aACzC,UAAA;AAAA,MAAA,gBAAAH,EAACI,KAAkB,UAAA,iBAAA,CAAc;AAAA,wBAChCC,GAAA,EAAsB;AAAA,MACtBT,EACE,gBACA;AAAA,QACC,CAACU,MACC,OAAOA,EAAO,aAAe,OAAeA,EAAO,WAAA;AAAA,MAAW,EAEjE,IAAI,CAACA,MACJ,gBAAAN;AAAA,QAACO;AAAA,QAAA;AAAA,UAEC,WAAU;AAAA,UACV,SAASD,EAAO,aAAA;AAAA,UAChB,iBAAiB,CAACE,MAAUF,EAAO,iBAAiB,CAAC,CAACE,CAAK;AAAA,UAE1D,UAAAF,EAAO;AAAA,QAAA;AAAA,QALHA,EAAO;AAAA,MAAA,CAOf;AAAA,IAAA,EAAA,CACL;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1,89 @@
1
+ import { jsx as e, jsxs as u } from "react/jsx-runtime";
2
+ import { useState as t, Fragment as H } from "react";
3
+ import { useReactTable as P, flexRender as h } from "../../../node_modules/.pnpm/@tanstack_react-table@8.21.3_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@tanstack/react-table/build/lib/index.js";
4
+ import { cn as p } from "../../../lib/utils.js";
5
+ import { Table as j, TableHeader as A, TableRow as a, TableHead as B, TableBody as L, TableCell as d } from "../table/table.js";
6
+ import { getFilteredRowModel as $, getSortedRowModel as q, getPaginationRowModel as z, getExpandedRowModel as G, getCoreRowModel as J } from "../../../node_modules/.pnpm/@tanstack_table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.js";
7
+ function Z({
8
+ columns: b,
9
+ data: C,
10
+ getRowCanExpand: f,
11
+ renderExpandedRow: g,
12
+ striped: v = !1,
13
+ bordered: R = !1,
14
+ highlightCurrentRow: i = !1,
15
+ skeleton: x = !1,
16
+ skeletonRows: S = 5
17
+ }) {
18
+ const [M, w] = t([]), [y, N] = t([]), [T, F] = t({}), [V, _] = t({}), [k, E] = t({}), [I, D] = t(), s = P({
19
+ data: C,
20
+ columns: b,
21
+ getCoreRowModel: J(),
22
+ getExpandedRowModel: G(),
23
+ getPaginationRowModel: z(),
24
+ getRowCanExpand: f,
25
+ onExpandedChange: E,
26
+ onSortingChange: w,
27
+ getSortedRowModel: q(),
28
+ onColumnFiltersChange: N,
29
+ getFilteredRowModel: $(),
30
+ onColumnVisibilityChange: F,
31
+ onRowSelectionChange: _,
32
+ state: { sorting: M, columnFilters: y, columnVisibility: T, rowSelection: V, expanded: k }
33
+ }), n = s.getRowModel().rows;
34
+ return /* @__PURE__ */ e(
35
+ "div",
36
+ {
37
+ className: p(
38
+ "rounded-md border border-[var(--ui-table-global-cell-border-color)]",
39
+ R ? "[&_th:not(:last-child)]:border-r [&_td:not(:last-child)]:border-r [&_th]:border-[var(--ui-table-global-cell-border-color)] [&_td]:border-[var(--ui-table-global-cell-border-color)]" : void 0
40
+ ),
41
+ children: /* @__PURE__ */ u(j, { children: [
42
+ /* @__PURE__ */ e(A, { children: s.getHeaderGroups().map((l) => /* @__PURE__ */ e(a, { children: l.headers.map((o) => /* @__PURE__ */ e(B, { children: o.isPlaceholder ? null : h(
43
+ o.column.columnDef.header,
44
+ o.getContext()
45
+ ) }, o.id)) }, l.id)) }),
46
+ /* @__PURE__ */ e(L, { children: x ? Array.from({ length: S }).map((l, o) => /* @__PURE__ */ e(a, { className: "hover:bg-transparent", children: s.getVisibleLeafColumns().map((r) => /* @__PURE__ */ e(d, { children: /* @__PURE__ */ e("div", { className: "h-4 w-full animate-pulse rounded bg-[var(--ui-background-surface-secondary)]" }) }, r.id)) }, `skeleton-${o}`)) : n != null && n.length ? n.map((l, o) => {
47
+ const r = l.getIsSelected(), m = i && I === l.id;
48
+ return /* @__PURE__ */ u(H, { children: [
49
+ /* @__PURE__ */ e(
50
+ a,
51
+ {
52
+ selected: r,
53
+ onClick: i ? () => D(l.id) : void 0,
54
+ className: p(
55
+ i && "cursor-pointer",
56
+ v && o % 2 === 1 && !r && !m && "bg-[var(--ui-background-surface-secondary)]",
57
+ m && !r && "bg-[var(--ui-table-global-row-color-active)]"
58
+ ),
59
+ children: l.getVisibleCells().map((c) => /* @__PURE__ */ e(d, { children: h(
60
+ c.column.columnDef.cell,
61
+ c.getContext()
62
+ ) }, c.id))
63
+ }
64
+ ),
65
+ g && l.getIsExpanded() && /* @__PURE__ */ e(a, { className: "hover:bg-transparent", children: /* @__PURE__ */ e(
66
+ d,
67
+ {
68
+ className: "h-auto py-3",
69
+ colSpan: l.getVisibleCells().length,
70
+ children: g(l)
71
+ }
72
+ ) })
73
+ ] }, l.id);
74
+ }) : /* @__PURE__ */ e(a, { children: /* @__PURE__ */ e(
75
+ d,
76
+ {
77
+ colSpan: b.length,
78
+ className: "h-24 text-center text-[var(--ui-table-data-value-color-disabled)]",
79
+ children: "No results."
80
+ }
81
+ ) }) })
82
+ ] })
83
+ }
84
+ );
85
+ }
86
+ export {
87
+ Z as DataTable
88
+ };
89
+ //# sourceMappingURL=data-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.js","sources":["../../../../src/components/ui/data-table/data-table.tsx"],"sourcesContent":["import { Fragment, type ReactNode, useState } from 'react';\nimport {\n type ColumnDef,\n type ColumnFiltersState,\n type ExpandedState,\n type Row,\n type SortingState,\n type VisibilityState,\n flexRender,\n getCoreRowModel,\n getExpandedRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table';\n\nimport { cn } from '@/lib/utils';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '../table';\n\n// Ported from `@acronis-platform/shadcn-uikit`'s `data-table`\n// (packages/ui-legacy/src/components/ui/data-table/). A TanStack-react-table v8\n// data grid composed over the ui-react Table primitives — sorting, filtering,\n// column visibility, row selection, pagination, and optional row expansion. The\n// presentational flags (`striped`, `bordered`, `skeleton`, `highlightCurrentRow`)\n// are borrowed from the Vue `AvTable`; behavioral features come from TanStack.\n// Pair with DataTableToolbar / DataTablePagination / DataTableColumnHeader, which\n// take the `table` instance returned to column cells via TanStack context.\n// The grid cells/rows/headers are themed by the Table primitives' `--ui-table-*`\n// tier; DataTable's own chrome reuses that tier too — the wrapper border matches\n// the cell borders (`--ui-table-global-cell-border-color`), the empty-state uses\n// the muted table-value color, the current row the active-row color, and stripes\n// the secondary surface.\n\nexport interface DataTableProps<TData, TValue> {\n columns: ColumnDef<TData, TValue>[];\n data: TData[];\n /** Enables row expansion for rows that return true. Pair with `renderExpandedRow`. */\n getRowCanExpand?: (row: Row<TData>) => boolean;\n /**\n * Renders expanded content for an expanded row. Used together with\n * `getRowCanExpand`.\n */\n renderExpandedRow?: (row: Row<TData>) => ReactNode;\n /** Alternating row backgrounds. */\n striped?: boolean;\n /** Vertical borders between columns (rows already have horizontal borders). */\n bordered?: boolean;\n /** Highlight the row the user last clicked (the \"current\" row). */\n highlightCurrentRow?: boolean;\n /** Render placeholder skeleton rows instead of data (loading state). */\n skeleton?: boolean;\n /** Number of skeleton rows to render when `skeleton` is set. */\n skeletonRows?: number;\n}\n\nexport function DataTable<TData, TValue>({\n columns,\n data,\n getRowCanExpand,\n renderExpandedRow,\n striped = false,\n bordered = false,\n highlightCurrentRow = false,\n skeleton = false,\n skeletonRows = 5,\n}: DataTableProps<TData, TValue>) {\n const [sorting, setSorting] = useState<SortingState>([]);\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>({});\n const [rowSelection, setRowSelection] = useState({});\n const [expanded, setExpanded] = useState<ExpandedState>({});\n const [currentRowId, setCurrentRowId] = useState<string>();\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getRowCanExpand,\n onExpandedChange: setExpanded,\n onSortingChange: setSorting,\n getSortedRowModel: getSortedRowModel(),\n onColumnFiltersChange: setColumnFilters,\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n state: { sorting, columnFilters, columnVisibility, rowSelection, expanded },\n });\n\n const rows = table.getRowModel().rows;\n // Vertical borders are opt-in; a trailing border on the last cell would\n // double up with the wrapper, so suppress it.\n const borderedClass = bordered\n ? '[&_th:not(:last-child)]:border-r [&_td:not(:last-child)]:border-r [&_th]:border-[var(--ui-table-global-cell-border-color)] [&_td]:border-[var(--ui-table-global-cell-border-color)]'\n : undefined;\n\n return (\n <div\n className={cn(\n 'rounded-md border border-[var(--ui-table-global-cell-border-color)]',\n borderedClass\n )}\n >\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id}>\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {skeleton ? (\n Array.from({ length: skeletonRows }).map((_, rowIndex) => (\n <TableRow key={`skeleton-${rowIndex}`} className=\"hover:bg-transparent\">\n {table.getVisibleLeafColumns().map((column) => (\n <TableCell key={column.id}>\n <div className=\"h-4 w-full animate-pulse rounded bg-[var(--ui-background-surface-secondary)]\" />\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : rows?.length ? (\n rows.map((row, rowIndex) => {\n const isSelected = row.getIsSelected();\n const isCurrent = highlightCurrentRow && currentRowId === row.id;\n return (\n <Fragment key={row.id}>\n <TableRow\n selected={isSelected}\n onClick={\n highlightCurrentRow\n ? () => setCurrentRowId(row.id)\n : undefined\n }\n className={cn(\n highlightCurrentRow && 'cursor-pointer',\n striped &&\n rowIndex % 2 === 1 &&\n !isSelected &&\n !isCurrent &&\n 'bg-[var(--ui-background-surface-secondary)]',\n isCurrent &&\n !isSelected &&\n 'bg-[var(--ui-table-global-row-color-active)]'\n )}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n ))}\n </TableRow>\n {renderExpandedRow && row.getIsExpanded() && (\n <TableRow className=\"hover:bg-transparent\">\n <TableCell\n className=\"h-auto py-3\"\n colSpan={row.getVisibleCells().length}\n >\n {renderExpandedRow(row)}\n </TableCell>\n </TableRow>\n )}\n </Fragment>\n );\n })\n ) : (\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"h-24 text-center text-[var(--ui-table-data-value-color-disabled)]\"\n >\n No results.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n );\n}\n"],"names":["DataTable","columns","data","getRowCanExpand","renderExpandedRow","striped","bordered","highlightCurrentRow","skeleton","skeletonRows","sorting","setSorting","useState","columnFilters","setColumnFilters","columnVisibility","setColumnVisibility","rowSelection","setRowSelection","expanded","setExpanded","currentRowId","setCurrentRowId","table","useReactTable","getCoreRowModel","getExpandedRowModel","getPaginationRowModel","getSortedRowModel","getFilteredRowModel","rows","jsx","cn","Table","TableHeader","headerGroup","TableRow","header","TableHead","flexRender","TableBody","_","rowIndex","column","TableCell","row","isSelected","isCurrent","Fragment","cell"],"mappings":"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"}
@@ -0,0 +1,159 @@
1
+ import { jsxs as l, jsx as t } from "react/jsx-runtime";
2
+ import * as s from "react";
3
+ import { Menu as n } from "@base-ui/react/menu";
4
+ import { CheckIcon as b, ChevronRightIcon as h } from "@acronis-platform/icons-react/stroke-mono";
5
+ import { cn as d } from "../../../lib/utils.js";
6
+ const T = n.Root, j = n.Trigger, G = n.Group, _ = n.Portal, L = n.SubmenuRoot, q = n.RadioGroup, p = "z-50 min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border border-border bg-background py-1 text-foreground shadow-md outline-none duration-200 data-[open]:animate-in data-[closed]:animate-out data-[open]:fade-in-0 data-[closed]:fade-out-0 data-[open]:zoom-in-95 data-[closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2", m = "relative flex cursor-default select-none items-center gap-2 px-4 py-2 text-sm leading-6 outline-none transition-colors data-[highlighted]:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", N = s.forwardRef(
7
+ ({
8
+ className: e,
9
+ side: o,
10
+ align: a,
11
+ sideOffset: r = 4,
12
+ portal: i = !0,
13
+ portalContainer: u,
14
+ keepMounted: f,
15
+ ...g
16
+ }, w) => {
17
+ const c = /* @__PURE__ */ t(
18
+ n.Positioner,
19
+ {
20
+ side: o,
21
+ align: a,
22
+ sideOffset: r,
23
+ className: "z-50",
24
+ children: /* @__PURE__ */ t(
25
+ n.Popup,
26
+ {
27
+ ref: w,
28
+ className: d(p, e),
29
+ ...g
30
+ }
31
+ )
32
+ }
33
+ );
34
+ return i ? /* @__PURE__ */ t(n.Portal, { container: u, keepMounted: f, children: c }) : c;
35
+ }
36
+ );
37
+ N.displayName = "DropdownMenuContent";
38
+ const M = s.forwardRef(({ className: e, sideOffset: o = 4, ...a }, r) => /* @__PURE__ */ t(n.Positioner, { sideOffset: o, className: "z-50", children: /* @__PURE__ */ t(
39
+ n.Popup,
40
+ {
41
+ ref: r,
42
+ className: d(p, e),
43
+ ...a
44
+ }
45
+ ) }));
46
+ M.displayName = "DropdownMenuSubContent";
47
+ const x = s.forwardRef(({ className: e, inset: o, ...a }, r) => /* @__PURE__ */ t(
48
+ n.Item,
49
+ {
50
+ ref: r,
51
+ className: d(m, o && "pl-8", e),
52
+ ...a
53
+ }
54
+ ));
55
+ x.displayName = "DropdownMenuItem";
56
+ const D = s.forwardRef(({ className: e, inset: o, children: a, ...r }, i) => /* @__PURE__ */ l(
57
+ n.SubmenuTrigger,
58
+ {
59
+ ref: i,
60
+ className: d(
61
+ m,
62
+ "data-[popup-open]:bg-accent",
63
+ o && "pl-8",
64
+ e
65
+ ),
66
+ ...r,
67
+ children: [
68
+ a,
69
+ /* @__PURE__ */ t(h, { className: "ml-auto" })
70
+ ]
71
+ }
72
+ ));
73
+ D.displayName = "DropdownMenuSubTrigger";
74
+ const y = s.forwardRef(({ className: e, children: o, ...a }, r) => /* @__PURE__ */ l(
75
+ n.CheckboxItem,
76
+ {
77
+ ref: r,
78
+ className: d(
79
+ "relative flex cursor-default select-none items-center py-2 pl-8 pr-4 text-sm leading-6 outline-none transition-colors data-[highlighted]:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
80
+ e
81
+ ),
82
+ ...a,
83
+ children: [
84
+ /* @__PURE__ */ t("span", { className: "absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ t(n.CheckboxItemIndicator, { children: /* @__PURE__ */ t(b, { className: "size-4" }) }) }),
85
+ o
86
+ ]
87
+ }
88
+ ));
89
+ y.displayName = "DropdownMenuCheckboxItem";
90
+ const R = s.forwardRef(({ className: e, children: o, ...a }, r) => /* @__PURE__ */ l(
91
+ n.RadioItem,
92
+ {
93
+ ref: r,
94
+ className: d(
95
+ "relative flex cursor-default select-none items-center py-2 pl-8 pr-4 text-sm leading-6 outline-none transition-colors data-[highlighted]:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
96
+ e
97
+ ),
98
+ ...a,
99
+ children: [
100
+ /* @__PURE__ */ t("span", { className: "absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ t(n.RadioItemIndicator, { children: /* @__PURE__ */ t("span", { className: "size-2 rounded-full bg-current" }) }) }),
101
+ o
102
+ ]
103
+ }
104
+ ));
105
+ R.displayName = "DropdownMenuRadioItem";
106
+ const v = s.forwardRef(({ className: e, inset: o, ...a }, r) => /* @__PURE__ */ t(
107
+ "div",
108
+ {
109
+ ref: r,
110
+ className: d(
111
+ "px-4 py-2 text-sm font-semibold leading-6",
112
+ o && "pl-8",
113
+ e
114
+ ),
115
+ ...a
116
+ }
117
+ ));
118
+ v.displayName = "DropdownMenuLabel";
119
+ const I = s.forwardRef(({ className: e, ...o }, a) => /* @__PURE__ */ t(
120
+ "div",
121
+ {
122
+ ref: a,
123
+ role: "separator",
124
+ className: d("my-1 h-px bg-border", e),
125
+ ...o
126
+ }
127
+ ));
128
+ I.displayName = "DropdownMenuSeparator";
129
+ function C({
130
+ className: e,
131
+ ...o
132
+ }) {
133
+ return /* @__PURE__ */ t(
134
+ "span",
135
+ {
136
+ className: d("ml-auto text-xs tracking-widest text-muted-foreground", e),
137
+ ...o
138
+ }
139
+ );
140
+ }
141
+ C.displayName = "DropdownMenuShortcut";
142
+ export {
143
+ T as DropdownMenu,
144
+ y as DropdownMenuCheckboxItem,
145
+ N as DropdownMenuContent,
146
+ G as DropdownMenuGroup,
147
+ x as DropdownMenuItem,
148
+ v as DropdownMenuLabel,
149
+ _ as DropdownMenuPortal,
150
+ q as DropdownMenuRadioGroup,
151
+ R as DropdownMenuRadioItem,
152
+ I as DropdownMenuSeparator,
153
+ C as DropdownMenuShortcut,
154
+ L as DropdownMenuSub,
155
+ M as DropdownMenuSubContent,
156
+ D as DropdownMenuSubTrigger,
157
+ j as DropdownMenuTrigger
158
+ };
159
+ //# sourceMappingURL=dropdown-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-menu.js","sources":["../../../../src/components/ui/dropdown-menu/dropdown-menu.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Menu as MenuPrimitive } from '@base-ui/react/menu';\nimport { CheckIcon, ChevronRightIcon } from '@acronis-platform/icons-react/stroke-mono';\n\nimport { cn } from '@/lib/utils';\n\n// Ported from `@acronis-platform/shadcn-uikit`'s `dropdown-menu`\n// (packages/ui-legacy/src/components/ui/dropdown-menu.tsx). A menu of actions\n// anchored to a trigger, built on the Base UI Menu primitive (positioning, focus\n// management, typeahead, outside-press / Esc dismissal, ARIA). No `--ui-menu-*`\n// token tier exists yet, so this design-pending v1 themes from the shared\n// semantic tokens:\n// • popup surface -> bg-background / text-foreground / border-border, shadow-md\n// (legacy `bg-popover` / `text-popover-foreground` have no ui-react bridge)\n// • item highlight -> bg-accent on data-[highlighted] (Base UI sets it on both\n// pointer hover and keyboard nav; replaces legacy hover:bg-primary/10)\n// • separator -> bg-border · shortcut -> text-muted-foreground (no opacity hack)\n// Enter/exit animations use `tw-animate-css` keyed to data-[open]/[closed]/[side].\n// Reconcile with `/figma-component DropdownMenu <url> --update` once a mockup lands.\n\nconst DropdownMenu = MenuPrimitive.Root;\nconst DropdownMenuTrigger = MenuPrimitive.Trigger;\nconst DropdownMenuGroup = MenuPrimitive.Group;\nconst DropdownMenuPortal = MenuPrimitive.Portal;\nconst DropdownMenuSub = MenuPrimitive.SubmenuRoot;\nconst DropdownMenuRadioGroup = MenuPrimitive.RadioGroup;\n\nconst popupClassName =\n 'z-50 min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border border-border bg-background py-1 text-foreground shadow-md outline-none duration-200 data-[open]:animate-in data-[closed]:animate-out data-[open]:fade-in-0 data-[closed]:fade-out-0 data-[open]:zoom-in-95 data-[closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2';\n\nconst itemClassName =\n 'relative flex cursor-default select-none items-center gap-2 px-4 py-2 text-sm leading-6 outline-none transition-colors data-[highlighted]:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0';\n\nexport interface DropdownMenuContentProps\n extends React.ComponentPropsWithoutRef<typeof MenuPrimitive.Popup> {\n side?: MenuPrimitive.Positioner.Props['side'];\n align?: MenuPrimitive.Positioner.Props['align'];\n sideOffset?: number;\n /** Render inside a portal (default `true`). */\n portal?: boolean;\n /** Portal container — pass a shadow-root mount for isolated-style previews. */\n portalContainer?: MenuPrimitive.Portal.Props['container'];\n keepMounted?: MenuPrimitive.Portal.Props['keepMounted'];\n}\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.Popup>,\n DropdownMenuContentProps\n>(\n (\n {\n className,\n side,\n align,\n sideOffset = 4,\n portal = true,\n portalContainer,\n keepMounted,\n ...props\n },\n ref\n ) => {\n const positioner = (\n <MenuPrimitive.Positioner\n side={side}\n align={align}\n sideOffset={sideOffset}\n className=\"z-50\"\n >\n <MenuPrimitive.Popup\n ref={ref}\n className={cn(popupClassName, className)}\n {...props}\n />\n </MenuPrimitive.Positioner>\n );\n return portal ? (\n <MenuPrimitive.Portal container={portalContainer} keepMounted={keepMounted}>\n {positioner}\n </MenuPrimitive.Portal>\n ) : (\n positioner\n );\n }\n);\nDropdownMenuContent.displayName = 'DropdownMenuContent';\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.Popup>,\n React.ComponentPropsWithoutRef<typeof MenuPrimitive.Popup> & {\n sideOffset?: number;\n }\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <MenuPrimitive.Positioner sideOffset={sideOffset} className=\"z-50\">\n <MenuPrimitive.Popup\n ref={ref}\n className={cn(popupClassName, className)}\n {...props}\n />\n </MenuPrimitive.Positioner>\n));\nDropdownMenuSubContent.displayName = 'DropdownMenuSubContent';\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof MenuPrimitive.Item> & { inset?: boolean }\n>(({ className, inset, ...props }, ref) => (\n <MenuPrimitive.Item\n ref={ref}\n className={cn(itemClassName, inset && 'pl-8', className)}\n {...props}\n />\n));\nDropdownMenuItem.displayName = 'DropdownMenuItem';\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.SubmenuTrigger>,\n React.ComponentPropsWithoutRef<typeof MenuPrimitive.SubmenuTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <MenuPrimitive.SubmenuTrigger\n ref={ref}\n className={cn(\n itemClassName,\n 'data-[popup-open]:bg-accent',\n inset && 'pl-8',\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto\" />\n </MenuPrimitive.SubmenuTrigger>\n));\nDropdownMenuSubTrigger.displayName = 'DropdownMenuSubTrigger';\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof MenuPrimitive.CheckboxItem>\n>(({ className, children, ...props }, ref) => (\n <MenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center py-2 pl-8 pr-4 text-sm leading-6 outline-none transition-colors data-[highlighted]:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <MenuPrimitive.CheckboxItemIndicator>\n <CheckIcon className=\"size-4\" />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </MenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = 'DropdownMenuCheckboxItem';\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof MenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <MenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center py-2 pl-8 pr-4 text-sm leading-6 outline-none transition-colors data-[highlighted]:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <MenuPrimitive.RadioItemIndicator>\n <span className=\"size-2 rounded-full bg-current\" />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </MenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = 'DropdownMenuRadioItem';\n\nconst DropdownMenuLabel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & { inset?: boolean }\n>(({ className, inset, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'px-4 py-2 text-sm font-semibold leading-6',\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = 'DropdownMenuLabel';\n\nconst DropdownMenuSeparator = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"separator\"\n className={cn('my-1 h-px bg-border', className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = 'DropdownMenuSeparator';\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) {\n return (\n <span\n className={cn('ml-auto text-xs tracking-widest text-muted-foreground', className)}\n {...props}\n />\n );\n}\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut';\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n};\n"],"names":["DropdownMenu","MenuPrimitive","DropdownMenuTrigger","DropdownMenuGroup","DropdownMenuPortal","DropdownMenuSub","DropdownMenuRadioGroup","popupClassName","itemClassName","DropdownMenuContent","React","className","side","align","sideOffset","portal","portalContainer","keepMounted","props","ref","positioner","jsx","cn","DropdownMenuSubContent","DropdownMenuItem","inset","DropdownMenuSubTrigger","children","jsxs","ChevronRightIcon","DropdownMenuCheckboxItem","CheckIcon","DropdownMenuRadioItem","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuShortcut"],"mappings":"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"}