@customafk/lunas-ui 0.2.81 → 0.2.82
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/dist/{analysis-panel-DYF2CmAH.cjs → analysis-panel-BoKjkPYz.cjs} +2 -2
- package/dist/{analysis-panel-DYF2CmAH.cjs.map → analysis-panel-BoKjkPYz.cjs.map} +1 -1
- package/dist/{analysis-panel-_s1fgcZC.mjs → analysis-panel-CZ8g9AAO.mjs} +2 -2
- package/dist/{analysis-panel-_s1fgcZC.mjs.map → analysis-panel-CZ8g9AAO.mjs.map} +1 -1
- package/dist/{badge-C_KLKwiS.d.cts → badge-BPiU1Ss2.d.cts} +2 -2
- package/dist/{badge-C_KLKwiS.d.mts → badge-BPiU1Ss2.d.mts} +2 -2
- package/dist/{badge-display-D6d7wTEE.mjs → badge-display-B5m09_Hs.mjs} +2 -2
- package/dist/{badge-display-D6d7wTEE.mjs.map → badge-display-B5m09_Hs.mjs.map} +1 -1
- package/dist/{badge-display-DWzSl3rs.cjs → badge-display-DHbCN998.cjs} +2 -2
- package/dist/{badge-display-DWzSl3rs.cjs.map → badge-display-DHbCN998.cjs.map} +1 -1
- package/dist/{boolean-display-Wko_5Jd5.mjs → boolean-display-CzHHDfHW.mjs} +2 -2
- package/dist/{boolean-display-Wko_5Jd5.mjs.map → boolean-display-CzHHDfHW.mjs.map} +1 -1
- package/dist/{boolean-display-C5GIuWnc.cjs → boolean-display-D2wjQhNX.cjs} +2 -2
- package/dist/{boolean-display-C5GIuWnc.cjs.map → boolean-display-D2wjQhNX.cjs.map} +1 -1
- package/dist/{button-CnKmz4qM.d.cts → button-BnoPktln.d.cts} +3 -3
- package/dist/{button-CnKmz4qM.d.mts → button-BnoPktln.d.mts} +3 -3
- package/dist/{calendar-BT6-Fo3T.d.mts → calendar-BkV5hTX2.d.mts} +2 -2
- package/dist/{calendar-D_QmR9VE.d.cts → calendar-iDMPT1kI.d.cts} +2 -2
- package/dist/{carousel-BBI4xPdK.d.mts → carousel-D7VXWJ3S.d.mts} +2 -2
- package/dist/{carousel-B_IXlBdH.d.cts → carousel-bBvM31sh.d.cts} +2 -2
- package/dist/currency-display-7w-ZjVUw.mjs +2 -0
- package/dist/currency-display-7w-ZjVUw.mjs.map +1 -0
- package/dist/currency-display-B06kc2IG.cjs +2 -0
- package/dist/currency-display-B06kc2IG.cjs.map +1 -0
- package/dist/{date-display-DXyb-Ai2.mjs → date-display-BO7OY_AC.mjs} +2 -2
- package/dist/{date-display-DXyb-Ai2.mjs.map → date-display-BO7OY_AC.mjs.map} +1 -1
- package/dist/{date-display-D38qvsh2.cjs → date-display-DHnZr_yf.cjs} +2 -2
- package/dist/{date-display-D38qvsh2.cjs.map → date-display-DHnZr_yf.cjs.map} +1 -1
- package/dist/{description-display-BwBMrRAi.mjs → description-display-CBfoP3Y2.mjs} +2 -2
- package/dist/{description-display-BwBMrRAi.mjs.map → description-display-CBfoP3Y2.mjs.map} +1 -1
- package/dist/{description-display-DIeHy7ll.cjs → description-display-Cckihd1s.cjs} +2 -2
- package/dist/{description-display-DIeHy7ll.cjs.map → description-display-Cckihd1s.cjs.map} +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.d.cts +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.d.mts +1 -1
- package/dist/dialogs/side-panel.cjs +2 -0
- package/dist/dialogs/side-panel.cjs.map +1 -0
- package/dist/dialogs/side-panel.d.cts +2 -0
- package/dist/dialogs/side-panel.d.mts +2 -0
- package/dist/dialogs/side-panel.mjs +2 -0
- package/dist/dialogs/side-panel.mjs.map +1 -0
- package/dist/{email-display-Be3b-kDL.mjs → email-display-Bk_furIx.mjs} +2 -2
- package/dist/{email-display-Be3b-kDL.mjs.map → email-display-Bk_furIx.mjs.map} +1 -1
- package/dist/{email-display-_FRE2qcO.cjs → email-display-w-hRYIeL.cjs} +2 -2
- package/dist/{email-display-_FRE2qcO.cjs.map → email-display-w-hRYIeL.cjs.map} +1 -1
- package/dist/features/descriptions/index.d.cts +1 -1
- package/dist/features/descriptions/index.d.mts +1 -1
- package/dist/features/tables/index.cjs +1 -1
- package/dist/features/tables/index.d.cts +1 -1
- package/dist/features/tables/index.d.mts +1 -1
- package/dist/features/tables/index.mjs +1 -1
- package/dist/{filter-C2wE49q7.mjs → filter-BO7ISTIR.mjs} +2 -2
- package/dist/{filter-C2wE49q7.mjs.map → filter-BO7ISTIR.mjs.map} +1 -1
- package/dist/{filter-z7p4lRp8.cjs → filter-CQ9BD0MV.cjs} +2 -2
- package/dist/{filter-z7p4lRp8.cjs.map → filter-CQ9BD0MV.cjs.map} +1 -1
- package/dist/{flex-CIzZIICK.d.cts → flex-CrxTaAXE.d.cts} +2 -2
- package/dist/{flex-CIzZIICK.d.mts → flex-CrxTaAXE.d.mts} +2 -2
- package/dist/{index-BSj8azta.d.cts → index-BMuVmm7f.d.mts} +2 -2
- package/dist/{index-CjiDR-94.d.mts → index-BPo-Lg3p.d.mts} +15 -12
- package/dist/{index-CEmVk1zP.d.mts → index-CLx89ATZ.d.cts} +2 -2
- package/dist/{index-DqAbPipJ.d.cts → index-DaLpXe5l.d.cts} +15 -12
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +13 -11
- package/dist/index.d.mts +13 -11
- package/dist/index.mjs +1 -1
- package/dist/layouts/flex.d.cts +1 -1
- package/dist/layouts/flex.d.mts +1 -1
- package/dist/layouts/ui-grid.cjs +2 -0
- package/dist/layouts/ui-grid.cjs.map +1 -0
- package/dist/layouts/ui-grid.d.cts +2 -0
- package/dist/layouts/ui-grid.d.mts +2 -0
- package/dist/layouts/ui-grid.mjs +2 -0
- package/dist/layouts/ui-grid.mjs.map +1 -0
- package/dist/{list-display-BvKGl7uq.cjs → list-display-DDeJoneW.cjs} +2 -2
- package/dist/{list-display-BvKGl7uq.cjs.map → list-display-DDeJoneW.cjs.map} +1 -1
- package/dist/{list-display-CWQvIMUj.mjs → list-display-DLsm8uAh.mjs} +2 -2
- package/dist/{list-display-CWQvIMUj.mjs.map → list-display-DLsm8uAh.mjs.map} +1 -1
- package/dist/{name-display-DfOtYp7d.cjs → name-display-CKnyugrP.cjs} +2 -2
- package/dist/{name-display-DfOtYp7d.cjs.map → name-display-CKnyugrP.cjs.map} +1 -1
- package/dist/{name-display-CnTRVqX4.mjs → name-display-H5HFH1fU.mjs} +2 -2
- package/dist/{name-display-CnTRVqX4.mjs.map → name-display-H5HFH1fU.mjs.map} +1 -1
- package/dist/{pagination-AxRzmAtZ.d.cts → pagination-BRw-yZBY.d.cts} +2 -2
- package/dist/{pagination-D12pR8_5.d.mts → pagination-BlLiOvY9.d.mts} +2 -2
- package/dist/{paragraph-C5HE9u0Q.d.mts → paragraph-CRo5eC7H.d.mts} +2 -2
- package/dist/{paragraph-DJlHIDmk.d.cts → paragraph-CkCNIsvz.d.cts} +2 -2
- package/dist/{permalink-DhqOATLQ.mjs → permalink-CaCx9fi6.mjs} +2 -2
- package/dist/{permalink-DhqOATLQ.mjs.map → permalink-CaCx9fi6.mjs.map} +1 -1
- package/dist/{permalink-29QzG9Xe.cjs → permalink-azuGQg2b.cjs} +2 -2
- package/dist/{permalink-29QzG9Xe.cjs.map → permalink-azuGQg2b.cjs.map} +1 -1
- package/dist/{phone-number-CQXrATQO.mjs → phone-number-Ba-f4s1Y.mjs} +2 -2
- package/dist/{phone-number-CQXrATQO.mjs.map → phone-number-Ba-f4s1Y.mjs.map} +1 -1
- package/dist/{phone-number-C2k8llhf.cjs → phone-number-BqRhKQdr.cjs} +2 -2
- package/dist/{phone-number-C2k8llhf.cjs.map → phone-number-BqRhKQdr.cjs.map} +1 -1
- package/dist/{progress-display-DZb1qjfY.mjs → progress-display-0UsBzt_r.mjs} +2 -2
- package/dist/{progress-display-DZb1qjfY.mjs.map → progress-display-0UsBzt_r.mjs.map} +1 -1
- package/dist/{progress-display-B4WVzdJw.cjs → progress-display-CiYWPOnq.cjs} +2 -2
- package/dist/{progress-display-B4WVzdJw.cjs.map → progress-display-CiYWPOnq.cjs.map} +1 -1
- package/dist/{resizable-D61lvcIL.d.cts → resizable-C3uADYIg.d.cts} +2 -2
- package/dist/{resizable-D61lvcIL.d.mts → resizable-C3uADYIg.d.mts} +2 -2
- package/dist/side-panel-DPrM5ygG.d.cts +86 -0
- package/dist/side-panel-DPrM5ygG.d.mts +86 -0
- package/dist/statistic-639yMA2d.mjs +2 -0
- package/dist/statistic-639yMA2d.mjs.map +1 -0
- package/dist/statistic-CE_Jg8SN.cjs +2 -0
- package/dist/statistic-CE_Jg8SN.cjs.map +1 -0
- package/dist/{status-display-CcihiYsH.mjs → status-display-BCYpNJmd.mjs} +2 -2
- package/dist/{status-display-CcihiYsH.mjs.map → status-display-BCYpNJmd.mjs.map} +1 -1
- package/dist/{status-display-DJ8fFqyX.cjs → status-display-xcCCGpGS.cjs} +2 -2
- package/dist/{status-display-DJ8fFqyX.cjs.map → status-display-xcCCGpGS.cjs.map} +1 -1
- package/dist/{summary-bar-DK8glsr4.cjs → summary-bar-C08g8bb1.cjs} +2 -2
- package/dist/{summary-bar-DK8glsr4.cjs.map → summary-bar-C08g8bb1.cjs.map} +1 -1
- package/dist/{summary-bar-C4loKj1L.mjs → summary-bar-C3NAnI3V.mjs} +2 -2
- package/dist/{summary-bar-C4loKj1L.mjs.map → summary-bar-C3NAnI3V.mjs.map} +1 -1
- package/dist/tables-BqZ4Zs6e.cjs +2 -0
- package/dist/tables-BqZ4Zs6e.cjs.map +1 -0
- package/dist/tables-Dg3KMBKA.mjs +2 -0
- package/dist/tables-Dg3KMBKA.mjs.map +1 -0
- package/dist/{tooltip-CLjCwnTD.cjs → tooltip-BVzKgxrZ.cjs} +3 -3
- package/dist/{tooltip-CLjCwnTD.cjs.map → tooltip-BVzKgxrZ.cjs.map} +1 -1
- package/dist/{tooltip-BKcU3bMc.mjs → tooltip-D7U_Nl5c.mjs} +3 -3
- package/dist/{tooltip-BKcU3bMc.mjs.map → tooltip-D7U_Nl5c.mjs.map} +1 -1
- package/dist/typography/paragraph.d.cts +1 -1
- package/dist/typography/paragraph.d.mts +1 -1
- package/dist/ui/alert-dialog.cjs +1 -1
- package/dist/ui/alert-dialog.cjs.map +1 -1
- package/dist/ui/alert-dialog.mjs +1 -1
- package/dist/ui/alert-dialog.mjs.map +1 -1
- package/dist/ui/badge.d.cts +1 -1
- package/dist/ui/badge.d.mts +1 -1
- package/dist/ui/button.d.cts +1 -1
- package/dist/ui/button.d.mts +1 -1
- package/dist/ui/calendar.d.cts +1 -1
- package/dist/ui/calendar.d.mts +1 -1
- package/dist/ui/carousel.d.cts +1 -1
- package/dist/ui/carousel.d.mts +1 -1
- package/dist/ui/dialog.cjs +1 -1
- package/dist/ui/dialog.cjs.map +1 -1
- package/dist/ui/dialog.mjs +1 -1
- package/dist/ui/dialog.mjs.map +1 -1
- package/dist/ui/pagination.d.cts +1 -1
- package/dist/ui/pagination.d.mts +1 -1
- package/dist/ui/resizable.d.cts +1 -1
- package/dist/ui/resizable.d.mts +1 -1
- package/dist/ui/sheet.cjs +1 -1
- package/dist/ui/sheet.cjs.map +1 -1
- package/dist/ui/sheet.mjs +1 -1
- package/dist/ui/sheet.mjs.map +1 -1
- package/dist/ui-grid-CzL5J7cm.d.cts +128 -0
- package/dist/ui-grid-CzL5J7cm.d.mts +128 -0
- package/package.json +9 -1
- package/dist/currency-display-BGkpGtN_.mjs +0 -2
- package/dist/currency-display-BGkpGtN_.mjs.map +0 -1
- package/dist/currency-display-Bbh5InhV.cjs +0 -2
- package/dist/currency-display-Bbh5InhV.cjs.map +0 -1
- package/dist/statistic-DoNUSe3e.mjs +0 -2
- package/dist/statistic-DoNUSe3e.mjs.map +0 -1
- package/dist/statistic-wnnjHsKj.cjs +0 -2
- package/dist/statistic-wnnjHsKj.cjs.map +0 -1
- package/dist/tables-BTBtN1di.mjs +0 -2
- package/dist/tables-BTBtN1di.mjs.map +0 -1
- package/dist/tables-BzP8Cnvh.cjs +0 -2
- package/dist/tables-BzP8Cnvh.cjs.map +0 -1
|
@@ -35,7 +35,7 @@ declare const ResizablePanelGroup: import("react").NamedExoticComponent<Omit<imp
|
|
|
35
35
|
children?: import("react").ReactNode | undefined;
|
|
36
36
|
} & import("react").RefAttributes<ResizablePrimitive.ImperativePanelGroupHandle>>;
|
|
37
37
|
/** An individual resizable panel within a ResizablePanelGroup. */
|
|
38
|
-
declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("react").HTMLAttributes<
|
|
38
|
+
declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("react").HTMLAttributes<HTMLInputElement | HTMLElement | HTMLParagraphElement | HTMLDivElement | HTMLButtonElement | HTMLFieldSetElement | HTMLLegendElement | HTMLLabelElement | HTMLObjectElement | HTMLAnchorElement | HTMLAreaElement | HTMLAudioElement | HTMLBaseElement | HTMLQuoteElement | HTMLBodyElement | HTMLBRElement | HTMLCanvasElement | HTMLTableCaptionElement | HTMLTableColElement | HTMLDataElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDialogElement | HTMLDListElement | HTMLEmbedElement | HTMLFormElement | HTMLHeadingElement | HTMLHeadElement | HTMLHRElement | HTMLHtmlElement | HTMLIFrameElement | HTMLImageElement | HTMLLIElement | HTMLLinkElement | HTMLMapElement | HTMLMenuElement | HTMLMetaElement | HTMLMeterElement | HTMLOListElement | HTMLOptGroupElement | HTMLOptionElement | HTMLOutputElement | HTMLPictureElement | HTMLPreElement | HTMLProgressElement | HTMLScriptElement | HTMLSelectElement | HTMLSlotElement | HTMLSourceElement | HTMLSpanElement | HTMLStyleElement | HTMLTableElement | HTMLTableSectionElement | HTMLTableCellElement | HTMLTemplateElement | HTMLTextAreaElement | HTMLTimeElement | HTMLTitleElement | HTMLTableRowElement | HTMLTrackElement | HTMLUListElement | HTMLVideoElement>, "id" | "onResize"> & {
|
|
39
39
|
className?: string;
|
|
40
40
|
collapsedSize?: number | undefined;
|
|
41
41
|
collapsible?: boolean | undefined;
|
|
@@ -60,4 +60,4 @@ declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("
|
|
|
60
60
|
declare const ResizableHandle: import("react").NamedExoticComponent<TResizableHandle>;
|
|
61
61
|
//#endregion
|
|
62
62
|
export { ResizablePanel as n, ResizablePanelGroup as r, ResizableHandle as t };
|
|
63
|
-
//# sourceMappingURL=resizable-
|
|
63
|
+
//# sourceMappingURL=resizable-C3uADYIg.d.cts.map
|
|
@@ -35,7 +35,7 @@ declare const ResizablePanelGroup: import("react").NamedExoticComponent<Omit<imp
|
|
|
35
35
|
children?: import("react").ReactNode | undefined;
|
|
36
36
|
} & import("react").RefAttributes<ResizablePrimitive.ImperativePanelGroupHandle>>;
|
|
37
37
|
/** An individual resizable panel within a ResizablePanelGroup. */
|
|
38
|
-
declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("react").HTMLAttributes<
|
|
38
|
+
declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("react").HTMLAttributes<HTMLInputElement | HTMLElement | HTMLParagraphElement | HTMLDivElement | HTMLButtonElement | HTMLFieldSetElement | HTMLLegendElement | HTMLLabelElement | HTMLObjectElement | HTMLAnchorElement | HTMLAreaElement | HTMLAudioElement | HTMLBaseElement | HTMLQuoteElement | HTMLBodyElement | HTMLBRElement | HTMLCanvasElement | HTMLTableCaptionElement | HTMLTableColElement | HTMLDataElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDialogElement | HTMLDListElement | HTMLEmbedElement | HTMLFormElement | HTMLHeadingElement | HTMLHeadElement | HTMLHRElement | HTMLHtmlElement | HTMLIFrameElement | HTMLImageElement | HTMLLIElement | HTMLLinkElement | HTMLMapElement | HTMLMenuElement | HTMLMetaElement | HTMLMeterElement | HTMLOListElement | HTMLOptGroupElement | HTMLOptionElement | HTMLOutputElement | HTMLPictureElement | HTMLPreElement | HTMLProgressElement | HTMLScriptElement | HTMLSelectElement | HTMLSlotElement | HTMLSourceElement | HTMLSpanElement | HTMLStyleElement | HTMLTableElement | HTMLTableSectionElement | HTMLTableCellElement | HTMLTemplateElement | HTMLTextAreaElement | HTMLTimeElement | HTMLTitleElement | HTMLTableRowElement | HTMLTrackElement | HTMLUListElement | HTMLVideoElement>, "id" | "onResize"> & {
|
|
39
39
|
className?: string;
|
|
40
40
|
collapsedSize?: number | undefined;
|
|
41
41
|
collapsible?: boolean | undefined;
|
|
@@ -60,4 +60,4 @@ declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("
|
|
|
60
60
|
declare const ResizableHandle: import("react").NamedExoticComponent<TResizableHandle>;
|
|
61
61
|
//#endregion
|
|
62
62
|
export { ResizablePanel as n, ResizablePanelGroup as r, ResizableHandle as t };
|
|
63
|
-
//# sourceMappingURL=resizable-
|
|
63
|
+
//# sourceMappingURL=resizable-C3uADYIg.d.mts.map
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
//#region packages/components/dialogs/side-panel.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Props for the {@link SidePanel} component.
|
|
4
|
+
*/
|
|
5
|
+
type SidePanelProps = {
|
|
6
|
+
/**
|
|
7
|
+
* Controls whether the panel is currently open.
|
|
8
|
+
* This is a **controlled** prop — pair it with `onOpenChange` to manage state.
|
|
9
|
+
*/
|
|
10
|
+
open?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Callback fired when the open state changes (e.g. backdrop click, close button, `Escape`).
|
|
13
|
+
*
|
|
14
|
+
* @param open - `true` when opening, `false` when closing.
|
|
15
|
+
*/
|
|
16
|
+
onOpenChange?: (open: boolean) => void;
|
|
17
|
+
/** Heading rendered at the top of the panel. */
|
|
18
|
+
title?: React.ReactNode;
|
|
19
|
+
/** Supporting text rendered below the title. */
|
|
20
|
+
description?: React.ReactNode;
|
|
21
|
+
/** Content rendered pinned to the bottom of the panel, typically action buttons. */
|
|
22
|
+
footer?: React.ReactNode;
|
|
23
|
+
/**
|
|
24
|
+
* When `true` (default), renders a `CloseButton` in the top-right corner of the panel.
|
|
25
|
+
*
|
|
26
|
+
* @default true
|
|
27
|
+
*/
|
|
28
|
+
showCloseButton?: boolean;
|
|
29
|
+
/** Main scrollable body content of the panel. */
|
|
30
|
+
children?: React.ReactNode;
|
|
31
|
+
/**
|
|
32
|
+
* Tailwind width classes applied to the panel from the `sm` breakpoint up (below `sm` the
|
|
33
|
+
* panel always fills the available inset area). Override to make the panel narrower, wider,
|
|
34
|
+
* or a fixed size, e.g. `'sm:w-96'` or `'sm:w-full sm:max-w-3xl'`.
|
|
35
|
+
*
|
|
36
|
+
* @default 'sm:w-1/2 sm:max-w-2xl'
|
|
37
|
+
*/
|
|
38
|
+
width?: string;
|
|
39
|
+
/**
|
|
40
|
+
* When `false`, the panel becomes non-modal: no dimmed overlay is rendered, background content
|
|
41
|
+
* stays fully visible and interactive, and the panel can only be closed via its close button
|
|
42
|
+
* (`Escape` and outside clicks are disabled). `showCloseButton` is forced to `true` in this mode
|
|
43
|
+
* regardless of what's passed, since it becomes the only way to close the panel.
|
|
44
|
+
*
|
|
45
|
+
* @default true
|
|
46
|
+
*/
|
|
47
|
+
modal?: boolean;
|
|
48
|
+
/** Additional class names applied to the panel itself. */
|
|
49
|
+
className?: string;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* A controlled dialog panel anchored to the right half of the screen, inset from the viewport
|
|
53
|
+
* edges on both axes. Always lays out as a fixed header, a scrollable body, and a fixed footer.
|
|
54
|
+
*
|
|
55
|
+
* **Import:** `import { SidePanel } from '@customafk/lunas-ui/dialogs/side-panel'`
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```tsx
|
|
59
|
+
* import { useState } from 'react';
|
|
60
|
+
* import { Button } from '@customafk/lunas-ui/ui/button';
|
|
61
|
+
* import { SidePanel } from '@customafk/lunas-ui/dialogs/side-panel';
|
|
62
|
+
*
|
|
63
|
+
* export function OrderDetailPanel({ order }: { order: Order }) {
|
|
64
|
+
* const [open, setOpen] = useState(false);
|
|
65
|
+
*
|
|
66
|
+
* return (
|
|
67
|
+
* <>
|
|
68
|
+
* <Button onClick={() => setOpen(true)}>Xem chi tiết</Button>
|
|
69
|
+
* <SidePanel
|
|
70
|
+
* open={open}
|
|
71
|
+
* onOpenChange={setOpen}
|
|
72
|
+
* title="Chi tiết đơn hàng"
|
|
73
|
+
* description="Xem và cập nhật thông tin đơn hàng."
|
|
74
|
+
* footer={<Button onClick={() => setOpen(false)}>Lưu thay đổi</Button>}
|
|
75
|
+
* >
|
|
76
|
+
* <p>Nội dung có thể cuộn ở đây.</p>
|
|
77
|
+
* </SidePanel>
|
|
78
|
+
* </>
|
|
79
|
+
* );
|
|
80
|
+
* }
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
declare const SidePanel: React.FC<SidePanelProps>;
|
|
84
|
+
//#endregion
|
|
85
|
+
export { SidePanelProps as n, SidePanel as t };
|
|
86
|
+
//# sourceMappingURL=side-panel-DPrM5ygG.d.cts.map
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
//#region packages/components/dialogs/side-panel.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Props for the {@link SidePanel} component.
|
|
4
|
+
*/
|
|
5
|
+
type SidePanelProps = {
|
|
6
|
+
/**
|
|
7
|
+
* Controls whether the panel is currently open.
|
|
8
|
+
* This is a **controlled** prop — pair it with `onOpenChange` to manage state.
|
|
9
|
+
*/
|
|
10
|
+
open?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Callback fired when the open state changes (e.g. backdrop click, close button, `Escape`).
|
|
13
|
+
*
|
|
14
|
+
* @param open - `true` when opening, `false` when closing.
|
|
15
|
+
*/
|
|
16
|
+
onOpenChange?: (open: boolean) => void;
|
|
17
|
+
/** Heading rendered at the top of the panel. */
|
|
18
|
+
title?: React.ReactNode;
|
|
19
|
+
/** Supporting text rendered below the title. */
|
|
20
|
+
description?: React.ReactNode;
|
|
21
|
+
/** Content rendered pinned to the bottom of the panel, typically action buttons. */
|
|
22
|
+
footer?: React.ReactNode;
|
|
23
|
+
/**
|
|
24
|
+
* When `true` (default), renders a `CloseButton` in the top-right corner of the panel.
|
|
25
|
+
*
|
|
26
|
+
* @default true
|
|
27
|
+
*/
|
|
28
|
+
showCloseButton?: boolean;
|
|
29
|
+
/** Main scrollable body content of the panel. */
|
|
30
|
+
children?: React.ReactNode;
|
|
31
|
+
/**
|
|
32
|
+
* Tailwind width classes applied to the panel from the `sm` breakpoint up (below `sm` the
|
|
33
|
+
* panel always fills the available inset area). Override to make the panel narrower, wider,
|
|
34
|
+
* or a fixed size, e.g. `'sm:w-96'` or `'sm:w-full sm:max-w-3xl'`.
|
|
35
|
+
*
|
|
36
|
+
* @default 'sm:w-1/2 sm:max-w-2xl'
|
|
37
|
+
*/
|
|
38
|
+
width?: string;
|
|
39
|
+
/**
|
|
40
|
+
* When `false`, the panel becomes non-modal: no dimmed overlay is rendered, background content
|
|
41
|
+
* stays fully visible and interactive, and the panel can only be closed via its close button
|
|
42
|
+
* (`Escape` and outside clicks are disabled). `showCloseButton` is forced to `true` in this mode
|
|
43
|
+
* regardless of what's passed, since it becomes the only way to close the panel.
|
|
44
|
+
*
|
|
45
|
+
* @default true
|
|
46
|
+
*/
|
|
47
|
+
modal?: boolean;
|
|
48
|
+
/** Additional class names applied to the panel itself. */
|
|
49
|
+
className?: string;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* A controlled dialog panel anchored to the right half of the screen, inset from the viewport
|
|
53
|
+
* edges on both axes. Always lays out as a fixed header, a scrollable body, and a fixed footer.
|
|
54
|
+
*
|
|
55
|
+
* **Import:** `import { SidePanel } from '@customafk/lunas-ui/dialogs/side-panel'`
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```tsx
|
|
59
|
+
* import { useState } from 'react';
|
|
60
|
+
* import { Button } from '@customafk/lunas-ui/ui/button';
|
|
61
|
+
* import { SidePanel } from '@customafk/lunas-ui/dialogs/side-panel';
|
|
62
|
+
*
|
|
63
|
+
* export function OrderDetailPanel({ order }: { order: Order }) {
|
|
64
|
+
* const [open, setOpen] = useState(false);
|
|
65
|
+
*
|
|
66
|
+
* return (
|
|
67
|
+
* <>
|
|
68
|
+
* <Button onClick={() => setOpen(true)}>Xem chi tiết</Button>
|
|
69
|
+
* <SidePanel
|
|
70
|
+
* open={open}
|
|
71
|
+
* onOpenChange={setOpen}
|
|
72
|
+
* title="Chi tiết đơn hàng"
|
|
73
|
+
* description="Xem và cập nhật thông tin đơn hàng."
|
|
74
|
+
* footer={<Button onClick={() => setOpen(false)}>Lưu thay đổi</Button>}
|
|
75
|
+
* >
|
|
76
|
+
* <p>Nội dung có thể cuộn ở đây.</p>
|
|
77
|
+
* </SidePanel>
|
|
78
|
+
* </>
|
|
79
|
+
* );
|
|
80
|
+
* }
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
declare const SidePanel: React.FC<SidePanelProps>;
|
|
84
|
+
//#endregion
|
|
85
|
+
export { SidePanelProps as n, SidePanel as t };
|
|
86
|
+
//# sourceMappingURL=side-panel-DPrM5ygG.d.mts.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Flex as e}from"./layouts/flex.mjs";import{Q as t}from"./tables-Dg3KMBKA.mjs";import{memo as n,useCallback as r,useMemo as i}from"react";import{cn as a}from"@customafk/react-toolkit/utils";import{jsx as o,jsxs as s}from"react/jsx-runtime";const c=(e,t,n)=>{let r=10**t;switch(n){case`floor`:return Math.floor(e*r)/r;case`ceil`:return Math.ceil(e*r)/r;default:return Math.round(e*r)/r}},l=n(({decimalSeparator:n=`.`,groupSeparator:l=`,`,prefix:u,suffix:d,precision:f,roundingMode:p=`round`,showTrailingZeros:m=!1,size:h=`lg`,value:g=0,colorize:_=!1,trend:v})=>{let y=i(()=>{let e={};return typeof f==`number`&&f>=0&&m&&(e.minimumFractionDigits=f),e.maximumFractionDigits=f,e},[f,m]),b=r(e=>{let t=e;return typeof f==`number`&&f>=0&&(t=c(e,f,p)),t.toLocaleString(`vi-VN`,y)},[p,y,f]),x=i(()=>{if(typeof g==`number`)return Number.isNaN(g)||!Number.isFinite(g)?`N/A`:b(g);if(typeof g==`string`){let e=g.trim();if(!e)return`N/A`;let t=Number(e);return Number.isNaN(t)||!Number.isFinite(t)?`N/A`:b(t)}return`N/A`},[g,b]),S=i(()=>n===`.`&&l===`,`?x:x.replace(/,/g,l).replace(/\./g,n),[x,n,l]),C=i(()=>{if(v)return v;if(!_)return;let e=typeof g==`string`?Number(g.trim()):g;if(!(typeof e!=`number`||Number.isNaN(e)))return e<0?`down`:e>0?`up`:`neutral`},[v,_,g]);return S===`0`||S===`N/A`||!S?o(t,{}):s(e,{padding:`none`,className:a(`font-number tabular-nums`,h===`xs`&&`text-xs`,h===`sm`&&`text-sm`,h===`md`&&`text-base`,h===`lg`&&`text-lg`,h===`xl`&&`text-xl`,!C&&`text-text-positive`,C===`down`&&`text-danger`,C===`up`&&`text-success`,C===`neutral`&&`text-text-positive-strong`),children:[u,o(`p`,{children:S}),d]})});l.displayName=`UITableStatisticDisplay`;export{l as UITableStatisticDisplay};
|
|
2
|
+
//# sourceMappingURL=statistic-639yMA2d.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statistic-639yMA2d.mjs","names":[],"sources":["../packages/components/features/tables/components/atoms/statistic.tsx"],"sourcesContent":["'use client';\nimport { memo, useCallback, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Flex } from '@/components/layouts/flex';\nimport { UITableEmpty } from './empty';\n\n/**\n * Applies the specified rounding mode to `num` at the given decimal precision.\n *\n * @param num - The number to round.\n * @param precisionValue - Number of decimal places to keep.\n * @param roundingMode - Rounding strategy: `'round'` (default), `'floor'`, or `'ceil'`.\n * @returns The rounded number.\n */\nconst applyRounding = (num: number, precisionValue: number, roundingMode?: 'round' | 'floor' | 'ceil') => {\n const multiplier = 10 ** precisionValue;\n\n switch (roundingMode) {\n case 'floor':\n return Math.floor(num * multiplier) / multiplier;\n case 'ceil':\n return Math.ceil(num * multiplier) / multiplier;\n default:\n return Math.round(num * multiplier) / multiplier;\n }\n};\n\n/** Props for the {@link UITableStatisticDisplay} component. */\ntype Props = {\n /** Character used to separate the integer and fractional parts (default: `'.'`). */\n decimalSeparator?: string;\n /** Character used to separate thousands groups (default: `','`). */\n groupSeparator?: string;\n /** Optional node rendered before the formatted number (e.g. a currency symbol). */\n prefix?: React.ReactNode;\n /** Optional node rendered after the formatted number (e.g. a unit label). */\n suffix?: React.ReactNode;\n /** Number of decimal digits to display. */\n precision?: number;\n /** Rounding strategy applied before formatting (default: `'round'`). */\n roundingMode?: 'round' | 'floor' | 'ceil';\n /** When `true`, pads the fractional part with trailing zeros up to `precision` digits. */\n showTrailingZeros?: boolean;\n /** Font-size variant for the displayed number (default: `'lg'`). */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** The numeric or string value to format; falsy / invalid values render an empty state. */\n value: number | string | null | undefined;\n /** When `true` and `trend` is not set, auto-derives color from the value's sign (negative → red, positive → green, zero → neutral). */\n colorize?: boolean;\n /**\n * Explicit color override, independent of the value's numeric sign — e.g. a large\n * positive figure can still be marked `'down'` (red) to flag it as significant.\n * Takes precedence over `colorize`'s sign-based auto-detection.\n */\n trend?: 'up' | 'down' | 'neutral';\n};\n\n/**\n * A memoized table-cell component that formats a numeric value with configurable\n * separators, precision, rounding, and size; renders {@link UITableEmpty} when\n * the value is zero, invalid, or absent.\n *\n * @example\n * import { UITableStatisticDisplay } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableStatisticDisplay value={1234567.89} precision={2} prefix=\"$\" size=\"md\" />\n * <UITableStatisticDisplay value={1234567.89} precision={2} prefix=\"$\" trend=\"down\" />\n */\nexport const UITableStatisticDisplay = memo(\n ({\n decimalSeparator = '.',\n groupSeparator = ',',\n prefix: Prefix,\n suffix: Suffix,\n precision,\n roundingMode = 'round',\n showTrailingZeros = false,\n size = 'lg',\n value = 0,\n colorize = false,\n trend,\n }: Props) => {\n // Memoize number formatting options\n const formatOptions = useMemo((): Intl.NumberFormatOptions => {\n const options: Intl.NumberFormatOptions = {};\n\n if (typeof precision === 'number' && precision >= 0 && showTrailingZeros) {\n options.minimumFractionDigits = precision;\n options.maximumFractionDigits = precision;\n } else {\n options.maximumFractionDigits = precision;\n }\n\n return options;\n }, [precision, showTrailingZeros]);\n\n const formatNumber = useCallback(\n (num: number): string => {\n let processedNum = num;\n\n // Áp dụng làm tròn nếu có precision\n if (typeof precision === 'number' && precision >= 0) {\n processedNum = applyRounding(num, precision, roundingMode);\n }\n\n return processedNum.toLocaleString('vi-VN', formatOptions);\n },\n [roundingMode, formatOptions, precision]\n );\n\n // Memoize value processing\n const processedValue = useMemo((): string => {\n // Xử lý giá trị number\n if (typeof value === 'number') {\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n return 'N/A';\n }\n return formatNumber(value);\n }\n\n // Xử lý giá trị string\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n\n // Nếu là chuỗi rỗng\n if (!trimmedValue) {\n return 'N/A';\n }\n\n // Thử convert sang number\n const numValue = Number(trimmedValue);\n\n if (Number.isNaN(numValue) || !Number.isFinite(numValue)) {\n // Nếu không phải số, trả về string gốc\n return 'N/A';\n }\n\n return formatNumber(numValue);\n }\n\n return 'N/A';\n }, [value, formatNumber]);\n\n // Memoize separator replacement\n const finalFormattedValue = useMemo((): string => {\n // Chỉ thay thế separators nếu khác mặc định\n if (decimalSeparator === '.' && groupSeparator === ',') {\n return processedValue;\n }\n return processedValue.replace(/,/g, groupSeparator).replace(/\\./g, decimalSeparator);\n }, [processedValue, decimalSeparator, groupSeparator]);\n\n const effectiveTrend = useMemo(() => {\n if (trend) return trend;\n if (!colorize) return undefined;\n\n const num = typeof value === 'string' ? Number(value.trim()) : value;\n if (typeof num !== 'number' || Number.isNaN(num)) return undefined;\n if (num < 0) return 'down';\n if (num > 0) return 'up';\n return 'neutral';\n }, [trend, colorize, value]);\n\n if (finalFormattedValue === '0' || finalFormattedValue === 'N/A' || !finalFormattedValue) {\n return <UITableEmpty />;\n }\n\n return (\n <Flex\n padding=\"none\"\n className={cn(\n 'font-number tabular-nums',\n size === 'xs' && 'text-xs',\n size === 'sm' && 'text-sm',\n size === 'md' && 'text-base',\n size === 'lg' && 'text-lg',\n size === 'xl' && 'text-xl',\n !effectiveTrend && 'text-text-positive',\n effectiveTrend === 'down' && 'text-danger',\n effectiveTrend === 'up' && 'text-success',\n effectiveTrend === 'neutral' && 'text-text-positive-strong'\n )}\n >\n {Prefix}\n <p>{finalFormattedValue}</p>\n {Suffix}\n </Flex>\n );\n }\n);\nUITableStatisticDisplay.displayName = 'UITableStatisticDisplay';\n"],"mappings":"qPAgBA,MAAM,GAAiB,EAAa,EAAwB,IAA8C,CACxG,IAAM,EAAa,IAAM,EAEzB,OAAQ,EAAR,CACE,IAAK,QACH,OAAO,KAAK,MAAM,EAAM,CAAU,EAAI,EACxC,IAAK,OACH,OAAO,KAAK,KAAK,EAAM,CAAU,EAAI,EACvC,QACE,OAAO,KAAK,MAAM,EAAM,CAAU,EAAI,CAC1C,CACF,EA2Ca,EAA0B,GACpC,CACC,mBAAmB,IACnB,iBAAiB,IACjB,OAAQ,EACR,OAAQ,EACR,YACA,eAAe,QACf,oBAAoB,GACpB,OAAO,KACP,QAAQ,EACR,WAAW,GACX,WACW,CAEX,IAAM,EAAgB,MAAwC,CAC5D,IAAM,EAAoC,CAAC,EAS3C,OAPI,OAAO,GAAc,UAAY,GAAa,GAAK,IACrD,EAAQ,sBAAwB,GAGhC,EAAQ,sBAAwB,EAG3B,CACT,EAAG,CAAC,EAAW,CAAiB,CAAC,EAE3B,EAAe,EAClB,GAAwB,CACvB,IAAI,EAAe,EAOnB,OAJI,OAAO,GAAc,UAAY,GAAa,IAChD,EAAe,EAAc,EAAK,EAAW,CAAY,GAGpD,EAAa,eAAe,QAAS,CAAa,CAC3D,EACA,CAAC,EAAc,EAAe,CAAS,CACzC,EAGM,EAAiB,MAAsB,CAE3C,GAAI,OAAO,GAAU,SAInB,OAHI,OAAO,MAAM,CAAK,GAAK,CAAC,OAAO,SAAS,CAAK,EACxC,MAEF,EAAa,CAAK,EAI3B,GAAI,OAAO,GAAU,SAAU,CAC7B,IAAM,EAAe,EAAM,KAAK,EAGhC,GAAI,CAAC,EACH,MAAO,MAIT,IAAM,EAAW,OAAO,CAAY,EAOpC,OALI,OAAO,MAAM,CAAQ,GAAK,CAAC,OAAO,SAAS,CAAQ,EAE9C,MAGF,EAAa,CAAQ,CAC9B,CAEA,MAAO,KACT,EAAG,CAAC,EAAO,CAAY,CAAC,EAGlB,EAAsB,MAEtB,IAAqB,KAAO,IAAmB,IAC1C,EAEF,EAAe,QAAQ,KAAM,CAAc,CAAC,CAAC,QAAQ,MAAO,CAAgB,EAClF,CAAC,EAAgB,EAAkB,CAAc,CAAC,EAE/C,EAAiB,MAAc,CACnC,GAAI,EAAO,OAAO,EAClB,GAAI,CAAC,EAAU,OAEf,IAAM,EAAM,OAAO,GAAU,SAAW,OAAO,EAAM,KAAK,CAAC,EAAI,EAC3D,YAAO,GAAQ,UAAY,OAAO,MAAM,CAAG,GAG/C,OAFI,EAAM,EAAU,OAChB,EAAM,EAAU,KACb,SACT,EAAG,CAAC,EAAO,EAAU,CAAK,CAAC,EAM3B,OAJI,IAAwB,KAAO,IAAwB,OAAS,CAAC,EAC5D,EAAC,EAAD,CAAe,CAAA,EAItB,EAAC,EAAD,CACE,QAAQ,OACR,UAAW,EACT,2BACA,IAAS,MAAQ,UACjB,IAAS,MAAQ,UACjB,IAAS,MAAQ,YACjB,IAAS,MAAQ,UACjB,IAAS,MAAQ,UACjB,CAAC,GAAkB,qBACnB,IAAmB,QAAU,cAC7B,IAAmB,MAAQ,eAC3B,IAAmB,WAAa,2BAClC,EAbF,SAAA,CAeG,EACD,EAAC,IAAD,CAAA,SAAI,CAAuB,CAAA,EAC1B,CACG,GAEV,CACF,EACA,EAAwB,YAAc"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("./layouts/flex.cjs"),t=require("./tables-BqZ4Zs6e.cjs");let n=require("react"),r=require("@customafk/react-toolkit/utils"),i=require("react/jsx-runtime");const a=(e,t,n)=>{let r=10**t;switch(n){case`floor`:return Math.floor(e*r)/r;case`ceil`:return Math.ceil(e*r)/r;default:return Math.round(e*r)/r}},o=(0,n.memo)(({decimalSeparator:o=`.`,groupSeparator:s=`,`,prefix:c,suffix:l,precision:u,roundingMode:d=`round`,showTrailingZeros:f=!1,size:p=`lg`,value:m=0,colorize:h=!1,trend:g})=>{let _=(0,n.useMemo)(()=>{let e={};return typeof u==`number`&&u>=0&&f&&(e.minimumFractionDigits=u),e.maximumFractionDigits=u,e},[u,f]),v=(0,n.useCallback)(e=>{let t=e;return typeof u==`number`&&u>=0&&(t=a(e,u,d)),t.toLocaleString(`vi-VN`,_)},[d,_,u]),y=(0,n.useMemo)(()=>{if(typeof m==`number`)return Number.isNaN(m)||!Number.isFinite(m)?`N/A`:v(m);if(typeof m==`string`){let e=m.trim();if(!e)return`N/A`;let t=Number(e);return Number.isNaN(t)||!Number.isFinite(t)?`N/A`:v(t)}return`N/A`},[m,v]),b=(0,n.useMemo)(()=>o===`.`&&s===`,`?y:y.replace(/,/g,s).replace(/\./g,o),[y,o,s]),x=(0,n.useMemo)(()=>{if(g)return g;if(!h)return;let e=typeof m==`string`?Number(m.trim()):m;if(!(typeof e!=`number`||Number.isNaN(e)))return e<0?`down`:e>0?`up`:`neutral`},[g,h,m]);return b===`0`||b===`N/A`||!b?(0,i.jsx)(t.Q,{}):(0,i.jsxs)(e.Flex,{padding:`none`,className:(0,r.cn)(`font-number tabular-nums`,p===`xs`&&`text-xs`,p===`sm`&&`text-sm`,p===`md`&&`text-base`,p===`lg`&&`text-lg`,p===`xl`&&`text-xl`,!x&&`text-text-positive`,x===`down`&&`text-danger`,x===`up`&&`text-success`,x===`neutral`&&`text-text-positive-strong`),children:[c,(0,i.jsx)(`p`,{children:b}),l]})});o.displayName=`UITableStatisticDisplay`,exports.UITableStatisticDisplay=o;
|
|
2
|
+
//# sourceMappingURL=statistic-CE_Jg8SN.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statistic-CE_Jg8SN.cjs","names":["UITableEmpty","Flex"],"sources":["../packages/components/features/tables/components/atoms/statistic.tsx"],"sourcesContent":["'use client';\nimport { memo, useCallback, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Flex } from '@/components/layouts/flex';\nimport { UITableEmpty } from './empty';\n\n/**\n * Applies the specified rounding mode to `num` at the given decimal precision.\n *\n * @param num - The number to round.\n * @param precisionValue - Number of decimal places to keep.\n * @param roundingMode - Rounding strategy: `'round'` (default), `'floor'`, or `'ceil'`.\n * @returns The rounded number.\n */\nconst applyRounding = (num: number, precisionValue: number, roundingMode?: 'round' | 'floor' | 'ceil') => {\n const multiplier = 10 ** precisionValue;\n\n switch (roundingMode) {\n case 'floor':\n return Math.floor(num * multiplier) / multiplier;\n case 'ceil':\n return Math.ceil(num * multiplier) / multiplier;\n default:\n return Math.round(num * multiplier) / multiplier;\n }\n};\n\n/** Props for the {@link UITableStatisticDisplay} component. */\ntype Props = {\n /** Character used to separate the integer and fractional parts (default: `'.'`). */\n decimalSeparator?: string;\n /** Character used to separate thousands groups (default: `','`). */\n groupSeparator?: string;\n /** Optional node rendered before the formatted number (e.g. a currency symbol). */\n prefix?: React.ReactNode;\n /** Optional node rendered after the formatted number (e.g. a unit label). */\n suffix?: React.ReactNode;\n /** Number of decimal digits to display. */\n precision?: number;\n /** Rounding strategy applied before formatting (default: `'round'`). */\n roundingMode?: 'round' | 'floor' | 'ceil';\n /** When `true`, pads the fractional part with trailing zeros up to `precision` digits. */\n showTrailingZeros?: boolean;\n /** Font-size variant for the displayed number (default: `'lg'`). */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** The numeric or string value to format; falsy / invalid values render an empty state. */\n value: number | string | null | undefined;\n /** When `true` and `trend` is not set, auto-derives color from the value's sign (negative → red, positive → green, zero → neutral). */\n colorize?: boolean;\n /**\n * Explicit color override, independent of the value's numeric sign — e.g. a large\n * positive figure can still be marked `'down'` (red) to flag it as significant.\n * Takes precedence over `colorize`'s sign-based auto-detection.\n */\n trend?: 'up' | 'down' | 'neutral';\n};\n\n/**\n * A memoized table-cell component that formats a numeric value with configurable\n * separators, precision, rounding, and size; renders {@link UITableEmpty} when\n * the value is zero, invalid, or absent.\n *\n * @example\n * import { UITableStatisticDisplay } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableStatisticDisplay value={1234567.89} precision={2} prefix=\"$\" size=\"md\" />\n * <UITableStatisticDisplay value={1234567.89} precision={2} prefix=\"$\" trend=\"down\" />\n */\nexport const UITableStatisticDisplay = memo(\n ({\n decimalSeparator = '.',\n groupSeparator = ',',\n prefix: Prefix,\n suffix: Suffix,\n precision,\n roundingMode = 'round',\n showTrailingZeros = false,\n size = 'lg',\n value = 0,\n colorize = false,\n trend,\n }: Props) => {\n // Memoize number formatting options\n const formatOptions = useMemo((): Intl.NumberFormatOptions => {\n const options: Intl.NumberFormatOptions = {};\n\n if (typeof precision === 'number' && precision >= 0 && showTrailingZeros) {\n options.minimumFractionDigits = precision;\n options.maximumFractionDigits = precision;\n } else {\n options.maximumFractionDigits = precision;\n }\n\n return options;\n }, [precision, showTrailingZeros]);\n\n const formatNumber = useCallback(\n (num: number): string => {\n let processedNum = num;\n\n // Áp dụng làm tròn nếu có precision\n if (typeof precision === 'number' && precision >= 0) {\n processedNum = applyRounding(num, precision, roundingMode);\n }\n\n return processedNum.toLocaleString('vi-VN', formatOptions);\n },\n [roundingMode, formatOptions, precision]\n );\n\n // Memoize value processing\n const processedValue = useMemo((): string => {\n // Xử lý giá trị number\n if (typeof value === 'number') {\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n return 'N/A';\n }\n return formatNumber(value);\n }\n\n // Xử lý giá trị string\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n\n // Nếu là chuỗi rỗng\n if (!trimmedValue) {\n return 'N/A';\n }\n\n // Thử convert sang number\n const numValue = Number(trimmedValue);\n\n if (Number.isNaN(numValue) || !Number.isFinite(numValue)) {\n // Nếu không phải số, trả về string gốc\n return 'N/A';\n }\n\n return formatNumber(numValue);\n }\n\n return 'N/A';\n }, [value, formatNumber]);\n\n // Memoize separator replacement\n const finalFormattedValue = useMemo((): string => {\n // Chỉ thay thế separators nếu khác mặc định\n if (decimalSeparator === '.' && groupSeparator === ',') {\n return processedValue;\n }\n return processedValue.replace(/,/g, groupSeparator).replace(/\\./g, decimalSeparator);\n }, [processedValue, decimalSeparator, groupSeparator]);\n\n const effectiveTrend = useMemo(() => {\n if (trend) return trend;\n if (!colorize) return undefined;\n\n const num = typeof value === 'string' ? Number(value.trim()) : value;\n if (typeof num !== 'number' || Number.isNaN(num)) return undefined;\n if (num < 0) return 'down';\n if (num > 0) return 'up';\n return 'neutral';\n }, [trend, colorize, value]);\n\n if (finalFormattedValue === '0' || finalFormattedValue === 'N/A' || !finalFormattedValue) {\n return <UITableEmpty />;\n }\n\n return (\n <Flex\n padding=\"none\"\n className={cn(\n 'font-number tabular-nums',\n size === 'xs' && 'text-xs',\n size === 'sm' && 'text-sm',\n size === 'md' && 'text-base',\n size === 'lg' && 'text-lg',\n size === 'xl' && 'text-xl',\n !effectiveTrend && 'text-text-positive',\n effectiveTrend === 'down' && 'text-danger',\n effectiveTrend === 'up' && 'text-success',\n effectiveTrend === 'neutral' && 'text-text-positive-strong'\n )}\n >\n {Prefix}\n <p>{finalFormattedValue}</p>\n {Suffix}\n </Flex>\n );\n }\n);\nUITableStatisticDisplay.displayName = 'UITableStatisticDisplay';\n"],"mappings":"2KAgBA,MAAM,GAAiB,EAAa,EAAwB,IAA8C,CACxG,IAAM,EAAa,IAAM,EAEzB,OAAQ,EAAR,CACE,IAAK,QACH,OAAO,KAAK,MAAM,EAAM,CAAU,EAAI,EACxC,IAAK,OACH,OAAO,KAAK,KAAK,EAAM,CAAU,EAAI,EACvC,QACE,OAAO,KAAK,MAAM,EAAM,CAAU,EAAI,CAC1C,CACF,EA2Ca,GAAA,EAAA,EAAA,KAAA,EACV,CACC,mBAAmB,IACnB,iBAAiB,IACjB,OAAQ,EACR,OAAQ,EACR,YACA,eAAe,QACf,oBAAoB,GACpB,OAAO,KACP,QAAQ,EACR,WAAW,GACX,WACW,CAEX,IAAM,GAAA,EAAA,EAAA,QAAA,KAAwD,CAC5D,IAAM,EAAoC,CAAC,EAS3C,OAPI,OAAO,GAAc,UAAY,GAAa,GAAK,IACrD,EAAQ,sBAAwB,GAGhC,EAAQ,sBAAwB,EAG3B,CACT,EAAG,CAAC,EAAW,CAAiB,CAAC,EAE3B,GAAA,EAAA,EAAA,YAAA,CACH,GAAwB,CACvB,IAAI,EAAe,EAOnB,OAJI,OAAO,GAAc,UAAY,GAAa,IAChD,EAAe,EAAc,EAAK,EAAW,CAAY,GAGpD,EAAa,eAAe,QAAS,CAAa,CAC3D,EACA,CAAC,EAAc,EAAe,CAAS,CACzC,EAGM,GAAA,EAAA,EAAA,QAAA,KAAuC,CAE3C,GAAI,OAAO,GAAU,SAInB,OAHI,OAAO,MAAM,CAAK,GAAK,CAAC,OAAO,SAAS,CAAK,EACxC,MAEF,EAAa,CAAK,EAI3B,GAAI,OAAO,GAAU,SAAU,CAC7B,IAAM,EAAe,EAAM,KAAK,EAGhC,GAAI,CAAC,EACH,MAAO,MAIT,IAAM,EAAW,OAAO,CAAY,EAOpC,OALI,OAAO,MAAM,CAAQ,GAAK,CAAC,OAAO,SAAS,CAAQ,EAE9C,MAGF,EAAa,CAAQ,CAC9B,CAEA,MAAO,KACT,EAAG,CAAC,EAAO,CAAY,CAAC,EAGlB,GAAA,EAAA,EAAA,QAAA,KAEA,IAAqB,KAAO,IAAmB,IAC1C,EAEF,EAAe,QAAQ,KAAM,CAAc,CAAC,CAAC,QAAQ,MAAO,CAAgB,EAClF,CAAC,EAAgB,EAAkB,CAAc,CAAC,EAE/C,GAAA,EAAA,EAAA,QAAA,KAA+B,CACnC,GAAI,EAAO,OAAO,EAClB,GAAI,CAAC,EAAU,OAEf,IAAM,EAAM,OAAO,GAAU,SAAW,OAAO,EAAM,KAAK,CAAC,EAAI,EAC3D,YAAO,GAAQ,UAAY,OAAO,MAAM,CAAG,GAG/C,OAFI,EAAM,EAAU,OAChB,EAAM,EAAU,KACb,SACT,EAAG,CAAC,EAAO,EAAU,CAAK,CAAC,EAM3B,OAJI,IAAwB,KAAO,IAAwB,OAAS,CAAC,GAC5D,EAAA,EAAA,IAAA,CAACA,EAAAA,EAAD,CAAe,CAAA,GAItB,EAAA,EAAA,KAAA,CAACC,EAAAA,KAAD,CACE,QAAQ,OACR,WAAA,EAAA,EAAA,GAAA,CACE,2BACA,IAAS,MAAQ,UACjB,IAAS,MAAQ,UACjB,IAAS,MAAQ,YACjB,IAAS,MAAQ,UACjB,IAAS,MAAQ,UACjB,CAAC,GAAkB,qBACnB,IAAmB,QAAU,cAC7B,IAAmB,MAAQ,eAC3B,IAAmB,WAAa,2BAClC,EAbF,SAAA,CAeG,GACD,EAAA,EAAA,IAAA,CAAC,IAAD,CAAA,SAAI,CAAuB,CAAA,EAC1B,CACG,GAEV,CACF,EACA,EAAwB,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Badge as e}from"./ui/badge.mjs";import{Q as t}from"./tables-
|
|
2
|
-
//# sourceMappingURL=status-display-
|
|
1
|
+
import{Badge as e}from"./ui/badge.mjs";import{Q as t}from"./tables-Dg3KMBKA.mjs";import{jsx as n}from"react/jsx-runtime";const r=({value:r,colorMap:i,defaultColor:a=`muted`,variant:o=`soft`})=>r==null||r===``?n(t,{}):n(e,{variant:o,color:(i&&i[r])??a,size:`sm`,className:`min-w-16 justify-center capitalize`,children:r.charAt(0).toUpperCase()+r.slice(1).replace(/_/g,` `)});export{r as UITableStatusDisplay};
|
|
2
|
+
//# sourceMappingURL=status-display-BCYpNJmd.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-display-
|
|
1
|
+
{"version":3,"file":"status-display-BCYpNJmd.mjs","names":[],"sources":["../packages/components/features/tables/components/atoms/status-display.tsx"],"sourcesContent":["'use client';\n\nimport { Badge } from '@/components/ui/badge';\nimport { UITableEmpty } from './empty';\n\ntype BadgeColor = 'primary' | 'secondary' | 'muted' | 'accent' | 'info' | 'success' | 'warning' | 'danger';\n\n/** Props for the {@link UITableStatusDisplay} component. */\ntype Props = {\n /** The status string to display; `null`/`undefined` renders an empty state. */\n value: string | null | undefined;\n /**\n * Maps each status string to a badge color. Any key not present in the map\n * falls back to `defaultColor`.\n */\n colorMap?: Record<string, BadgeColor>;\n /** Color used when `value` is not found in `colorMap` (default: `'muted'`). */\n defaultColor?: BadgeColor;\n /** Badge variant forwarded to the underlying {@link Badge} (default: `'soft'`). */\n variant?: 'solid' | 'soft' | 'outline';\n};\n\n/**\n * Renders a color-coded status badge for a table cell. The mapping from status\n * string to badge color is fully configurable via `colorMap`; unknown statuses\n * fall back to `defaultColor`.\n *\n * @example\n * import { UITableStatusDisplay } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableStatusDisplay\n * value=\"active\"\n * colorMap={{ active: 'success', inactive: 'danger', pending: 'warning' }}\n * />\n */\nexport const UITableStatusDisplay: React.FC<Props> = ({ value, colorMap, defaultColor = 'muted', variant = 'soft' }) => {\n if (value === null || value === undefined || value === '') return <UITableEmpty />;\n\n const color: BadgeColor = (colorMap && colorMap[value]) ?? defaultColor;\n const label = value.charAt(0).toUpperCase() + value.slice(1).replace(/_/g, ' ');\n\n return (\n <Badge variant={variant} color={color} size=\"sm\" className=\"min-w-16 justify-center capitalize\">\n {label}\n </Badge>\n );\n};\n"],"mappings":"yHAmCA,MAAa,GAAyC,CAAE,QAAO,WAAU,eAAe,QAAS,UAAU,UACrG,GAAU,MAA+B,IAAU,GAAW,EAAC,EAAD,CAAe,CAAA,EAM/E,EAAC,EAAD,CAAgB,UAAS,OAJA,GAAY,EAAS,KAAW,EAIlB,KAAK,KAAK,UAAU,qCAH/C,SAAA,EAAM,OAAO,CAAC,CAAC,CAAC,YAAY,EAAI,EAAM,MAAM,CAAC,CAAC,CAAC,QAAQ,KAAM,GAAG,CAKrE,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("./ui/badge.cjs"),t=require("./tables-
|
|
2
|
-
//# sourceMappingURL=status-display-
|
|
1
|
+
const e=require("./ui/badge.cjs"),t=require("./tables-BqZ4Zs6e.cjs");let n=require("react/jsx-runtime");const r=({value:r,colorMap:i,defaultColor:a=`muted`,variant:o=`soft`})=>r==null||r===``?(0,n.jsx)(t.Q,{}):(0,n.jsx)(e.Badge,{variant:o,color:(i&&i[r])??a,size:`sm`,className:`min-w-16 justify-center capitalize`,children:r.charAt(0).toUpperCase()+r.slice(1).replace(/_/g,` `)});exports.UITableStatusDisplay=r;
|
|
2
|
+
//# sourceMappingURL=status-display-xcCCGpGS.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-display-
|
|
1
|
+
{"version":3,"file":"status-display-xcCCGpGS.cjs","names":["UITableEmpty","Badge"],"sources":["../packages/components/features/tables/components/atoms/status-display.tsx"],"sourcesContent":["'use client';\n\nimport { Badge } from '@/components/ui/badge';\nimport { UITableEmpty } from './empty';\n\ntype BadgeColor = 'primary' | 'secondary' | 'muted' | 'accent' | 'info' | 'success' | 'warning' | 'danger';\n\n/** Props for the {@link UITableStatusDisplay} component. */\ntype Props = {\n /** The status string to display; `null`/`undefined` renders an empty state. */\n value: string | null | undefined;\n /**\n * Maps each status string to a badge color. Any key not present in the map\n * falls back to `defaultColor`.\n */\n colorMap?: Record<string, BadgeColor>;\n /** Color used when `value` is not found in `colorMap` (default: `'muted'`). */\n defaultColor?: BadgeColor;\n /** Badge variant forwarded to the underlying {@link Badge} (default: `'soft'`). */\n variant?: 'solid' | 'soft' | 'outline';\n};\n\n/**\n * Renders a color-coded status badge for a table cell. The mapping from status\n * string to badge color is fully configurable via `colorMap`; unknown statuses\n * fall back to `defaultColor`.\n *\n * @example\n * import { UITableStatusDisplay } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableStatusDisplay\n * value=\"active\"\n * colorMap={{ active: 'success', inactive: 'danger', pending: 'warning' }}\n * />\n */\nexport const UITableStatusDisplay: React.FC<Props> = ({ value, colorMap, defaultColor = 'muted', variant = 'soft' }) => {\n if (value === null || value === undefined || value === '') return <UITableEmpty />;\n\n const color: BadgeColor = (colorMap && colorMap[value]) ?? defaultColor;\n const label = value.charAt(0).toUpperCase() + value.slice(1).replace(/_/g, ' ');\n\n return (\n <Badge variant={variant} color={color} size=\"sm\" className=\"min-w-16 justify-center capitalize\">\n {label}\n </Badge>\n );\n};\n"],"mappings":"wGAmCA,MAAa,GAAyC,CAAE,QAAO,WAAU,eAAe,QAAS,UAAU,UACrG,GAAU,MAA+B,IAAU,IAAW,EAAA,EAAA,IAAA,CAACA,EAAAA,EAAD,CAAe,CAAA,GAM/E,EAAA,EAAA,IAAA,CAACC,EAAAA,MAAD,CAAgB,UAAS,OAJA,GAAY,EAAS,KAAW,EAIlB,KAAK,KAAK,UAAU,qCAH/C,SAAA,EAAM,OAAO,CAAC,CAAC,CAAC,YAAY,EAAI,EAAM,MAAM,CAAC,CAAC,CAAC,QAAQ,KAAM,GAAG,CAKrE,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("./data-display/statistic.cjs"),t=require("./tables-
|
|
2
|
-
//# sourceMappingURL=summary-bar-
|
|
1
|
+
const e=require("./data-display/statistic.cjs"),t=require("./tables-BqZ4Zs6e.cjs");let n=require("react"),r=require("@customafk/react-toolkit/utils"),i=require("react/jsx-runtime");const a={up:`bg-success`,down:`bg-danger`,neutral:`bg-primary`},o=(0,n.memo)(()=>{let{summary:n,onSummaryItemClick:o}=t.Y(),{isOpen:s}=t.Z();return!s||!n||n.length===0?null:(0,i.jsx)(`div`,{"data-slot":`table-summary-bar`,className:`w-full overflow-x-auto px-2 pb-1`,children:(0,i.jsx)(`div`,{className:`grid gap-3`,style:{gridTemplateColumns:`repeat(auto-fill, minmax(200px, 240px))`},children:n.map(t=>{let n=a[t.trend??`neutral`],s=!!o;return(0,i.jsxs)(`div`,{className:(0,r.cn)(`flex flex-col overflow-hidden rounded border border-border bg-card shadow-card`,s&&`cursor-pointer transition-shadow hover:shadow-md`),onClick:s?()=>o(t):void 0,role:s?`button`:void 0,tabIndex:s?0:void 0,onKeyDown:s?e=>{(e.key===`Enter`||e.key===` `)&&o(t)}:void 0,children:[(0,i.jsx)(`div`,{className:(0,r.cn)(`h-0.75 w-full shrink-0`,n)}),(0,i.jsxs)(`div`,{className:`flex flex-1 flex-col gap-2 px-5 py-4`,children:[(0,i.jsx)(`span`,{className:`font-semibold text-[11px] text-text-positive-weak uppercase tracking-widest`,children:t.label}),t.value!==null&&t.value!==void 0?(0,i.jsx)(e.Statistic,{value:t.value,prefix:t.prefix,suffix:t.suffix,precision:t.precision,trend:t.trend,size:`xl`,className:`font-bold`}):(0,i.jsx)(`span`,{className:`font-bold text-text-positive-strong text-xl tabular-nums`,children:`—`}),!!t.description&&(0,i.jsx)(`span`,{className:`text-text-positive-weak text-xs`,children:t.description})]})]},t.label)})})})});o.displayName=`UITableSummaryBar`,exports.UITableSummaryBar=o;
|
|
2
|
+
//# sourceMappingURL=summary-bar-C08g8bb1.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summary-bar-
|
|
1
|
+
{"version":3,"file":"summary-bar-C08g8bb1.cjs","names":["useUITableContext","useUITableSummaryContext","Statistic"],"sources":["../packages/components/features/tables/components/table/summary-bar.tsx"],"sourcesContent":["'use client';\nimport { memo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Statistic } from '@/components/data-display/statistic';\nimport { useUITableContext, useUITableSummaryContext } from '../../hooks/use-context';\nimport type { SummaryItem } from '../../types';\n\nconst trendAccent: Record<NonNullable<SummaryItem['trend']>, string> = {\n up: 'bg-success',\n down: 'bg-danger',\n neutral: 'bg-primary',\n};\n\nexport const UITableSummaryBar = memo(() => {\n const { summary, onSummaryItemClick } = useUITableContext();\n const { isOpen } = useUITableSummaryContext();\n\n if (!isOpen || !summary || summary.length === 0) return null;\n\n return (\n <div data-slot=\"table-summary-bar\" className=\"w-full overflow-x-auto px-2 pb-1\">\n <div className=\"grid gap-3\" style={{ gridTemplateColumns: 'repeat(auto-fill, minmax(200px, 240px))' }}>\n {summary.map(item => {\n const accent = trendAccent[item.trend ?? 'neutral'];\n const isClickable = !!onSummaryItemClick;\n\n return (\n <div\n key={item.label}\n className={cn(\n 'flex flex-col overflow-hidden rounded border border-border bg-card shadow-card',\n isClickable && 'cursor-pointer transition-shadow hover:shadow-md'\n )}\n onClick={isClickable ? () => onSummaryItemClick(item) : undefined}\n role={isClickable ? 'button' : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onKeyDown={\n isClickable\n ? e => {\n if (e.key === 'Enter' || e.key === ' ') onSummaryItemClick(item);\n }\n : undefined\n }\n >\n {/* Coloured accent strip */}\n <div className={cn('h-0.75 w-full shrink-0', accent)} />\n\n <div className=\"flex flex-1 flex-col gap-2 px-5 py-4\">\n {/* Label */}\n <span className=\"font-semibold text-[11px] text-text-positive-weak uppercase tracking-widest\">{item.label}</span>\n\n {/* Value */}\n {item.value !== null && item.value !== undefined ? (\n <Statistic\n value={item.value}\n prefix={item.prefix}\n suffix={item.suffix}\n precision={item.precision}\n trend={item.trend}\n size=\"xl\"\n className=\"font-bold\"\n />\n ) : (\n <span className=\"font-bold text-text-positive-strong text-xl tabular-nums\">—</span>\n )}\n\n {/* Description */}\n {!!item.description && <span className=\"text-text-positive-weak text-xs\">{item.description}</span>}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n});\nUITableSummaryBar.displayName = 'UITableSummaryBar';\n"],"mappings":"qLASA,MAAM,EAAiE,CACrE,GAAI,aACJ,KAAM,YACN,QAAS,YACX,EAEa,GAAA,EAAA,EAAA,KAAA,KAA+B,CAC1C,GAAM,CAAE,UAAS,sBAAuBA,EAAAA,EAAkB,EACpD,CAAE,UAAWC,EAAAA,EAAyB,EAI5C,MAFI,CAAC,GAAU,CAAC,GAAW,EAAQ,SAAW,EAAU,MAGtD,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,YAAU,oBAAoB,UAAU,mCAC3C,UAAA,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,aAAa,MAAO,CAAE,oBAAqB,yCAA0C,EACjG,SAAA,EAAQ,IAAI,GAAQ,CACnB,IAAM,EAAS,EAAY,EAAK,OAAS,WACnC,EAAc,CAAC,CAAC,EAEtB,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAEE,WAAA,EAAA,EAAA,GAAA,CACE,iFACA,GAAe,kDACjB,EACA,QAAS,MAAoB,EAAmB,CAAI,EAAI,IAAA,GACxD,KAAM,EAAc,SAAW,IAAA,GAC/B,SAAU,EAAc,EAAI,IAAA,GAC5B,UACE,EACI,GAAK,EACC,EAAE,MAAQ,SAAW,EAAE,MAAQ,MAAK,EAAmB,CAAI,CACjE,EACA,IAAA,GAdR,SAAA,EAkBE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,WAAA,EAAA,EAAA,GAAA,CAAc,yBAA0B,CAAM,CAAI,CAAA,GAEvD,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,uCAAf,SAAA,EAEE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,8EAA+E,SAAA,EAAK,KAAY,CAAA,EAG/G,EAAK,QAAU,MAAQ,EAAK,QAAU,IAAA,IACrC,EAAA,EAAA,IAAA,CAACC,EAAAA,UAAD,CACE,MAAO,EAAK,MACZ,OAAQ,EAAK,OACb,OAAQ,EAAK,OACb,UAAW,EAAK,UAChB,MAAO,EAAK,MACZ,KAAK,KACL,UAAU,WACX,CAAA,GAED,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,2DAA2D,SAAA,GAAO,CAAA,EAInF,CAAC,CAAC,EAAK,cAAe,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,kCAAmC,SAAA,EAAK,WAAkB,CAAA,CAC9F,CACF,CAAA,CAAA,CAzCE,EAAA,EAAK,KAyCP,CAET,CAAC,CACE,CAAA,CACF,CAAA,CAET,CAAC,EACD,EAAkB,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Statistic as e}from"./data-display/statistic.mjs";import{Y as t,Z as n}from"./tables-
|
|
2
|
-
//# sourceMappingURL=summary-bar-
|
|
1
|
+
import{Statistic as e}from"./data-display/statistic.mjs";import{Y as t,Z as n}from"./tables-Dg3KMBKA.mjs";import{memo as r}from"react";import{cn as i}from"@customafk/react-toolkit/utils";import{jsx as a,jsxs as o}from"react/jsx-runtime";const s={up:`bg-success`,down:`bg-danger`,neutral:`bg-primary`},c=r(()=>{let{summary:r,onSummaryItemClick:c}=t(),{isOpen:l}=n();return!l||!r||r.length===0?null:a(`div`,{"data-slot":`table-summary-bar`,className:`w-full overflow-x-auto px-2 pb-1`,children:a(`div`,{className:`grid gap-3`,style:{gridTemplateColumns:`repeat(auto-fill, minmax(200px, 240px))`},children:r.map(t=>{let n=s[t.trend??`neutral`],r=!!c;return o(`div`,{className:i(`flex flex-col overflow-hidden rounded border border-border bg-card shadow-card`,r&&`cursor-pointer transition-shadow hover:shadow-md`),onClick:r?()=>c(t):void 0,role:r?`button`:void 0,tabIndex:r?0:void 0,onKeyDown:r?e=>{(e.key===`Enter`||e.key===` `)&&c(t)}:void 0,children:[a(`div`,{className:i(`h-0.75 w-full shrink-0`,n)}),o(`div`,{className:`flex flex-1 flex-col gap-2 px-5 py-4`,children:[a(`span`,{className:`font-semibold text-[11px] text-text-positive-weak uppercase tracking-widest`,children:t.label}),t.value!==null&&t.value!==void 0?a(e,{value:t.value,prefix:t.prefix,suffix:t.suffix,precision:t.precision,trend:t.trend,size:`xl`,className:`font-bold`}):a(`span`,{className:`font-bold text-text-positive-strong text-xl tabular-nums`,children:`—`}),!!t.description&&a(`span`,{className:`text-text-positive-weak text-xs`,children:t.description})]})]},t.label)})})})});c.displayName=`UITableSummaryBar`;export{c as UITableSummaryBar};
|
|
2
|
+
//# sourceMappingURL=summary-bar-C3NAnI3V.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summary-bar-
|
|
1
|
+
{"version":3,"file":"summary-bar-C3NAnI3V.mjs","names":[],"sources":["../packages/components/features/tables/components/table/summary-bar.tsx"],"sourcesContent":["'use client';\nimport { memo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Statistic } from '@/components/data-display/statistic';\nimport { useUITableContext, useUITableSummaryContext } from '../../hooks/use-context';\nimport type { SummaryItem } from '../../types';\n\nconst trendAccent: Record<NonNullable<SummaryItem['trend']>, string> = {\n up: 'bg-success',\n down: 'bg-danger',\n neutral: 'bg-primary',\n};\n\nexport const UITableSummaryBar = memo(() => {\n const { summary, onSummaryItemClick } = useUITableContext();\n const { isOpen } = useUITableSummaryContext();\n\n if (!isOpen || !summary || summary.length === 0) return null;\n\n return (\n <div data-slot=\"table-summary-bar\" className=\"w-full overflow-x-auto px-2 pb-1\">\n <div className=\"grid gap-3\" style={{ gridTemplateColumns: 'repeat(auto-fill, minmax(200px, 240px))' }}>\n {summary.map(item => {\n const accent = trendAccent[item.trend ?? 'neutral'];\n const isClickable = !!onSummaryItemClick;\n\n return (\n <div\n key={item.label}\n className={cn(\n 'flex flex-col overflow-hidden rounded border border-border bg-card shadow-card',\n isClickable && 'cursor-pointer transition-shadow hover:shadow-md'\n )}\n onClick={isClickable ? () => onSummaryItemClick(item) : undefined}\n role={isClickable ? 'button' : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onKeyDown={\n isClickable\n ? e => {\n if (e.key === 'Enter' || e.key === ' ') onSummaryItemClick(item);\n }\n : undefined\n }\n >\n {/* Coloured accent strip */}\n <div className={cn('h-0.75 w-full shrink-0', accent)} />\n\n <div className=\"flex flex-1 flex-col gap-2 px-5 py-4\">\n {/* Label */}\n <span className=\"font-semibold text-[11px] text-text-positive-weak uppercase tracking-widest\">{item.label}</span>\n\n {/* Value */}\n {item.value !== null && item.value !== undefined ? (\n <Statistic\n value={item.value}\n prefix={item.prefix}\n suffix={item.suffix}\n precision={item.precision}\n trend={item.trend}\n size=\"xl\"\n className=\"font-bold\"\n />\n ) : (\n <span className=\"font-bold text-text-positive-strong text-xl tabular-nums\">—</span>\n )}\n\n {/* Description */}\n {!!item.description && <span className=\"text-text-positive-weak text-xs\">{item.description}</span>}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n});\nUITableSummaryBar.displayName = 'UITableSummaryBar';\n"],"mappings":"6OASA,MAAM,EAAiE,CACrE,GAAI,aACJ,KAAM,YACN,QAAS,YACX,EAEa,EAAoB,MAAW,CAC1C,GAAM,CAAE,UAAS,sBAAuB,EAAkB,EACpD,CAAE,UAAW,EAAyB,EAI5C,MAFI,CAAC,GAAU,CAAC,GAAW,EAAQ,SAAW,EAAU,KAGtD,EAAC,MAAD,CAAK,YAAU,oBAAoB,UAAU,mCAC3C,SAAA,EAAC,MAAD,CAAK,UAAU,aAAa,MAAO,CAAE,oBAAqB,yCAA0C,EACjG,SAAA,EAAQ,IAAI,GAAQ,CACnB,IAAM,EAAS,EAAY,EAAK,OAAS,WACnC,EAAc,CAAC,CAAC,EAEtB,OACE,EAAC,MAAD,CAEE,UAAW,EACT,iFACA,GAAe,kDACjB,EACA,QAAS,MAAoB,EAAmB,CAAI,EAAI,IAAA,GACxD,KAAM,EAAc,SAAW,IAAA,GAC/B,SAAU,EAAc,EAAI,IAAA,GAC5B,UACE,EACI,GAAK,EACC,EAAE,MAAQ,SAAW,EAAE,MAAQ,MAAK,EAAmB,CAAI,CACjE,EACA,IAAA,GAdR,SAAA,CAkBE,EAAC,MAAD,CAAK,UAAW,EAAG,yBAA0B,CAAM,CAAI,CAAA,EAEvD,EAAC,MAAD,CAAK,UAAU,uCAAf,SAAA,CAEE,EAAC,OAAD,CAAM,UAAU,8EAA+E,SAAA,EAAK,KAAY,CAAA,EAG/G,EAAK,QAAU,MAAQ,EAAK,QAAU,IAAA,GACrC,EAAC,EAAD,CACE,MAAO,EAAK,MACZ,OAAQ,EAAK,OACb,OAAQ,EAAK,OACb,UAAW,EAAK,UAChB,MAAO,EAAK,MACZ,KAAK,KACL,UAAU,WACX,CAAA,EAED,EAAC,OAAD,CAAM,UAAU,2DAA2D,SAAA,GAAO,CAAA,EAInF,CAAC,CAAC,EAAK,aAAe,EAAC,OAAD,CAAM,UAAU,kCAAmC,SAAA,EAAK,WAAkB,CAAA,CAC9F,CACF,CAAA,CAAA,CAzCE,EAAA,EAAK,KAyCP,CAET,CAAC,CACE,CAAA,CACF,CAAA,CAET,CAAC,EACD,EAAkB,YAAc"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("./data-display/statistic.cjs"),t=require("./ui/checkbox.cjs"),n=require("./ui/dropdown-menu.cjs"),r=require("./ui/spinner.cjs"),i=require("./ui/resizable.cjs");let a=require("lucide-react"),o=require("react"),s=require("@customafk/react-toolkit/utils"),c=require("class-variance-authority"),l=require("react/jsx-runtime"),u=require("@tanstack/react-table");const d=()=>(0,l.jsxs)(`div`,{className:`flex gap-0 text-text-positive-weak`,children:[(0,l.jsx)(a.MinusIcon,{size:16}),(0,l.jsx)(a.MinusIcon,{size:16})]}),f=(0,o.createContext)(null),p=()=>{let e=(0,o.use)(f);if(!e)throw Error(`useTableInnerWrapperContext must be used within a TableInnerWrapperProvider`);return e},m=(0,o.createContext)(null),h=()=>{let e=(0,o.use)(m);if(!e)throw Error(`useTableInnerTableContext must be used within a TableInnerTableProvider`);return e},g=(0,o.createContext)(null),_=()=>{let e=(0,o.use)(g);if(!e)throw Error(`useTableHeaderRowContext must be used within a TableHeaderRowProvider`);return e},v=(0,o.createContext)(null),y=()=>{let e=(0,o.use)(v);if(!e)throw Error(`useTableBodyContext must be used within a TableBodyProvider`);return e},b=(0,o.createContext)(null),x=()=>{let e=(0,o.use)(b);if(!e)throw Error(`useTableRowContext must be used within a TableRowProvider`);return e},S=(0,o.createContext)(null),C=()=>{let e=(0,o.use)(S);if(!e)throw Error(`useTableContext must be used within a TableProvider`);return e},ee=(0,o.createContext)(null),w=()=>{let e=(0,o.use)(ee);if(!e)throw Error(`useUITableFilterContext must be used within a UITableProvider`);return e},te=(0,o.createContext)(null),T=()=>{let e=(0,o.use)(te);if(!e)throw Error(`useUITableAnalysisContext must be used within a UITableProvider`);return e},ne=(0,o.createContext)(null),E=()=>{let e=(0,o.use)(ne);if(!e)throw Error(`useUITableSummaryContext must be used within a UITableProvider`);return e},D=`border-r! !border-r-border-strong/30`,O=`border-l! !border-l-border-strong/30`,re=(0,c.cva)([`absolute right-2 z-10 p-0.5 opacity-0 bg-card`,`cursor-pointer rounded-full transition-all`,`text-text-positive-weak`,`[&>svg]:size-4`,`group-hover:opacity-100`,`hover:bg-muted-muted hover:text-text-positive`]),ie=(0,c.cva)([`sticky left-0 flex flex-1 items-center justify-center bg-transparent text-text-positive-weak opacity-100`]),ae=(0,c.cva)([`relative m-0 grid @container/table-wrapper grid-cols-1 size-full min-h-96 min-w-0 justify-items-start content-start gap-2`]),oe=(0,c.cva)([`w-full min-w-0 min-h-0`]),se=(0,c.cva)([`relative w-full flex-1 min-h-0 overflow-auto border-b border-b-border border-l border-l-border`]),ce=(0,c.cva)([`grid w-full table-fixed caption-bottom border-collapse border-spacing-0 flex-col content-start`]),k=(0,c.cva)([`sticky top-0 z-40 h-9 w-full`,`grid select-none bg-white`,`border-b border-b-border shadow`,`font-medium text-[13px] text-text-positive-weak`,`[&_tr:not(:last-child)_td]:border-b`,`[&_th]:inline-flex`,`[&_th]:bg-card`,`[&_th]:items-center`,`[&_th]:transition-all`,`[&_th]:duration-300`,`[&_th]:whitespace-nowrap`,`[&_th]:border-border`,`[&_th]:border-r`,`[&_th]:first:border-l-0`,`[&_tr_th:not([data-pinned=false])]:bg-card`]),le=(0,c.cva)([`flex`]),A=(0,c.cva)([`group flex`],{variants:{isPinned:{left:`sticky`,right:`sticky`,false:`relative`},isActions:{true:`border-r-0!`,false:``},isLastCell:{true:``,false:``},isFirstCell:{true:``,false:``},position:{start:`justify-start`,center:`justify-center`,end:`justify-end`}},compoundVariants:[{isPinned:`left`,isLastCell:!0,className:D},{isPinned:`right`,isFirstCell:!0,className:O}]}),ue=(0,c.cva)([`relative w-full`,`[&_tr]:flex`,`[&_tr]:flex-none`,`[&_tr]:w-full`,`[&_tr]:cursor-pointer [&_tr]:focus:outline-none`,`[&_tr]:border-b [&_tr]:border-b-border`,`[&_td]:z-10`,`[&_td]:transition-all`,`[&_td]:flex`,`[&_td]:flex-none`,`[&_td]:overflow-hidden`,`[&_td]:whitespace-nowrap`,`[&_td]:px-4`,`[&_td]:py-2.5`,`[&_td]:align-middle`,`[&_td]:border-border`,`[&_td]:data-[selected=true]:bg-muted-muted!`,`[&_td]:data-[selected=true]:hover:bg-muted-muted!`,`[&_td>div]:inline-flex`,`[&_td>div]:items-center`,`[&_td>div]:w-full`,`[&_td:not([data-pinned=false])]:z-20`,`[&_td:not([data-pinned=false])]:sticky`,`[&_td:not([data-pinned=false])]:bg-muted-bg-subtle`]),j=(0,c.cva)([`group transition-colors hover:bg-muted-muted hover:[&_td]:bg-muted-muted! [&_td]:border-r [&_td]:border-r-border`]),M=(0,c.cva)([`group-hover:bg-muted-muted!`],{variants:{isPinned:{left:`sticky`,right:`sticky`,false:`relative`},isLastCell:{true:``,false:``}},compoundVariants:[{isPinned:`left`,isLastCell:!0,className:D}],defaultVariants:{isPinned:void 0}}),de=(0,c.cva)([`sticky border-r-0! inset-y-0 right-0 z-30 flex items-center pr-4 group-hover:bg-muted-muted!`]),fe=(0,c.cva)([`group-hover:bg-muted-muted!`],{variants:{isPinned:{left:``,right:``,false:``},isLastCell:{true:``,false:``},isFirstCell:{true:``,false:``}},compoundVariants:[{isPinned:`left`,isLastCell:!0,className:D},{isPinned:`right`,isFirstCell:!0,className:O}]}),N=(0,c.cva)([`overflow-x-hidden`],{variants:{position:{start:`justify-start`,center:`justify-center`,end:`justify-end`}},defaultVariants:{position:`start`}}),P=(0,c.cva)([`shrink-0 flex w-full justify-center border-t border-border-weak font-medium`]),pe=(0,c.cva)([`flex w-full`,`text-[13px] font-medium text-text-positive-weak`]),F=(0,c.cva)([`flex flex-none items-center overflow-hidden whitespace-nowrap px-4 py-2`,`border-r border-r-border`],{variants:{isPinned:{left:`sticky z-20 bg-white`,right:`sticky z-20 bg-white`,false:`relative`},isFirstCell:{true:`border-l border-l-border`,false:``},isLastCell:{true:`border-r border-r-border`,false:``}}}),I=(0,c.cva)([`flex cursor-pointer gap-x-0.5`],{variants:{state:{idle:`text-text-positive-weak hover:text-text-positive`,fetching:`cursor-not-allowed`,error:`text-danger hover:text-danger-strong`}},defaultVariants:{state:`idle`}}),L=(0,o.memo)(({className:e,children:t,...n})=>{let{isFetching:r,isRefetching:i,isEmpty:a}=y();return a||r||i?null:(0,l.jsx)(`tbody`,{slot:`table-body`,className:(0,s.cn)(ue(),e),...n,children:t})});L.displayName=`UITableBody`;const R=(0,o.memo)(({isPinned:e=!1,isFirstCell:t=!1,isLastCell:n=!1,colId:r,position:i=`start`,column:a,getContext:c,className:d,...f})=>{let{table:p,tableRef:m}=h(),g=(0,o.useRef)(null),_=(0,o.useMemo)(()=>{let t=a?.getStart(`left`);return e===`left`&&typeof t==`number`?`${t}px`:void 0},[e,a]),v=(0,o.useMemo)(()=>{let t=a?.getAfter(`right`);return e===`right`&&typeof t==`number`?`${t}px`:void 0},[e,a]),y=(0,o.useMemo)(()=>`calc(var(--col-${r}-size) * 1px)`,[r]),b=(0,o.useMemo)(()=>a?.columnDef.minSize?`calc(var(--col-${r}-minSize) * 1px)`:void 0,[r,a]),x=(0,o.useMemo)(()=>a?.columnDef.maxSize?`calc(var(--col-${r}-maxSize) * 1px)`:void 0,[r,a]),S=(0,o.useMemo)(()=>(0,u.flexRender)(a?.columnDef.cell,c()),[a,c]);return(0,o.useEffect)(()=>{if(!g.current)return;let e=g.current.scrollWidth,t=a?.getSize();t!=null&&e>t&&m.current instanceof HTMLTableElement&&typeof r==`string`&&a?.columnDef.meta?.fitContent&&p.setColumnSizing(t=>({...t,[r]:e+32}))},[r,a,p]),(0,l.jsx)(`td`,{slot:`table-body-cell`,"data-pinned":e,"data-lastcell":n||void 0,"data-firstcell":t||void 0,style:{left:_,right:v,width:y,minWidth:b,maxWidth:x},className:(0,s.cn)(fe({isPinned:e||void 0,isLastCell:n,isFirstCell:t}),d),...f,children:(0,l.jsx)(`div`,{ref:g,slot:`table-body-cell-inner`,className:N({position:i}),children:S})})});R.displayName=`UITableCell`;const z=(0,o.memo)(({column:e,getContext:t,className:n,...r})=>{let i=(0,o.useMemo)(()=>(0,u.flexRender)(e?.columnDef.cell,t()),[e,t]);return(0,l.jsx)(`td`,{"data-col":`actions`,className:de(),...r,children:i})});z.displayName=`UITableCellActions`;const B={tooltip:`UITableTooltip`,summaryBar:`UITableSummaryBar`,container:`UITableContainer`,analysisPanel:`UITableAnalysisPanel`},V={tooltip:`table-wrapper-tooltip-row`,summaryBar:`table-wrapper-summary-bar-row`,container:`table-wrapper-container-row`,analysisPanel:`table-wrapper-analysis-panel-row`,extra:`table-wrapper-extra-row`},H=(0,o.memo)(({isPinned:e,isLastCell:n,isSelected:r=!1,className:i,onToggleRowSelected:a,...c})=>{let u=(0,o.useCallback)(e=>{a?.(!!e)},[a]);return(0,l.jsx)(`td`,{slot:`table-body-cell`,"data-pinned":!0,style:{left:0,zIndex:20,width:60,maxWidth:60},className:(0,s.cn)(M({isPinned:e,isLastCell:n}),i),...c,children:(0,l.jsx)(`div`,{"data-slot":`table-cell-inner`,className:`flex! w-full! items-center justify-center bg-transparent text-center align-middle`,onClick:e=>{e.preventDefault(),e.stopPropagation()},children:(0,l.jsx)(t.Checkbox,{"aria-label":`Select Row`,checked:r,onCheckedChange:u})})})});H.displayName=`UITableCellSelect`;const me=(0,o.memo)(()=>{let{table:e,isFetching:t,isRefetching:n,loadingDisplayRow:r=3}=C();return!t&&!n?null:(0,l.jsx)(`tbody`,{className:(0,s.cn)(ue(),`pointer-events-none`),children:Array.from({length:r}).map((t,n)=>(0,l.jsx)(`tr`,{"data-slot":`table-row`,"data-index":n,className:(0,s.cn)(j(),`animate-pulse relative!`),children:e.getAllColumns().map((t,r)=>{let i=t.getIsPinned(),a=t.getStart(`left`),o=t.getAfter(`right`);return t.id===`actions`?(0,l.jsx)(`td`,{"data-slot":`table-body-cell`,"data-col":t.id,"data-cell":r,style:{width:60},className:de(),children:(0,l.jsx)(`div`,{className:`w-full h-4 bg-muted-muted rounded-full`})},`${t.id}-${r}`):t.id===`select`?(0,l.jsx)(`td`,{"data-slot":`table-body-cell`,"data-col":t.id,"data-cell":r,"data-pinned":!0,style:{left:0,zIndex:20,width:60,maxWidth:60},className:M({isPinned:`left`}),children:(0,l.jsx)(`div`,{className:`w-full flex justify-center`,children:(0,l.jsx)(`div`,{className:`size-4 bg-muted-muted rounded-full`})})},`${t.id}-${n}`):(0,l.jsx)(`td`,{"data-col":t.id,"data-cell":r,"data-selected":void 0,"data-lastcell":t.id===e.getAllColumns()[e.getAllColumns().length-1].id||void 0,"data-firstcell":t.id===e.getAllColumns()[0].id||void 0,style:{zIndex:i?20:0,left:i===`left`&&typeof a==`number`?`${a}px`:void 0,right:i===`right`&&typeof o==`number`?`${o}px`:void 0,width:`calc(var(--col-${t.id}-size) * 1px)`,minWidth:t.columnDef.minSize?`calc(var(--col-${t.id}-minSize) * 1px)`:void 0,maxWidth:t.columnDef.maxSize?`calc(var(--col-${t.id}-maxSize) * 1px)`:void 0},className:fe({isPinned:t.getIsPinned(),isFirstCell:t.id===e.getRightHeaderGroups()[0]?.headers[0]?.id,isLastCell:t.id===e.getLeftHeaderGroups()[0]?.headers[e.getLeftHeaderGroups()[0].headers.length-1]?.id}),children:(0,l.jsx)(`div`,{className:N({position:t.columnDef.meta?.position??`start`}),children:(0,l.jsx)(`div`,{className:`w-full h-4 bg-muted-muted rounded-full`})})},`${t.id}-${r}`)})},n))})}),U=(0,o.memo)(()=>{let{isEmpty:e,emptyDisplayHeight:t}=C();return e?(0,l.jsx)(l.Fragment,{children:e&&(0,l.jsx)(`div`,{className:ie(),style:{minHeight:t??`24rem`},children:(0,l.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,l.jsx)(a.BoxIcon,{strokeWidth:1,size:48}),(0,l.jsx)(`p`,{children:`Không có dữ liệu`})]})})}):null});U.displayName=`UITableEmptyDisplay`;const W=(0,o.memo)(({className:e,children:t,...n})=>(0,l.jsx)(`div`,{slot:`table-footer`,className:(0,s.cn)(P(),e),...n,children:t}));W.displayName=`UITableFooter`;function he(e,t,n){switch(n){case`count`:return e;case`sum`:return t.reduce((e,t)=>e+t,0);case`avg`:return t.length===0?0:t.reduce((e,t)=>e+t,0)/t.length;case`min`:return t.length===0?0:Math.min(...t);case`max`:return t.length===0?0:Math.max(...t)}}function G(e,t){return e.map(e=>{let n=e.getValue(t);return typeof n==`string`?Number(n):typeof n==`number`?n:NaN}).filter(e=>!Number.isNaN(e))}const K=(0,o.memo)(()=>{let{table:t}=C(),{rowSelectionState:n}=y(),r=(0,o.useMemo)(()=>t.getHeaderGroups()[0]?.headers??[],[t.getHeaderGroups()]),i=(0,o.useMemo)(()=>r.some(e=>e.column.columnDef.meta?.aggregation),[r]),a=(0,o.useMemo)(()=>t.getSelectedRowModel().flatRows,[t,n]),c=(0,o.useMemo)(()=>t.getRowModel().rows,[t]),u=a.length>0?a:c,d=(0,o.useMemo)(()=>{let e={};for(let t of r){let n=t.column.columnDef.meta?.aggregation;if(!n)continue;let r=G(u,t.id);e[t.id]=he(u.length,r,n.type)}return e},[r,u]),f=t.getState().columnPinning,p=f.left??[],m=f.right??[],h=r.find(e=>m.includes(e.id))?.id,g=[...r].reverse().find(e=>p.includes(e.id))?.id;if(!i)return null;let _=a.length>0?`${a.length}`:`${c.length}`;return(0,l.jsx)(`div`,{slot:`table-footer-row`,className:pe(),children:r.map(t=>{let n=t.id,r=p.includes(n)?`left`:m.includes(n)?`right`:!1,i=n===h,a=n===g,o=r===`left`?`${t.column.getStart(`left`)}px`:void 0,c=r===`right`?`${t.column.getAfter(`right`)}px`:void 0;if(n===`select`)return(0,l.jsx)(`div`,{slot:`table-footer-select`,"data-pinned":`left`,style:{left:`0px`,width:`60px`},className:(0,s.cn)(F({isPinned:`left`,isFirstCell:!1,isLastCell:!1}),`justify-center`),children:(0,l.jsx)(`span`,{className:`truncate text-[11px] items-center text-text-positive-weak`,children:_})},n);if(n===`actions`)return(0,l.jsx)(`div`,{slot:`table-footer-actions`,style:{width:`calc(var(--col-${n}-size) * 1px)`,right:`0px`},className:F({isPinned:!1,isFirstCell:!1,isLastCell:!1})},n);let u=t.column.columnDef.meta?.aggregation,f=d[n]??null;return(0,l.jsx)(`div`,{slot:`table-footer-cell`,"data-pinned":r,style:{left:o,right:c,width:`calc(var(--col-${n}-size) * 1px)`},className:F({isPinned:r||`left`,isFirstCell:i,isLastCell:a}),children:u&&f!==null?(0,l.jsx)(e.Statistic,{value:f,prefix:u.prefix,suffix:u.suffix,precision:u.precision,size:`sm`}):(0,l.jsx)(`span`,{className:`text-text-positive-weak`,children:`—`})},n)})})});K.displayName=`UITableFooterRow`;const q=(0,o.memo)(({className:e,children:t,...n})=>(0,l.jsx)(`thead`,{slot:`table-head`,className:(0,s.cn)(k(),e),...n,children:t}));q.displayName=`UITableHead`;const J=(0,o.memo)(({isPinned:e,onLeftPin:t,onRightPin:r,onUnpin:i,className:c})=>{let u=(0,o.useCallback)(()=>{t?.(`left`)},[t]),d=(0,o.useCallback)(()=>{r?.(`right`)},[r]),f=(0,o.useCallback)(()=>{i?.(!1)},[i]);return(0,l.jsxs)(n.DropdownMenu,{children:[(0,l.jsx)(n.DropdownMenuTrigger,{asChild:!0,children:(0,l.jsx)(`button`,{type:`button`,className:(0,s.cn)(re(),c),children:(0,l.jsx)(a.EllipsisVerticalIcon,{})})}),(0,l.jsx)(n.DropdownMenuContent,{align:`end`,className:`w-64 p-4`,children:(0,l.jsxs)(n.DropdownMenuGroup,{className:`*:data-[slot=dropdown-menu-item]:rounded-xs *:data-[slot=dropdown-menu-item]:p-2`,children:[(0,l.jsx)(o.Activity,{mode:e?`visible`:`hidden`,children:(0,l.jsxs)(n.DropdownMenuItem,{onClick:f,children:[!!e&&`Bỏ ghim`,(0,l.jsx)(n.DropdownMenuShortcut,{children:(0,l.jsx)(a.PinOffIcon,{className:`size-4`})})]})}),(0,l.jsxs)(o.Activity,{mode:e?`hidden`:`visible`,children:[(0,l.jsxs)(n.DropdownMenuItem,{onClick:u,children:[e?`Bỏ ghim`:`Ghim trái`,(0,l.jsx)(n.DropdownMenuShortcut,{children:(0,l.jsx)(a.MoveLeftIcon,{className:`size-4`})})]}),(0,l.jsxs)(n.DropdownMenuItem,{onClick:d,children:[e?`Bỏ ghim`:`Ghim phải`,(0,l.jsx)(n.DropdownMenuShortcut,{children:(0,l.jsx)(a.MoveRightIcon,{className:`size-4`})})]})]})]})})]})});J.displayName=`UITableHeadCellOption`;const Y=(0,o.memo)(({isVisible:e=!0,isPinned:t=!1,isFirstCell:n=!1,isLastCell:r=!1,isOptionsVisible:i=!0,headerId:a,headerColumn:c,className:u,children:d,onColumnPin:f,onToggleVisibility:p,...m})=>{let h=c?.columnDef.meta?.position;return(0,l.jsxs)(`th`,{slot:`table-head-cell`,"data-pinned":t,"data-header":a,style:{zIndex:(0,o.useMemo)(()=>t?20:void 0,[t]),left:(0,o.useMemo)(()=>{let e=c?.getStart?.(`left`);return t===`left`&&typeof e==`number`?`${e}px`:void 0},[t,c]),right:(0,o.useMemo)(()=>{let e=c?.getAfter?.(`right`);return t===`right`&&typeof e==`number`?`${e}px`:void 0},[t,c]),width:(0,o.useMemo)(()=>`calc(var(--header-${a}-size) * 1px)`,[a]),minWidth:(0,o.useMemo)(()=>c?.columnDef.minSize?`calc(var(--col-${a}-minSize) * 1px)`:void 0,[a,c]),maxWidth:(0,o.useMemo)(()=>c?.columnDef.maxSize?`calc(var(--col-${a}-maxSize) * 1px)`:void 0,[a,c])},className:(0,s.cn)(A({isPinned:t||`false`,isActions:a===`actions`,isLastCell:r,isFirstCell:n,position:h}),u),...m,children:[(0,l.jsx)(`div`,{className:`truncate px-4`,children:d}),i&&(0,l.jsx)(J,{isPinned:t,isVisible:e,onLeftPin:f,onRightPin:f,onUnpin:f})]})});Y.displayName=`UITableHeadCell`;const X=(0,o.memo)(({isPinned:e,isLastCell:n,isAllRowsSelected:r,style:i,className:a,onToggleAllRowsSelected:c,...u})=>{let d=(0,o.useCallback)(e=>{c?.(!!e)},[c]);return(0,l.jsx)(`th`,{slot:`table-header-cell`,"data-pinned":!0,style:{left:0,zIndex:40,width:60,maxWidth:60},className:(0,s.cn)(M({isPinned:e,isLastCell:n}),a),...u,children:(0,l.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center`,onClick:e=>{e.preventDefault(),e.stopPropagation()},children:(0,l.jsx)(t.Checkbox,{"aria-label":`Select All Rows`,checked:r,onCheckedChange:d})})})});X.displayName=`UITableHeadCellSelect`;const Z=(0,o.memo)(({headerGroup:e,className:t,...n})=>{let{isAllRowsSelected:r,columnPinningState:i,leftPinnedHeaders:a,rightPinnedHeaders:o,onToggleAllRowsSelected:c}=_(),d=o[0]?.id,f=a[a.length-1]?.id;return(0,l.jsx)(`tr`,{slot:`table-head-row`,className:(0,s.cn)(le(),t),...n,children:e.headers.map((e,t)=>{let n=e.column.getIsVisible(),a=i.left?.includes(e.id)?`left`:i.right?.includes(e.id)?`right`:!1;return e.id===`select`?(0,l.jsx)(X,{isPinned:a,isLastCell:e.id===f,isAllRowsSelected:r,onToggleAllRowsSelected:c},e.id):(0,l.jsx)(Y,{isVisible:n,isPinned:a,isFirstCell:e.id===d,isLastCell:e.id===f,isOptionsVisible:![`select`,`actions`].includes(e.id),headerId:e.id,headerColumn:e.column,colSpan:e.colSpan,onColumnPin:e.column.pin,onToggleVisibility:e.column.toggleVisibility,children:(0,u.flexRender)(e.column.columnDef.header,e.getContext())},`${e.id}-${t}`)})})});Z.displayName=`UITableHeadRow`;const Q=(0,o.memo)(({children:e,...t})=>{let{table:n,innerTableId:r,totalSize:i,tableRef:a}=h();return(0,o.useEffect)(()=>{if(!a.current)return;let e=n.getFlatHeaders(),t,r=new ResizeObserver(r=>{t!==void 0&&cancelAnimationFrame(t),t=requestAnimationFrame(()=>{let t=r[0];if(!t)return;let i=t.target;if(!(i instanceof HTMLTableElement))return;let a=t.contentRect.width,{left:o=[],right:s=[]}=n.getState().columnPinning,c=0,l=0,u=0,d=e.map(e=>{let{id:t}=e,n=t===`select`||t===`actions`,r=o.includes(t)||s.includes(t),i=e.getSize(),a=e.column.columnDef.maxSize;return n?(c+=60,{id:t,isFlex:!1,width:60}):r?(c+=i,{id:t,isFlex:!1,width:i}):e.column.columnDef.size||i!==150?(u+=i,{id:t,isFlex:!1,width:i}):(l++,{id:t,isFlex:!0,maxSize:a})}),f=a-c-u,p=l>0?Math.max(0,Math.floor(f/l)):0,m=i.closest(`[data-slot="table-scroll-host"]`);d.forEach(e=>{if(e.isFlex){let t=e.maxSize?Math.min(p,e.maxSize):p;i.style.setProperty(`--header-${e.id}-size`,`${t}`),i.style.setProperty(`--col-${e.id}-size`,`${t}`),m?.style.setProperty(`--col-${e.id}-size`,`${t}`),e.maxSize&&i.style.setProperty(`--col-${e.id}-maxSize`,`${e.maxSize}`)}else i.style.setProperty(`--header-${e.id}-size`,`${e.width}`),i.style.setProperty(`--col-${e.id}-size`,`${e.width}`),m?.style.setProperty(`--col-${e.id}-size`,`${e.width}`)})})});return r.observe(a.current),()=>{t!==void 0&&cancelAnimationFrame(t),r.disconnect()}},[n.getState().columnSizingInfo,n.getState().columnSizing,n.getState().columnPinning]),(0,l.jsx)(`table`,{id:r,ref:a,slot:`table-inner-table`,className:ce(),style:{minWidth:i},...t,children:e})});Q.displayName=`UITableInnerTable`;const ge=(0,o.memo)(({children:e,...t})=>{let{innerWrapperId:n}=p();return(0,l.jsx)(`div`,{id:n,slot:`table-inner-wrapper`,className:se(),...t,children:e})});ge.displayName=`UITableInnerWrapper`;const _e=(0,o.memo)(({fetchMoreData:e})=>{let{innerWrapperId:t}=p(),[n,i]=(0,o.useState)(`idle`),[s,c]=(0,o.useState)(0),u=(0,o.useCallback)(async()=>{try{i(`fetching`),await e?.(),i(`idle`)}catch(e){console.error(`Error fetching more data:`,e),i(`error`)}},[e]);return(0,o.useEffect)(()=>{let e=document.querySelector(`div[id="${t}"]`);if(!e)return;let n=new ResizeObserver(e=>{c(e[0].contentRect.width)});return n.observe(e),()=>n.disconnect()},[t]),e?(0,l.jsx)(`tr`,{className:`sticky! left-0 h-10`,style:{width:s},children:(0,l.jsx)(`td`,{className:`absolute left-0 flex w-full items-center justify-center text-xs`,children:(0,l.jsxs)(`button`,{type:`button`,disabled:n===`fetching`,className:I({state:n}),onClick:u,children:[n===`idle`&&(0,l.jsx)(a.ChevronDown,{className:`size-4`}),n===`fetching`&&(0,l.jsx)(r.Spinner,{className:`size-4 animate-spin`}),n===`error`&&(0,l.jsx)(a.AlertTriangle,{className:`size-4 text-danger`}),n===`idle`&&`Tải thêm`,n===`fetching`&&`Đang tải...`,n===`error`&&`Lỗi! Thử lại?`]})})}):null});_e.displayName=`UITableLoadMore`;const ve=(0,o.memo)(({row:e,isSelected:t,rowIndex:n,children:r,...i})=>{let{keyOfClickRow:a,isAllRowsSelected:s,columnPinningState:c,leftPinnedHeaders:u,rightPinnedHeaders:d,onClickRow:f}=x(),p=(0,o.useMemo)(()=>c.left??[],[c]),m=(0,o.useMemo)(()=>c.right??[],[c]),h=(0,o.useMemo)(()=>d?.[0]?.id,[d]),g=(0,o.useMemo)(()=>u?.[u.length-1]?.id,[u]),_=(0,o.useMemo)(()=>e.getVisibleCells().some(e=>e.column.id===`select`),[e]),v=(0,o.useCallback)(t=>{if(f){let t=a?e.original?.[a]:void 0;f(n,typeof t==`string`||typeof t==`number`?t:void 0)}else _&&e.toggleSelected();t.preventDefault(),t.stopPropagation()},[a,f,e,n,_]);return(0,l.jsx)(`tr`,{slot:`table-row`,"data-index":n,className:j(),onClick:v,...i,children:e.getVisibleCells().map((e,r)=>{let i=p.includes(e.column.id),a=m.includes(e.column.id),o=i?`left`:a?`right`:!1;return e.column.id===`actions`?(0,l.jsx)(z,{"data-col":e.column.id,"data-cell":n,"data-selected":t||void 0,column:e.column,getContext:e.getContext},`${e.id}-${r}`):e.column.id===`select`?(0,l.jsx)(H,{"data-col":e.column.id,"data-cell":n,"data-selected":t||void 0,isPinned:o,isLastCell:e.column.id===g,isSelected:s||t,onToggleRowSelected:e.row.toggleSelected},`${e.id}-${r}`):(0,l.jsx)(R,{"data-col":e.column.id,"data-cell":n,"data-selected":t||void 0,isPinned:o,isFirstCell:e.column.id===h,isLastCell:e.column.id===g,colId:e.column.id,position:e.column.columnDef.meta?.position??`start`,column:e.column,getContext:e.getContext},`${e.id}-${r}`)})})});ve.displayName=`UITableRow`;const ye=[`tooltip`,`summaryBar`,`container`,`analysisPanel`];function be(e){if(!(0,o.isValidElement)(e))return;let t=e.type?.displayName;return ye.find(e=>B[e]===t)}const xe=(0,o.memo)(({className:e,children:t,style:n,...r})=>{let i=new Map,a=[];o.Children.forEach(t,e=>{let t=be(e);t?i.set(t,e):a.push(e)});let c=ye.filter(e=>i.has(e)),u=[...c.map(e=>e===`container`?`minmax(10rem,1fr)`:`auto`),...a.length>0?[`auto`]:[]].join(` `);return(0,l.jsxs)(`div`,{slot:`table-wrapper`,className:(0,s.cn)(ae(),e),style:{...n,gridTemplateRows:u},...r,children:[c.map((e,t)=>(0,l.jsx)(`div`,{"data-slot":V[e],className:oe(),style:{gridRow:t+1},children:i.get(e)},e)),a.length>0&&(0,l.jsx)(`div`,{"data-slot":V.extra,className:oe(),style:{gridRow:c.length+1},children:o.Children.toArray(a)})]})});xe.displayName=`UITableWrapper`;const Se=({children:e})=>{let{table:t,fetchMoreData:n}=C(),{rowSelectionState:r}=y(),{rows:a}=t.getRowModel();return(0,l.jsxs)(i.ResizablePanelGroup,{direction:`horizontal`,style:{direction:t.options.columnResizeDirection},className:`relative flex h-full w-full max-w-full min-h-0 min-w-0 gap-1 overflow-auto border-t border-t-border border-r border-r-border p-0 text-sm`,children:[(0,l.jsx)(i.ResizablePanel,{"data-slot":`table-scroll-host`,className:`relative flex flex-col`,children:(0,l.jsxs)(ge,{children:[(0,l.jsxs)(Q,{children:[(0,l.jsx)(q,{children:t.getHeaderGroups().map(e=>(0,l.jsx)(Z,{headerGroup:e},e.id))}),(0,l.jsxs)(L,{children:[a.map((e,t)=>(0,l.jsx)(ve,{row:e,isSelected:r[e.id]===!0,rowIndex:t},e.id)),n&&(0,l.jsx)(_e,{fetchMoreData:n})]}),(0,l.jsx)(me,{})]}),(0,l.jsx)(U,{})]})}),e&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(i.ResizableHandle,{}),e]})]})};Se.displayName=`UITableContainer`;function Ce(e){switch(e){case`tag`:return{type:`tag`,values:[]};case`single-tag`:return{type:`single-tag`,value:null};case`date-range`:return{type:`date-range`};case`number`:return{type:`number`,operator:`eq`};case`text`:return{type:`text`,operator:`contains`,value:``};case`boolean`:return{type:`boolean`,value:null}}}const we=(0,o.memo)(({innerWrapperId:e,children:t})=>{let n=(0,o.useMemo)(()=>({innerWrapperId:e}),[e]);return(0,l.jsx)(f.Provider,{value:n,children:t})});we.displayName=`UITableInnerWrapperProvider`;const Te=(0,o.memo)(({table:e,innerTableId:t,totalSize:n,tableRef:r,children:i})=>{let a=(0,o.useMemo)(()=>({table:e,innerTableId:t,totalSize:n,tableRef:r}),[e,t,n,r]);return(0,l.jsx)(m.Provider,{value:a,children:i})});Te.displayName=`UITableInnerTableProvider`;const Ee=(0,o.memo)(({isAllRowsSelected:e,columnPinningState:t,leftPinnedHeaders:n,rightPinnedHeaders:r,onToggleAllRowsSelected:i,children:a})=>{let s=(0,o.useMemo)(()=>({isAllRowsSelected:e,columnPinningState:t,leftPinnedHeaders:n,rightPinnedHeaders:r,onToggleAllRowsSelected:i}),[e,t,n,r,i]);return(0,l.jsx)(g.Provider,{value:s,children:a})});Ee.displayName=`UITableHeadRowProvider`;const De=(0,o.memo)(({isFetching:e,isRefetching:t,isEmpty:n,rowSelectionState:r,children:i})=>{let a=(0,o.useMemo)(()=>({isFetching:e,isRefetching:t,isEmpty:n,rowSelectionState:r}),[e,t,n,r]);return(0,l.jsx)(v.Provider,{value:a,children:i})});De.displayName=`UITableBodyProvider`;const Oe=(0,o.memo)(({keyOfClickRow:e,isAllRowsSelected:t,columnPinningState:n,leftPinnedHeaders:r,rightPinnedHeaders:i,onClickRow:a,children:s})=>{let c=(0,o.useMemo)(()=>({keyOfClickRow:e,isAllRowsSelected:t,columnPinningState:n,leftPinnedHeaders:r,rightPinnedHeaders:i,onClickRow:a}),[e,t,n,r,i,a]);return(0,l.jsx)(b.Provider,{value:c,children:s})});Oe.displayName=`UITableRowProvider`;const ke=({title:e,isFetching:t=!1,isRefetching:n=!1,isLoading:r=!1,loadingDisplayRow:i=3,data:a,columns:s,totalRows:c,leftPinnedColumns:d=[],rightPinnedColumns:f=[],keyOfClickRow:p,onClickRow:m,onRowSelection:h,onColumnPinning:g,fetchMoreData:_,emptyDisplayHeight:v,csvData:y,csvFileName:b,filterDefinitions:x=[],onFilterChange:C,summary:w=[],onSummaryItemClick:T,showAnalysisPanel:E=!1,description:D,headerActions:O,children:re})=>{let ie=(0,o.useId)(),ae=(0,o.useId)(),oe=(0,o.useRef)(null),[se,ce]=(0,o.useState)(!1),[k,le]=(0,o.useState)(!0),[A,ue]=(0,o.useState)({}),[j,M]=(0,o.useState)({right:f,left:[`select`,...d]}),[de,fe]=(0,o.useState)({}),[N,P]=(0,o.useState)([]),pe=(0,o.useCallback)(e=>(ue(e),h?.(e instanceof Function?e(A):e),e),[A,h]),F=(0,o.useCallback)(e=>{M(e),g?.(e instanceof Function?e(j):e)},[j,g]),I=(0,o.useCallback)(e=>{let t=x.find(t=>t.id===e);if(!t)return;let n={id:`${e}-${crypto.randomUUID()}`,definitionId:e,value:Ce(t.type)};P(e=>{let t=[...e,n];return C?.(t),t})},[x,C]),L=(0,o.useCallback)(e=>{P(t=>{let n=t.filter(t=>t.id!==e);return C?.(n),n})},[C]),R=(0,o.useCallback)((e,t)=>{P(n=>{let r=n.map(n=>n.id===e?{...n,value:t}:n);return C?.(r),r})},[C]),z=(0,o.useMemo)(()=>({filterDefinitions:x,activeFilters:N,addFilter:I,removeFilter:L,updateFilter:R}),[x,N,I,L,R]),B=(0,u.useReactTable)({data:a,columns:s,state:{rowSelection:A,columnPinning:j,expanded:de},defaultColumn:{enableResizing:!1,size:void 0,minSize:void 0,maxSize:void 0},columnResizeMode:`onChange`,columnResizeDirection:`ltr`,enableColumnPinning:!0,enableRowSelection:!0,enableColumnResizing:!0,enableMultiRowSelection:!0,autoResetAll:!1,autoResetExpanded:!1,autoResetPageIndex:!1,getSubRows:e=>e.subRows,getCoreRowModel:(0,u.getCoreRowModel)(),getGroupedRowModel:(0,u.getGroupedRowModel)(),getExpandedRowModel:(0,u.getExpandedRowModel)(),onRowSelectionChange:pe,onColumnPinningChange:F,onExpandedChange:fe}),V=(0,o.useMemo)(()=>{let{rows:e}=B.getRowModel();return e},[B.getRowModel().rows,B.getState().columnPinning]),H=(0,o.useMemo)(()=>!t&&!n&&V.length===0,[V,t,n]),me=(0,o.useMemo)(()=>({title:e,table:B,isEmpty:H,isFetching:t,isRefetching:n,isLoading:r,loadingDisplayRow:i,totalRows:c,fetchMoreData:_,emptyDisplayHeight:v,csvData:y,csvFileName:b,summary:w,onSummaryItemClick:T,showAnalysisPanel:E,description:D,headerActions:O}),[e,B,H,n,t,r,i,c,_,v,B.getState().columnPinning,B.getState().expanded,y,b,w,T,E,D,O]),U=(0,o.useMemo)(()=>B.getState(),[B.getState()]),W=(0,o.useMemo)(()=>B.getIsAllRowsSelected(),[B.getIsAllRowsSelected()]),he=(0,o.useMemo)(()=>U.rowSelection,[U.rowSelection]),G=(0,o.useMemo)(()=>U.columnPinning,[U.columnPinning]),K=(0,o.useMemo)(()=>B.getLeftHeaderGroups()[0]?.headers||[],[B.getState().columnPinning]),q=(0,o.useMemo)(()=>B.getRightHeaderGroups()[0]?.headers||[],[B.getState().columnPinning]),J=(0,o.useMemo)(()=>B.getTotalSize(),[B.getTotalSize()]),Y=(0,o.useCallback)(()=>ce(e=>!e),[]),X=(0,o.useMemo)(()=>({isOpen:se,toggle:Y}),[se,Y]),Z=(0,o.useCallback)(()=>le(e=>!e),[]),Q=(0,o.useMemo)(()=>({isOpen:k,toggle:Z}),[k,Z]);return(0,l.jsx)(te.Provider,{value:X,children:(0,l.jsx)(ne.Provider,{value:Q,children:(0,l.jsx)(ee.Provider,{value:z,children:(0,l.jsx)(S.Provider,{value:me,children:(0,l.jsx)(we,{innerWrapperId:ie,children:(0,l.jsx)(Te,{table:B,innerTableId:ae,totalSize:J,tableRef:oe,children:(0,l.jsx)(Ee,{isAllRowsSelected:W,columnPinningState:G,leftPinnedHeaders:K,rightPinnedHeaders:q,onToggleAllRowsSelected:B.toggleAllRowsSelected,children:(0,l.jsx)(De,{isFetching:t,isRefetching:n,isEmpty:H,rowSelectionState:he,children:(0,l.jsx)(Oe,{keyOfClickRow:p,isAllRowsSelected:W,columnPinningState:G,leftPinnedHeaders:K,rightPinnedHeaders:q,onClickRow:m,children:re})})})})})})})})})};function $(e){let t=(0,o.lazy)(e);return e=>(0,l.jsx)(o.Suspense,{fallback:null,children:(0,l.jsx)(t,{...e})})}const Ae=$(()=>Promise.resolve().then(()=>require("./avatar-name-display-CLi1DJUs.cjs")).then(e=>({default:e.UITableAvatarNameDisplay}))),je=$(()=>Promise.resolve().then(()=>require("./badge-display-DHbCN998.cjs")).then(e=>({default:e.UITableBadgeDisplay}))),Me=$(()=>Promise.resolve().then(()=>require("./boolean-display-D2wjQhNX.cjs")).then(e=>({default:e.UITableBooleanDisplay}))),Ne=$(()=>Promise.resolve().then(()=>require("./currency-display-B06kc2IG.cjs")).then(e=>({default:e.UITableCurrencyDisplay}))),Pe=$(()=>Promise.resolve().then(()=>require("./date-display-DHnZr_yf.cjs")).then(e=>({default:e.UITableDateDisplay}))),Fe=$(()=>Promise.resolve().then(()=>require("./description-display-Cckihd1s.cjs")).then(e=>({default:e.UITableDescriptionDisplay}))),Ie=$(()=>Promise.resolve().then(()=>require("./edit-button-0_FLZoT3.cjs")).then(e=>({default:e.UITableEditButton}))),Le=$(()=>Promise.resolve().then(()=>require("./email-display-w-hRYIeL.cjs")).then(e=>({default:e.UITableEmailDisplay}))),Re=$(()=>Promise.resolve().then(()=>require("./list-display-DDeJoneW.cjs")).then(e=>({default:e.UITableListDisplay}))),ze=$(()=>Promise.resolve().then(()=>require("./more-button-RYvZgYiu.cjs")).then(e=>({default:e.UITableMoreButton}))),Be=$(()=>Promise.resolve().then(()=>require("./name-display-CKnyugrP.cjs")).then(e=>({default:e.UITableNameDisplay}))),Ve=$(()=>Promise.resolve().then(()=>require("./permalink-azuGQg2b.cjs")).then(e=>({default:e.UITablePermalink}))),He=$(()=>Promise.resolve().then(()=>require("./phone-number-BqRhKQdr.cjs")).then(e=>({default:e.UITablePhoneNumberDisplay}))),Ue=$(()=>Promise.resolve().then(()=>require("./progress-display-CiYWPOnq.cjs")).then(e=>({default:e.UITableProgressDisplay}))),We=$(()=>Promise.resolve().then(()=>require("./remove-button-B3qFw-M5.cjs")).then(e=>({default:e.UITableRemoveButton}))),Ge=$(()=>Promise.resolve().then(()=>require("./statistic-CE_Jg8SN.cjs")).then(e=>({default:e.UITableStatisticDisplay}))),Ke=$(()=>Promise.resolve().then(()=>require("./status-display-xcCCGpGS.cjs")).then(e=>({default:e.UITableStatusDisplay}))),qe=$(()=>Promise.resolve().then(()=>require("./toggle-button-Dq78v8cH.cjs")).then(e=>({default:e.UITableToggleButton}))),Je=$(()=>Promise.resolve().then(()=>require("./user-Dn53Fu5q.cjs")).then(e=>({default:e.UITableUserDataDisplay}))),Ye=$(()=>Promise.resolve().then(()=>require("./filter-CQ9BD0MV.cjs")).then(e=>({default:e.UITableFilter}))),Xe=$(()=>Promise.resolve().then(()=>require("./analysis-panel-BoKjkPYz.cjs")).then(e=>({default:e.UITableAnalysisPanel})));Xe.displayName=`UITableAnalysisPanel`;const Ze=$(()=>Promise.resolve().then(()=>require("./summary-bar-C08g8bb1.cjs")).then(e=>({default:e.UITableSummaryBar})));Ze.displayName=`UITableSummaryBar`;const Qe=$(()=>Promise.resolve().then(()=>require("./tooltip-BVzKgxrZ.cjs")).then(e=>({default:e.UITableTooltip})));Qe.displayName=`UITableTooltip`;const $e=$(()=>Promise.resolve().then(()=>require("./tooltip-BVzKgxrZ.cjs")).then(e=>({default:e.UITableTooltipFilter}))),et=$(()=>Promise.resolve().then(()=>require("./tooltip-BVzKgxrZ.cjs")).then(e=>({default:e.UITableTooltipActions})));Object.defineProperty(exports,"A",{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,"B",{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,"C",{enumerable:!0,get:function(){return et}}),Object.defineProperty(exports,"D",{enumerable:!0,get:function(){return Se}}),Object.defineProperty(exports,"E",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(exports,"F",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,"G",{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,"H",{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,"I",{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,"J",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"K",{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,"L",{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,"M",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,"N",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,"O",{enumerable:!0,get:function(){return xe}}),Object.defineProperty(exports,"P",{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,"Q",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"R",{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,"S",{enumerable:!0,get:function(){return Qe}}),Object.defineProperty(exports,"T",{enumerable:!0,get:function(){return Je}}),Object.defineProperty(exports,"U",{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,"V",{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,"W",{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,"X",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"Y",{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,"Z",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return We}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return Ne}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return Ze}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return Ie}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return Re}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return ze}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return Ue}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return He}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return Me}}),Object.defineProperty(exports,"j",{enumerable:!0,get:function(){return ge}}),Object.defineProperty(exports,"k",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return Le}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return Ve}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return Ae}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return Pe}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return Be}}),Object.defineProperty(exports,"q",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return je}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return Fe}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return Xe}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return Ye}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return Ge}}),Object.defineProperty(exports,"w",{enumerable:!0,get:function(){return $e}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return qe}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return Ke}}),Object.defineProperty(exports,"z",{enumerable:!0,get:function(){return he}});
|
|
2
|
+
//# sourceMappingURL=tables-BqZ4Zs6e.cjs.map
|