@exxatdesignux/ui 0.5.2 → 0.5.4
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/CHANGELOG.md +18 -0
- package/README.md +1 -1
- package/consumer-extras/cursor-rules/exxat-accessibility.mdc +1 -1
- package/consumer-extras/cursor-rules/exxat-data-tables.mdc +8 -6
- package/consumer-extras/cursor-rules/exxat-drawer-vs-dialog.mdc +4 -4
- package/consumer-extras/cursor-rules/exxat-ds-agents.mdc +6 -1
- package/consumer-extras/cursor-rules/exxat-hub-supported-views.mdc +54 -0
- package/consumer-extras/cursor-rules/exxat-nav-single-active.mdc +31 -0
- package/consumer-extras/cursor-rules/exxat-no-vaul.mdc +25 -0
- package/consumer-extras/cursor-rules/exxat-page-header-actions.mdc +31 -0
- package/consumer-extras/cursor-rules/exxat-table-row-preview.mdc +24 -0
- package/consumer-extras/cursor-rules/exxat-tabs-chrome.mdc +31 -0
- package/consumer-extras/cursor-skills/exxat-drawer-vs-dialog/SKILL.md +5 -5
- package/consumer-extras/cursor-skills/exxat-ds-skill/SKILL.md +10 -5
- package/consumer-extras/cursor-skills/exxat-ds-skill/references/accessibility.md +1 -1
- package/consumer-extras/cursor-skills/exxat-ds-skill/references/data-table-pattern.md +15 -5
- package/consumer-extras/cursor-skills/exxat-token-economy/SKILL.md +14 -5
- package/consumer-extras/handbook/HANDBOOK.md +1 -1
- package/consumer-extras/handbook/reference-implementations.md +2 -2
- package/consumer-extras/patterns/consumer-upgrade-checklist.md +14 -1
- package/consumer-extras/patterns/data-views-pattern.md +6 -0
- package/consumer-extras/patterns/drawer-vs-dialog-pattern.md +50 -0
- package/consumer-extras/patterns/hub-supported-views-pattern.md +53 -0
- package/dist/components/data-table/index.js +13 -9
- package/dist/components/data-table/index.js.map +1 -1
- package/dist/components/data-table/pagination.js +13 -9
- package/dist/components/data-table/pagination.js.map +1 -1
- package/dist/components/data-views/hub-table.d.ts +8 -4
- package/dist/components/data-views/hub-table.js +25 -10
- package/dist/components/data-views/hub-table.js.map +1 -1
- package/dist/components/data-views/index.d.ts +1 -1
- package/dist/components/data-views/index.js +25 -10
- package/dist/components/data-views/index.js.map +1 -1
- package/dist/components/data-views/list-page-connected-view-body.d.ts +1 -1
- package/dist/components/data-views/list-page-connected-view-body.js +1 -0
- package/dist/components/data-views/list-page-connected-view-body.js.map +1 -1
- package/dist/components/table-properties/drawer-button.js +1 -0
- package/dist/components/table-properties/drawer-button.js.map +1 -1
- package/dist/components/table-properties/drawer.js +1 -0
- package/dist/components/table-properties/drawer.js.map +1 -1
- package/dist/components/table-properties/index.d.ts +1 -1
- package/dist/components/table-properties/index.js +1 -0
- package/dist/components/table-properties/index.js.map +1 -1
- package/dist/components/templates/index.d.ts +1 -1
- package/dist/components/templates/index.js +12 -2
- package/dist/components/templates/index.js.map +1 -1
- package/dist/components/templates/list-page.d.ts +4 -2
- package/dist/components/templates/list-page.js +12 -2
- package/dist/components/templates/list-page.js.map +1 -1
- package/dist/{data-list-view-registry-CyBoBML4.d.ts → data-list-view-registry-BstmlfQ3.d.ts} +16 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.js +135 -126
- package/dist/index.js.map +1 -1
- package/dist/lib/data-list-view-registry.d.ts +1 -1
- package/dist/lib/data-list-view-registry.js +17 -1
- package/dist/lib/data-list-view-registry.js.map +1 -1
- package/dist/lib/data-list-view-surface.d.ts +1 -1
- package/dist/lib/data-list-view-surface.js +1 -0
- package/dist/lib/data-list-view-surface.js.map +1 -1
- package/dist/lib/list-page-table-properties.d.ts +1 -1
- package/dist/lib/list-page-table-properties.js +1 -0
- package/dist/lib/list-page-table-properties.js.map +1 -1
- package/dist/lib/nav-active.d.ts +38 -0
- package/dist/lib/nav-active.js +104 -0
- package/dist/lib/nav-active.js.map +1 -0
- package/package.json +1 -2
- package/src/components/data-table/index.tsx +25 -17
- package/src/components/data-views/hub-table.tsx +9 -3
- package/src/components/templates/list-page.tsx +9 -3
- package/src/index.ts +1 -1
- package/src/lib/data-list-view-registry.ts +31 -0
- package/src/lib/nav-active.ts +162 -0
- package/template/.claude/skills/exxat-ds-skill/SKILL.md +2 -1
- package/template/.cursor/rules/exxat-accessibility.mdc +1 -1
- package/template/AGENTS.md +18 -3
- package/template/components/columns-client.tsx +3 -2
- package/template/components/columns-showcase.tsx +22 -18
- package/template/components/exxat-product-logo.tsx +1 -1
- package/template/components/library-table.tsx +62 -23
- package/template/components/new-library-item-form.tsx +0 -7
- package/template/components/product-wordmark.tsx +1 -1
- package/template/components/sidebar/app-sidebar.tsx +14 -106
- package/template/components/sidebar/secondary-nav.tsx +22 -4
- package/template/components/site-header.tsx +1 -1
- package/template/components/tokens-hub-auxiliary-views.tsx +301 -0
- package/template/components/tokens-themes-client.tsx +44 -16
- package/template/docs/HANDBOOK.md +2 -2
- package/template/docs/component-selection-guide.md +1 -1
- package/template/docs/consumer-upgrade-checklist.md +51 -0
- package/template/docs/data-views-pattern.md +6 -0
- package/template/docs/drawer-vs-dialog-pattern.md +8 -8
- package/template/docs/glossary.md +2 -1
- package/template/docs/hub-supported-views-pattern.md +53 -0
- package/template/docs/reference-implementations.md +2 -2
- package/template/lib/full-hub-supported-views.ts +8 -0
- package/template/lib/library-supported-views.ts +5 -12
- package/template/lib/motion-ui.ts +2 -2
- package/template/package.json +1 -1
- package/tokens/hooks-index.json +2 -2
- package/dist/components/ui/drawer.d.ts +0 -16
- package/dist/components/ui/drawer.js +0 -125
- package/dist/components/ui/drawer.js.map +0 -1
- package/src/components/ui/drawer.tsx +0 -134
- package/template/components/ui/drawer.tsx +0 -1
|
@@ -3,7 +3,7 @@ import * as React from 'react';
|
|
|
3
3
|
import { ColumnDef } from '../data-table/types.js';
|
|
4
4
|
import { useTableState } from '../data-table/use-table-state.js';
|
|
5
5
|
import { DataListViewType } from '../../lib/data-list-view.js';
|
|
6
|
-
import { c as DataListViewRenderKind } from '../../data-list-view-registry-
|
|
6
|
+
import { c as DataListViewRenderKind } from '../../data-list-view-registry-BstmlfQ3.js';
|
|
7
7
|
import { DataListDisplayOptions } from '../../lib/data-list-display-options.js';
|
|
8
8
|
import { FilterFieldDef, ConditionalRule } from '../../lib/table-properties-types.js';
|
|
9
9
|
import { ListPageBoardColumnDef } from './list-page-board-template.js';
|
|
@@ -74,8 +74,12 @@ interface HubTableProps<TRow extends Record<string, unknown>> {
|
|
|
74
74
|
/** Active view from the `ListPageTemplate` tab. */
|
|
75
75
|
view: DataListViewType;
|
|
76
76
|
onViewChange?: (v: DataListViewType) => void;
|
|
77
|
-
/**
|
|
78
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Allowlist passed to `TablePropertiesDrawerButton` so Properties cannot offer unsupported views.
|
|
79
|
+
* Defaults to {@link FULL_HUB_SUPPORTED_VIEWS} when omitted — keep in sync with
|
|
80
|
+
* `ListPageTemplate.supportedViewTypes` on the same hub.
|
|
81
|
+
*/
|
|
82
|
+
supportedViewTypes?: readonly DataListViewType[];
|
|
79
83
|
/** Used by `ListPageViewNotConfigured` when a supported view has no renderer. */
|
|
80
84
|
hubLabel: string;
|
|
81
85
|
/** Shown below "Properties" in the drawer header. */
|
|
@@ -165,7 +169,7 @@ interface HubTableProps<TRow extends Record<string, unknown>> {
|
|
|
165
169
|
/** Empty column copy for the default board renderer. Defaults to "No items". */
|
|
166
170
|
boardEmptyColumnLabel?: string;
|
|
167
171
|
}
|
|
168
|
-
declare function HubTable<TRow extends Record<string, unknown>>({ rows, columns, view, onViewChange, supportedViewTypes, hubLabel, lifecycleTabLabel, searchAriaLabel, getRowId, getRowSelectionLabel, defaultSort, emptyState, renderers, bulkActionsSlot, boardGroupByColumnOptions, displayOptionsInit, renderFilterOptionValue, groupable, selectable, onRowClick, displayOptions: displayOptionsControlled, onDisplayOptionsChange: onDisplayOptionsChangeControlled, pagination, onPaginationChange, handleRef, tableRenderer, paginationOverride, paginationPageSizeOptions, paginationInitialPageSize, syncedSearchFromUrl, renderListRow, listAriaLabel, listEmptyState, listVirtualizeThreshold, listEstimatedRowHeight, renderBoardCard, boardGroups, boardColumnCountBadgeClassName, boardEmptyColumnLabel, }: HubTableProps<TRow>): react_jsx_runtime.JSX.Element;
|
|
172
|
+
declare function HubTable<TRow extends Record<string, unknown>>({ rows, columns, view, onViewChange, supportedViewTypes: supportedViewTypesProp, hubLabel, lifecycleTabLabel, searchAriaLabel, getRowId, getRowSelectionLabel, defaultSort, emptyState, renderers, bulkActionsSlot, boardGroupByColumnOptions, displayOptionsInit, renderFilterOptionValue, groupable, selectable, onRowClick, displayOptions: displayOptionsControlled, onDisplayOptionsChange: onDisplayOptionsChangeControlled, pagination, onPaginationChange, handleRef, tableRenderer, paginationOverride, paginationPageSizeOptions, paginationInitialPageSize, syncedSearchFromUrl, renderListRow, listAriaLabel, listEmptyState, listVirtualizeThreshold, listEstimatedRowHeight, renderBoardCard, boardGroups, boardColumnCountBadgeClassName, boardEmptyColumnLabel, }: HubTableProps<TRow>): react_jsx_runtime.JSX.Element;
|
|
169
173
|
declare namespace HubTable {
|
|
170
174
|
var displayName: string;
|
|
171
175
|
}
|
|
@@ -2282,13 +2282,15 @@ function useBulkBarFixedToTableScrollEl(scrollRef, active, fullWidth) {
|
|
|
2282
2282
|
const scheduled = rafThrottle(apply);
|
|
2283
2283
|
const ro = new ResizeObserver(scheduled);
|
|
2284
2284
|
ro.observe(el);
|
|
2285
|
+
el.addEventListener("scroll", scheduled, { passive: true });
|
|
2285
2286
|
window.addEventListener("resize", scheduled, { passive: true });
|
|
2286
|
-
window.addEventListener("scroll", scheduled, { passive: true
|
|
2287
|
+
window.addEventListener("scroll", scheduled, { passive: true });
|
|
2287
2288
|
return () => {
|
|
2288
2289
|
scheduled.cancel();
|
|
2289
2290
|
ro.disconnect();
|
|
2291
|
+
el.removeEventListener("scroll", scheduled);
|
|
2290
2292
|
window.removeEventListener("resize", scheduled);
|
|
2291
|
-
window.removeEventListener("scroll", scheduled
|
|
2293
|
+
window.removeEventListener("scroll", scheduled);
|
|
2292
2294
|
};
|
|
2293
2295
|
}, [active, fullWidth, scrollRef]);
|
|
2294
2296
|
return style;
|
|
@@ -2455,11 +2457,13 @@ function DataTableInner({
|
|
|
2455
2457
|
};
|
|
2456
2458
|
update();
|
|
2457
2459
|
const scheduled = rafThrottle(update);
|
|
2458
|
-
|
|
2460
|
+
wrapEl.addEventListener("scroll", scheduled, { passive: true });
|
|
2461
|
+
window.addEventListener("scroll", scheduled, { passive: true });
|
|
2459
2462
|
window.addEventListener("resize", scheduled, { passive: true });
|
|
2460
2463
|
return () => {
|
|
2461
2464
|
scheduled.cancel();
|
|
2462
|
-
|
|
2465
|
+
wrapEl.removeEventListener("scroll", scheduled);
|
|
2466
|
+
window.removeEventListener("scroll", scheduled);
|
|
2463
2467
|
window.removeEventListener("resize", scheduled);
|
|
2464
2468
|
};
|
|
2465
2469
|
}, [showColumnHeaders, rows.length, displayCols.length]);
|
|
@@ -2896,11 +2900,11 @@ function DataTableInner({
|
|
|
2896
2900
|
const rowPy = rowHeight === "compact" ? "py-1" : rowHeight === "comfortable" ? "py-4" : "py-2.5";
|
|
2897
2901
|
const cs = cellStyle(col.key);
|
|
2898
2902
|
const tdBase = cn(
|
|
2899
|
-
`px-3 ${rowPy} align-middle`,
|
|
2903
|
+
`px-3 ${rowPy} align-middle max-w-0`,
|
|
2900
2904
|
showGridlines && !isEdgePin && "border-e border-border last:border-e-0",
|
|
2901
2905
|
"border-b border-border group-last/row:border-b-0",
|
|
2902
2906
|
isPinned && [
|
|
2903
|
-
"z-20 pinned-cell",
|
|
2907
|
+
"z-20 pinned-cell relative",
|
|
2904
2908
|
"bg-dt-row-bg",
|
|
2905
2909
|
"group-data-[state=selected]/row:bg-dt-row-selected",
|
|
2906
2910
|
"group-hover/row:bg-dt-row-hover",
|
|
@@ -2950,17 +2954,17 @@ function DataTableInner({
|
|
|
2950
2954
|
wrap && "[&_.truncate]:!whitespace-normal [&_.truncate]:!overflow-visible [&_.truncate]:!text-clip"
|
|
2951
2955
|
),
|
|
2952
2956
|
style: tdStyle,
|
|
2953
|
-
children: col.cell(row, {
|
|
2957
|
+
children: /* @__PURE__ */ jsx("div", { className: "min-w-0 overflow-hidden", children: col.cell(row, {
|
|
2954
2958
|
rowIndex,
|
|
2955
2959
|
selected: isSelected,
|
|
2956
2960
|
onSelect: (checked) => checked ? setSelected((prev) => /* @__PURE__ */ new Set([...prev, rowId])) : toggleRow(rowId)
|
|
2957
|
-
})
|
|
2961
|
+
}) })
|
|
2958
2962
|
},
|
|
2959
2963
|
col.key
|
|
2960
2964
|
);
|
|
2961
2965
|
}
|
|
2962
2966
|
const rawVal = String(row[col.key] ?? "");
|
|
2963
|
-
return /* @__PURE__ */ jsx("td", { className: cn(tdBase, "text-sm text-foreground/80"), style: tdStyle, children: /* @__PURE__ */ jsx("span", { className: wrap ? "whitespace-normal" : "block truncate", title: !wrap ? rawVal : void 0, children: rawVal }) }, col.key);
|
|
2967
|
+
return /* @__PURE__ */ jsx("td", { className: cn(tdBase, "text-sm text-foreground/80"), style: tdStyle, children: /* @__PURE__ */ jsx("div", { className: "min-w-0 overflow-hidden", children: /* @__PURE__ */ jsx("span", { className: wrap ? "whitespace-normal" : "block truncate", title: !wrap ? rawVal : void 0, children: rawVal }) }) }, col.key);
|
|
2964
2968
|
})
|
|
2965
2969
|
},
|
|
2966
2970
|
String(rowId)
|
|
@@ -3288,6 +3292,16 @@ var BY_VALUE = new Map(
|
|
|
3288
3292
|
DEFINITIONS.map((d) => [d.value, d])
|
|
3289
3293
|
);
|
|
3290
3294
|
var DATA_LIST_VIEW_REGISTRY = DEFINITIONS;
|
|
3295
|
+
var FULL_HUB_SUPPORTED_VIEWS = [
|
|
3296
|
+
"table",
|
|
3297
|
+
"list",
|
|
3298
|
+
"board",
|
|
3299
|
+
"dashboard",
|
|
3300
|
+
"folder",
|
|
3301
|
+
"panel",
|
|
3302
|
+
"tree-panel"
|
|
3303
|
+
];
|
|
3304
|
+
DATA_LIST_VIEW_REGISTRY.map((d) => d.value);
|
|
3291
3305
|
function dataListViewDefinition(view) {
|
|
3292
3306
|
const def = BY_VALUE.get(view);
|
|
3293
3307
|
if (!def) {
|
|
@@ -5469,7 +5483,7 @@ function HubTable({
|
|
|
5469
5483
|
columns,
|
|
5470
5484
|
view,
|
|
5471
5485
|
onViewChange,
|
|
5472
|
-
supportedViewTypes,
|
|
5486
|
+
supportedViewTypes: supportedViewTypesProp,
|
|
5473
5487
|
hubLabel,
|
|
5474
5488
|
lifecycleTabLabel,
|
|
5475
5489
|
searchAriaLabel,
|
|
@@ -5505,6 +5519,7 @@ function HubTable({
|
|
|
5505
5519
|
boardColumnCountBadgeClassName,
|
|
5506
5520
|
boardEmptyColumnLabel
|
|
5507
5521
|
}) {
|
|
5522
|
+
const supportedViewTypes = supportedViewTypesProp ?? FULL_HUB_SUPPORTED_VIEWS;
|
|
5508
5523
|
const filterFields = React10.useMemo(() => columnsToFilterFields(columns), [columns]);
|
|
5509
5524
|
const fieldDefinitions = React10.useMemo(() => columnsToFieldDefinitions(columns), [columns]);
|
|
5510
5525
|
const resolveColumnLabel = React10.useCallback(
|