@krak-stack/registry 0.1.42 → 0.1.44

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.
@@ -40,7 +40,9 @@ export interface DataTableListOptions {
40
40
  export type DataTableListColumn<TData> = DataTableListOptions & {
41
41
  /** Includes items not loaded in the preview; the dropdown only shows supplied items. */
42
42
  getTotalCount?: (row: TData) => number;
43
- /** Actions open from an explicit roster button; list items remain passive. */
43
+ /** Optional primary action for items without submenu actions. */
44
+ onItemClick?: (context: DataTableListItemContext<TData>) => void;
45
+ /** Optional secondary actions shown in each item's submenu. */
44
46
  itemActions?: readonly DataTableItemAction<DataTableListItemContext<TData>>[];
45
47
  actionsLabel?: string;
46
48
  } & ({
@@ -76,6 +78,7 @@ interface EditableDataTableListCellProps extends DataTableListOptions {
76
78
  totalCount?: number | undefined;
77
79
  }
78
80
  interface DataTableListCellActionsProps {
81
+ onItemClick?: ((item: DataTableListItem) => void) | undefined;
79
82
  actionsLabel?: string | undefined;
80
83
  itemActions?: readonly DataTableItemAction<DataTableListItem>[] | undefined;
81
84
  }
@@ -1339,9 +1339,7 @@ var uiFromState = (state) => ({
1339
1339
  var sameUiState = (left, right) => left.columnVisibility === right.columnVisibility && left.columnSizing === right.columnSizing && left.rowSelection === right.rowSelection && left.grouping === right.grouping && left.collapsedGroups === right.collapsedGroups && left.view === right.view;
1340
1340
  var sameQueryState = (left, right) => left.page === right.page && left.pageSize === right.pageSize && left.globalFilter === right.globalFilter && left.sort === right.sort;
1341
1341
  var initialPublicState = (props, uiState) => ({
1342
- ...DEFAULT_QUERY,
1343
- ...props.initialState,
1344
- ...props.state,
1342
+ ...queryFromState(props.state ?? { ...DEFAULT_QUERY, ...props.initialState }),
1345
1343
  ...uiState
1346
1344
  });
1347
1345
  var buildDataTableModel = (store) => {
@@ -1378,7 +1376,7 @@ var changeState = (setStore, update) => {
1378
1376
  if (!sameUiState(uiState, store.state)) {
1379
1377
  store.config.onUiStateChange(uiState);
1380
1378
  }
1381
- const state = store.controlledState ? { ...proposed, ...store.controlledState } : proposed;
1379
+ const state = store.controlledState ? { ...proposed, ...queryFromState(store.controlledState) } : proposed;
1382
1380
  if (sameDataTableState(state, store.state))
1383
1381
  return store;
1384
1382
  const next = { ...store, state };
@@ -1496,6 +1494,7 @@ var renderCell = (row, column, locale = "en", labels = dataTableMessages(locale)
1496
1494
  return /* @__PURE__ */ jsx14(DataTableListCell, {
1497
1495
  ...config,
1498
1496
  itemActions,
1497
+ onItemClick: config.onItemClick ? (item) => config.onItemClick?.({ item, row: row.data }) : undefined,
1499
1498
  items: config.getItems(row.data),
1500
1499
  locale,
1501
1500
  messages: { [locale]: labels },
@@ -1508,6 +1507,7 @@ var renderCell = (row, column, locale = "en", labels = dataTableMessages(locale)
1508
1507
  return /* @__PURE__ */ jsx14(DataTableListCell, {
1509
1508
  ...config,
1510
1509
  itemActions,
1510
+ onItemClick: config.onItemClick ? (item) => config.onItemClick?.({ item, row: row.data }) : undefined,
1511
1511
  items: config.getItems(row.data),
1512
1512
  locale,
1513
1513
  messages: { [locale]: labels },
@@ -1700,7 +1700,7 @@ var DataTableToolbar = ({
1700
1700
  }),
1701
1701
  store.state.globalFilter ? /* @__PURE__ */ jsx14(Button, {
1702
1702
  "aria-label": labels.filter,
1703
- className: "absolute top-1/2 right-1 size-7 -translate-y-1/2",
1703
+ className: "absolute top-1/2 right-1 size-7 -translate-y-1/2 active:not-aria-[haspopup]:-translate-y-1/2",
1704
1704
  onClick: () => update((state) => ({
1705
1705
  ...state,
1706
1706
  globalFilter: undefined,
@@ -2887,7 +2887,11 @@ var HydratedDataTable = ({
2887
2887
  labels: dataTableMessages(props.locale, props.messages),
2888
2888
  locale: props.locale ?? "en"
2889
2889
  };
2890
- const state = { ...store.state, ...uiState, ...props.state };
2890
+ const state = {
2891
+ ...store.state,
2892
+ ...uiState,
2893
+ ...queryFromState(props.state ?? store.state)
2894
+ };
2891
2895
  const modelChanged = store.rowData !== props.rowData || store.columnDefs !== props.columnDefs || !sameDataTableState(store.state, state) || store.config.getRowId !== config.getRowId || store.config.features.pagination !== config.features.pagination;
2892
2896
  const next = {
2893
2897
  ...store,
@@ -2999,11 +3003,10 @@ var DataTableListCell = (props) => {
2999
3003
  ...resolvedProps
3000
3004
  });
3001
3005
  }
3002
- const { actionsLabel, itemActions, ...summaryProps } = resolvedProps;
3006
+ const { actionsLabel, itemActions, onItemClick, ...summaryProps } = resolvedProps;
3003
3007
  const labels = dataTableMessages(locale, resolvedProps.messages);
3004
- const totalCount = resolvedProps.totalCount ?? resolvedProps.items.length;
3005
- const overflow = totalCount > Math.min(resolvedProps.items.length, resolvedProps.visibleCount ?? 3);
3006
- if (!itemActions?.length && !overflow) {
3008
+ const hasItems = resolvedProps.items.length > 0;
3009
+ if (!itemActions?.length && !hasItems) {
3007
3010
  return /* @__PURE__ */ jsx14(DataTableListSummary, {
3008
3011
  ...summaryProps
3009
3012
  });
@@ -3017,11 +3020,12 @@ var DataTableListCell = (props) => {
3017
3020
  children: /* @__PURE__ */ jsx14(DataTableListMenu, {
3018
3021
  actions: itemActions ?? [],
3019
3022
  display: resolvedProps.display,
3020
- force: overflow,
3023
+ force: hasItems,
3021
3024
  label: menuLabel,
3022
3025
  items: resolvedProps.items,
3023
3026
  locale,
3024
3027
  messages: resolvedProps.messages,
3028
+ onItemClick,
3025
3029
  trigger: /* @__PURE__ */ jsxs8(Button, {
3026
3030
  "aria-label": menuLabel,
3027
3031
  className: "h-full w-full min-w-0 justify-between rounded-none px-2 focus-visible:ring-inset",
@@ -3049,6 +3053,7 @@ var EditableDataTableListCell = ({
3049
3053
  totalCount,
3050
3054
  actionsLabel,
3051
3055
  itemActions,
3056
+ onItemClick,
3052
3057
  locale = "en",
3053
3058
  messages
3054
3059
  }) => {
@@ -3091,6 +3096,7 @@ var EditableDataTableListCell = ({
3091
3096
  display,
3092
3097
  force: true,
3093
3098
  items: selected,
3099
+ onItemClick,
3094
3100
  label: actionsLabel ?? manageLabel,
3095
3101
  locale,
3096
3102
  messages,
@@ -3131,6 +3137,7 @@ var DataTableListMenu = ({
3131
3137
  locale = "en",
3132
3138
  messages,
3133
3139
  onAdd,
3140
+ onItemClick,
3134
3141
  trigger
3135
3142
  }) => {
3136
3143
  const entries = items.map((item) => {
@@ -3158,7 +3165,7 @@ var DataTableListMenu = ({
3158
3165
  }),
3159
3166
  /* @__PURE__ */ jsx14(DropdownMenuContent, {
3160
3167
  align: "end",
3161
- className: "max-h-72 w-72",
3168
+ className: "max-h-[min(18rem,var(--available-height))] w-72 max-w-[calc(100vw-2rem)]",
3162
3169
  onClick: (event) => event.stopPropagation(),
3163
3170
  onPointerDown: (event) => event.stopPropagation(),
3164
3171
  children: /* @__PURE__ */ jsxs8(DropdownMenuGroup, {
@@ -3192,8 +3199,12 @@ var DataTableListMenu = ({
3192
3199
  }, action.id ?? action.name))
3193
3200
  })
3194
3201
  ]
3195
- }, item.value ?? `${item.label}-${index}`) : /* @__PURE__ */ jsx14("div", {
3196
- className: "px-2 py-1.5",
3202
+ }, item.value ?? `${item.label}-${index}`) : /* @__PURE__ */ jsx14(DropdownMenuItem, {
3203
+ closeOnClick: Boolean(onItemClick),
3204
+ onClick: (event) => {
3205
+ event.stopPropagation();
3206
+ onItemClick?.(item);
3207
+ },
3197
3208
  children: /* @__PURE__ */ jsx14(DataTableListEntry, {
3198
3209
  item,
3199
3210
  appearance: display === "icon" ? "detail" : "list"
@@ -3375,7 +3386,8 @@ var DataTableListEntry = ({
3375
3386
  });
3376
3387
  if (appearance === "list") {
3377
3388
  return /* @__PURE__ */ jsx14("span", {
3378
- className: "truncate",
3389
+ className: "min-w-0 flex-1 truncate",
3390
+ title: item.label,
3379
3391
  children: item.label
3380
3392
  });
3381
3393
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@krak-stack/registry",
3
- "version": "0.1.42",
3
+ "version": "0.1.44",
4
4
  "description": "Tree-shakable KrakStack components and Effect services.",
5
5
  "license": "MIT",
6
6
  "repository": {