@appcorp/shadcn 1.0.18 → 1.0.20

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.
@@ -2,6 +2,8 @@ import { FC } from "react";
2
2
  import { HeaderAction } from "./enhanced-table";
3
3
  interface EnhancedTableHeaderActionProps {
4
4
  headerActions: HeaderAction[];
5
+ numberOfFilters?: number;
6
+ onClearFilters?: () => void;
5
7
  }
6
8
  export declare const EnhancedTableHeaderAction: FC<EnhancedTableHeaderActionProps>;
7
9
  export {};
@@ -5,17 +5,33 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.EnhancedTableHeaderAction = void 0;
7
7
  var react_1 = __importDefault(require("react"));
8
+ var lucide_react_1 = require("lucide-react");
8
9
  var button_1 = require("./button");
10
+ var badge_1 = require("./badge");
9
11
  var EnhancedTableHeaderAction = function (_a) {
10
- var headerActions = _a.headerActions;
12
+ var headerActions = _a.headerActions, numberOfFilters = _a.numberOfFilters, onClearFilters = _a.onClearFilters;
11
13
  return (react_1.default.createElement(react_1.default.Fragment, null, headerActions.length > 0 && (react_1.default.createElement("div", { className: "flex gap-2" }, headerActions
12
14
  .filter(function (action) { return action.enabled !== false; })
13
15
  .sort(function (a, b) { return (a.order || 0) - (b.order || 0); })
14
- .map(function (action, index) { return (react_1.default.createElement(button_1.Button, { key: action.id || action.key || index, variant: action.variant || "default", onClick: function () {
15
- if (action.onClick)
16
- action.onClick();
17
- if (action.handleOnClick)
18
- action.handleOnClick();
19
- } }, action.label)); })))));
16
+ .map(function (action, index) {
17
+ var isFilterButton = action.label
18
+ .toLowerCase()
19
+ .includes("filter");
20
+ var showFilterIndicators = isFilterButton && numberOfFilters && numberOfFilters > 0;
21
+ return (react_1.default.createElement("div", { key: action.id || action.key || index, className: "relative" },
22
+ react_1.default.createElement(button_1.Button, { variant: action.variant || "default", onClick: function () {
23
+ if (action.onClick)
24
+ action.onClick();
25
+ if (action.handleOnClick)
26
+ action.handleOnClick();
27
+ } }, action.label),
28
+ showFilterIndicators && (react_1.default.createElement(react_1.default.Fragment, null,
29
+ react_1.default.createElement(badge_1.Badge, { variant: "secondary", className: "absolute -top-2 -right-2 h-5 w-5 flex items-center justify-center p-0 text-xs rounded-full" }, numberOfFilters),
30
+ onClearFilters && (react_1.default.createElement("button", { onClick: function (e) {
31
+ e.stopPropagation();
32
+ onClearFilters();
33
+ }, className: "absolute -top-2 -left-2 h-5 w-5 rounded-full bg-muted hover:bg-muted/80 flex items-center justify-center text-muted-foreground hover:text-foreground transition-colors", "aria-label": "Clear all filters" },
34
+ react_1.default.createElement(lucide_react_1.X, { className: "h-3 w-3" })))))));
35
+ })))));
20
36
  };
21
37
  exports.EnhancedTableHeaderAction = EnhancedTableHeaderAction;
@@ -69,6 +69,8 @@ export interface EnhancedTableProps {
69
69
  handleSearchInput: (key: string, value: string) => void;
70
70
  headerActions: HeaderAction[];
71
71
  rowActions: RowAction[];
72
+ numberOfFilters?: number;
73
+ onClearFilters?: () => void;
72
74
  loading: boolean;
73
75
  isRTL?: boolean;
74
76
  translationLabels?: {
@@ -42,7 +42,7 @@ var COMPONENT_TYPE;
42
42
  COMPONENT_TYPE["BOOLEAN"] = "BOOLEAN";
43
43
  })(COMPONENT_TYPE || (exports.COMPONENT_TYPE = COMPONENT_TYPE = {}));
44
44
  var EnhancedTable = function (_a) {
45
- var currentPage = _a.currentPage, handleNextOnClick = _a.handleNextOnClick, handleOnSelect = _a.handleOnSelect, handlePreviousOnClick = _a.handlePreviousOnClick, handleSearchInput = _a.handleSearchInput, headerActions = _a.headerActions, isNextDisabled = _a.isNextDisabled, isPreviousDisabled = _a.isPreviousDisabled, _b = _a.isRTL, isRTL = _b === void 0 ? false : _b, listOptions = _a.listOptions, loading = _a.loading, _c = _a.nodeSelectKey, nodeSelectKey = _c === void 0 ? "pageLimit" : _c, pageLimit = _a.pageLimit, rowActions = _a.rowActions, _d = _a.searchDisabled, searchDisabled = _d === void 0 ? false : _d, _e = _a.searchEnabled, searchEnabled = _e === void 0 ? true : _e, _f = _a.searchId, searchId = _f === void 0 ? "table-search" : _f, _g = _a.searchPlaceholder, searchPlaceholder = _g === void 0 ? "Search..." : _g, searchValue = _a.searchValue, tableBodyCols = _a.tableBodyCols, tableBodyRows = _a.tableBodyRows, tableDescription = _a.tableDescription, tableHeading = _a.tableHeading, tableHeadItems = _a.tableHeadItems, totalPages = _a.totalPages, _h = _a.translationLabels, translationLabels = _h === void 0 ? {} : _h;
45
+ var currentPage = _a.currentPage, handleNextOnClick = _a.handleNextOnClick, handleOnSelect = _a.handleOnSelect, handlePreviousOnClick = _a.handlePreviousOnClick, handleSearchInput = _a.handleSearchInput, headerActions = _a.headerActions, isNextDisabled = _a.isNextDisabled, isPreviousDisabled = _a.isPreviousDisabled, _b = _a.isRTL, isRTL = _b === void 0 ? false : _b, listOptions = _a.listOptions, loading = _a.loading, _c = _a.nodeSelectKey, nodeSelectKey = _c === void 0 ? "pageLimit" : _c, numberOfFilters = _a.numberOfFilters, onClearFilters = _a.onClearFilters, pageLimit = _a.pageLimit, rowActions = _a.rowActions, _d = _a.searchDisabled, searchDisabled = _d === void 0 ? false : _d, _e = _a.searchEnabled, searchEnabled = _e === void 0 ? true : _e, _f = _a.searchId, searchId = _f === void 0 ? "table-search" : _f, _g = _a.searchPlaceholder, searchPlaceholder = _g === void 0 ? "Search..." : _g, searchValue = _a.searchValue, tableBodyCols = _a.tableBodyCols, tableBodyRows = _a.tableBodyRows, tableDescription = _a.tableDescription, tableHeading = _a.tableHeading, tableHeadItems = _a.tableHeadItems, totalPages = _a.totalPages, _h = _a.translationLabels, translationLabels = _h === void 0 ? {} : _h;
46
46
  // Default translation values
47
47
  var defaultLabels = {
48
48
  booleanYes: "Yes",
@@ -205,7 +205,7 @@ var EnhancedTable = function (_a) {
205
205
  tableDescription && (react_1.default.createElement("p", { className: "text-muted-foreground" }, tableDescription))),
206
206
  react_1.default.createElement("div", { className: "flex flex-row items-center justify-end gap-2" },
207
207
  react_1.default.createElement(enhanced_table_header_search_1.EnhancedTableHeaderSearch, { handleSearchInput: handleSearchInput, loading: loading, searchDisabled: searchDisabled, searchEnabled: searchEnabled, searchId: searchId, searchPlaceholder: searchPlaceholder, searchValue: searchValue }),
208
- react_1.default.createElement(enhanced_table_header_action_1.EnhancedTableHeaderAction, { headerActions: headerActions }))),
208
+ react_1.default.createElement(enhanced_table_header_action_1.EnhancedTableHeaderAction, { headerActions: headerActions, numberOfFilters: numberOfFilters, onClearFilters: onClearFilters }))),
209
209
  react_1.default.createElement("div", { className: "border rounded-md" },
210
210
  react_1.default.createElement(table_1.Table, null,
211
211
  react_1.default.createElement(table_1.TableHeader, null,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appcorp/shadcn",
3
- "version": "1.0.18",
3
+ "version": "1.0.20",
4
4
  "scripts": {
5
5
  "build:next": "next build",
6
6
  "build:storybook": "storybook build -c .storybook -o .out",
@@ -57,6 +57,7 @@
57
57
  "@testing-library/jest-dom": "^6.9.1",
58
58
  "@testing-library/react": "^16.3.0",
59
59
  "@testing-library/user-event": "^14.6.1",
60
+ "@types/color": "^4.2.0",
60
61
  "@types/jest": "^30.0.0",
61
62
  "@types/lodash.throttle": "^4",
62
63
  "@types/node": "^24.7.2",