pixelize-design-library 2.2.95 → 2.2.96

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.
@@ -1,3 +1,3 @@
1
1
  import React from "react";
2
2
  import { CheckboxProps } from "./CheckboxProps";
3
- export default function CheckBox({ label, spacing, isInvalid, color, iconColor, iconSize, isChecked, isIndeterminate, onChange, isDisabled, size, value, defaultChecked, sx, isRequired, error, errorMessage, isInformation, informationMessage, id, helperText, }: CheckboxProps): React.JSX.Element;
3
+ export default function CheckBox({ label, spacing, isInvalid, color, iconColor, iconSize, isChecked, isIndeterminate, onChange, isDisabled, size, value, defaultChecked, sx, isRequired, error, errorMessage, isInformation, informationMessage, id, helperText, onClick, }: CheckboxProps): React.JSX.Element;
@@ -10,12 +10,10 @@ var FormLabel_1 = require("../Common/FormLabel");
10
10
  var ErrorMessage_1 = __importDefault(require("../Common/ErrorMessage"));
11
11
  var HelperText_1 = __importDefault(require("../Common/HelperText"));
12
12
  function CheckBox(_a) {
13
- var label = _a.label, spacing = _a.spacing, isInvalid = _a.isInvalid, color = _a.color, iconColor = _a.iconColor, iconSize = _a.iconSize, isChecked = _a.isChecked, isIndeterminate = _a.isIndeterminate, onChange = _a.onChange, isDisabled = _a.isDisabled, size = _a.size, value = _a.value, defaultChecked = _a.defaultChecked, sx = _a.sx, isRequired = _a.isRequired, error = _a.error, errorMessage = _a.errorMessage, isInformation = _a.isInformation, informationMessage = _a.informationMessage, id = _a.id, helperText = _a.helperText;
13
+ var label = _a.label, spacing = _a.spacing, isInvalid = _a.isInvalid, color = _a.color, iconColor = _a.iconColor, iconSize = _a.iconSize, isChecked = _a.isChecked, isIndeterminate = _a.isIndeterminate, onChange = _a.onChange, isDisabled = _a.isDisabled, size = _a.size, value = _a.value, defaultChecked = _a.defaultChecked, sx = _a.sx, isRequired = _a.isRequired, error = _a.error, errorMessage = _a.errorMessage, isInformation = _a.isInformation, informationMessage = _a.informationMessage, id = _a.id, helperText = _a.helperText, onClick = _a.onClick;
14
14
  var theme = (0, useCustomTheme_1.useCustomTheme)();
15
15
  return (react_1.default.createElement(react_1.default.Fragment, null,
16
- react_1.default.createElement(react_2.Checkbox, { spacing: spacing, isInvalid: isInvalid,
17
- // isRequired={isRequired}
18
- colorScheme: color, iconColor: iconColor, iconSize: iconSize, isChecked: isChecked, isIndeterminate: isIndeterminate, onChange: onChange, isDisabled: isDisabled, size: size, value: value, defaultChecked: defaultChecked, borderColor: theme.colors.gray[500], sx: sx, display: "flex", alignItems: "inherit" }, label && (react_1.default.createElement(FormLabel_1.TextLabel, { label: label, id: id, isInformation: isInformation, informationMessage: informationMessage, isRequired: isRequired }))),
16
+ react_1.default.createElement(react_2.Checkbox, { onClick: onClick, spacing: spacing, isInvalid: isInvalid, colorScheme: color, iconColor: iconColor, iconSize: iconSize, isChecked: isChecked, isIndeterminate: isIndeterminate, onChange: onChange, isDisabled: isDisabled, size: size, value: value, defaultChecked: defaultChecked, borderColor: theme.colors.gray[500], sx: sx, display: "flex", alignItems: "inherit" }, label && (react_1.default.createElement(FormLabel_1.TextLabel, { label: label, id: id, isInformation: isInformation, informationMessage: informationMessage, isRequired: isRequired }))),
19
17
  error && react_1.default.createElement(ErrorMessage_1.default, { errorMessage: errorMessage }),
20
18
  helperText && !error && react_1.default.createElement(HelperText_1.default, { helperText: helperText })));
21
19
  }
@@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Checkbox = void 0;
4
4
  exports.Checkbox = {
5
5
  baseStyle: function (_a) {
6
- var theme = _a.theme;
6
+ var _b;
7
+ var theme = _a.theme, _c = _a.colorScheme, colorScheme = _c === void 0 ? "primary" : _c;
8
+ var palette = (_b = theme.colors[colorScheme]) !== null && _b !== void 0 ? _b : theme.colors.primary;
7
9
  return {
8
10
  control: {
9
11
  width: "1.25rem",
@@ -16,34 +18,34 @@ exports.Checkbox = {
16
18
  },
17
19
  _indeterminate: {
18
20
  bg: theme.colors.background[50],
19
- borderColor: theme.colors.primary[500],
21
+ borderColor: palette[500],
20
22
  svg: {
21
- color: theme.colors.primary[500],
23
+ color: palette[500],
22
24
  },
23
25
  },
24
26
  _checked: {
25
- bg: theme.colors.primary[600],
26
- borderColor: theme.colors.primary[600],
27
+ bg: palette[600],
28
+ borderColor: palette[600],
27
29
  },
28
30
  _hover: {
29
31
  bg: theme.colors.background[100],
30
- borderColor: theme.colors.primary[400],
32
+ borderColor: palette[400],
31
33
  _checked: {
32
- bg: theme.colors.primary[600],
33
- borderColor: theme.colors.primary[600],
34
+ bg: palette[600],
35
+ borderColor: palette[600],
34
36
  },
35
37
  _indeterminate: {
36
38
  bg: "none",
37
- borderColor: theme.colors.primary[600],
39
+ borderColor: palette[600],
38
40
  },
39
41
  },
40
42
  _focus: {
41
- boxShadow: "0 0 0 2px ".concat(theme.colors.primary[300]),
42
- borderColor: theme.colors.primary[500],
43
+ boxShadow: "0 0 0 2px ".concat(palette[300]),
44
+ borderColor: palette[500],
43
45
  },
44
46
  _active: {
45
- bg: theme.colors.primary[600],
46
- borderColor: theme.colors.primary[600],
47
+ bg: palette[600],
48
+ borderColor: palette[600],
47
49
  },
48
50
  },
49
51
  icon: {
@@ -51,4 +53,8 @@ exports.Checkbox = {
51
53
  },
52
54
  };
53
55
  },
56
+ defaultProps: {
57
+ colorScheme: "primary",
58
+ size: "md",
59
+ },
54
60
  };
@@ -1,5 +1,5 @@
1
1
  import { CheckboxProps as ChakraButtonProps } from "@chakra-ui/react";
2
- export type CheckboxProps = Pick<ChakraButtonProps, "spacing" | "isInvalid" | "size" | "iconColor" | "iconSize" | "isChecked" | "isIndeterminate" | "onChange" | "isDisabled" | "value" | "defaultChecked" | "sx"> & {
2
+ export type CheckboxProps = Pick<ChakraButtonProps, "spacing" | "isInvalid" | "size" | "iconColor" | "iconSize" | "isChecked" | "isIndeterminate" | "onChange" | "isDisabled" | "value" | "defaultChecked" | "sx" | "onClick"> & {
3
3
  label?: string;
4
4
  width?: string | number;
5
5
  variant?: "solid" | "outline" | "ghost" | "link" | "unstyled";
@@ -0,0 +1,38 @@
1
+ import React from "react";
2
+ export type FilterOption = {
3
+ id: string;
4
+ label: string;
5
+ count?: number;
6
+ };
7
+ export type FilterSection = {
8
+ id: string;
9
+ label: string;
10
+ options?: FilterOption[];
11
+ searchable?: boolean;
12
+ range?: {
13
+ min: number;
14
+ max: number;
15
+ step?: number;
16
+ values?: number[];
17
+ unit?: string;
18
+ };
19
+ initiallyExpanded?: boolean;
20
+ type?: "checkboxes" | "radio";
21
+ checkboxes?: boolean;
22
+ radio?: boolean;
23
+ };
24
+ export type SelectedFilters = Record<string, any>;
25
+ export type FilterSidebarProps = {
26
+ sidebarOptions: FilterSection[];
27
+ selected?: SelectedFilters;
28
+ onChange?: (selected: SelectedFilters) => void;
29
+ maxVisible?: number;
30
+ width?: string | number;
31
+ variant?: "minimal" | "cards";
32
+ containerHeight?: number | string;
33
+ containerPadding?: number | string;
34
+ headerPadding?: number;
35
+ panelPadding?: number;
36
+ };
37
+ declare const FilterSidebar: React.FC<FilterSidebarProps>;
38
+ export default FilterSidebar;
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ var react_1 = __importStar(require("react"));
41
+ var react_2 = require("@chakra-ui/react");
42
+ var lucide_react_1 = require("lucide-react");
43
+ var Accordion_1 = __importDefault(require("../Accordion/Accordion"));
44
+ var Checkbox_1 = __importDefault(require("../Checkbox/Checkbox"));
45
+ var useCustomTheme_1 = require("../../Theme/useCustomTheme");
46
+ var FilterSidebar = function (_a) {
47
+ var sidebarOptions = _a.sidebarOptions, selected = _a.selected, onChange = _a.onChange, _b = _a.maxVisible, maxVisible = _b === void 0 ? 10 : _b, _c = _a.width, width = _c === void 0 ? 280 : _c, _d = _a.variant, variant = _d === void 0 ? "minimal" : _d, containerPadding = _a.containerPadding, _e = _a.headerPadding, headerPadding = _e === void 0 ? 2 : _e, _f = _a.panelPadding, panelPadding = _f === void 0 ? 3 : _f;
48
+ var theme = (0, useCustomTheme_1.useCustomTheme)();
49
+ // Determine if the component is controlled (prop provided) or uncontrolled (internal state)
50
+ var isControlled = selected !== undefined;
51
+ // Local state for uncontrolled mode
52
+ var _g = (0, react_1.useState)(function () { return (__assign({}, (selected || {}))); }), localSelected = _g[0], setLocalSelected = _g[1];
53
+ // Derived state: use prop if controlled, otherwise local state
54
+ var internalSelected = (selected !== undefined ? selected : localSelected);
55
+ // Wrapper for state updates to handle both modes
56
+ var setInternalSelected = function (updater) {
57
+ var next = typeof updater === 'function' ? updater(internalSelected) : updater;
58
+ // In the existing code, the updater function often handles calling onChange.
59
+ // However, for safety in uncontrolled mode, we update local state.
60
+ if (!isControlled) {
61
+ setLocalSelected(next);
62
+ }
63
+ };
64
+ var _h = (0, react_1.useState)(function () {
65
+ var initial = {};
66
+ sidebarOptions.forEach(function (s) { return (initial[s.id] = !!s.initiallyExpanded); });
67
+ return initial;
68
+ }), expanded = _h[0], setExpanded = _h[1];
69
+ var _j = (0, react_1.useState)({}), searchTerms = _j[0], setSearchTerms = _j[1];
70
+ var activeCount = (0, react_1.useMemo)(function () {
71
+ return Object.values(internalSelected).reduce(function (acc, v) { return acc + (Array.isArray(v) ? v.length : 0); }, 0);
72
+ }, [internalSelected]);
73
+ var toggleOption = function (sectionId, optionId, checked) {
74
+ setInternalSelected(function (prev) {
75
+ var _a;
76
+ var current = new Set(prev[sectionId] || []);
77
+ if (checked)
78
+ current.add(optionId);
79
+ else
80
+ current.delete(optionId);
81
+ var next = __assign(__assign({}, prev), (_a = {}, _a[sectionId] = Array.from(current), _a));
82
+ onChange === null || onChange === void 0 ? void 0 : onChange(next);
83
+ return next;
84
+ });
85
+ };
86
+ var clearFilter = function (sectionId, optionId) {
87
+ setInternalSelected(function (prev) {
88
+ var next = __assign({}, prev);
89
+ if (optionId) {
90
+ var list = (next[sectionId] || []);
91
+ next[sectionId] = list.filter(function (id) { return id !== optionId; });
92
+ }
93
+ else {
94
+ delete next[sectionId];
95
+ }
96
+ onChange === null || onChange === void 0 ? void 0 : onChange(next);
97
+ return next;
98
+ });
99
+ };
100
+ var clearAll = function () {
101
+ setInternalSelected(function () {
102
+ var next = {};
103
+ onChange === null || onChange === void 0 ? void 0 : onChange(next);
104
+ return next;
105
+ });
106
+ };
107
+ var items = sidebarOptions.map(function (section) { return ({
108
+ header: (react_1.default.createElement(react_2.Flex, { justify: "space-between", align: "center", w: "full", py: 1 },
109
+ react_1.default.createElement(react_2.Text, { fontWeight: "bold", fontSize: "md", color: theme.colors.gray[700] }, section.label),
110
+ (function () {
111
+ var sel = internalSelected[section.id];
112
+ var hasValue = Array.isArray(sel) ? sel.length > 0 : !!sel;
113
+ return hasValue;
114
+ })() ? (react_1.default.createElement(react_2.Badge, { colorScheme: "red", variant: "solid", fontSize: "xs", cursor: "pointer", onClick: function (e) {
115
+ e.stopPropagation();
116
+ clearFilter(section.id);
117
+ }, borderRadius: "full", px: 2 }, "Clear")) : null)),
118
+ content: (react_1.default.createElement(react_2.VStack, { align: "start", spacing: 2, py: 1 }, section.range ? ((function () {
119
+ var _a, _b, _c, _d;
120
+ var range = section.range;
121
+ var step = range.step || 1;
122
+ var values = range.values || Array.from({ length: Math.floor((range.max - range.min) / (step || 100)) + 1 }, function (_, i) { return range.min + i * (step || 100); });
123
+ return (react_1.default.createElement(react_2.Box, { w: "full", px: 2 },
124
+ react_1.default.createElement(react_2.RangeSlider
125
+ // aria-label={["min", "max"]}
126
+ , {
127
+ // aria-label={["min", "max"]}
128
+ min: range.min, max: range.max, step: step, value: internalSelected[section.id] || [range.min, range.max], onChange: function (val) {
129
+ setInternalSelected(function (prev) {
130
+ var _a;
131
+ var next = __assign(__assign({}, prev), (_a = {}, _a[section.id] = val, _a));
132
+ onChange === null || onChange === void 0 ? void 0 : onChange(next);
133
+ return next;
134
+ });
135
+ }, mb: 4 },
136
+ react_1.default.createElement(react_2.RangeSliderTrack, { bg: theme.colors.gray[200], h: 2, borderRadius: "full" },
137
+ react_1.default.createElement(react_2.RangeSliderFilledTrack, { bg: theme.colors.red[500] })),
138
+ react_1.default.createElement(react_2.RangeSliderThumb, { index: 0, boxSize: 5, borderColor: theme.colors.gray[300], boxShadow: "sm" }),
139
+ react_1.default.createElement(react_2.RangeSliderThumb, { index: 1, boxSize: 5, borderColor: theme.colors.gray[300], boxShadow: "sm" })),
140
+ react_1.default.createElement(react_2.HStack, { w: "full", justify: "space-between" },
141
+ react_1.default.createElement(react_2.Box, { className: "price-min", borderWidth: "1px", borderRadius: "md", p: 2, minW: "90px", textAlign: "center", bg: theme.colors.gray[50], borderColor: theme.colors.gray[200] },
142
+ react_1.default.createElement(react_2.Text, { fontSize: "xs", color: "gray.600", mb: "-2px" }, "Min"),
143
+ react_1.default.createElement(react_2.Select, { "aria-label": "Minimum price", className: "price-min-select", variant: "outline", size: "sm", textAlign: "center", borderColor: theme.colors.gray[300], bg: theme.colors.white, borderRadius: "full", _hover: { borderColor: theme.colors.gray[400] }, _focus: { borderColor: theme.colors.red[500], boxShadow: "none" }, value: ((_b = (_a = internalSelected[section.id]) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : range.min), onChange: function (e) {
144
+ var _a, _b;
145
+ var min = Number(e.target.value);
146
+ var max = (_b = (_a = internalSelected[section.id]) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : range.max;
147
+ var nextVal = [Math.min(min, max), Math.max(min, max)];
148
+ setInternalSelected(function (prev) {
149
+ var _a;
150
+ var next = __assign(__assign({}, prev), (_a = {}, _a[section.id] = nextVal, _a));
151
+ onChange === null || onChange === void 0 ? void 0 : onChange(next);
152
+ return next;
153
+ });
154
+ } }, values.map(function (v) { return (react_1.default.createElement("option", { key: "min-".concat(v), value: v },
155
+ v,
156
+ range.unit ? " ".concat(range.unit) : "")); }))),
157
+ react_1.default.createElement(react_2.Text, { fontSize: "sm", color: "gray.400" }, "-"),
158
+ react_1.default.createElement(react_2.Box, { className: "price-max", borderWidth: "1px", borderRadius: "md", p: 2, minW: "100px", textAlign: "center", bg: theme.colors.gray[50], borderColor: theme.colors.gray[200] },
159
+ react_1.default.createElement(react_2.Text, { fontSize: "xs", color: "gray.600", mb: "-2px" }, "Max"),
160
+ react_1.default.createElement(react_2.Select, { "aria-label": "Maximum price", className: "price-max-select", variant: "outline", size: "sm", textAlign: "center", borderColor: theme.colors.gray[300], bg: theme.colors.white, borderRadius: "full", _hover: { borderColor: theme.colors.gray[400] }, _focus: { borderColor: theme.colors.red[500], boxShadow: "none" }, value: ((_d = (_c = internalSelected[section.id]) === null || _c === void 0 ? void 0 : _c[1]) !== null && _d !== void 0 ? _d : range.max), onChange: function (e) {
161
+ var _a, _b;
162
+ var max = Number(e.target.value);
163
+ var min = (_b = (_a = internalSelected[section.id]) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : range.min;
164
+ var nextVal = [Math.min(min, max), Math.max(min, max)];
165
+ setInternalSelected(function (prev) {
166
+ var _a;
167
+ var next = __assign(__assign({}, prev), (_a = {}, _a[section.id] = nextVal, _a));
168
+ onChange === null || onChange === void 0 ? void 0 : onChange(next);
169
+ return next;
170
+ });
171
+ } }, values.map(function (v) { return (react_1.default.createElement("option", { key: "max-".concat(v), value: v },
172
+ v,
173
+ range.unit ? " ".concat(range.unit) : "")); }))))));
174
+ })()) : (react_1.default.createElement(react_1.default.Fragment, null,
175
+ section.id === "rating" ? (react_1.default.createElement(react_2.VStack, { align: "start", spacing: 1, w: "full" }, [4, 3, 2, 1].map(function (r) { return (react_1.default.createElement(react_2.Flex, { key: "rating-".concat(r), align: "center", justify: "space-between", w: "full", p: 1, borderRadius: "md", cursor: "pointer", _hover: { bg: theme.colors.gray[50] }, onClick: function () {
176
+ setInternalSelected(function (prev) {
177
+ var _a;
178
+ var next = __assign(__assign({}, prev), (_a = {}, _a[section.id] = String(r), _a));
179
+ onChange === null || onChange === void 0 ? void 0 : onChange(next);
180
+ return next;
181
+ });
182
+ } },
183
+ react_1.default.createElement(react_2.HStack, { spacing: 2, align: "center" },
184
+ react_1.default.createElement(react_2.HStack, { spacing: 1 }, Array.from({ length: 5 }, function (_, i) { return (react_1.default.createElement(react_2.Box, { key: "star-".concat(r, "-").concat(i) },
185
+ react_1.default.createElement(lucide_react_1.Star, { size: 16, color: theme.colors.orange[500], fill: i < r ? theme.colors.orange[500] : "none" }))); })),
186
+ react_1.default.createElement(react_2.Text, { fontSize: "sm", color: theme.colors.gray[700] }, "& Up")),
187
+ String(internalSelected[section.id] || "") === String(r) && (react_1.default.createElement(react_2.Badge, { fontSize: "xs", colorScheme: "red", borderRadius: "full", px: 2 }, "Selected")))); }))) : null,
188
+ section.searchable && (react_1.default.createElement(react_2.Input, { size: "sm", placeholder: "Search ".concat(section.label, "..."), borderRadius: "md", bg: theme.colors.gray[50], border: "1px solid", borderColor: theme.colors.gray[200], _focus: { borderColor: theme.colors.red[400], boxShadow: "none" }, value: searchTerms[section.id] || "", onChange: function (e) {
189
+ var v = e.target.value;
190
+ setSearchTerms(function (prev) {
191
+ var _a;
192
+ return (__assign(__assign({}, prev), (_a = {}, _a[section.id] = v, _a)));
193
+ });
194
+ if (v)
195
+ setExpanded(function (prev) {
196
+ var _a;
197
+ return (__assign(__assign({}, prev), (_a = {}, _a[section.id] = true, _a)));
198
+ });
199
+ } })),
200
+ section.id !== "rating" && (((section.type === "radio") || section.radio) ? (react_1.default.createElement(react_2.RadioGroup, { w: "full", value: internalSelected[section.id] || "", onChange: function (val) {
201
+ setInternalSelected(function (prev) {
202
+ var _a;
203
+ var next = __assign(__assign({}, prev), (_a = {}, _a[section.id] = val, _a));
204
+ onChange === null || onChange === void 0 ? void 0 : onChange(next);
205
+ return next;
206
+ });
207
+ } },
208
+ react_1.default.createElement(react_2.VStack, { align: "start", spacing: 3, w: "full" }, ((expanded[section.id] ? (section.options || []) : (section.options || []).slice(0, maxVisible))
209
+ .filter(function (opt) { return !section.searchable || !(searchTerms[section.id]) || opt.label.toLowerCase().includes((searchTerms[section.id] || "").toLowerCase()); })).map(function (opt) { return (react_1.default.createElement(react_2.Radio, { key: opt.id, value: opt.id, size: "md", colorScheme: "red" },
210
+ react_1.default.createElement(react_2.Text, { fontSize: "sm", color: theme.colors.gray[700] }, opt.label))); })))) : (((expanded[section.id] ? (section.options || []) : (section.options || []).slice(0, maxVisible))
211
+ .filter(function (opt) { return !section.searchable || !(searchTerms[section.id]) || opt.label.toLowerCase().includes((searchTerms[section.id] || "").toLowerCase()); })).map(function (opt) { return (react_1.default.createElement(react_2.Flex, { key: opt.id, align: "center", justify: "space-between", w: "full", _hover: { bg: theme.colors.gray[50], borderRadius: "md" }, p: 1 },
212
+ react_1.default.createElement(react_2.Flex, { align: "center", gap: 3 },
213
+ react_1.default.createElement(Checkbox_1.default, { isChecked: Array.isArray(internalSelected[section.id]) && (internalSelected[section.id] || []).includes(opt.id), onChange: function (e) {
214
+ toggleOption(section.id, opt.id, e.target.checked);
215
+ }, size: "sm", color: "red" }),
216
+ react_1.default.createElement(react_2.Text, { fontSize: "sm", color: theme.colors.gray[700], cursor: "pointer", onClick: function () {
217
+ var isChecked = Array.isArray(internalSelected[section.id]) && (internalSelected[section.id] || []).includes(opt.id);
218
+ toggleOption(section.id, opt.id, !isChecked);
219
+ } }, opt.label)),
220
+ typeof opt.count === "number" && (react_1.default.createElement(react_2.Badge, { fontSize: "xs", colorScheme: "gray", borderRadius: "full", px: 2 }, opt.count)))); }))),
221
+ (section.options && section.options.length > maxVisible) && (react_1.default.createElement(react_2.Text, { fontSize: "sm", fontWeight: "medium", color: theme.colors.blue[600], cursor: "pointer", _hover: { textDecoration: "underline" }, onClick: function () { return setExpanded(function (prev) {
222
+ var _a;
223
+ return (__assign(__assign({}, prev), (_a = {}, _a[section.id] = !prev[section.id], _a)));
224
+ }); } }, expanded[section.id] ? "Show less" : "+ ".concat((section.options.length - maxVisible), " more"))))))),
225
+ itemProps: {
226
+ borderTop: "none",
227
+ borderBottom: "1px solid ".concat(theme.colors.gray[100]),
228
+ _last: { borderBottom: "none" }
229
+ },
230
+ buttonProps: {
231
+ _hover: { bg: theme.colors.gray[50] }
232
+ },
233
+ panelProps: {},
234
+ customStyles: {
235
+ buttonStyle: variant === "minimal"
236
+ ? {
237
+ justifyContent: "space-between",
238
+ padding: "8px 0",
239
+ background: "transparent",
240
+ }
241
+ : {
242
+ justifyContent: "space-between",
243
+ padding: headerPadding,
244
+ background: theme.colors.gray[50],
245
+ borderRadius: 8,
246
+ border: "1px solid ".concat(theme.colors.gray[200]),
247
+ marginBottom: 6,
248
+ },
249
+ panelStyle: variant === "minimal"
250
+ ? {
251
+ padding: "4px 0 8px 0",
252
+ }
253
+ : {
254
+ padding: panelPadding,
255
+ background: theme.colors.white || "#fff",
256
+ borderRadius: 8,
257
+ },
258
+ },
259
+ }); });
260
+ return (react_1.default.createElement(react_2.Box, { w: width, bg: variant === "minimal" ? theme.colors.white || "#fff" : theme.colors.gray[50], p: containerPadding !== undefined ? containerPadding : (variant === "minimal" ? 3 : 2), borderRadius: variant === "minimal" ? "lg" : "none", boxShadow: variant === "minimal" ? "sm" : "none", border: variant === "minimal" ? "1px solid ".concat(theme.colors.gray[200]) : "none", h: "fit-content" },
261
+ react_1.default.createElement(react_2.Flex, { className: "filters-header", align: "center", justify: "space-between", mb: 2, borderBottom: "2px solid", borderColor: theme.colors.gray[100] },
262
+ react_1.default.createElement(react_2.Text, { fontSize: "lg", fontWeight: "bold", color: theme.colors.gray[800] }, "Filters"),
263
+ activeCount > 0 && (react_1.default.createElement(react_2.Button, { size: "xs", variant: "outline", leftIcon: react_1.default.createElement(lucide_react_1.X, { size: 12 }), onClick: clearAll, "aria-label": "Clear All", className: "clear-all-btn", colorScheme: "red" }, "Clear All"))),
264
+ react_1.default.createElement(Accordion_1.default, { allowMultiple: true, defaultIndex: sidebarOptions.map(function (_, i) { return i; }), items: items })));
265
+ };
266
+ exports.default = FilterSidebar;
@@ -84,8 +84,8 @@ var ActiveFilters = function (_a) {
84
84
  bg: ((_m = (_l = theme.colors) === null || _l === void 0 ? void 0 : _l.blue) === null || _m === void 0 ? void 0 : _m[100]) || ((_p = (_o = theme.colors) === null || _o === void 0 ? void 0 : _o.primary) === null || _p === void 0 ? void 0 : _p[100]),
85
85
  }, minW: "auto", h: "auto", p: 0.5, flexShrink: 0 })));
86
86
  }),
87
- activeFilters.length > 1 && (react_1.default.createElement(react_2.Text, { fontSize: "sm", color: ((_g = (_f = theme.colors) === null || _f === void 0 ? void 0 : _f.blue) === null || _g === void 0 ? void 0 : _g[600]) || ((_j = (_h = theme.colors) === null || _h === void 0 ? void 0 : _h.primary) === null || _j === void 0 ? void 0 : _j[600]), cursor: "pointer", fontWeight: 500, onClick: handleClearAll, _hover: {
87
+ activeFilters.length > 1 && (react_1.default.createElement(react_2.Text, { as: "p", className: "clear-all-text", "aria-label": "Clear All", fontSize: "sm", color: ((_g = (_f = theme.colors) === null || _f === void 0 ? void 0 : _f.blue) === null || _g === void 0 ? void 0 : _g[600]) || ((_j = (_h = theme.colors) === null || _h === void 0 ? void 0 : _h.primary) === null || _j === void 0 ? void 0 : _j[600]), cursor: "pointer", fontWeight: 500, onClick: handleClearAll, _hover: {
88
88
  textDecoration: "underline",
89
- }, flexShrink: 0, whiteSpace: "nowrap" }, "Clear all")))));
89
+ }, flexShrink: 0, whiteSpace: "nowrap" }, "Clear All")))));
90
90
  };
91
91
  exports.default = ActiveFilters;
package/dist/index.d.ts CHANGED
@@ -59,5 +59,6 @@ import PaymentCard from "./Components/Card/PaymentCard/PaymentCard";
59
59
  import ApexLineChart from "./Components/Apexcharts/ApexLineChart/ApexLineChart";
60
60
  import Notification from "./Components/Notification/Notification";
61
61
  import DatePicker from "./Components/DatePicker/ThemeDatePicker";
62
- export { Accordian, AlertDialog, ApexBarChart, ApexPieChart, ApexPolarChart, ApexLineChart, Breadcrumbs, Button, ButtonGroupIcon, Card, Checkbox, ContactForm, DatePicker, Drawer, DrawerHeader, DrawerBody, DrawerFooter, Dropdown, Editor, FileUpload, FileUploader, FormWrapper, Header, HeaderActions, InputTextArea, InputSwitch, KanbanBoard, Loading, Modal, ModalHeader, ModalBody, ModalFooter, NavigationBar, Notification, NoteTextArea, MultiSelect, NumberInput, PaymentCard, PhoneNumberInput, PinInput, ProductCard, ProductDetails, ProfileCard, ProfileCardHeader, ProfileCardBody, ProfileCardFooter, ProfilePhotoViewer, ProgressBar, RadioButton, RadioButtonGroup, Reorder, Search, Select, SearchSelect, SelectSearch, SideBar, Slider, Skeletons, Switch, Table, TableToggle, Tag, TextInput, Timeline, Toaster, ToolTip, useToaster, VerifyEmailOtp, useCustomTheme, ThemesList, debounce, };
62
+ import FilterSidebar from "./Components/FilterSidebar/FilterSidebar";
63
+ export { Accordian, AlertDialog, ApexBarChart, ApexPieChart, ApexPolarChart, ApexLineChart, Breadcrumbs, Button, ButtonGroupIcon, Card, Checkbox, ContactForm, DatePicker, Drawer, DrawerHeader, DrawerBody, DrawerFooter, Dropdown, Editor, FileUpload, FileUploader, FilterSidebar, FormWrapper, Header, HeaderActions, InputTextArea, InputSwitch, KanbanBoard, Loading, Modal, ModalHeader, ModalBody, ModalFooter, NavigationBar, Notification, NoteTextArea, MultiSelect, NumberInput, PaymentCard, PhoneNumberInput, PinInput, ProductCard, ProductDetails, ProfileCard, ProfileCardHeader, ProfileCardBody, ProfileCardFooter, ProfilePhotoViewer, ProgressBar, RadioButton, RadioButtonGroup, Reorder, Search, Select, SearchSelect, SelectSearch, SideBar, Slider, Skeletons, Switch, Table, TableToggle, Tag, TextInput, Timeline, Toaster, ToolTip, useToaster, VerifyEmailOtp, useCustomTheme, ThemesList, debounce, };
63
64
  export default withTheme;
package/dist/index.js CHANGED
@@ -27,8 +27,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  return (mod && mod.__esModule) ? mod : { "default": mod };
28
28
  };
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.RadioButtonGroup = exports.RadioButton = exports.ProgressBar = exports.ProfilePhotoViewer = exports.ProfileCardFooter = exports.ProfileCardBody = exports.ProfileCardHeader = exports.ProfileCard = exports.ProductDetails = exports.ProductCard = exports.PinInput = exports.PhoneNumberInput = exports.PaymentCard = exports.NumberInput = exports.MultiSelect = exports.NoteTextArea = exports.Notification = exports.NavigationBar = exports.ModalFooter = exports.ModalBody = exports.ModalHeader = exports.Modal = exports.Loading = exports.KanbanBoard = exports.InputSwitch = exports.InputTextArea = exports.HeaderActions = exports.Header = exports.FormWrapper = exports.FileUploader = exports.FileUpload = exports.Editor = exports.Dropdown = exports.DrawerFooter = exports.DrawerBody = exports.DrawerHeader = exports.Drawer = exports.DatePicker = exports.ContactForm = exports.Checkbox = exports.Card = exports.ButtonGroupIcon = exports.Button = exports.Breadcrumbs = exports.ApexLineChart = exports.ApexPolarChart = exports.ApexPieChart = exports.ApexBarChart = exports.AlertDialog = exports.Accordian = void 0;
31
- exports.debounce = exports.ThemesList = exports.useCustomTheme = exports.VerifyEmailOtp = exports.useToaster = exports.ToolTip = exports.Toaster = exports.Timeline = exports.TextInput = exports.Tag = exports.TableToggle = exports.Table = exports.Switch = exports.Skeletons = exports.Slider = exports.SideBar = exports.SelectSearch = exports.SearchSelect = exports.Select = exports.Search = exports.Reorder = void 0;
30
+ exports.RadioButton = exports.ProgressBar = exports.ProfilePhotoViewer = exports.ProfileCardFooter = exports.ProfileCardBody = exports.ProfileCardHeader = exports.ProfileCard = exports.ProductDetails = exports.ProductCard = exports.PinInput = exports.PhoneNumberInput = exports.PaymentCard = exports.NumberInput = exports.MultiSelect = exports.NoteTextArea = exports.Notification = exports.NavigationBar = exports.ModalFooter = exports.ModalBody = exports.ModalHeader = exports.Modal = exports.Loading = exports.KanbanBoard = exports.InputSwitch = exports.InputTextArea = exports.HeaderActions = exports.Header = exports.FormWrapper = exports.FilterSidebar = exports.FileUploader = exports.FileUpload = exports.Editor = exports.Dropdown = exports.DrawerFooter = exports.DrawerBody = exports.DrawerHeader = exports.Drawer = exports.DatePicker = exports.ContactForm = exports.Checkbox = exports.Card = exports.ButtonGroupIcon = exports.Button = exports.Breadcrumbs = exports.ApexLineChart = exports.ApexPolarChart = exports.ApexPieChart = exports.ApexBarChart = exports.AlertDialog = exports.Accordian = void 0;
31
+ exports.debounce = exports.ThemesList = exports.useCustomTheme = exports.VerifyEmailOtp = exports.useToaster = exports.ToolTip = exports.Toaster = exports.Timeline = exports.TextInput = exports.Tag = exports.TableToggle = exports.Table = exports.Switch = exports.Skeletons = exports.Slider = exports.SideBar = exports.SelectSearch = exports.SearchSelect = exports.Select = exports.Search = exports.Reorder = exports.RadioButtonGroup = void 0;
32
32
  var Accordion_1 = __importDefault(require("./Components/Accordion/Accordion"));
33
33
  exports.Accordian = Accordion_1.default;
34
34
  var AlertDialog_1 = __importDefault(require("./Components/AlertDialog/AlertDialog"));
@@ -162,4 +162,6 @@ var Notification_1 = __importDefault(require("./Components/Notification/Notifica
162
162
  exports.Notification = Notification_1.default;
163
163
  var ThemeDatePicker_1 = __importDefault(require("./Components/DatePicker/ThemeDatePicker"));
164
164
  exports.DatePicker = ThemeDatePicker_1.default;
165
+ var FilterSidebar_1 = __importDefault(require("./Components/FilterSidebar/FilterSidebar"));
166
+ exports.FilterSidebar = FilterSidebar_1.default;
165
167
  exports.default = withTheme_1.default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixelize-design-library",
3
- "version": "2.2.95",
3
+ "version": "2.2.96",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",