art-bd-ui 1.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.
- package/README.md +1 -0
- package/dist/cjs/components/buttons/button/button.js +43 -0
- package/dist/cjs/components/buttons/icon-button/icon-button.js +33 -0
- package/dist/cjs/components/buttons/toggle/toggle.js +34 -0
- package/dist/cjs/components/buttons/toggle-group/toggle-group.js +31 -0
- package/dist/cjs/components/forms/checkbox/checkbox.js +52 -0
- package/dist/cjs/components/forms/input/input.js +38 -0
- package/dist/cjs/components/forms/label/label.js +38 -0
- package/dist/cjs/components/forms/radio/radio.js +22 -0
- package/dist/cjs/components/forms/select/select.js +72 -0
- package/dist/cjs/components/forms/switch/switch.js +51 -0
- package/dist/cjs/components/forms/textarea/textarea.js +37 -0
- package/dist/cjs/components/layout/box/box.js +19 -0
- package/dist/cjs/components/layout/flex/flex.js +14 -0
- package/dist/cjs/components/layout/grid/grid.js +14 -0
- package/dist/cjs/components/media/aspect-ratio/aspect-ratio.js +31 -0
- package/dist/cjs/components/media/avatar/avatar.js +27 -0
- package/dist/cjs/components/media/icon/icon.js +27 -0
- package/dist/cjs/components/popovers/dialog/dialog.js +69 -0
- package/dist/cjs/components/popovers/drawer/drawer.js +82 -0
- package/dist/cjs/components/popovers/popover/popover.js +66 -0
- package/dist/cjs/components/popovers/sheet/sheet.js +94 -0
- package/dist/cjs/components/popovers/toast/toast.js +75 -0
- package/dist/cjs/components/popovers/tooltip/tooltip.js +45 -0
- package/dist/cjs/components/typography/heading/heading.js +55 -0
- package/dist/cjs/components/typography/text/text.js +57 -0
- package/dist/cjs/components/ui/alert/alert.js +34 -0
- package/dist/cjs/components/ui/badge/badge.js +31 -0
- package/dist/cjs/components/ui/button/button.js +42 -0
- package/dist/cjs/components/ui/calendar/calendar.js +24 -0
- package/dist/cjs/components/ui/command/command.js +83 -0
- package/dist/cjs/components/ui/data-table/components/cell.js +24 -0
- package/dist/cjs/components/ui/data-table/components/column-group.js +45 -0
- package/dist/cjs/components/ui/data-table/components/table-body.js +47 -0
- package/dist/cjs/components/ui/data-table/components/table-fallback.js +28 -0
- package/dist/cjs/components/ui/data-table/components/table-head.js +56 -0
- package/dist/cjs/components/ui/data-table/components/table-placeholder.js +18 -0
- package/dist/cjs/components/ui/data-table/data-table.js +97 -0
- package/dist/cjs/components/ui/data-table/hooks/contextHooks.js +75 -0
- package/dist/cjs/components/ui/data-table/hooks/useStickyColumns.js +98 -0
- package/dist/cjs/components/ui/data-table/utils.js +26 -0
- package/dist/cjs/components/ui/date-picker/date-picker.js +15 -0
- package/dist/cjs/components/ui/dropdown-menu/dropdown-menu.js +100 -0
- package/dist/cjs/components/ui/icon/icon.js +27 -0
- package/dist/cjs/components/ui/link/link.js +32 -0
- package/dist/cjs/components/ui/pagination/pagination.js +51 -0
- package/dist/cjs/components/ui/progress/progress.js +13 -0
- package/dist/cjs/components/ui/sidebar/sidebar.js +331 -0
- package/dist/cjs/components/ui/table/components/cell.js +30 -0
- package/dist/cjs/components/ui/table/components/row.js +25 -0
- package/dist/cjs/components/ui/table/components/table-body.js +13 -0
- package/dist/cjs/components/ui/table/components/table-caption.js +13 -0
- package/dist/cjs/components/ui/table/components/table-footer.js +13 -0
- package/dist/cjs/components/ui/table/components/table-head.js +30 -0
- package/dist/cjs/components/ui/table/components/table-header.js +13 -0
- package/dist/cjs/components/ui/table/table.js +36 -0
- package/dist/cjs/components/ui/tabs/tabs.js +47 -0
- package/dist/cjs/components/utility/empty-state/empty-state.js +29 -0
- package/dist/cjs/components/utility/separator/separator.js +14 -0
- package/dist/cjs/components/utility/skeleton/skeleton.js +13 -0
- package/dist/cjs/components/utility/status-controller/status-controller.js +12 -0
- package/dist/cjs/hooks/use-mobile.js +21 -0
- package/dist/cjs/hooks/useControlled.js +19 -0
- package/dist/cjs/hooks/useFirstMountState.js +16 -0
- package/dist/cjs/hooks/useForkRef.js +23 -0
- package/dist/cjs/hooks/useLatest.js +12 -0
- package/dist/cjs/hooks/usePrevious.js +14 -0
- package/dist/cjs/hooks/useScrollState.js +39 -0
- package/dist/cjs/hooks/useStateRef.js +12 -0
- package/dist/cjs/hooks/useUpdateEffect.js +17 -0
- package/dist/cjs/index.js +237 -0
- package/dist/cjs/lib/utils.js +16 -0
- package/dist/cjs/styles/responsive.js +84 -0
- package/dist/cjs/styles/typography.js +25 -0
- package/dist/cjs/utils/addIf.js +5 -0
- package/dist/cjs/utils/chain.js +30 -0
- package/dist/cjs/utils/getBoundingRect.js +19 -0
- package/dist/cjs/utils/mergeProps.js +42 -0
- package/dist/cjs/utils/mergeRefs.js +18 -0
- package/dist/cjs/utils/toggle.js +16 -0
- package/dist/esm/components/buttons/button/button.js +40 -0
- package/dist/esm/components/buttons/icon-button/icon-button.js +31 -0
- package/dist/esm/components/buttons/toggle/toggle.js +31 -0
- package/dist/esm/components/buttons/toggle-group/toggle-group.js +28 -0
- package/dist/esm/components/forms/checkbox/checkbox.js +50 -0
- package/dist/esm/components/forms/input/input.js +36 -0
- package/dist/esm/components/forms/label/label.js +36 -0
- package/dist/esm/components/forms/radio/radio.js +19 -0
- package/dist/esm/components/forms/select/select.js +61 -0
- package/dist/esm/components/forms/switch/switch.js +49 -0
- package/dist/esm/components/forms/textarea/textarea.js +35 -0
- package/dist/esm/components/layout/box/box.js +17 -0
- package/dist/esm/components/layout/flex/flex.js +12 -0
- package/dist/esm/components/layout/grid/grid.js +12 -0
- package/dist/esm/components/media/aspect-ratio/aspect-ratio.js +10 -0
- package/dist/esm/components/media/avatar/avatar.js +23 -0
- package/dist/esm/components/media/icon/icon.js +25 -0
- package/dist/esm/components/popovers/dialog/dialog.js +60 -0
- package/dist/esm/components/popovers/drawer/drawer.js +74 -0
- package/dist/esm/components/popovers/popover/popover.js +61 -0
- package/dist/esm/components/popovers/sheet/sheet.js +86 -0
- package/dist/esm/components/popovers/toast/toast.js +67 -0
- package/dist/esm/components/popovers/tooltip/tooltip.js +40 -0
- package/dist/esm/components/typography/heading/heading.js +53 -0
- package/dist/esm/components/typography/text/text.js +55 -0
- package/dist/esm/components/ui/alert/alert.js +30 -0
- package/dist/esm/components/ui/badge/badge.js +28 -0
- package/dist/esm/components/ui/button/button.js +40 -0
- package/dist/esm/components/ui/calendar/calendar.js +22 -0
- package/dist/esm/components/ui/command/command.js +73 -0
- package/dist/esm/components/ui/data-table/components/cell.js +22 -0
- package/dist/esm/components/ui/data-table/components/column-group.js +43 -0
- package/dist/esm/components/ui/data-table/components/table-body.js +45 -0
- package/dist/esm/components/ui/data-table/components/table-fallback.js +26 -0
- package/dist/esm/components/ui/data-table/components/table-head.js +54 -0
- package/dist/esm/components/ui/data-table/components/table-placeholder.js +16 -0
- package/dist/esm/components/ui/data-table/data-table.js +95 -0
- package/dist/esm/components/ui/data-table/hooks/contextHooks.js +60 -0
- package/dist/esm/components/ui/data-table/hooks/useStickyColumns.js +96 -0
- package/dist/esm/components/ui/data-table/utils.js +22 -0
- package/dist/esm/components/ui/date-picker/date-picker.js +13 -0
- package/dist/esm/components/ui/dropdown-menu/dropdown-menu.js +84 -0
- package/dist/esm/components/ui/icon/icon.js +25 -0
- package/dist/esm/components/ui/link/link.js +30 -0
- package/dist/esm/components/ui/pagination/pagination.js +43 -0
- package/dist/esm/components/ui/progress/progress.js +11 -0
- package/dist/esm/components/ui/sidebar/sidebar.js +306 -0
- package/dist/esm/components/ui/table/components/cell.js +28 -0
- package/dist/esm/components/ui/table/components/row.js +23 -0
- package/dist/esm/components/ui/table/components/table-body.js +11 -0
- package/dist/esm/components/ui/table/components/table-caption.js +11 -0
- package/dist/esm/components/ui/table/components/table-footer.js +11 -0
- package/dist/esm/components/ui/table/components/table-head.js +28 -0
- package/dist/esm/components/ui/table/components/table-header.js +11 -0
- package/dist/esm/components/ui/table/table.js +26 -0
- package/dist/esm/components/ui/tabs/tabs.js +23 -0
- package/dist/esm/components/utility/empty-state/empty-state.js +27 -0
- package/dist/esm/components/utility/separator/separator.js +12 -0
- package/dist/esm/components/utility/skeleton/skeleton.js +11 -0
- package/dist/esm/components/utility/status-controller/status-controller.js +10 -0
- package/dist/esm/hooks/use-mobile.js +19 -0
- package/dist/esm/hooks/useControlled.js +17 -0
- package/dist/esm/hooks/useFirstMountState.js +14 -0
- package/dist/esm/hooks/useForkRef.js +21 -0
- package/dist/esm/hooks/useLatest.js +10 -0
- package/dist/esm/hooks/usePrevious.js +12 -0
- package/dist/esm/hooks/useScrollState.js +37 -0
- package/dist/esm/hooks/useStateRef.js +10 -0
- package/dist/esm/hooks/useUpdateEffect.js +15 -0
- package/dist/esm/index.js +63 -0
- package/dist/esm/lib/utils.js +13 -0
- package/dist/esm/styles/responsive.js +81 -0
- package/dist/esm/styles/typography.js +21 -0
- package/dist/esm/utils/addIf.js +3 -0
- package/dist/esm/utils/chain.js +28 -0
- package/dist/esm/utils/getBoundingRect.js +16 -0
- package/dist/esm/utils/mergeProps.js +40 -0
- package/dist/esm/utils/mergeRefs.js +15 -0
- package/dist/esm/utils/toggle.js +14 -0
- package/dist/styles.css +1 -0
- package/dist/types/index.d.ts +1418 -0
- package/package.json +114 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var tslib = require('tslib');
|
|
4
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
var reactSlot = require('@radix-ui/react-slot');
|
|
7
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
8
|
+
var utils = require('../../../lib/utils.js');
|
|
9
|
+
var icon = require('../icon/icon.js');
|
|
10
|
+
|
|
11
|
+
const buttonVariants = classVarianceAuthority.cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", {
|
|
12
|
+
variants: {
|
|
13
|
+
variant: {
|
|
14
|
+
default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
|
|
15
|
+
destructive: "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
|
|
16
|
+
outline: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
|
|
17
|
+
secondary: "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
|
|
18
|
+
ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
|
|
19
|
+
link: "text-primary underline-offset-4 hover:underline",
|
|
20
|
+
},
|
|
21
|
+
size: {
|
|
22
|
+
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
|
23
|
+
sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
|
|
24
|
+
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
|
|
25
|
+
icon: "size-9",
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
defaultVariants: {
|
|
29
|
+
variant: "default",
|
|
30
|
+
size: "default",
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
const Button = react.forwardRef((_a, ref) => {
|
|
34
|
+
var { className, variant, size, asChild = false, loading, children, leftIcon, rightIcon } = _a, props = tslib.__rest(_a, ["className", "variant", "size", "asChild", "loading", "children", "leftIcon", "rightIcon"]);
|
|
35
|
+
const Comp = asChild ? reactSlot.Slot : "button";
|
|
36
|
+
const leftElement = loading ? (jsxRuntime.jsx(icon.Icon, { name: "loader-2", className: "animate-spin" })) : (leftIcon && jsxRuntime.jsx(icon.Icon, { name: leftIcon }));
|
|
37
|
+
const rightElement = rightIcon && jsxRuntime.jsx(icon.Icon, { name: rightIcon });
|
|
38
|
+
return (jsxRuntime.jsxs(Comp, Object.assign({ ref: ref, "data-slot": "button", className: utils.cn(buttonVariants({ variant, size }), className) }, props, { children: [leftElement, jsxRuntime.jsx(reactSlot.Slottable, { children: children }), rightElement] })));
|
|
39
|
+
});
|
|
40
|
+
Button.displayName = "Button";
|
|
41
|
+
|
|
42
|
+
exports.Button = Button;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var tslib = require('tslib');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var reactDayPicker = require('react-day-picker');
|
|
7
|
+
var utils = require('../../../lib/utils.js');
|
|
8
|
+
var icon = require('../../media/icon/icon.js');
|
|
9
|
+
var button = require('../../buttons/button/button.js');
|
|
10
|
+
|
|
11
|
+
function Calendar(_a) {
|
|
12
|
+
var { className, classNames, showOutsideDays = true } = _a, props = tslib.__rest(_a, ["className", "classNames", "showOutsideDays"]);
|
|
13
|
+
return (jsxRuntime.jsx(reactDayPicker.DayPicker, Object.assign({ showOutsideDays: showOutsideDays, className: utils.cn("p-3", className), classNames: Object.assign({ months: "flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0", month: "space-y-4", caption: "flex justify-center pt-1 relative items-center", caption_label: "text-sm font-medium", nav: "space-x-1 flex items-center", nav_button: utils.cn(button.buttonVariants({ variant: "outline" }), "h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100"), nav_button_previous: "absolute left-1", nav_button_next: "absolute right-1", table: "w-full border-collapse space-y-1", head_row: "flex", head_cell: "text-muted-foreground rounded-md w-8 font-normal text-[0.8rem]", row: "flex w-full mt-2", cell: utils.cn("relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-accent [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected].day-range-end)]:rounded-r-md", props.mode === "range"
|
|
14
|
+
? "[&:has(>.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md"
|
|
15
|
+
: "[&:has([aria-selected])]:rounded-md"), day: utils.cn(button.buttonVariants({ variant: "ghost" }), "h-8 w-8 p-0 font-normal aria-selected:opacity-100"), day_range_start: "day-range-start", day_range_end: "day-range-end", day_selected: "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground", day_today: "bg-accent text-accent-foreground", day_outside: "day-outside text-muted-foreground aria-selected:bg-accent/50 aria-selected:text-muted-foreground", day_disabled: "text-muted-foreground opacity-50", day_range_middle: "aria-selected:bg-accent aria-selected:text-accent-foreground", day_hidden: "invisible" }, classNames), components: {
|
|
16
|
+
Chevron: (_a) => {
|
|
17
|
+
var { className, orientation } = _a, props = tslib.__rest(_a, ["className", "orientation"]);
|
|
18
|
+
return (jsxRuntime.jsx(icon.Icon, Object.assign({ name: `chevron-${orientation}`, className: utils.cn("h-4 w-4", className) }, props)));
|
|
19
|
+
},
|
|
20
|
+
} }, props)));
|
|
21
|
+
}
|
|
22
|
+
Calendar.displayName = "Calendar";
|
|
23
|
+
|
|
24
|
+
exports.Calendar = Calendar;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var tslib = require('tslib');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var cmdk = require('cmdk');
|
|
7
|
+
var utils = require('../../../lib/utils.js');
|
|
8
|
+
var dialog = require('../../popovers/dialog/dialog.js');
|
|
9
|
+
var icon = require('../../media/icon/icon.js');
|
|
10
|
+
|
|
11
|
+
const Command = (_a) => {
|
|
12
|
+
var { className } = _a, props = tslib.__rest(_a, ["className"]);
|
|
13
|
+
return (jsxRuntime.jsx(cmdk.Command, Object.assign({ "data-slot": "command", className: utils.cn("flex h-full w-full flex-col overflow-hidden rounded-md", "bg-popover text-popover-foreground", className) }, props)));
|
|
14
|
+
};
|
|
15
|
+
Command.displayName = "Command";
|
|
16
|
+
const CommandDialog = (_a) => {
|
|
17
|
+
var { title = "Command Palette", description = "Search for a command to run...", children } = _a, props = tslib.__rest(_a, ["title", "description", "children"]);
|
|
18
|
+
return (jsxRuntime.jsxs(dialog.Dialog, Object.assign({}, props, { children: [jsxRuntime.jsxs(dialog.DialogHeader, { className: "sr-only", children: [jsxRuntime.jsx(dialog.DialogTitle, { children: title }), jsxRuntime.jsx(dialog.DialogDescription, { children: description })] }), jsxRuntime.jsx(dialog.DialogContent, { className: "overflow-hidden p-0", children: jsxRuntime.jsx(Command, { className: utils.cn(
|
|
19
|
+
// Group heading styles
|
|
20
|
+
"[&_[cmdk-group-heading]]:text-muted-foreground", "[&_[cmdk-group-heading]]:px-2", "[&_[cmdk-group-heading]]:font-medium",
|
|
21
|
+
// Group styles
|
|
22
|
+
"[&_[cmdk-group]]:px-2", "[&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0",
|
|
23
|
+
// Input wrapper styles
|
|
24
|
+
"**:data-[slot=command-input-wrapper]:h-12", "[&_[cmdk-input-wrapper]_svg]:h-5", "[&_[cmdk-input-wrapper]_svg]:w-5",
|
|
25
|
+
// Input styles
|
|
26
|
+
"[&_[cmdk-input]]:h-12",
|
|
27
|
+
// Item styles
|
|
28
|
+
"[&_[cmdk-item]]:px-2", "[&_[cmdk-item]]:py-3", "[&_[cmdk-item]_svg]:h-5", "[&_[cmdk-item]_svg]:w-5"), children: children }) })] })));
|
|
29
|
+
};
|
|
30
|
+
CommandDialog.displayName = "CommandDialog";
|
|
31
|
+
const CommandInput = (_a) => {
|
|
32
|
+
var { className } = _a, props = tslib.__rest(_a, ["className"]);
|
|
33
|
+
return (jsxRuntime.jsxs("div", { "data-slot": "command-input-wrapper", className: "flex h-9 items-center gap-2 border-b px-3", children: [jsxRuntime.jsx(icon.Icon, { name: "search", className: "size-4 shrink-0 opacity-50" }), jsxRuntime.jsx(cmdk.Command.Input, Object.assign({ "data-slot": "command-input", className: utils.cn("flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden", "placeholder:text-muted-foreground", "disabled:cursor-not-allowed disabled:opacity-50", className) }, props))] }));
|
|
34
|
+
};
|
|
35
|
+
CommandInput.displayName = "CommandInput";
|
|
36
|
+
const CommandList = (_a) => {
|
|
37
|
+
var { className } = _a, props = tslib.__rest(_a, ["className"]);
|
|
38
|
+
return (jsxRuntime.jsx(cmdk.Command.List, Object.assign({ "data-slot": "command-list", className: utils.cn("max-h-[300px] overflow-x-hidden overflow-y-auto", "scroll-py-1", className) }, props)));
|
|
39
|
+
};
|
|
40
|
+
CommandList.displayName = "CommandList";
|
|
41
|
+
const CommandEmpty = (_a) => {
|
|
42
|
+
var props = tslib.__rest(_a, []);
|
|
43
|
+
return jsxRuntime.jsx(cmdk.Command.Empty, Object.assign({ "data-slot": "command-empty", className: "py-6 text-center text-sm" }, props));
|
|
44
|
+
};
|
|
45
|
+
CommandEmpty.displayName = "CommandEmpty";
|
|
46
|
+
const CommandGroup = (_a) => {
|
|
47
|
+
var { className } = _a, props = tslib.__rest(_a, ["className"]);
|
|
48
|
+
return (jsxRuntime.jsx(cmdk.Command.Group, Object.assign({ "data-slot": "command-group", className: utils.cn("overflow-hidden p-1", "text-foreground",
|
|
49
|
+
// Group heading styles
|
|
50
|
+
"[&_[cmdk-group-heading]]:text-muted-foreground", "[&_[cmdk-group-heading]]:px-2", "[&_[cmdk-group-heading]]:py-1.5", "[&_[cmdk-group-heading]]:text-xs", "[&_[cmdk-group-heading]]:font-medium", className) }, props)));
|
|
51
|
+
};
|
|
52
|
+
CommandGroup.displayName = "CommandGroup";
|
|
53
|
+
const CommandSeparator = (_a) => {
|
|
54
|
+
var { className } = _a, props = tslib.__rest(_a, ["className"]);
|
|
55
|
+
return (jsxRuntime.jsx(cmdk.Command.Separator, Object.assign({ "data-slot": "command-separator", className: utils.cn("bg-border -mx-1 h-px", className) }, props)));
|
|
56
|
+
};
|
|
57
|
+
CommandSeparator.displayName = "CommandSeparator";
|
|
58
|
+
const CommandItem = (_a) => {
|
|
59
|
+
var { className } = _a, props = tslib.__rest(_a, ["className"]);
|
|
60
|
+
return (jsxRuntime.jsx(cmdk.Command.Item, Object.assign({ "data-slot": "command-item", className: utils.cn(
|
|
61
|
+
// Layout
|
|
62
|
+
"relative flex items-center gap-2 rounded-sm px-2 py-1.5", "text-sm outline-hidden select-none",
|
|
63
|
+
// States
|
|
64
|
+
"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground", "data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50",
|
|
65
|
+
// Icon styles
|
|
66
|
+
"[&_svg:not([class*='text-'])]:text-muted-foreground", "[&_svg]:pointer-events-none", "[&_svg]:shrink-0", "[&_svg:not([class*='size-'])]:size-4", className) }, props)));
|
|
67
|
+
};
|
|
68
|
+
CommandItem.displayName = "CommandItem";
|
|
69
|
+
const CommandShortcut = (_a) => {
|
|
70
|
+
var { className } = _a, props = tslib.__rest(_a, ["className"]);
|
|
71
|
+
return (jsxRuntime.jsx("span", Object.assign({ "data-slot": "command-shortcut", className: utils.cn("ml-auto text-xs tracking-widest", "text-muted-foreground", className) }, props)));
|
|
72
|
+
};
|
|
73
|
+
CommandShortcut.displayName = "CommandShortcut";
|
|
74
|
+
|
|
75
|
+
exports.Command = Command;
|
|
76
|
+
exports.CommandDialog = CommandDialog;
|
|
77
|
+
exports.CommandEmpty = CommandEmpty;
|
|
78
|
+
exports.CommandGroup = CommandGroup;
|
|
79
|
+
exports.CommandInput = CommandInput;
|
|
80
|
+
exports.CommandItem = CommandItem;
|
|
81
|
+
exports.CommandList = CommandList;
|
|
82
|
+
exports.CommandSeparator = CommandSeparator;
|
|
83
|
+
exports.CommandShortcut = CommandShortcut;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var tslib = require('tslib');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var contextHooks = require('../hooks/contextHooks.js');
|
|
7
|
+
require('../../table/table.js');
|
|
8
|
+
var tableHead = require('../../table/components/table-head.js');
|
|
9
|
+
var cell = require('../../table/components/cell.js');
|
|
10
|
+
|
|
11
|
+
const Cell = (_a) => {
|
|
12
|
+
var _b;
|
|
13
|
+
var { variant = "body", sticky, columnId, colSpan = 1 } = _a, rest = tslib.__rest(_a, ["variant", "sticky", "columnId", "colSpan"]);
|
|
14
|
+
const Component = variant === "header" ? tableHead.TableHead : cell.TableCell;
|
|
15
|
+
const { columnConfig } = contextHooks.useTableColumnContext();
|
|
16
|
+
const columnInfo = columnId ? columnConfig[columnId] : undefined;
|
|
17
|
+
const finalSticky = sticky || ((columnInfo === null || columnInfo === void 0 ? void 0 : columnInfo.isStickyLeft) ? "left" : (columnInfo === null || columnInfo === void 0 ? void 0 : columnInfo.isStickyRight) ? "right" : undefined);
|
|
18
|
+
const finalHasMinWidth = (_b = columnInfo === null || columnInfo === void 0 ? void 0 : columnInfo.hasMinWidth) !== null && _b !== void 0 ? _b : false;
|
|
19
|
+
const colSpanShift = finalHasMinWidth ? 1 : 0;
|
|
20
|
+
return jsxRuntime.jsx(Component, Object.assign({}, rest, { colSpan: colSpan + colSpanShift, sticky: finalSticky }));
|
|
21
|
+
};
|
|
22
|
+
Cell.displayName = "Table.Cell";
|
|
23
|
+
|
|
24
|
+
exports.Cell = Cell;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
var contextHooks = require('../hooks/contextHooks.js');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The ColumnGroup component is used to apply column sizing for a table with a fixed layout.
|
|
10
|
+
*
|
|
11
|
+
* HTML tables with `table-layout: fixed` tend to ignore `min-width` and `max-width` properties,
|
|
12
|
+
* sizing columns based solely on the first row of cells. This component implements a workaround
|
|
13
|
+
* that allows for a faux `min-width` effect on columns, enabling flexible column widths
|
|
14
|
+
* while respecting minimum size constraints.
|
|
15
|
+
*
|
|
16
|
+
* The solution involves using a combination of <colgroup> and <col> elements, with the
|
|
17
|
+
* latter's style being conditionally set based on the column configurations provided.
|
|
18
|
+
* In cases where a `minWidth` is specified for a column, an additional empty <col> is rendered
|
|
19
|
+
* next to the one with the `minWidth` style. This tricks the table layout into respecting
|
|
20
|
+
* the minimum width while allowing the column to flex beyond it when extra space is available.
|
|
21
|
+
*
|
|
22
|
+
* For columns with a fixed width, a single <col> with the specified width is rendered.
|
|
23
|
+
* In the absence of width specifications, an empty <col> is rendered, allowing the table to auto-size.
|
|
24
|
+
*
|
|
25
|
+
* Read more -> https://css-tricks.com/faking-min-width-on-a-table-column/
|
|
26
|
+
*/
|
|
27
|
+
const ColumnGroup = react.memo(({ columns }) => {
|
|
28
|
+
const { selectedRows } = contextHooks.useTableSelectionContext();
|
|
29
|
+
return (jsxRuntime.jsxs("colgroup", { children: [selectedRows && jsxRuntime.jsx("col", {}, "column_selection"), columns.map((column) => {
|
|
30
|
+
const columnStyles = column.style;
|
|
31
|
+
const testId = `column_${column.id}`;
|
|
32
|
+
if (columnStyles === null || columnStyles === void 0 ? void 0 : columnStyles.minWidth) {
|
|
33
|
+
return (jsxRuntime.jsxs(react.Fragment, { children: [jsxRuntime.jsx("col", { "data-testid": `${testId}_static`, style: { width: columnStyles.minWidth } }), jsxRuntime.jsx("col", { "data-testid": `${testId}_flexible` })] }, `${testId}-minWidth`));
|
|
34
|
+
}
|
|
35
|
+
else if (columnStyles === null || columnStyles === void 0 ? void 0 : columnStyles.width) {
|
|
36
|
+
return jsxRuntime.jsx("col", { "data-testid": testId, style: { width: columnStyles.width } }, `${testId}-width`);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
return jsxRuntime.jsx("col", { "data-testid": `${testId}_auto` }, `${testId}-auto`);
|
|
40
|
+
}
|
|
41
|
+
})] }));
|
|
42
|
+
});
|
|
43
|
+
ColumnGroup.displayName = "Table.ColumnGroup";
|
|
44
|
+
|
|
45
|
+
exports.ColumnGroup = ColumnGroup;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
var _pick = require('lodash/pick');
|
|
7
|
+
var cell = require('./cell.js');
|
|
8
|
+
var contextHooks = require('../hooks/contextHooks.js');
|
|
9
|
+
require('clsx');
|
|
10
|
+
var toggle = require('../../../../utils/toggle.js');
|
|
11
|
+
var checkbox = require('../../../forms/checkbox/checkbox.js');
|
|
12
|
+
require('../../table/table.js');
|
|
13
|
+
var row = require('../../table/components/row.js');
|
|
14
|
+
var tableBody = require('../../table/components/table-body.js');
|
|
15
|
+
|
|
16
|
+
const DefaultColumnRenderer = react.memo(({ value }) => value);
|
|
17
|
+
const CheckboxCell = react.memo(({ id, isSelected }) => {
|
|
18
|
+
const { selectedRows = [], onSelect } = contextHooks.useTableSelectionContext();
|
|
19
|
+
const { stickyColumnsLeft } = contextHooks.useTableStickyContext();
|
|
20
|
+
return (jsxRuntime.jsx(cell.Cell, { sticky: stickyColumnsLeft > 0 ? "left" : undefined, children: jsxRuntime.jsx(checkbox.Checkbox, { checked: isSelected, onCheckedChange: () => onSelect === null || onSelect === void 0 ? void 0 : onSelect(toggle.toggle(selectedRows, id), id) }) }, `body-checkbox-${id}`));
|
|
21
|
+
});
|
|
22
|
+
const DefaultRowRenderer = react.memo(({ row: row$1 }) => {
|
|
23
|
+
const { rowId, rowDataKeys } = contextHooks.useTableDataContext();
|
|
24
|
+
const { columnRenderers } = contextHooks.useTableRendererContext();
|
|
25
|
+
const { colSpan: colSpanConfig, rowSpan: rowSpanConfig } = contextHooks.useTableStyleContext();
|
|
26
|
+
const { selectedRows } = contextHooks.useTableSelectionContext();
|
|
27
|
+
const withCheckbox = selectedRows !== undefined;
|
|
28
|
+
const id = typeof rowId === "function" ? rowId(row$1) : row$1[rowId];
|
|
29
|
+
const rowData = _pick(row$1, rowDataKeys);
|
|
30
|
+
const isSelected = !!(selectedRows === null || selectedRows === void 0 ? void 0 : selectedRows.includes(id));
|
|
31
|
+
return (jsxRuntime.jsxs(row.TableRow, { selected: isSelected, children: [withCheckbox && jsxRuntime.jsx(CheckboxCell, { id: id, isSelected: isSelected }), Object.entries(rowData).map(([columnKey, columnValue], index) => {
|
|
32
|
+
var _a, _b;
|
|
33
|
+
const ContentRenderer = (columnRenderers && columnRenderers[columnKey]) || DefaultColumnRenderer;
|
|
34
|
+
return (jsxRuntime.jsx(cell.Cell, { columnId: columnKey, colSpan: (_a = colSpanConfig === null || colSpanConfig === void 0 ? void 0 : colSpanConfig[id]) === null || _a === void 0 ? void 0 : _a[columnKey], rowSpan: (_b = rowSpanConfig === null || rowSpanConfig === void 0 ? void 0 : rowSpanConfig[id]) === null || _b === void 0 ? void 0 : _b[columnKey], children: jsxRuntime.jsx(ContentRenderer, { dataKey: columnKey, value: columnValue, index: index + (withCheckbox ? 2 : 1), row: row$1 }) }, `body-${columnKey}-cell-${id}`));
|
|
35
|
+
})] }));
|
|
36
|
+
});
|
|
37
|
+
const TableBody = react.memo(({ rows }) => {
|
|
38
|
+
const { rowId } = contextHooks.useTableDataContext();
|
|
39
|
+
const { rowRenderer: RowRenderer = DefaultRowRenderer } = contextHooks.useTableRendererContext();
|
|
40
|
+
return (jsxRuntime.jsx(tableBody.TableBody, { children: rows.map((row) => {
|
|
41
|
+
const id = typeof rowId === "function" ? rowId(row) : row[rowId];
|
|
42
|
+
return jsxRuntime.jsx(RowRenderer, { row: row }, `body-row-${id}`);
|
|
43
|
+
}) }));
|
|
44
|
+
});
|
|
45
|
+
TableBody.displayName = "Table.TableBody";
|
|
46
|
+
|
|
47
|
+
exports.TableBody = TableBody;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
require('../../table/table.js');
|
|
7
|
+
var emptyState = require('../../../utility/empty-state/empty-state.js');
|
|
8
|
+
var icon = require('../../../media/icon/icon.js');
|
|
9
|
+
var tableBody = require('../../table/components/table-body.js');
|
|
10
|
+
var row = require('../../table/components/row.js');
|
|
11
|
+
var cell = require('../../table/components/cell.js');
|
|
12
|
+
|
|
13
|
+
const NoData = (jsxRuntime.jsxs(emptyState.EmptyState, { children: [jsxRuntime.jsx(emptyState.EmptyState.Image, { children: jsxRuntime.jsx(icon.Icon, { name: "file-warning", size: 80 }) }), jsxRuntime.jsx(emptyState.EmptyState.Title, { children: "No Data" }), jsxRuntime.jsx(emptyState.EmptyState.Description, { children: "Visit this page later" })] }));
|
|
14
|
+
const Error = (jsxRuntime.jsxs(emptyState.EmptyState, { children: [jsxRuntime.jsx(emptyState.EmptyState.Image, { children: jsxRuntime.jsx(icon.Icon, { name: "bug", size: 80 }) }), jsxRuntime.jsx(emptyState.EmptyState.Title, { children: "An error occurred!" }), jsxRuntime.jsx(emptyState.EmptyState.Description, { children: "Please contact us for assistance or try again later." })] }));
|
|
15
|
+
const TableFallback = react.memo(({ type, columnsAmount, customFallback }) => {
|
|
16
|
+
const EmptyStateContent = react.useMemo(() => {
|
|
17
|
+
switch (type) {
|
|
18
|
+
case "error":
|
|
19
|
+
return Error;
|
|
20
|
+
case "empty":
|
|
21
|
+
return NoData;
|
|
22
|
+
}
|
|
23
|
+
}, [type]);
|
|
24
|
+
return (jsxRuntime.jsx(tableBody.TableBody, { children: jsxRuntime.jsx(row.TableRow, { children: jsxRuntime.jsx(cell.TableCell, { colSpan: columnsAmount, children: customFallback || EmptyStateContent }) }) }));
|
|
25
|
+
});
|
|
26
|
+
TableFallback.displayName = "Table.TableFallback";
|
|
27
|
+
|
|
28
|
+
exports.TableFallback = TableFallback;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var tslib = require('tslib');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var react = require('react');
|
|
7
|
+
var _difference = require('lodash/difference');
|
|
8
|
+
var _map = require('lodash/map');
|
|
9
|
+
var utils = require('../utils.js');
|
|
10
|
+
var cell = require('./cell.js');
|
|
11
|
+
var contextHooks = require('../hooks/contextHooks.js');
|
|
12
|
+
var button = require('../../../buttons/button/button.js');
|
|
13
|
+
var checkbox = require('../../../forms/checkbox/checkbox.js');
|
|
14
|
+
require('../../table/table.js');
|
|
15
|
+
require('clsx');
|
|
16
|
+
var addIf = require('../../../../utils/addIf.js');
|
|
17
|
+
var tableHeader = require('../../table/components/table-header.js');
|
|
18
|
+
var row = require('../../table/components/row.js');
|
|
19
|
+
|
|
20
|
+
const HeaderCell = (_a) => {
|
|
21
|
+
var { column, index } = _a, rest = tslib.__rest(_a, ["column", "index"]);
|
|
22
|
+
const { sortBy, sortDirection, onSortChange } = contextHooks.useTableSortContext();
|
|
23
|
+
const { id, label, sortable = false, align, style } = column;
|
|
24
|
+
const isActiveSort = sortBy === id;
|
|
25
|
+
return (jsxRuntime.jsx(cell.Cell, Object.assign({}, rest, { variant: "header", columnId: id, align: align, style: style, children: sortable ? (jsxRuntime.jsx(button.Button, { variant: "ghost", rightIcon: isActiveSort
|
|
26
|
+
? sortDirection === "desc"
|
|
27
|
+
? "arrow-down-wide-narrow"
|
|
28
|
+
: "arrow-up-narrow-wide"
|
|
29
|
+
: "arrow-up-down", onClick: (e) => onSortChange && onSortChange(id, e), children: label })) : (label) })));
|
|
30
|
+
};
|
|
31
|
+
HeaderCell.displayName = "Table.HeaderCell";
|
|
32
|
+
const SelectAllCell = react.memo((props) => {
|
|
33
|
+
const { rows, rowId } = contextHooks.useTableDataContext();
|
|
34
|
+
const { stickyColumnsLeft } = contextHooks.useTableStickyContext();
|
|
35
|
+
const { selectedRows = [], onSelect } = contextHooks.useTableSelectionContext();
|
|
36
|
+
const rowsIds = react.useMemo(() => _map(rows, (row) => (typeof rowId === "function" ? rowId(row) : row[rowId])), [rowId, rows]);
|
|
37
|
+
const isAllSelected = rowsIds.length > 0 && _difference(rowsIds, selectedRows).length === 0;
|
|
38
|
+
return (jsxRuntime.jsx(cell.Cell, Object.assign({}, props, { variant: "header", sticky: stickyColumnsLeft > 0 ? "left" : undefined, className: "w-[32px]", children: jsxRuntime.jsx(checkbox.Checkbox, { checked: isAllSelected, indeterminate: !isAllSelected && selectedRows.length > 0, onCheckedChange: () => onSelect === null || onSelect === void 0 ? void 0 : onSelect(isAllSelected ? [] : rowsIds) }) })));
|
|
39
|
+
});
|
|
40
|
+
SelectAllCell.displayName = "Table.SelectAllCell";
|
|
41
|
+
const TableHead = react.memo(({ columns, withSelection }) => {
|
|
42
|
+
const headerRows = react.useMemo(() => utils.convertHeadersToRows(columns), [columns]);
|
|
43
|
+
return (jsxRuntime.jsx(tableHeader.TableHeader, { children: headerRows.map((headerRow, headerRowIndex) => (jsxRuntime.jsxs(row.TableRow, { children: [withSelection && headerRowIndex === 0 && jsxRuntime.jsx(SelectAllCell, { rowSpan: headerRows.length }), headerRow.map((column, index) => {
|
|
44
|
+
const children = utils.collectColumnsWithoutChildren(column.children || []);
|
|
45
|
+
const childCount = children.length;
|
|
46
|
+
const childrenWithMinWidth = children.filter((c) => { var _a; return (_a = c.style) === null || _a === void 0 ? void 0 : _a.minWidth; }).length;
|
|
47
|
+
return (jsxRuntime.jsx(HeaderCell, Object.assign({ index: index, column: column }, addIf.addIf(childCount > 0, {
|
|
48
|
+
colSpan: childCount + childrenWithMinWidth,
|
|
49
|
+
}), addIf.addIf(childCount === 0, {
|
|
50
|
+
rowSpan: headerRows.length - headerRowIndex,
|
|
51
|
+
})), `header-${column.id}`));
|
|
52
|
+
})] }, `header-row-${headerRowIndex}`))) }));
|
|
53
|
+
});
|
|
54
|
+
TableHead.displayName = "Table.TableHead";
|
|
55
|
+
|
|
56
|
+
exports.TableHead = TableHead;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
var skeleton = require('../../../utility/skeleton/skeleton.js');
|
|
7
|
+
require('../../table/table.js');
|
|
8
|
+
var tableBody = require('../../table/components/table-body.js');
|
|
9
|
+
var row = require('../../table/components/row.js');
|
|
10
|
+
var cell = require('../../table/components/cell.js');
|
|
11
|
+
|
|
12
|
+
const TablePlaceholder = react.memo(({ columnsAmount, rowsAmount, customFallback }) => {
|
|
13
|
+
return (jsxRuntime.jsx(tableBody.TableBody, { children: customFallback ||
|
|
14
|
+
Array.from({ length: rowsAmount }).map((_, rowIndex) => (jsxRuntime.jsx(row.TableRow, { children: jsxRuntime.jsx(cell.TableCell, { colSpan: columnsAmount, children: jsxRuntime.jsx(skeleton.Skeleton, { className: "h-4 w-full" }) }, `loading-cell-${columnsAmount}`) }, `loading-row-${rowIndex}`))) }));
|
|
15
|
+
});
|
|
16
|
+
TablePlaceholder.displayName = "Table.TablePlaceholder";
|
|
17
|
+
|
|
18
|
+
exports.TablePlaceholder = TablePlaceholder;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
var _map = require('lodash/map');
|
|
7
|
+
var tableHead = require('./components/table-head.js');
|
|
8
|
+
var tableBody = require('./components/table-body.js');
|
|
9
|
+
var tableFallback = require('./components/table-fallback.js');
|
|
10
|
+
var tablePlaceholder = require('./components/table-placeholder.js');
|
|
11
|
+
var columnGroup = require('./components/column-group.js');
|
|
12
|
+
var useStickyColumns = require('./hooks/useStickyColumns.js');
|
|
13
|
+
var utils = require('./utils.js');
|
|
14
|
+
var contextHooks = require('./hooks/contextHooks.js');
|
|
15
|
+
var cell = require('./components/cell.js');
|
|
16
|
+
var statusController = require('../../utility/status-controller/status-controller.js');
|
|
17
|
+
require('clsx');
|
|
18
|
+
var useStateRef = require('../../../hooks/useStateRef.js');
|
|
19
|
+
var useScrollState = require('../../../hooks/useScrollState.js');
|
|
20
|
+
var table = require('../table/table.js');
|
|
21
|
+
var utils$1 = require('../../../lib/utils.js');
|
|
22
|
+
var row = require('../table/components/row.js');
|
|
23
|
+
|
|
24
|
+
const DataTableComponent = ({ columns, rows, rowId = "id", rowDataKeys,
|
|
25
|
+
// States API
|
|
26
|
+
isLoading = false, isError = false, errorFallback, emptyFallback, loadingFallback,
|
|
27
|
+
// Renderer API
|
|
28
|
+
columnRenderers, rowRenderer,
|
|
29
|
+
// Sticky API
|
|
30
|
+
stickyHeader = false, stickyColumnsLeft = 0, stickyColumnsRight = 0,
|
|
31
|
+
// Sort API
|
|
32
|
+
sortBy, sortDirection, onSortChange,
|
|
33
|
+
// Selection API
|
|
34
|
+
selectedRows, onSelect,
|
|
35
|
+
// Body Cells Configs
|
|
36
|
+
colSpan, rowSpan, }) => {
|
|
37
|
+
const containerRef = react.useRef(null);
|
|
38
|
+
const [tableElement, setTableRef] = useStateRef.useStateRef();
|
|
39
|
+
const { isScrolledToLeftCorner, isScrolledToRightCorner } = useScrollState.useScrollState(containerRef);
|
|
40
|
+
useStickyColumns.useStickyColumns(tableElement);
|
|
41
|
+
const mergedCells = !!colSpan || !!rowSpan || Object.values(columns).some((column) => column.children);
|
|
42
|
+
const columnsWithoutChildren = react.useMemo(() => utils.collectColumnsWithoutChildren(columns), [columns]);
|
|
43
|
+
const columnsWithMinWidth = react.useMemo(() => columnsWithoutChildren.filter((column) => { var _a; return ((_a = column.style) === null || _a === void 0 ? void 0 : _a.minWidth) !== undefined; }).length, [columnsWithoutChildren]);
|
|
44
|
+
const columnsAmount = columnsWithoutChildren.length + columnsWithMinWidth + (selectedRows ? 1 : 0);
|
|
45
|
+
// Compute column configuration once
|
|
46
|
+
const columnConfig = react.useMemo(() => {
|
|
47
|
+
const flattenedColumns = utils.flattenColumns(columns);
|
|
48
|
+
const config = {};
|
|
49
|
+
flattenedColumns.forEach((column, index) => {
|
|
50
|
+
var _a;
|
|
51
|
+
config[column.id] = {
|
|
52
|
+
index,
|
|
53
|
+
isStickyLeft: index < stickyColumnsLeft,
|
|
54
|
+
isStickyRight: index >= flattenedColumns.length - stickyColumnsRight,
|
|
55
|
+
hasMinWidth: ((_a = column.style) === null || _a === void 0 ? void 0 : _a.minWidth) !== undefined,
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
return config;
|
|
59
|
+
}, [columns, stickyColumnsLeft, stickyColumnsRight]);
|
|
60
|
+
// Memoize context values to prevent unnecessary re-renders
|
|
61
|
+
const dataContextValue = react.useMemo(() => ({ rowId: rowId, rows, rowDataKeys: _map(utils.flattenColumns(columns), "id") }), [rowId, rowDataKeys]);
|
|
62
|
+
const columnContextValue = react.useMemo(() => ({ columnConfig }), [columnConfig]);
|
|
63
|
+
const rendererContextValue = react.useMemo(() => ({
|
|
64
|
+
rowRenderer,
|
|
65
|
+
columnRenderers,
|
|
66
|
+
}), [rowRenderer, columnRenderers]);
|
|
67
|
+
const selectionContextValue = react.useMemo(() => ({
|
|
68
|
+
selectedRows,
|
|
69
|
+
onSelect,
|
|
70
|
+
}), [selectedRows, onSelect]);
|
|
71
|
+
const sortContextValue = react.useMemo(() => ({
|
|
72
|
+
sortBy,
|
|
73
|
+
sortDirection,
|
|
74
|
+
onSortChange,
|
|
75
|
+
}), [sortBy, sortDirection, onSortChange]);
|
|
76
|
+
const stickyContextValue = react.useMemo(() => ({
|
|
77
|
+
stickyHeader,
|
|
78
|
+
stickyColumnsLeft,
|
|
79
|
+
stickyColumnsRight,
|
|
80
|
+
}), [stickyHeader, stickyColumnsLeft, stickyColumnsRight]);
|
|
81
|
+
const styleContextValue = react.useMemo(() => ({
|
|
82
|
+
colSpan,
|
|
83
|
+
rowSpan,
|
|
84
|
+
}), [colSpan, rowSpan]);
|
|
85
|
+
return (jsxRuntime.jsx(contextHooks.TableColumnContext.Provider, { value: columnContextValue, children: jsxRuntime.jsx(contextHooks.TableRendererContext.Provider, { value: rendererContextValue, children: jsxRuntime.jsx(contextHooks.TableSelectionContext.Provider, { value: selectionContextValue, children: jsxRuntime.jsx(contextHooks.TableSortContext.Provider, { value: sortContextValue, children: jsxRuntime.jsx(contextHooks.TableStickyContext.Provider, { value: stickyContextValue, children: jsxRuntime.jsx(contextHooks.TableStyleContext.Provider, { value: styleContextValue, children: jsxRuntime.jsx(contextHooks.TableDataContext.Provider, { value: dataContextValue, children: jsxRuntime.jsx(table.TableContainer, { ref: containerRef, className: "h-full", children: jsxRuntime.jsxs(table.Table, { ref: setTableRef, stickyHeader: stickyHeader, grid: mergedCells, className: utils$1.cn("data-table", {
|
|
86
|
+
"h-full": isLoading || isError || !rows.length,
|
|
87
|
+
"left-corner-scrolled": isScrolledToLeftCorner,
|
|
88
|
+
"right-corner-scrolled": isScrolledToRightCorner,
|
|
89
|
+
}), children: [jsxRuntime.jsx(columnGroup.ColumnGroup, { columns: columnsWithoutChildren }), jsxRuntime.jsx(tableHead.TableHead, { columns: columns, withSelection: !!selectedRows }), jsxRuntime.jsx(statusController.StatusController, { loading: isLoading, loadingFallback: jsxRuntime.jsx(tablePlaceholder.TablePlaceholder, { rowsAmount: 16, columnsAmount: columnsAmount, customFallback: loadingFallback }), error: isError, errorFallback: jsxRuntime.jsx(tableFallback.TableFallback, { type: "error", columnsAmount: columnsAmount, customFallback: errorFallback }), empty: !rows.length, emptyFallback: jsxRuntime.jsx(tableFallback.TableFallback, { type: "empty", columnsAmount: columnsAmount, customFallback: emptyFallback }), children: jsxRuntime.jsx(tableBody.TableBody, { rows: rows }) })] }) }) }) }) }) }) }) }) }));
|
|
90
|
+
};
|
|
91
|
+
DataTableComponent.displayName = "DataTable";
|
|
92
|
+
const DataTable = Object.assign(DataTableComponent, {
|
|
93
|
+
Row: row.TableRow,
|
|
94
|
+
Cell: cell.Cell,
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
exports.DataTable = DataTable;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
|
|
5
|
+
const TableDataContext = react.createContext(undefined);
|
|
6
|
+
const useTableDataContext = () => {
|
|
7
|
+
const context = react.useContext(TableDataContext);
|
|
8
|
+
if (!context) {
|
|
9
|
+
throw new Error("useTableDataContext hook must be used within a TableDataContext.Provider");
|
|
10
|
+
}
|
|
11
|
+
return context;
|
|
12
|
+
};
|
|
13
|
+
const TableColumnContext = react.createContext(undefined);
|
|
14
|
+
const useTableColumnContext = () => {
|
|
15
|
+
const context = react.useContext(TableColumnContext);
|
|
16
|
+
if (!context) {
|
|
17
|
+
throw new Error("useTableColumnContext hook must be used within a TableColumnContext.Provider");
|
|
18
|
+
}
|
|
19
|
+
return context;
|
|
20
|
+
};
|
|
21
|
+
const TableRendererContext = react.createContext(undefined);
|
|
22
|
+
const useTableRendererContext = () => {
|
|
23
|
+
const context = react.useContext(TableRendererContext);
|
|
24
|
+
if (!context) {
|
|
25
|
+
throw new Error("useTableRendererContext hook must be used within a TableRendererContext.Provider");
|
|
26
|
+
}
|
|
27
|
+
return context;
|
|
28
|
+
};
|
|
29
|
+
const TableSelectionContext = react.createContext(undefined);
|
|
30
|
+
const useTableSelectionContext = () => {
|
|
31
|
+
const context = react.useContext(TableSelectionContext);
|
|
32
|
+
if (!context) {
|
|
33
|
+
throw new Error("useTableSelectionContext hook must be used within a TableSelectionContext.Provider");
|
|
34
|
+
}
|
|
35
|
+
return context;
|
|
36
|
+
};
|
|
37
|
+
const TableSortContext = react.createContext(undefined);
|
|
38
|
+
const useTableSortContext = () => {
|
|
39
|
+
const context = react.useContext(TableSortContext);
|
|
40
|
+
if (!context) {
|
|
41
|
+
throw new Error("useTableSortContext hook must be used within a TableSortContext.Provider");
|
|
42
|
+
}
|
|
43
|
+
return context;
|
|
44
|
+
};
|
|
45
|
+
const TableStickyContext = react.createContext(undefined);
|
|
46
|
+
const useTableStickyContext = () => {
|
|
47
|
+
const context = react.useContext(TableStickyContext);
|
|
48
|
+
if (!context) {
|
|
49
|
+
throw new Error("useTableStickyContext hook must be used within a TableStickyContext.Provider");
|
|
50
|
+
}
|
|
51
|
+
return context;
|
|
52
|
+
};
|
|
53
|
+
const TableStyleContext = react.createContext(undefined);
|
|
54
|
+
const useTableStyleContext = () => {
|
|
55
|
+
const context = react.useContext(TableStyleContext);
|
|
56
|
+
if (!context) {
|
|
57
|
+
throw new Error("useTableStyleContext hook must be used within a TableStyleContext.Provider");
|
|
58
|
+
}
|
|
59
|
+
return context;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
exports.TableColumnContext = TableColumnContext;
|
|
63
|
+
exports.TableDataContext = TableDataContext;
|
|
64
|
+
exports.TableRendererContext = TableRendererContext;
|
|
65
|
+
exports.TableSelectionContext = TableSelectionContext;
|
|
66
|
+
exports.TableSortContext = TableSortContext;
|
|
67
|
+
exports.TableStickyContext = TableStickyContext;
|
|
68
|
+
exports.TableStyleContext = TableStyleContext;
|
|
69
|
+
exports.useTableColumnContext = useTableColumnContext;
|
|
70
|
+
exports.useTableDataContext = useTableDataContext;
|
|
71
|
+
exports.useTableRendererContext = useTableRendererContext;
|
|
72
|
+
exports.useTableSelectionContext = useTableSelectionContext;
|
|
73
|
+
exports.useTableSortContext = useTableSortContext;
|
|
74
|
+
exports.useTableStickyContext = useTableStickyContext;
|
|
75
|
+
exports.useTableStyleContext = useTableStyleContext;
|