phx-react 1.3.1832 → 1.3.1835

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/cjs/components/MainWrapV4/MainWrapV4.d.ts +0 -1
  2. package/dist/cjs/components/MainWrapV4/MainWrapV4.js +3 -56
  3. package/dist/cjs/components/MainWrapV4/MainWrapV4.js.map +1 -1
  4. package/dist/cjs/components/TableSchedule/PHXScheduleTable.d.ts +11 -0
  5. package/dist/cjs/components/TableSchedule/PHXScheduleTable.js +45 -0
  6. package/dist/cjs/components/TableSchedule/PHXScheduleTable.js.map +1 -0
  7. package/dist/cjs/components/TableSchedule/components/PHXScheduleTableBody.d.ts +16 -0
  8. package/dist/cjs/components/TableSchedule/components/PHXScheduleTableBody.js +148 -0
  9. package/dist/cjs/components/TableSchedule/components/PHXScheduleTableBody.js.map +1 -0
  10. package/dist/cjs/components/TableSchedule/components/PHXScheduleTableHead.d.ts +22 -0
  11. package/dist/cjs/components/TableSchedule/components/PHXScheduleTableHead.js +49 -0
  12. package/dist/cjs/components/TableSchedule/components/PHXScheduleTableHead.js.map +1 -0
  13. package/dist/cjs/components/TableSchedule/components/PHXScheduleTableLegend.d.ts +13 -0
  14. package/dist/cjs/components/TableSchedule/components/PHXScheduleTableLegend.js +26 -0
  15. package/dist/cjs/components/TableSchedule/components/PHXScheduleTableLegend.js.map +1 -0
  16. package/dist/cjs/components/TableSchedule/components/useStickyShadow.d.ts +15 -0
  17. package/dist/cjs/components/TableSchedule/components/useStickyShadow.js +37 -0
  18. package/dist/cjs/components/TableSchedule/components/useStickyShadow.js.map +1 -0
  19. package/dist/cjs/components/TableSchedule/constants.d.ts +49 -0
  20. package/dist/cjs/components/TableSchedule/constants.js +85 -0
  21. package/dist/cjs/components/TableSchedule/constants.js.map +1 -0
  22. package/dist/cjs/components/TableSchedule/index.d.ts +1 -0
  23. package/dist/cjs/components/TableSchedule/index.js +5 -0
  24. package/dist/cjs/components/TableSchedule/index.js.map +1 -0
  25. package/dist/cjs/components/TableSchedule/renderers.d.ts +39 -0
  26. package/dist/cjs/components/TableSchedule/renderers.js +138 -0
  27. package/dist/cjs/components/TableSchedule/renderers.js.map +1 -0
  28. package/dist/cjs/components/TableSchedule/types.d.ts +112 -0
  29. package/dist/cjs/components/TableSchedule/types.js +4 -0
  30. package/dist/cjs/components/TableSchedule/types.js.map +1 -0
  31. package/dist/cjs/components/TableSchedule/utils.d.ts +160 -0
  32. package/dist/cjs/components/TableSchedule/utils.js +283 -0
  33. package/dist/cjs/components/TableSchedule/utils.js.map +1 -0
  34. package/dist/cjs/index.d.ts +2 -1
  35. package/dist/cjs/index.js +3 -1
  36. package/dist/cjs/index.js.map +1 -1
  37. package/dist/esm/components/MainWrapV4/MainWrapV4.d.ts +0 -1
  38. package/dist/esm/components/MainWrapV4/MainWrapV4.js +5 -58
  39. package/dist/esm/components/MainWrapV4/MainWrapV4.js.map +1 -1
  40. package/dist/esm/components/TableSchedule/PHXScheduleTable.d.ts +11 -0
  41. package/dist/esm/components/TableSchedule/PHXScheduleTable.js +40 -0
  42. package/dist/esm/components/TableSchedule/PHXScheduleTable.js.map +1 -0
  43. package/dist/esm/components/TableSchedule/components/PHXScheduleTableBody.d.ts +16 -0
  44. package/dist/esm/components/TableSchedule/components/PHXScheduleTableBody.js +143 -0
  45. package/dist/esm/components/TableSchedule/components/PHXScheduleTableBody.js.map +1 -0
  46. package/dist/esm/components/TableSchedule/components/PHXScheduleTableHead.d.ts +22 -0
  47. package/dist/esm/components/TableSchedule/components/PHXScheduleTableHead.js +45 -0
  48. package/dist/esm/components/TableSchedule/components/PHXScheduleTableHead.js.map +1 -0
  49. package/dist/esm/components/TableSchedule/components/PHXScheduleTableLegend.d.ts +13 -0
  50. package/dist/esm/components/TableSchedule/components/PHXScheduleTableLegend.js +21 -0
  51. package/dist/esm/components/TableSchedule/components/PHXScheduleTableLegend.js.map +1 -0
  52. package/dist/esm/components/TableSchedule/components/useStickyShadow.d.ts +15 -0
  53. package/dist/esm/components/TableSchedule/components/useStickyShadow.js +33 -0
  54. package/dist/esm/components/TableSchedule/components/useStickyShadow.js.map +1 -0
  55. package/dist/esm/components/TableSchedule/constants.d.ts +49 -0
  56. package/dist/esm/components/TableSchedule/constants.js +81 -0
  57. package/dist/esm/components/TableSchedule/constants.js.map +1 -0
  58. package/dist/esm/components/TableSchedule/index.d.ts +1 -0
  59. package/dist/esm/components/TableSchedule/index.js +2 -0
  60. package/dist/esm/components/TableSchedule/index.js.map +1 -0
  61. package/dist/esm/components/TableSchedule/renderers.d.ts +39 -0
  62. package/dist/esm/components/TableSchedule/renderers.js +129 -0
  63. package/dist/esm/components/TableSchedule/renderers.js.map +1 -0
  64. package/dist/esm/components/TableSchedule/types.d.ts +112 -0
  65. package/dist/esm/components/TableSchedule/types.js +3 -0
  66. package/dist/esm/components/TableSchedule/types.js.map +1 -0
  67. package/dist/esm/components/TableSchedule/utils.d.ts +160 -0
  68. package/dist/esm/components/TableSchedule/utils.js +264 -0
  69. package/dist/esm/components/TableSchedule/utils.js.map +1 -0
  70. package/dist/esm/index.d.ts +2 -1
  71. package/dist/esm/index.js +2 -1
  72. package/dist/esm/index.js.map +1 -1
  73. package/package.json +1 -1
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.useStickyShadow = void 0;
5
+ const react_1 = require("react");
6
+ /**
7
+ * Tracks whether the sticky-header shadow should be visible based on horizontal scroll.
8
+ *
9
+ * @param {UseStickyShadowParams} params Dependencies required to recalculate shadow visibility.
10
+ * @returns {boolean} True when the table has been horizontally scrolled.
11
+ */
12
+ const useStickyShadow = ({ scrollContainerRef, columnsLength, rowsLength, stickyHeaderCount, }) => {
13
+ const [showStickyShadow, setShowStickyShadow] = (0, react_1.useState)(false);
14
+ (0, react_1.useEffect)(() => {
15
+ const container = scrollContainerRef.current;
16
+ if (!container)
17
+ return;
18
+ /**
19
+ * Synchronizes the sticky shadow state with the container's horizontal scroll position.
20
+ *
21
+ * @returns {void}
22
+ */
23
+ const updateStickyShadow = () => {
24
+ setShowStickyShadow(container.scrollLeft > 0);
25
+ };
26
+ updateStickyShadow();
27
+ container.addEventListener('scroll', updateStickyShadow, { passive: true });
28
+ window.addEventListener('resize', updateStickyShadow);
29
+ return () => {
30
+ container.removeEventListener('scroll', updateStickyShadow);
31
+ window.removeEventListener('resize', updateStickyShadow);
32
+ };
33
+ }, [columnsLength, rowsLength, stickyHeaderCount, scrollContainerRef]);
34
+ return showStickyShadow;
35
+ };
36
+ exports.useStickyShadow = useStickyShadow;
37
+ //# sourceMappingURL=useStickyShadow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStickyShadow.js","sourceRoot":"","sources":["../../../../../src/components/TableSchedule/components/useStickyShadow.ts"],"names":[],"mappings":";AAAA,YAAY,CAAA;;;AAGZ,iCAA2C;AAS3C;;;;;GAKG;AACI,MAAM,eAAe,GAAG,CAAC,EAC9B,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,iBAAiB,GACK,EAAE,EAAE;IAC1B,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAA;IAE/D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAA;QAC5C,IAAI,CAAC,SAAS;YAAE,OAAM;QAEtB;;;;WAIG;QACH,MAAM,kBAAkB,GAAG,GAAG,EAAE;YAC9B,mBAAmB,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;QAC/C,CAAC,CAAA;QAED,kBAAkB,EAAE,CAAA;QACpB,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3E,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA;QAErD,OAAO,GAAG,EAAE;YACV,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA;YAC3D,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA;QAC1D,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,CAAA;IAEtE,OAAO,gBAAgB,CAAA;AACzB,CAAC,CAAA;AAhCY,QAAA,eAAe,mBAgC3B"}
@@ -0,0 +1,49 @@
1
+ import { CSSProperties } from 'react';
2
+ import { GridCellVariant, GridColumnAlign, GridRowHeaderAlign } from './types';
3
+ export declare const BORDER = "0.5px solid var(--color-border-tertiary, #e5e7eb)";
4
+ export declare const stickyBase: CSSProperties;
5
+ export declare const thBase: CSSProperties;
6
+ export declare const HEADER_TH_CLASSNAME = "whitespace-nowrap bg-white px-3 py-2 text-xs font-semibold text-gray-900";
7
+ export declare const STICKY_SHADOW_CLASSNAME = "drop-shadow-[4px_0_4px_rgba(0,0,0,0.1)]";
8
+ export declare const LEGEND_WRAPPER_CLASSNAME = "mb-3 flex w-fit items-center gap-2 rounded-lg bg-white p-2";
9
+ export declare const LEGEND_ITEM_CLASSNAME = "ml-2 flex items-center gap-1";
10
+ export declare const LEGEND_LAST_ITEM_CLASSNAME = "ml-2 mr-2 flex items-center gap-1";
11
+ export declare const LEGEND_LABEL_CLASSNAME = "text-xs font-normal text-gray-900";
12
+ export declare const TABLE_SCROLL_CONTAINER_CLASSNAME = "overflow-x-auto rounded-lg bg-white";
13
+ export declare const TABLE_CLASSNAME = "w-full border-collapse";
14
+ export declare const TABLE_SCROLL_CONTAINER_STYLE: CSSProperties;
15
+ export declare const TABLE_STYLE: CSSProperties;
16
+ export declare const ROW_HEADER_CONTENT_CLASSNAME = "flex flex-col";
17
+ export declare const ROW_HEADER_ALIGN_CLASSNAME: Record<GridRowHeaderAlign, string>;
18
+ export declare const ROW_HEADER_TITLE_CLASSNAME = "text-xs font-semibold text-gray-900";
19
+ export declare const ROW_HEADER_DESCRIPTION_CLASSNAME = "text-xs text-gray-600";
20
+ export declare const CELL_BOX_BASE_CLASSNAME = "flex h-[30px] w-[176px] items-center overflow-hidden rounded-lg border-[0.5px] px-2.5 text-left text-xs font-normal shadow-sm";
21
+ export declare const CELL_BOX_VARIANT_CLASSNAME: Record<GridCellVariant, string>;
22
+ export declare const LEGEND_INDICATOR_CLASSNAME: Record<GridCellVariant, string>;
23
+ export declare const CELL_WRAPPER_ALIGN_CLASSNAME: Record<GridColumnAlign, string>;
24
+ /**
25
+ * Returns the wrapper alignment class for a cell based on the column alignment.
26
+ *
27
+ * @param {GridColumnAlign} align The alignment configured for the column.
28
+ * @returns {string} The Tailwind class used to align the cell wrapper content.
29
+ */
30
+ export declare const getCellWrapperAlignClassName: (align: GridColumnAlign) => string;
31
+ export declare const TOOLTIP_CONTENT_CLASSNAME = "flex max-w-[320px] flex-col gap-2 text-left";
32
+ export declare const TOOLTIP_TITLE_CLASSNAME = "text-xs font-semibold leading-5 text-gray-800";
33
+ export declare const TOOLTIP_SECTION_CLASSNAME = "flex flex-col gap-0.5";
34
+ export declare const TOOLTIP_LABEL_CLASSNAME = "text-xs leading-5 text-gray-500";
35
+ export declare const TOOLTIP_VALUE_CLASSNAME = "text-xs font-semibold leading-5 text-gray-800";
36
+ export declare const DEFAULT_TOOLTIP_CLASSNAME = "w-fit !px-5 !py-4";
37
+ export declare const SCHEDULE_CELL_CLASSNAME = "flex flex-col gap-2 text-left";
38
+ export declare const SCHEDULE_TITLE_CLASSNAME = "text-sm font-semibold leading-5 text-gray-800";
39
+ export declare const SCHEDULE_TITLE_DOTTED_CLASSNAME = "inline-block w-fit border-b-2 border-dotted border-gray-300 text-sm font-semibold leading-5 text-gray-800";
40
+ export declare const SCHEDULE_SECTION_CLASSNAME = "flex flex-col gap-1";
41
+ export declare const SCHEDULE_SECTION_LABEL_CLASSNAME = "flex items-center gap-1.5 text-xs font-normal leading-5 text-gray-500";
42
+ export declare const SCHEDULE_SECTION_VALUE_CLASSNAME = "text-sm font-semibold leading-5 text-gray-800";
43
+ export declare const SCHEDULE_EMPTY_TITLE_CLASSNAME = "text-sm font-semibold leading-5 text-gray-800";
44
+ export declare const SCHEDULE_EMPTY_DESCRIPTION_CLASSNAME = "text-xs font-normal leading-5 text-gray-500";
45
+ export declare const BOXED_CELL_PADDING_CLASSNAME = "px-1 py-1";
46
+ export declare const PLAIN_CELL_PADDING_CLASSNAME = "px-2 py-1.5";
47
+ export declare const BUTTON_BASE_CLASSNAME = "!shadow-none !flex !w-full !rounded-none !text-left";
48
+ export declare const CELL_CONTENT_BASE_CLASSNAME = "flex w-full text-left";
49
+ export declare const DATA_CELL_BASE_CLASSNAME = "align-middle border-l p-0";
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.DATA_CELL_BASE_CLASSNAME = exports.CELL_CONTENT_BASE_CLASSNAME = exports.BUTTON_BASE_CLASSNAME = exports.PLAIN_CELL_PADDING_CLASSNAME = exports.BOXED_CELL_PADDING_CLASSNAME = exports.SCHEDULE_EMPTY_DESCRIPTION_CLASSNAME = exports.SCHEDULE_EMPTY_TITLE_CLASSNAME = exports.SCHEDULE_SECTION_VALUE_CLASSNAME = exports.SCHEDULE_SECTION_LABEL_CLASSNAME = exports.SCHEDULE_SECTION_CLASSNAME = exports.SCHEDULE_TITLE_DOTTED_CLASSNAME = exports.SCHEDULE_TITLE_CLASSNAME = exports.SCHEDULE_CELL_CLASSNAME = exports.DEFAULT_TOOLTIP_CLASSNAME = exports.TOOLTIP_VALUE_CLASSNAME = exports.TOOLTIP_LABEL_CLASSNAME = exports.TOOLTIP_SECTION_CLASSNAME = exports.TOOLTIP_TITLE_CLASSNAME = exports.TOOLTIP_CONTENT_CLASSNAME = exports.getCellWrapperAlignClassName = exports.CELL_WRAPPER_ALIGN_CLASSNAME = exports.LEGEND_INDICATOR_CLASSNAME = exports.CELL_BOX_VARIANT_CLASSNAME = exports.CELL_BOX_BASE_CLASSNAME = exports.ROW_HEADER_DESCRIPTION_CLASSNAME = exports.ROW_HEADER_TITLE_CLASSNAME = exports.ROW_HEADER_ALIGN_CLASSNAME = exports.ROW_HEADER_CONTENT_CLASSNAME = exports.TABLE_STYLE = exports.TABLE_SCROLL_CONTAINER_STYLE = exports.TABLE_CLASSNAME = exports.TABLE_SCROLL_CONTAINER_CLASSNAME = exports.LEGEND_LABEL_CLASSNAME = exports.LEGEND_LAST_ITEM_CLASSNAME = exports.LEGEND_ITEM_CLASSNAME = exports.LEGEND_WRAPPER_CLASSNAME = exports.STICKY_SHADOW_CLASSNAME = exports.HEADER_TH_CLASSNAME = exports.thBase = exports.stickyBase = exports.BORDER = void 0;
5
+ exports.BORDER = '0.5px solid var(--color-border-tertiary, #e5e7eb)';
6
+ exports.stickyBase = {
7
+ position: 'sticky',
8
+ left: 0,
9
+ zIndex: 2,
10
+ background: 'var(--color-background-primary, #fff)',
11
+ borderRight: exports.BORDER,
12
+ };
13
+ exports.thBase = {
14
+ borderBottom: exports.BORDER,
15
+ textAlign: 'center',
16
+ };
17
+ exports.HEADER_TH_CLASSNAME = 'whitespace-nowrap bg-white px-3 py-2 text-xs font-semibold text-gray-900';
18
+ exports.STICKY_SHADOW_CLASSNAME = 'drop-shadow-[4px_0_4px_rgba(0,0,0,0.1)]';
19
+ exports.LEGEND_WRAPPER_CLASSNAME = 'mb-3 flex w-fit items-center gap-2 rounded-lg bg-white p-2';
20
+ exports.LEGEND_ITEM_CLASSNAME = 'ml-2 flex items-center gap-1';
21
+ exports.LEGEND_LAST_ITEM_CLASSNAME = 'ml-2 mr-2 flex items-center gap-1';
22
+ exports.LEGEND_LABEL_CLASSNAME = 'text-xs font-normal text-gray-900';
23
+ exports.TABLE_SCROLL_CONTAINER_CLASSNAME = 'overflow-x-auto rounded-lg bg-white';
24
+ exports.TABLE_CLASSNAME = 'w-full border-collapse';
25
+ exports.TABLE_SCROLL_CONTAINER_STYLE = {
26
+ border: exports.BORDER,
27
+ };
28
+ exports.TABLE_STYLE = {
29
+ width: '100%',
30
+ borderCollapse: 'collapse',
31
+ };
32
+ exports.ROW_HEADER_CONTENT_CLASSNAME = 'flex flex-col';
33
+ exports.ROW_HEADER_ALIGN_CLASSNAME = {
34
+ left: 'items-start text-left',
35
+ center: 'items-center text-center',
36
+ right: 'items-end text-right',
37
+ };
38
+ exports.ROW_HEADER_TITLE_CLASSNAME = 'text-xs font-semibold text-gray-900';
39
+ exports.ROW_HEADER_DESCRIPTION_CLASSNAME = 'text-xs text-gray-600';
40
+ exports.CELL_BOX_BASE_CLASSNAME = 'flex h-[30px] w-[176px] items-center overflow-hidden rounded-lg border-[0.5px] px-2.5 text-left text-xs font-normal shadow-sm';
41
+ exports.CELL_BOX_VARIANT_CLASSNAME = {
42
+ default: 'border-gray-500 bg-white text-gray-900',
43
+ moving: 'border-gray-500 bg-[#FFD6A4] text-gray-900',
44
+ trogiang: 'border-[#00527C] bg-[#E0F0FF] text-[#00527C]',
45
+ empty: 'border-gray-500 bg-white text-gray-900',
46
+ };
47
+ exports.LEGEND_INDICATOR_CLASSNAME = {
48
+ default: '',
49
+ moving: 'bg-[#FFD6A4]',
50
+ trogiang: 'border-[#00527C] bg-[#E0F0FF]',
51
+ empty: '',
52
+ };
53
+ exports.CELL_WRAPPER_ALIGN_CLASSNAME = {
54
+ left: 'justify-start',
55
+ center: 'justify-center',
56
+ right: 'justify-end',
57
+ };
58
+ /**
59
+ * Returns the wrapper alignment class for a cell based on the column alignment.
60
+ *
61
+ * @param {GridColumnAlign} align The alignment configured for the column.
62
+ * @returns {string} The Tailwind class used to align the cell wrapper content.
63
+ */
64
+ const getCellWrapperAlignClassName = (align) => exports.CELL_WRAPPER_ALIGN_CLASSNAME[align];
65
+ exports.getCellWrapperAlignClassName = getCellWrapperAlignClassName;
66
+ exports.TOOLTIP_CONTENT_CLASSNAME = 'flex max-w-[320px] flex-col gap-2 text-left';
67
+ exports.TOOLTIP_TITLE_CLASSNAME = 'text-xs font-semibold leading-5 text-gray-800';
68
+ exports.TOOLTIP_SECTION_CLASSNAME = 'flex flex-col gap-0.5';
69
+ exports.TOOLTIP_LABEL_CLASSNAME = 'text-xs leading-5 text-gray-500';
70
+ exports.TOOLTIP_VALUE_CLASSNAME = 'text-xs font-semibold leading-5 text-gray-800';
71
+ exports.DEFAULT_TOOLTIP_CLASSNAME = 'w-fit !px-5 !py-4';
72
+ exports.SCHEDULE_CELL_CLASSNAME = 'flex flex-col gap-2 text-left';
73
+ exports.SCHEDULE_TITLE_CLASSNAME = 'text-sm font-semibold leading-5 text-gray-800';
74
+ exports.SCHEDULE_TITLE_DOTTED_CLASSNAME = 'inline-block w-fit border-b-2 border-dotted border-gray-300 text-sm font-semibold leading-5 text-gray-800';
75
+ exports.SCHEDULE_SECTION_CLASSNAME = 'flex flex-col gap-1';
76
+ exports.SCHEDULE_SECTION_LABEL_CLASSNAME = 'flex items-center gap-1.5 text-xs font-normal leading-5 text-gray-500';
77
+ exports.SCHEDULE_SECTION_VALUE_CLASSNAME = 'text-sm font-semibold leading-5 text-gray-800';
78
+ exports.SCHEDULE_EMPTY_TITLE_CLASSNAME = 'text-sm font-semibold leading-5 text-gray-800';
79
+ exports.SCHEDULE_EMPTY_DESCRIPTION_CLASSNAME = 'text-xs font-normal leading-5 text-gray-500';
80
+ exports.BOXED_CELL_PADDING_CLASSNAME = 'px-1 py-1';
81
+ exports.PLAIN_CELL_PADDING_CLASSNAME = 'px-2 py-1.5';
82
+ exports.BUTTON_BASE_CLASSNAME = '!shadow-none !flex !w-full !rounded-none !text-left';
83
+ exports.CELL_CONTENT_BASE_CLASSNAME = 'flex w-full text-left';
84
+ exports.DATA_CELL_BASE_CLASSNAME = 'align-middle border-l p-0';
85
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/components/TableSchedule/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './PHXScheduleTable';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./PHXScheduleTable"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/TableSchedule/index.ts"],"names":[],"mappings":";;;AAAA,6DAAkC"}
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+ import { GridCellData, GridRowHeader, GridScheduleContent } from './types';
3
+ /**
4
+ * Renders the content displayed inside a sticky row-header cell.
5
+ *
6
+ * @param {GridRowHeader} header The row-header configuration object.
7
+ * @returns {React.ReactNode} The rendered header content, or null when nothing is configured.
8
+ */
9
+ export declare const renderRowHeaderContent: (header: GridRowHeader) => string | number | bigint | true | Iterable<React.ReactNode> | Promise<React.AwaitedReactNode> | React.JSX.Element | null;
10
+ /**
11
+ * Renders the boxed visual treatment used by default-layout schedule cells.
12
+ *
13
+ * @param {GridCellData} cell The cell data to render.
14
+ * @returns {React.ReactNode} The boxed content node for the cell.
15
+ */
16
+ export declare const renderCellBoxContent: (cell: GridCellData) => React.JSX.Element;
17
+ /**
18
+ * Renders the rich schedule layout used by plain schedule cells.
19
+ *
20
+ * @param {GridScheduleContent} scheduleContent The structured schedule content to render.
21
+ * @param {string} [userDetailPageUrl] The base URL used to build person detail links.
22
+ * @returns {React.ReactNode} The rendered schedule content.
23
+ */
24
+ export declare const renderScheduleContent: (scheduleContent: GridScheduleContent, userDetailPageUrl?: string) => React.JSX.Element;
25
+ /**
26
+ * Resolves and renders the tooltip content for a data cell.
27
+ *
28
+ * @param {GridCellData} cell The cell whose tooltip content should be rendered.
29
+ * @param {string} [userDetailPageUrl] The base URL used to build person detail links.
30
+ * @returns {React.ReactNode} The tooltip content, or null when the cell has no tooltip payload.
31
+ */
32
+ export declare const renderTooltipContent: (cell: GridCellData, userDetailPageUrl?: string) => string | number | bigint | true | Iterable<React.ReactNode> | Promise<React.AwaitedReactNode> | React.JSX.Element | null;
33
+ /**
34
+ * Resolves the tooltip container class name for a cell.
35
+ *
36
+ * @param {GridCellData} cell The cell that may override the tooltip class.
37
+ * @returns {string} The tooltip class name to apply.
38
+ */
39
+ export declare const resolveTooltipClassName: (cell: GridCellData) => string;
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.resolveTooltipClassName = exports.renderTooltipContent = exports.renderScheduleContent = exports.renderCellBoxContent = exports.renderRowHeaderContent = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const react_1 = tslib_1.__importDefault(require("react"));
7
+ const constants_1 = require("./constants");
8
+ /**
9
+ * Checks whether a render value is a structured person-link object.
10
+ *
11
+ * @param {ReactNode | GridPersonLink} value The render value to inspect.
12
+ * @returns {value is GridPersonLink} True when the value matches the person-link contract.
13
+ */
14
+ const isGridPersonLink = (value) => !!value && typeof value === 'object' && 'type' in value && value.type === 'person-link';
15
+ /**
16
+ * Renders a person-link value as an external profile anchor when a destination URL exists.
17
+ *
18
+ * @param {GridPersonLink} person The person-link payload to render.
19
+ * @param {string} [userDetailPageUrl] The base URL used to build the person detail link.
20
+ * @returns {React.ReactNode} The rendered link node, or null when the person has no display name.
21
+ */
22
+ const renderGridPersonLink = (person, userDetailPageUrl) => {
23
+ if (!person.name)
24
+ return null;
25
+ return (react_1.default.createElement("a", { className: 'group inline-flex items-center gap-1 whitespace-nowrap font-semibold text-gray-800 hover:text-blue-500', href: userDetailPageUrl && person.id ? `${userDetailPageUrl}${person.id}` : undefined, rel: 'noopener noreferrer', target: '_blank' },
26
+ react_1.default.createElement("span", null,
27
+ person.name,
28
+ person.code ? ` (${person.code})` : ''),
29
+ person.id && userDetailPageUrl && person.icon));
30
+ };
31
+ /**
32
+ * Renders a tooltip or schedule value that may contain raw nodes, a person link, or a list of person links.
33
+ *
34
+ * @param {ReactNode | GridPersonLink | GridPersonLink[]} value The value payload to render.
35
+ * @param {string} [userDetailPageUrl] The base URL used to build person detail links.
36
+ * @returns {React.ReactNode} The rendered value node.
37
+ */
38
+ const renderRichValue = (value, userDetailPageUrl) => {
39
+ if (Array.isArray(value)) {
40
+ return (react_1.default.createElement("div", { className: 'flex flex-col gap-1' }, value.map((item, index) => (react_1.default.createElement("div", { key: index }, isGridPersonLink(item) ? renderGridPersonLink(item, userDetailPageUrl) : item)))));
41
+ }
42
+ return isGridPersonLink(value) ? renderGridPersonLink(value, userDetailPageUrl) : value;
43
+ };
44
+ /**
45
+ * Renders the content displayed inside a sticky row-header cell.
46
+ *
47
+ * @param {GridRowHeader} header The row-header configuration object.
48
+ * @returns {React.ReactNode} The rendered header content, or null when nothing is configured.
49
+ */
50
+ const renderRowHeaderContent = (header) => {
51
+ if (header.content)
52
+ return header.content;
53
+ if (!header.headerContent)
54
+ return null;
55
+ const { title, description, align = 'left' } = header.headerContent;
56
+ return (react_1.default.createElement("div", { className: `${constants_1.ROW_HEADER_CONTENT_CLASSNAME} ${constants_1.ROW_HEADER_ALIGN_CLASSNAME[align]}` },
57
+ react_1.default.createElement("div", { className: constants_1.ROW_HEADER_TITLE_CLASSNAME }, title),
58
+ description && react_1.default.createElement("div", { className: constants_1.ROW_HEADER_DESCRIPTION_CLASSNAME }, description)));
59
+ };
60
+ exports.renderRowHeaderContent = renderRowHeaderContent;
61
+ /**
62
+ * Renders the boxed visual treatment used by default-layout schedule cells.
63
+ *
64
+ * @param {GridCellData} cell The cell data to render.
65
+ * @returns {React.ReactNode} The boxed content node for the cell.
66
+ */
67
+ const renderCellBoxContent = (cell) => {
68
+ var _a, _b;
69
+ return (react_1.default.createElement("div", { className: `${constants_1.CELL_BOX_BASE_CLASSNAME} ${constants_1.CELL_BOX_VARIANT_CLASSNAME[(_a = cell.variant) !== null && _a !== void 0 ? _a : 'default']}` },
70
+ react_1.default.createElement("span", { className: 'block w-full overflow-hidden text-ellipsis whitespace-nowrap' }, (_b = cell.content) !== null && _b !== void 0 ? _b : ' ')));
71
+ };
72
+ exports.renderCellBoxContent = renderCellBoxContent;
73
+ /**
74
+ * Renders the rich schedule layout used by plain schedule cells.
75
+ *
76
+ * @param {GridScheduleContent} scheduleContent The structured schedule content to render.
77
+ * @param {string} [userDetailPageUrl] The base URL used to build person detail links.
78
+ * @returns {React.ReactNode} The rendered schedule content.
79
+ */
80
+ const renderScheduleContent = (scheduleContent, userDetailPageUrl) => {
81
+ const { title, titleVariant = 'default', sections = [], emptyTitle = 'Trống', emptyDescription = 'Chưa xếp', } = scheduleContent;
82
+ if (!title && sections.length === 0) {
83
+ return (react_1.default.createElement("div", { className: constants_1.SCHEDULE_CELL_CLASSNAME },
84
+ react_1.default.createElement("div", { className: constants_1.SCHEDULE_EMPTY_TITLE_CLASSNAME }, emptyTitle),
85
+ react_1.default.createElement("div", { className: constants_1.SCHEDULE_EMPTY_DESCRIPTION_CLASSNAME }, emptyDescription)));
86
+ }
87
+ return (react_1.default.createElement("div", { className: constants_1.SCHEDULE_CELL_CLASSNAME },
88
+ title && (react_1.default.createElement("div", { className: titleVariant === 'dotted' ? constants_1.SCHEDULE_TITLE_DOTTED_CLASSNAME : constants_1.SCHEDULE_TITLE_CLASSNAME }, title)),
89
+ sections.map((section, sectionIndex) => (react_1.default.createElement("div", { key: sectionIndex, className: constants_1.SCHEDULE_SECTION_CLASSNAME },
90
+ section.label && (react_1.default.createElement("div", { className: constants_1.SCHEDULE_SECTION_LABEL_CLASSNAME },
91
+ section.labelPrefix,
92
+ react_1.default.createElement("span", null, section.label))),
93
+ section.items.map((item, itemIndex) => (react_1.default.createElement("div", { key: itemIndex, className: constants_1.SCHEDULE_SECTION_VALUE_CLASSNAME }, isGridPersonLink(item) ? renderGridPersonLink(item, userDetailPageUrl) : item))))))));
94
+ };
95
+ exports.renderScheduleContent = renderScheduleContent;
96
+ /**
97
+ * Renders the grouped tooltip sections for a cell.
98
+ *
99
+ * @param {GridTooltipBlock[]} blocks The tooltip blocks to render.
100
+ * @param {string} [userDetailPageUrl] The base URL used to build person detail links.
101
+ * @returns {React.ReactNode} The rendered tooltip block list.
102
+ */
103
+ const renderTooltipBlocks = (blocks, userDetailPageUrl) => (react_1.default.createElement("ul", { className: 'text-left' }, blocks.map((block, index) => {
104
+ var _a;
105
+ return (react_1.default.createElement("li", { key: index, className: index === 0 ? 'list-none' : 'mt-3 list-none border-t border-gray-200 pt-3' },
106
+ react_1.default.createElement("div", { className: constants_1.TOOLTIP_CONTENT_CLASSNAME },
107
+ block.title && react_1.default.createElement("div", { className: constants_1.TOOLTIP_TITLE_CLASSNAME }, block.title), (_a = block.sections) === null || _a === void 0 ? void 0 :
108
+ _a.map((section, sectionIndex) => (react_1.default.createElement("div", { key: sectionIndex, className: constants_1.TOOLTIP_SECTION_CLASSNAME },
109
+ react_1.default.createElement("span", { className: `${constants_1.TOOLTIP_LABEL_CLASSNAME} inline-flex items-center gap-1.5` },
110
+ section.labelPrefix,
111
+ react_1.default.createElement("span", null, section.label)),
112
+ react_1.default.createElement("span", { className: constants_1.TOOLTIP_VALUE_CLASSNAME }, renderRichValue(section.value, userDetailPageUrl))))))));
113
+ })));
114
+ /**
115
+ * Resolves and renders the tooltip content for a data cell.
116
+ *
117
+ * @param {GridCellData} cell The cell whose tooltip content should be rendered.
118
+ * @param {string} [userDetailPageUrl] The base URL used to build person detail links.
119
+ * @returns {React.ReactNode} The tooltip content, or null when the cell has no tooltip payload.
120
+ */
121
+ const renderTooltipContent = (cell, userDetailPageUrl) => {
122
+ if (cell.tooltip)
123
+ return cell.tooltip;
124
+ if (cell.tooltipBlocks && cell.tooltipBlocks.length > 0) {
125
+ return renderTooltipBlocks(cell.tooltipBlocks, userDetailPageUrl);
126
+ }
127
+ return null;
128
+ };
129
+ exports.renderTooltipContent = renderTooltipContent;
130
+ /**
131
+ * Resolves the tooltip container class name for a cell.
132
+ *
133
+ * @param {GridCellData} cell The cell that may override the tooltip class.
134
+ * @returns {string} The tooltip class name to apply.
135
+ */
136
+ const resolveTooltipClassName = (cell) => { var _a; return (_a = cell.tooltipClassName) !== null && _a !== void 0 ? _a : constants_1.DEFAULT_TOOLTIP_CLASSNAME; };
137
+ exports.resolveTooltipClassName = resolveTooltipClassName;
138
+ //# sourceMappingURL=renderers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../../../src/components/TableSchedule/renderers.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ import { ComponentType, CSSProperties, ReactNode } from 'react';
2
+ export type GridCellVariant = 'default' | 'moving' | 'trogiang' | 'empty';
3
+ export type GridPersonLink = {
4
+ type: 'person-link';
5
+ id?: number | string | null;
6
+ name?: ReactNode;
7
+ code?: ReactNode;
8
+ icon?: ReactNode;
9
+ };
10
+ export type GridTooltipSection = {
11
+ label: ReactNode;
12
+ labelPrefix?: ReactNode;
13
+ value: ReactNode | GridPersonLink | GridPersonLink[];
14
+ };
15
+ export type GridTooltipBlock = {
16
+ title?: ReactNode;
17
+ sections?: GridTooltipSection[];
18
+ };
19
+ export type GridCellLayout = 'boxed' | 'plain';
20
+ export type GridScheduleTitleVariant = 'default' | 'dotted';
21
+ export type GridRowHeaderAlign = 'left' | 'center' | 'right';
22
+ export type GridScheduleSection = {
23
+ label?: ReactNode;
24
+ labelPrefix?: ReactNode;
25
+ items: Array<ReactNode | GridPersonLink>;
26
+ };
27
+ export type GridScheduleContent = {
28
+ title?: ReactNode;
29
+ titleVariant?: GridScheduleTitleVariant;
30
+ sections?: GridScheduleSection[];
31
+ emptyTitle?: ReactNode;
32
+ emptyDescription?: ReactNode;
33
+ };
34
+ export type GridCellData = {
35
+ content?: ReactNode;
36
+ variant?: GridCellVariant;
37
+ layout?: GridCellLayout;
38
+ scheduleContent?: GridScheduleContent;
39
+ tooltipBlocks?: GridTooltipBlock[];
40
+ tooltip?: ReactNode;
41
+ tooltipClassName?: string;
42
+ cellStyle?: CSSProperties;
43
+ cellClassName?: string;
44
+ colSpan?: number;
45
+ rowSpan?: number;
46
+ disabled?: boolean;
47
+ data?: unknown;
48
+ };
49
+ export type GridRowHeaderContent = {
50
+ title: ReactNode;
51
+ description?: ReactNode;
52
+ align?: GridRowHeaderAlign;
53
+ };
54
+ export type GridRowHeader = {
55
+ content?: ReactNode;
56
+ headerContent?: GridRowHeaderContent;
57
+ rowSpan?: number;
58
+ width?: number;
59
+ className?: string;
60
+ style?: CSSProperties;
61
+ };
62
+ export type GridColumnAlign = 'left' | 'center' | 'right';
63
+ export type GridColumn = {
64
+ key: string;
65
+ header: ReactNode;
66
+ minWidth?: number;
67
+ align?: GridColumnAlign;
68
+ };
69
+ export type GridHeaderGroup = {
70
+ header: ReactNode;
71
+ columnKeys: string[];
72
+ };
73
+ export type TooltipComponentType = ComponentType<{
74
+ content: ReactNode;
75
+ contentClassName?: string;
76
+ children: ReactNode;
77
+ }>;
78
+ export type ButtonComponentType = ComponentType<{
79
+ tertiary?: boolean;
80
+ noPadding?: boolean;
81
+ className?: string;
82
+ onClick?: () => void;
83
+ children?: ReactNode;
84
+ }>;
85
+ export type ScheduleTableRow = {
86
+ rowHeader?: GridRowHeader;
87
+ rowHeaders?: Array<GridRowHeader | null>;
88
+ cells: Record<string, GridCellData>;
89
+ };
90
+ export type GridLegendItem = {
91
+ label: ReactNode;
92
+ variant?: GridCellVariant;
93
+ indicatorClassName?: string;
94
+ };
95
+ export type PHXScheduleTableProps = {
96
+ columns: GridColumn[];
97
+ headerGroups?: GridHeaderGroup[];
98
+ rows: ScheduleTableRow[];
99
+ onCellClick?: (params: {
100
+ rowIndex: number;
101
+ columnKey: string;
102
+ cellData: GridCellData;
103
+ }) => void;
104
+ stickyColumnWidth?: number;
105
+ stickyColumnWidths?: number[];
106
+ defaultCellLayout?: GridCellLayout;
107
+ legendItems?: GridLegendItem[];
108
+ userDetailPageUrl?: string;
109
+ className?: string;
110
+ TooltipComponent?: TooltipComponentType;
111
+ ButtonComponent?: ButtonComponentType;
112
+ };
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/components/TableSchedule/types.ts"],"names":[],"mappings":";AAAA,YAAY,CAAA"}