@wheelhouse/ui 0.2.3 → 0.2.5
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/blocks/columns/columns-types.d.ts +25 -1
- package/dist/blocks/columns/columns-types.d.ts.map +1 -1
- package/dist/blocks/columns/columns-types.js +4 -0
- package/dist/blocks/columns/columns-utils.d.ts +31 -1
- package/dist/blocks/columns/columns-utils.d.ts.map +1 -1
- package/dist/blocks/columns/columns-utils.js +86 -1
- package/dist/blocks/columns/columns.d.ts +1 -1
- package/dist/blocks/columns/columns.d.ts.map +1 -1
- package/dist/blocks/columns/columns.js +81 -20
- package/dist/blocks/columns/columns.stories.d.ts +1 -0
- package/dist/blocks/columns/columns.stories.d.ts.map +1 -1
- package/dist/blocks/columns/columns.stories.js +21 -1
- package/dist/blocks/columns/index.d.ts +1 -1
- package/dist/blocks/columns/index.d.ts.map +1 -1
- package/dist/blocks/floating-menu-widget/floating-menu-widget.d.ts +26 -0
- package/dist/blocks/floating-menu-widget/floating-menu-widget.d.ts.map +1 -0
- package/dist/blocks/floating-menu-widget/floating-menu-widget.js +200 -0
- package/dist/blocks/floating-menu-widget/floating-menu-widget.stories.d.ts +15 -0
- package/dist/blocks/floating-menu-widget/floating-menu-widget.stories.d.ts.map +1 -0
- package/dist/blocks/floating-menu-widget/floating-menu-widget.stories.js +22 -0
- package/dist/blocks/floating-menu-widget/index.d.ts +3 -0
- package/dist/blocks/floating-menu-widget/index.d.ts.map +1 -0
- package/dist/blocks/floating-menu-widget/index.js +1 -0
- package/dist/blocks/index.d.ts +1 -0
- package/dist/blocks/index.d.ts.map +1 -1
- package/dist/blocks/index.js +1 -0
- package/dist/components/button/button.d.ts +18 -11
- package/dist/components/button/button.d.ts.map +1 -1
- package/dist/components/button/button.js +27 -14
- package/dist/components/button/button.stories.d.ts +11 -0
- package/dist/components/button/button.stories.d.ts.map +1 -1
- package/dist/components/button/button.stories.js +84 -0
- package/dist/components/data-grid/data-grid-column-filter.d.ts +15 -0
- package/dist/components/data-grid/data-grid-column-filter.d.ts.map +1 -0
- package/dist/components/data-grid/data-grid-column-filter.js +36 -0
- package/dist/components/data-grid/data-grid-column-header.d.ts +15 -0
- package/dist/components/data-grid/data-grid-column-header.d.ts.map +1 -0
- package/dist/components/data-grid/data-grid-column-header.js +137 -0
- package/dist/components/data-grid/data-grid-column-visibility.d.ts +8 -0
- package/dist/components/data-grid/data-grid-column-visibility.d.ts.map +1 -0
- package/dist/components/data-grid/data-grid-column-visibility.js +13 -0
- package/dist/components/data-grid/data-grid-pagination.d.ts +20 -0
- package/dist/components/data-grid/data-grid-pagination.d.ts.map +1 -0
- package/dist/components/data-grid/data-grid-pagination.js +76 -0
- package/dist/components/data-grid/data-grid-scroll-area.d.ts +11 -0
- package/dist/components/data-grid/data-grid-scroll-area.d.ts.map +1 -0
- package/dist/components/data-grid/data-grid-scroll-area.js +218 -0
- package/dist/components/data-grid/data-grid-table-dnd-rows.d.ts +12 -0
- package/dist/components/data-grid/data-grid-table-dnd-rows.d.ts.map +1 -0
- package/dist/components/data-grid/data-grid-table-dnd-rows.js +91 -0
- package/dist/components/data-grid/data-grid-table-dnd.d.ts +8 -0
- package/dist/components/data-grid/data-grid-table-dnd.d.ts.map +1 -0
- package/dist/components/data-grid/data-grid-table-dnd.js +95 -0
- package/dist/components/data-grid/data-grid-table-virtual.d.ts +28 -0
- package/dist/components/data-grid/data-grid-table-virtual.d.ts.map +1 -0
- package/dist/components/data-grid/data-grid-table-virtual.js +133 -0
- package/dist/components/data-grid/data-grid-table.d.ts +98 -0
- package/dist/components/data-grid/data-grid-table.d.ts.map +1 -0
- package/dist/components/data-grid/data-grid-table.js +560 -0
- package/dist/components/data-grid/data-grid.d.ts +94 -0
- package/dist/components/data-grid/data-grid.d.ts.map +1 -0
- package/dist/components/data-grid/data-grid.js +123 -0
- package/dist/components/data-grid/data-grid.stories.d.ts +14 -0
- package/dist/components/data-grid/data-grid.stories.d.ts.map +1 -0
- package/dist/components/data-grid/data-grid.stories.js +47 -0
- package/dist/components/data-grid/index.d.ts +14 -0
- package/dist/components/data-grid/index.d.ts.map +1 -0
- package/dist/components/data-grid/index.js +10 -0
- package/dist/components/filters/filter-date-metric-value.d.ts.map +1 -1
- package/dist/components/filters/filter-date-metric-value.js +83 -8
- package/dist/components/filters/filter-fields-listing-demo.d.ts +12 -0
- package/dist/components/filters/filter-fields-listing-demo.d.ts.map +1 -0
- package/dist/components/filters/filter-fields-listing-demo.js +565 -0
- package/dist/components/filters/filters-types.d.ts +7 -0
- package/dist/components/filters/filters-types.d.ts.map +1 -1
- package/dist/components/filters/filters.stories.d.ts.map +1 -1
- package/dist/components/filters/filters.stories.js +8 -149
- package/dist/components/filters/index.d.ts +1 -0
- package/dist/components/filters/index.d.ts.map +1 -1
- package/dist/components/filters/index.js +1 -0
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +3 -0
- package/dist/components/popover/index.d.ts +1 -0
- package/dist/components/popover/index.d.ts.map +1 -1
- package/dist/components/popover/index.js +1 -0
- package/dist/components/popover/popover-handle.d.ts +6 -0
- package/dist/components/popover/popover-handle.d.ts.map +1 -0
- package/dist/components/popover/popover-handle.js +6 -0
- package/dist/components/popover/popover.d.ts +41 -7
- package/dist/components/popover/popover.d.ts.map +1 -1
- package/dist/components/popover/popover.js +50 -3
- package/dist/components/progress/progress.js +1 -1
- package/dist/components/progress/progress.stories.d.ts +11 -2
- package/dist/components/progress/progress.stories.d.ts.map +1 -1
- package/dist/components/progress/progress.stories.js +77 -4
- package/dist/components/sidebar/index.d.ts +2 -0
- package/dist/components/sidebar/index.d.ts.map +1 -0
- package/dist/components/sidebar/index.js +1 -0
- package/dist/components/sidebar/sidebar.d.ts +64 -0
- package/dist/components/sidebar/sidebar.d.ts.map +1 -0
- package/dist/components/sidebar/sidebar.js +255 -0
- package/dist/components/sidebar/sidebar.stories.d.ts +20 -0
- package/dist/components/sidebar/sidebar.stories.d.ts.map +1 -0
- package/dist/components/sidebar/sidebar.stories.js +181 -0
- package/dist/components/skeleton/index.d.ts +3 -0
- package/dist/components/skeleton/index.d.ts.map +1 -0
- package/dist/components/skeleton/index.js +1 -0
- package/dist/components/skeleton/skeleton.d.ts +7 -0
- package/dist/components/skeleton/skeleton.d.ts.map +1 -0
- package/dist/components/skeleton/skeleton.js +8 -0
- package/dist/components/sortable/sortable.d.ts +4 -2
- package/dist/components/sortable/sortable.d.ts.map +1 -1
- package/dist/components/sortable/sortable.js +4 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/llms.txt +1 -1
- package/package.json +7 -4
- package/src/styles/globals.css +26 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-grid.d.ts","sourceRoot":"","sources":["../../../src/components/data-grid/data-grid.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useContext, useMemo } from 'react';
|
|
4
|
+
import {} from '@tanstack/react-table';
|
|
5
|
+
import { cn } from '../../lib/utils';
|
|
6
|
+
/** Label for headers / column visibility: `meta.headerTitle`, string `columnDef.header`, or `column.id`. */
|
|
7
|
+
export function getColumnHeaderLabel(column) {
|
|
8
|
+
const meta = column.columnDef.meta;
|
|
9
|
+
if (typeof meta?.headerTitle === 'string')
|
|
10
|
+
return meta.headerTitle;
|
|
11
|
+
const defHeader = column.columnDef.header;
|
|
12
|
+
if (typeof defHeader === 'string')
|
|
13
|
+
return defHeader;
|
|
14
|
+
return String(column.id);
|
|
15
|
+
}
|
|
16
|
+
const DataGridContext = createContext(undefined);
|
|
17
|
+
function useDataGrid() {
|
|
18
|
+
const context = useContext(DataGridContext);
|
|
19
|
+
if (!context) {
|
|
20
|
+
throw new Error('useDataGrid must be used within a DataGridProvider');
|
|
21
|
+
}
|
|
22
|
+
return context;
|
|
23
|
+
}
|
|
24
|
+
function DataGridProvider({ children, table, ...props }) {
|
|
25
|
+
const tableState = table.getState();
|
|
26
|
+
const resolvedColumnsResizeMode = props.tableLayout?.columnsResizeMode ?? 'onEnd';
|
|
27
|
+
// Keep resize mode aligned with the DataGrid contract every render so
|
|
28
|
+
// consumer-level useReactTable options cannot flip it back between drags.
|
|
29
|
+
if (props.tableLayout?.columnsResizable) {
|
|
30
|
+
table.options.columnResizeMode = resolvedColumnsResizeMode;
|
|
31
|
+
}
|
|
32
|
+
// Memoize context value so consumers don't re-render during column resize.
|
|
33
|
+
// Column sizing state is intentionally excluded from deps -- CSS variables
|
|
34
|
+
// on the <table> element handle width updates without React re-renders.
|
|
35
|
+
const value = useMemo(() => ({
|
|
36
|
+
props,
|
|
37
|
+
table,
|
|
38
|
+
recordCount: props.recordCount,
|
|
39
|
+
isLoading: props.isLoading || false,
|
|
40
|
+
}),
|
|
41
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
42
|
+
[
|
|
43
|
+
table,
|
|
44
|
+
props.recordCount,
|
|
45
|
+
props.isLoading,
|
|
46
|
+
props.loadingMode,
|
|
47
|
+
props.loadingMessage,
|
|
48
|
+
props.fetchingMoreMessage,
|
|
49
|
+
props.allRowsLoadedMessage,
|
|
50
|
+
props.emptyMessage,
|
|
51
|
+
props.onRowClick,
|
|
52
|
+
props.className,
|
|
53
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
54
|
+
JSON.stringify(props.tableLayout),
|
|
55
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
56
|
+
JSON.stringify(props.tableClassNames),
|
|
57
|
+
tableState.sorting,
|
|
58
|
+
tableState.pagination,
|
|
59
|
+
tableState.columnFilters,
|
|
60
|
+
tableState.rowSelection,
|
|
61
|
+
tableState.expanded,
|
|
62
|
+
tableState.columnVisibility,
|
|
63
|
+
tableState.columnOrder,
|
|
64
|
+
tableState.columnPinning,
|
|
65
|
+
tableState.globalFilter,
|
|
66
|
+
]);
|
|
67
|
+
return _jsx(DataGridContext.Provider, { value: value, children: children });
|
|
68
|
+
}
|
|
69
|
+
function DataGrid({ children, table, ...props }) {
|
|
70
|
+
const defaultProps = {
|
|
71
|
+
loadingMode: 'skeleton',
|
|
72
|
+
tableLayout: {
|
|
73
|
+
dense: false,
|
|
74
|
+
cellBorder: false,
|
|
75
|
+
rowBorder: true,
|
|
76
|
+
rowRounded: false,
|
|
77
|
+
stripped: false,
|
|
78
|
+
headerSticky: false,
|
|
79
|
+
headerBackground: true,
|
|
80
|
+
headerBorder: true,
|
|
81
|
+
width: 'fixed',
|
|
82
|
+
columnsVisibility: false,
|
|
83
|
+
columnsResizable: false,
|
|
84
|
+
columnsResizeMode: 'onEnd',
|
|
85
|
+
columnsPinnable: false,
|
|
86
|
+
columnsMovable: false,
|
|
87
|
+
columnsDraggable: false,
|
|
88
|
+
rowsDraggable: false,
|
|
89
|
+
rowsPinnable: false,
|
|
90
|
+
},
|
|
91
|
+
tableClassNames: {
|
|
92
|
+
base: '',
|
|
93
|
+
header: '',
|
|
94
|
+
headerRow: '',
|
|
95
|
+
headerSticky: 'sticky top-0 z-15 bg-background/90 backdrop-blur-xs',
|
|
96
|
+
body: '',
|
|
97
|
+
bodyRow: '',
|
|
98
|
+
footer: '',
|
|
99
|
+
edgeCell: '',
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
const mergedProps = {
|
|
103
|
+
...defaultProps,
|
|
104
|
+
...props,
|
|
105
|
+
tableLayout: {
|
|
106
|
+
...defaultProps.tableLayout,
|
|
107
|
+
...(props.tableLayout || {}),
|
|
108
|
+
},
|
|
109
|
+
tableClassNames: {
|
|
110
|
+
...defaultProps.tableClassNames,
|
|
111
|
+
...(props.tableClassNames || {}),
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
// Ensure table is provided
|
|
115
|
+
if (!table) {
|
|
116
|
+
throw new Error('DataGrid requires a "table" prop');
|
|
117
|
+
}
|
|
118
|
+
return (_jsx(DataGridProvider, { table: table, ...mergedProps, children: children }));
|
|
119
|
+
}
|
|
120
|
+
function DataGridContainer({ children, className, border = true }) {
|
|
121
|
+
return (_jsx("div", { "data-slot": "data-grid", className: cn('w-full overflow-hidden', border && 'rounded-lg border border-border', className), children: children }));
|
|
122
|
+
}
|
|
123
|
+
export { useDataGrid, DataGridProvider, DataGrid, DataGridContainer };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { StoryObj } from '@storybook/react';
|
|
2
|
+
declare const meta: {
|
|
3
|
+
title: string;
|
|
4
|
+
tags: string[];
|
|
5
|
+
parameters: {
|
|
6
|
+
layout: string;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
export default meta;
|
|
10
|
+
type Story = StoryObj<typeof meta>;
|
|
11
|
+
export declare const Default: Story;
|
|
12
|
+
export declare const Striped: Story;
|
|
13
|
+
export declare const Empty: Story;
|
|
14
|
+
//# sourceMappingURL=data-grid.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-grid.stories.d.ts","sourceRoot":"","sources":["../../../src/components/data-grid/data-grid.stories.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAWvD,QAAA,MAAM,IAAI;;;;;;CAMM,CAAC;AAEjB,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AA6CnC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAEnB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useMemo } from 'react';
|
|
4
|
+
import { createColumnHelper, getCoreRowModel, useReactTable } from '@tanstack/react-table';
|
|
5
|
+
import { DataGrid, DataGridContainer, DataGridScrollArea, DataGridTable } from '.';
|
|
6
|
+
const columnHelper = createColumnHelper();
|
|
7
|
+
const meta = {
|
|
8
|
+
title: 'Components/Data grid',
|
|
9
|
+
tags: ['autodocs'],
|
|
10
|
+
parameters: {
|
|
11
|
+
layout: 'padded',
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
export default meta;
|
|
15
|
+
function DataGridStoryHost({ rowCount = 6, ...dataGridProps }) {
|
|
16
|
+
const data = useMemo(() => Array.from({ length: rowCount }, (_, i) => ({
|
|
17
|
+
id: String(i + 1),
|
|
18
|
+
name: `Person ${i + 1}`,
|
|
19
|
+
role: i % 2 === 0 ? 'Admin' : 'Editor',
|
|
20
|
+
})), [rowCount]);
|
|
21
|
+
const columns = useMemo(() => [
|
|
22
|
+
columnHelper.accessor('name', {
|
|
23
|
+
header: 'Name',
|
|
24
|
+
cell: (info) => info.getValue(),
|
|
25
|
+
}),
|
|
26
|
+
columnHelper.accessor('role', {
|
|
27
|
+
header: 'Role',
|
|
28
|
+
meta: { headerTitle: 'Access' },
|
|
29
|
+
cell: (info) => info.getValue(),
|
|
30
|
+
}),
|
|
31
|
+
], []);
|
|
32
|
+
const table = useReactTable({
|
|
33
|
+
data,
|
|
34
|
+
columns,
|
|
35
|
+
getCoreRowModel: getCoreRowModel(),
|
|
36
|
+
});
|
|
37
|
+
return (_jsx(DataGrid, { ...dataGridProps, table: table, recordCount: dataGridProps.recordCount ?? data.length, children: _jsx(DataGridContainer, { className: "max-w-3xl", children: _jsx(DataGridScrollArea, { className: "h-72", children: _jsx(DataGridTable, {}) }) }) }));
|
|
38
|
+
}
|
|
39
|
+
export const Default = {
|
|
40
|
+
render: () => _jsx(DataGridStoryHost, {}),
|
|
41
|
+
};
|
|
42
|
+
export const Striped = {
|
|
43
|
+
render: () => _jsx(DataGridStoryHost, { tableLayout: { stripped: true, rowBorder: true } }),
|
|
44
|
+
};
|
|
45
|
+
export const Empty = {
|
|
46
|
+
render: () => _jsx(DataGridStoryHost, { rowCount: 0, recordCount: 0, emptyMessage: "No people match this view." }),
|
|
47
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { getColumnHeaderLabel, useDataGrid, DataGridProvider, DataGrid, DataGridContainer } from './data-grid';
|
|
2
|
+
export type { DataGridApiFetchParams, DataGridApiResponse, DataGridContextProps, DataGridRequestParams, DataGridProps } from './data-grid';
|
|
3
|
+
export { DataGridColumnFilter, type DataGridColumnFilterProps } from './data-grid-column-filter';
|
|
4
|
+
export { DataGridColumnHeader, type DataGridColumnHeaderProps } from './data-grid-column-header';
|
|
5
|
+
export { DataGridColumnVisibility } from './data-grid-column-visibility';
|
|
6
|
+
export { DataGridPagination, type DataGridPaginationProps } from './data-grid-pagination';
|
|
7
|
+
export { DataGridScrollArea, type DataGridScrollAreaOrientation, type DataGridScrollAreaProps } from './data-grid-scroll-area';
|
|
8
|
+
export { DataGridTable, DataGridTableBase, DataGridTableBody, DataGridTableBodyRow, DataGridTableBodyRowCell, DataGridTableBodyRowExpandded, DataGridTableRenderedRow, DataGridTableBodyRowSkeleton, DataGridTableBodyRowSkeletonCell, DataGridTableEmpty, DataGridTableFoot, DataGridTableFootRow, DataGridTableFootRowCell, DataGridTableHeader, DataGridTableHead, DataGridTableHeadRow, DataGridTableHeadRowCell, DataGridTableHeadRowCellResize, DataGridTableLoader, DataGridTableRowPin, DataGridTableRowSelect, DataGridTableRowSelectAll, DataGridTableRowSpacer, DataGridTableViewport, getDataGridTableResolvedRows, getDataGridTableRowSections, } from './data-grid-table';
|
|
9
|
+
export type { DataGridTablePinnedBoundary } from './data-grid-table';
|
|
10
|
+
export { DataGridTableDnd } from './data-grid-table-dnd';
|
|
11
|
+
export { DataGridTableDndRowHandle, DataGridTableDndRows } from './data-grid-table-dnd-rows';
|
|
12
|
+
export { DataGridTableVirtual } from './data-grid-table-virtual';
|
|
13
|
+
export type { DataGridTableVirtualProps, DataGridTableVirtualScrollElements, DataGridTableVirtualizerOptions } from './data-grid-table-virtual';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/data-grid/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC/G,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3I,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,KAAK,6BAA6B,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC/H,OAAO,EACH,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACxB,6BAA6B,EAC7B,wBAAwB,EACxB,4BAA4B,EAC5B,gCAAgC,EAChC,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACxB,8BAA8B,EAC9B,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,4BAA4B,EAC5B,2BAA2B,GAC9B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAC7F,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EAAE,yBAAyB,EAAE,kCAAkC,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { getColumnHeaderLabel, useDataGrid, DataGridProvider, DataGrid, DataGridContainer } from './data-grid';
|
|
2
|
+
export { DataGridColumnFilter } from './data-grid-column-filter';
|
|
3
|
+
export { DataGridColumnHeader } from './data-grid-column-header';
|
|
4
|
+
export { DataGridColumnVisibility } from './data-grid-column-visibility';
|
|
5
|
+
export { DataGridPagination } from './data-grid-pagination';
|
|
6
|
+
export { DataGridScrollArea } from './data-grid-scroll-area';
|
|
7
|
+
export { DataGridTable, DataGridTableBase, DataGridTableBody, DataGridTableBodyRow, DataGridTableBodyRowCell, DataGridTableBodyRowExpandded, DataGridTableRenderedRow, DataGridTableBodyRowSkeleton, DataGridTableBodyRowSkeletonCell, DataGridTableEmpty, DataGridTableFoot, DataGridTableFootRow, DataGridTableFootRowCell, DataGridTableHeader, DataGridTableHead, DataGridTableHeadRow, DataGridTableHeadRowCell, DataGridTableHeadRowCellResize, DataGridTableLoader, DataGridTableRowPin, DataGridTableRowSelect, DataGridTableRowSelectAll, DataGridTableRowSpacer, DataGridTableViewport, getDataGridTableResolvedRows, getDataGridTableRowSections, } from './data-grid-table';
|
|
8
|
+
export { DataGridTableDnd } from './data-grid-table-dnd';
|
|
9
|
+
export { DataGridTableDndRowHandle, DataGridTableDndRows } from './data-grid-table-dnd-rows';
|
|
10
|
+
export { DataGridTableVirtual } from './data-grid-table-virtual';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-date-metric-value.d.ts","sourceRoot":"","sources":["../../../src/components/filters/filter-date-metric-value.tsx"],"names":[],"mappings":"AAeA,OAAO,EAKH,KAAK,sBAAsB,EAG3B,KAAK,iBAAiB,EAEtB,KAAK,sBAAsB,EAC9B,MAAM,gDAAgD,CAAC;AAyBxD,OAAO,KAAK,EAA2B,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAyIpG;;;;GAIG;AACH,wBAAgB,sBAAsB,CAClC,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,sBAAsB,EAChC,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,sBAAsB,GACjC,MAAM,CAER;AAED,MAAM,WAAW,sCAAsC,CAAC,CAAC,GAAG,OAAO;IAC/D,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAChC,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;IAC9B,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,uHAAuH;AACvH,wBAAgB,iCAAiC,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,sCAAsC,CAAC,CAAC,CAAC,2CAqP3J;AAED,MAAM,WAAW,oCAAoC,CAAC,CAAC,GAAG,OAAO;IAC7D,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;IAC9B,yGAAyG;IACzG,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;
|
|
1
|
+
{"version":3,"file":"filter-date-metric-value.d.ts","sourceRoot":"","sources":["../../../src/components/filters/filter-date-metric-value.tsx"],"names":[],"mappings":"AAeA,OAAO,EAKH,KAAK,sBAAsB,EAG3B,KAAK,iBAAiB,EAEtB,KAAK,sBAAsB,EAC9B,MAAM,gDAAgD,CAAC;AAyBxD,OAAO,KAAK,EAA2B,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAyIpG;;;;GAIG;AACH,wBAAgB,sBAAsB,CAClC,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,sBAAsB,EAChC,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,sBAAsB,GACjC,MAAM,CAER;AAED,MAAM,WAAW,sCAAsC,CAAC,CAAC,GAAG,OAAO;IAC/D,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAChC,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;IAC9B,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,uHAAuH;AACvH,wBAAgB,iCAAiC,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,sCAAsC,CAAC,CAAC,CAAC,2CAqP3J;AAED,MAAM,WAAW,oCAAoC,CAAC,CAAC,GAAG,OAAO;IAC7D,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;IAC9B,yGAAyG;IACzG,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAwJD,gHAAgH;AAChH,wBAAgB,+BAA+B,CAAC,CAAC,GAAG,OAAO,EAAE,EACzD,KAAK,EACL,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,gBAAgB,GACnB,EAAE,oCAAoC,CAAC,CAAC,CAAC,kDA0NzC"}
|
|
@@ -183,6 +183,9 @@ const METRIC_EMPTY_AMOUNT = '\u2013';
|
|
|
183
183
|
/** Spaces around the en dash so empty segments don’t feel cramped (e.g. `$ – `). */
|
|
184
184
|
const METRIC_EMPTY_DISPLAY = ` ${METRIC_EMPTY_AMOUNT} `;
|
|
185
185
|
const metricAmountFormatters = new Map();
|
|
186
|
+
const metricIntegerFormatters = new Map();
|
|
187
|
+
const metricPercentFormatters = new Map();
|
|
188
|
+
const metricPercentSuffixLiteralByLocale = new Map();
|
|
186
189
|
function formatMetricAmountDigits(value, locale) {
|
|
187
190
|
let nf = metricAmountFormatters.get(locale);
|
|
188
191
|
if (!nf) {
|
|
@@ -204,11 +207,82 @@ function formatMetricAmountDigits(value, locale) {
|
|
|
204
207
|
}
|
|
205
208
|
return nf.format(value);
|
|
206
209
|
}
|
|
207
|
-
|
|
208
|
-
|
|
210
|
+
function formatMetricIntegerDigits(value, locale) {
|
|
211
|
+
let nf = metricIntegerFormatters.get(locale);
|
|
212
|
+
if (!nf) {
|
|
213
|
+
try {
|
|
214
|
+
nf = new Intl.NumberFormat(locale, { maximumFractionDigits: 0, useGrouping: true });
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
nf = new Intl.NumberFormat('en-US', { maximumFractionDigits: 0, useGrouping: true });
|
|
218
|
+
}
|
|
219
|
+
metricIntegerFormatters.set(locale, nf);
|
|
220
|
+
}
|
|
221
|
+
return nf.format(value);
|
|
222
|
+
}
|
|
223
|
+
function dateMetricBarValueFormat(field) {
|
|
224
|
+
return field.dateMetricValueFormat ?? 'currency';
|
|
225
|
+
}
|
|
226
|
+
/** Suffix literals from `Intl` for an empty percent segment (locale-specific spacing, RTL, etc.). */
|
|
227
|
+
function percentBarSuffixLiteral(locale) {
|
|
228
|
+
let s = metricPercentSuffixLiteralByLocale.get(locale);
|
|
229
|
+
if (s !== undefined)
|
|
230
|
+
return s;
|
|
231
|
+
try {
|
|
232
|
+
const nf = new Intl.NumberFormat(locale, { style: 'percent', maximumFractionDigits: 0 });
|
|
233
|
+
s = nf
|
|
234
|
+
.formatToParts(1)
|
|
235
|
+
.filter((p) => p.type === 'literal')
|
|
236
|
+
.map((p) => p.value)
|
|
237
|
+
.join('');
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
s = '%';
|
|
241
|
+
}
|
|
242
|
+
if (!s)
|
|
243
|
+
s = '%';
|
|
244
|
+
metricPercentSuffixLiteralByLocale.set(locale, s);
|
|
245
|
+
return s;
|
|
246
|
+
}
|
|
247
|
+
/** `value` is percentage points (e.g. 85 → 85%); `Intl` expects a ratio, so divide by 100. */
|
|
248
|
+
function formatMetricPercentFromPercentagePoints(value, locale) {
|
|
249
|
+
let nf = metricPercentFormatters.get(locale);
|
|
250
|
+
if (!nf) {
|
|
251
|
+
try {
|
|
252
|
+
nf = new Intl.NumberFormat(locale, {
|
|
253
|
+
style: 'percent',
|
|
254
|
+
minimumFractionDigits: 0,
|
|
255
|
+
maximumFractionDigits: 20,
|
|
256
|
+
useGrouping: true,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
nf = new Intl.NumberFormat('en-US', {
|
|
261
|
+
style: 'percent',
|
|
262
|
+
minimumFractionDigits: 0,
|
|
263
|
+
maximumFractionDigits: 20,
|
|
264
|
+
useGrouping: true,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
metricPercentFormatters.set(locale, nf);
|
|
268
|
+
}
|
|
269
|
+
return nf.format(value / 100);
|
|
270
|
+
}
|
|
271
|
+
/** Bar label for a single threshold: currency, percent, or integer locale formatting. */
|
|
272
|
+
function formatDateMetricBarAmount(value, format, locale, currencySym) {
|
|
273
|
+
if (format === 'currency') {
|
|
274
|
+
if (value == null || Number.isNaN(value))
|
|
275
|
+
return `${currencySym}${METRIC_EMPTY_DISPLAY}`;
|
|
276
|
+
return `${currencySym}${formatMetricAmountDigits(value, locale)}`;
|
|
277
|
+
}
|
|
278
|
+
if (format === 'integer') {
|
|
279
|
+
if (value == null || Number.isNaN(value))
|
|
280
|
+
return METRIC_EMPTY_DISPLAY;
|
|
281
|
+
return formatMetricIntegerDigits(value, locale);
|
|
282
|
+
}
|
|
209
283
|
if (value == null || Number.isNaN(value))
|
|
210
|
-
return `${
|
|
211
|
-
return
|
|
284
|
+
return `${METRIC_EMPTY_DISPLAY}${percentBarSuffixLiteral(locale)}`;
|
|
285
|
+
return formatMetricPercentFromPercentagePoints(value, locale);
|
|
212
286
|
}
|
|
213
287
|
function parseDraftNumber(raw, previous) {
|
|
214
288
|
if (raw.trim() === '')
|
|
@@ -277,6 +351,7 @@ export function FilterDateMetricBarValueSegment({ field, values, onChange, opera
|
|
|
277
351
|
const valueAnyOperator = operators.find((o) => o.value === 'value_any');
|
|
278
352
|
const sym = i18n.defaultCurrency;
|
|
279
353
|
const numberLocale = i18n.numberFormatLocale;
|
|
354
|
+
const barValueFormat = dateMetricBarValueFormat(field);
|
|
280
355
|
const inputSizeProp = size === 'lg' ? 'default' : 'sm';
|
|
281
356
|
const buttonSize = size === 'lg' ? 'lg' : size === 'sm' ? 'sm' : 'default';
|
|
282
357
|
const valueSegment = (() => {
|
|
@@ -290,7 +365,7 @@ export function FilterDateMetricBarValueSegment({ field, values, onChange, opera
|
|
|
290
365
|
}
|
|
291
366
|
if (operator === 'value_greater_than') {
|
|
292
367
|
const hasMinValue = payload.min != null && !Number.isNaN(payload.min);
|
|
293
|
-
const summary =
|
|
368
|
+
const summary = formatDateMetricBarAmount(payload.min ?? undefined, barValueFormat, numberLocale, sym);
|
|
294
369
|
const triggerLabel = `${i18n.operators.greaterThan}: ${summary}`;
|
|
295
370
|
return (_jsx(MetricValueThresholdPopoverShell, { open: metricPopoverOpen, onOpenChange: handleMetricPopoverOpenChange, buttonSize: buttonSize, triggerLabel: triggerLabel, summary: summary, triggerClassName: cn(METRIC_POPOVER_TRIGGER_NARROW, !hasMinValue ? 'text-muted-foreground' : 'text-foreground'), children: _jsx(Input, { type: "number", size: inputSizeProp, className: "w-full min-w-0 tabular-nums", value: draftMin, onChange: (e) => {
|
|
296
371
|
const v = e.target.value;
|
|
@@ -300,7 +375,7 @@ export function FilterDateMetricBarValueSegment({ field, values, onChange, opera
|
|
|
300
375
|
}
|
|
301
376
|
if (operator === 'value_less_than') {
|
|
302
377
|
const hasMaxValue = payload.max != null && !Number.isNaN(payload.max);
|
|
303
|
-
const summary =
|
|
378
|
+
const summary = formatDateMetricBarAmount(payload.max ?? undefined, barValueFormat, numberLocale, sym);
|
|
304
379
|
const triggerLabel = `${i18n.operators.lessThan}: ${summary}`;
|
|
305
380
|
return (_jsx(MetricValueThresholdPopoverShell, { open: metricPopoverOpen, onOpenChange: handleMetricPopoverOpenChange, buttonSize: buttonSize, triggerLabel: triggerLabel, summary: summary, triggerClassName: cn(METRIC_POPOVER_TRIGGER_NARROW, !hasMaxValue ? 'text-muted-foreground' : 'text-foreground'), children: _jsx(Input, { type: "number", size: inputSizeProp, className: "w-full min-w-0 tabular-nums", value: draftMax, onChange: (e) => {
|
|
306
381
|
const v = e.target.value;
|
|
@@ -311,8 +386,8 @@ export function FilterDateMetricBarValueSegment({ field, values, onChange, opera
|
|
|
311
386
|
if (operator === 'value_between') {
|
|
312
387
|
const hasMinValue = payload.min != null && !Number.isNaN(payload.min);
|
|
313
388
|
const hasMaxValue = payload.max != null && !Number.isNaN(payload.max);
|
|
314
|
-
const minPart =
|
|
315
|
-
const maxPart =
|
|
389
|
+
const minPart = formatDateMetricBarAmount(payload.min ?? undefined, barValueFormat, numberLocale, sym);
|
|
390
|
+
const maxPart = formatDateMetricBarAmount(payload.max ?? undefined, barValueFormat, numberLocale, sym);
|
|
316
391
|
const summary = `${minPart} - ${maxPart}`;
|
|
317
392
|
const triggerLabel = `${i18n.operators.between}: ${summary}`;
|
|
318
393
|
return (_jsx(MetricValueThresholdPopoverShell, { open: metricPopoverOpen, onOpenChange: handleMetricPopoverOpenChange, buttonSize: buttonSize, triggerLabel: triggerLabel, summary: summary, triggerClassName: cn(METRIC_POPOVER_TRIGGER_WIDE, !hasMinValue && !hasMaxValue ? 'text-muted-foreground' : 'text-foreground'), children: _jsxs("div", { className: "flex w-full flex-col gap-1.5", children: [_jsx(Input, { type: "number", size: inputSizeProp, className: "w-full min-w-0 tabular-nums", value: draftMin, onChange: (e) => {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { i18n as I18nInstance, TFunction } from 'i18next';
|
|
2
|
+
import type { DateSelectorI18nConfig } from '../../blocks/date-selector/date-selector-types';
|
|
3
|
+
import type { FilterFieldConfig, FilterFieldsConfig } from './filters-types';
|
|
4
|
+
/** Flat fields for minimal `Default` / `WithOneFilter` stories (real listing keys). */
|
|
5
|
+
export declare function buildListingDemoFields(t: TFunction): FilterFieldConfig[];
|
|
6
|
+
/** Grouped listing catalog for `GroupedFieldsAndSearch` (keys and shapes mirror app listing filters). */
|
|
7
|
+
export declare function buildListingGroupedFields(t: TFunction, dateSelectorI18n: DateSelectorI18nConfig, i18n: I18nInstance): FilterFieldsConfig;
|
|
8
|
+
/** Flat listing fields for docs previews (no filter i18n bundle required). */
|
|
9
|
+
export declare function buildListingDemoFieldsForDocs(): FilterFieldConfig[];
|
|
10
|
+
/** Grouped listing catalog for docs previews; pass docs `I18nextProvider` instance and date-selector copy. */
|
|
11
|
+
export declare function buildListingGroupedFieldsForDocs(dateSelectorI18n: DateSelectorI18nConfig, i18n: I18nInstance): FilterFieldsConfig;
|
|
12
|
+
//# sourceMappingURL=filter-fields-listing-demo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-fields-listing-demo.d.ts","sourceRoot":"","sources":["../../../src/components/filters/filter-fields-listing-demo.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,IAAI,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAyB/D,OAAO,KAAK,EAAE,sBAAsB,EAA8C,MAAM,gDAAgD,CAAC;AACzI,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAkB,MAAM,iBAAiB,CAAC;AA0D7F,uFAAuF;AACvF,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,SAAS,GAAG,iBAAiB,EAAE,CA+BxE;AAED,yGAAyG;AACzG,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,IAAI,EAAE,YAAY,GAAG,kBAAkB,CA0dxI;AAED,8EAA8E;AAC9E,wBAAgB,6BAA6B,IAAI,iBAAiB,EAAE,CAEnE;AAED,8GAA8G;AAC9G,wBAAgB,gCAAgC,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,IAAI,EAAE,YAAY,GAAG,kBAAkB,CAEjI"}
|