@kopexa/filter 0.0.3 → 0.0.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.
@@ -17,7 +17,7 @@ var DEFAULT_OPERATORS = {
17
17
  multiselect: ["equals", "not_equals", "is_empty", "is_not_empty"],
18
18
  date: ["equals", "not_equals", "gt", "lt", "gte", "lte", "between"],
19
19
  daterange: ["between"],
20
- boolean: ["equals"]
20
+ boolean: ["equals", "not_equals", "is_empty", "is_not_empty"]
21
21
  };
22
22
  function getDefaultOperator(type) {
23
23
  switch (type) {
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-I3Z2T4N2.mjs";
8
8
  import {
9
9
  getDefaultOperator
10
- } from "./chunk-7QP7FRID.mjs";
10
+ } from "./chunk-PHESMHTT.mjs";
11
11
 
12
12
  // src/filter.tsx
13
13
  import { DropdownMenu } from "@kopexa/dropdown-menu";
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  FilterValueEditor
4
- } from "./chunk-63P4ITVP.mjs";
4
+ } from "./chunk-WUUOSJHW.mjs";
5
5
  import {
6
6
  messages
7
7
  } from "./chunk-URDCG5NI.mjs";
@@ -14,6 +14,7 @@ import { useSafeIntl } from "@kopexa/i18n";
14
14
  import { CloseIcon } from "@kopexa/icons";
15
15
  import { Popover } from "@kopexa/popover";
16
16
  import { cn } from "@kopexa/shared-utils";
17
+ import { Switch } from "@kopexa/switch";
17
18
  import { jsx, jsxs } from "react/jsx-runtime";
18
19
  function FilterActive(props) {
19
20
  const { showClearAll = true, className, ...rest } = props;
@@ -45,39 +46,68 @@ function FilterActive(props) {
45
46
  }
46
47
  FilterActive.displayName = "FilterActive";
47
48
  function FilterField({ filter }) {
48
- const { fields, styles, removeFilter, editingFilterId, setEditingFilterId } = useFilterContext();
49
+ const {
50
+ fields,
51
+ styles,
52
+ removeFilter,
53
+ editingFilterId,
54
+ setEditingFilterId,
55
+ updateFilter
56
+ } = useFilterContext();
49
57
  const t = useSafeIntl();
50
58
  const field = fields.get(filter.fieldId);
51
59
  if (!field) return null;
52
60
  const isEditing = editingFilterId === filter.id;
53
61
  const operatorKey = `op_${filter.operator}`;
54
62
  const operatorLabel = messages[operatorKey] ? t.formatMessage(messages[operatorKey]) : filter.operator;
55
- const valueDisplay = getValueDisplay(filter, field);
63
+ const isBooleanWithValue = field.type === "boolean" && filter.operator !== "is_empty" && filter.operator !== "is_not_empty";
64
+ const valueDisplay = isBooleanWithValue ? null : getValueDisplay(filter, field);
56
65
  return /* @__PURE__ */ jsxs(
57
66
  Popover.Root,
58
67
  {
59
68
  open: isEditing,
60
69
  onOpenChange: (open) => setEditingFilterId(open ? filter.id : null),
61
70
  children: [
62
- /* @__PURE__ */ jsxs(Popover.Trigger, { "data-slot": "filter-field", className: styles.field(), children: [
63
- field.icon && /* @__PURE__ */ jsx("span", { className: styles.menuItemIcon(), children: field.icon }),
64
- /* @__PURE__ */ jsx("span", { className: styles.fieldLabel(), children: field.label }),
65
- /* @__PURE__ */ jsx("span", { className: styles.fieldOperator(), children: operatorLabel }),
66
- valueDisplay && /* @__PURE__ */ jsx("span", { className: styles.fieldValue(), children: valueDisplay }),
67
- /* @__PURE__ */ jsx(
68
- "button",
69
- {
70
- type: "button",
71
- className: styles.fieldRemove(),
72
- onClick: (e) => {
73
- e.stopPropagation();
74
- removeFilter(filter.id);
75
- },
76
- "aria-label": "Remove filter",
77
- children: /* @__PURE__ */ jsx(CloseIcon, { className: "size-3" })
78
- }
79
- )
80
- ] }),
71
+ /* @__PURE__ */ jsxs(
72
+ Popover.Trigger,
73
+ {
74
+ "data-slot": "filter-field",
75
+ className: styles.field(),
76
+ render: /* @__PURE__ */ jsx("div", {}),
77
+ nativeButton: false,
78
+ children: [
79
+ field.icon && /* @__PURE__ */ jsx("span", { className: styles.menuItemIcon(), children: field.icon }),
80
+ /* @__PURE__ */ jsx("span", { className: styles.fieldLabel(), children: field.label }),
81
+ /* @__PURE__ */ jsx("span", { className: styles.fieldOperator(), children: operatorLabel }),
82
+ isBooleanWithValue && /* @__PURE__ */ jsx(
83
+ Switch,
84
+ {
85
+ size: "sm",
86
+ checked: Boolean(filter.value),
87
+ onCheckedChange: (checked) => {
88
+ updateFilter(filter.id, { value: checked });
89
+ },
90
+ onClick: (e) => e.stopPropagation(),
91
+ "aria-label": field.label
92
+ }
93
+ ),
94
+ valueDisplay && /* @__PURE__ */ jsx("span", { className: styles.fieldValue(), children: valueDisplay }),
95
+ /* @__PURE__ */ jsx(
96
+ "button",
97
+ {
98
+ type: "button",
99
+ className: styles.fieldRemove(),
100
+ onClick: (e) => {
101
+ e.stopPropagation();
102
+ removeFilter(filter.id);
103
+ },
104
+ "aria-label": "Remove filter",
105
+ children: /* @__PURE__ */ jsx(CloseIcon, { className: "size-3" })
106
+ }
107
+ )
108
+ ]
109
+ }
110
+ ),
81
111
  /* @__PURE__ */ jsx(
82
112
  Popover.Content,
83
113
  {
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-I3Z2T4N2.mjs";
8
8
  import {
9
9
  DEFAULT_OPERATORS
10
- } from "./chunk-7QP7FRID.mjs";
10
+ } from "./chunk-PHESMHTT.mjs";
11
11
 
12
12
  // src/filter-value-editor.tsx
13
13
  import { Checkbox } from "@kopexa/checkbox";
@@ -29,6 +29,7 @@ var import_i18n3 = require("@kopexa/i18n");
29
29
  var import_icons = require("@kopexa/icons");
30
30
  var import_popover = require("@kopexa/popover");
31
31
  var import_shared_utils = require("@kopexa/shared-utils");
32
+ var import_switch = require("@kopexa/switch");
32
33
 
33
34
  // src/filter-context.tsx
34
35
  var import_react_utils = require("@kopexa/react-utils");
@@ -61,7 +62,7 @@ var DEFAULT_OPERATORS = {
61
62
  multiselect: ["equals", "not_equals", "is_empty", "is_not_empty"],
62
63
  date: ["equals", "not_equals", "gt", "lt", "gte", "lte", "between"],
63
64
  daterange: ["between"],
64
- boolean: ["equals"]
65
+ boolean: ["equals", "not_equals", "is_empty", "is_not_empty"]
65
66
  };
66
67
 
67
68
  // src/messages.ts
@@ -447,39 +448,68 @@ function FilterActive(props) {
447
448
  }
448
449
  FilterActive.displayName = "FilterActive";
449
450
  function FilterField({ filter }) {
450
- const { fields, styles, removeFilter, editingFilterId, setEditingFilterId } = useFilterContext();
451
+ const {
452
+ fields,
453
+ styles,
454
+ removeFilter,
455
+ editingFilterId,
456
+ setEditingFilterId,
457
+ updateFilter
458
+ } = useFilterContext();
451
459
  const t = (0, import_i18n3.useSafeIntl)();
452
460
  const field = fields.get(filter.fieldId);
453
461
  if (!field) return null;
454
462
  const isEditing = editingFilterId === filter.id;
455
463
  const operatorKey = `op_${filter.operator}`;
456
464
  const operatorLabel = messages[operatorKey] ? t.formatMessage(messages[operatorKey]) : filter.operator;
457
- const valueDisplay = getValueDisplay(filter, field);
465
+ const isBooleanWithValue = field.type === "boolean" && filter.operator !== "is_empty" && filter.operator !== "is_not_empty";
466
+ const valueDisplay = isBooleanWithValue ? null : getValueDisplay(filter, field);
458
467
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
459
468
  import_popover.Popover.Root,
460
469
  {
461
470
  open: isEditing,
462
471
  onOpenChange: (open) => setEditingFilterId(open ? filter.id : null),
463
472
  children: [
464
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_popover.Popover.Trigger, { "data-slot": "filter-field", className: styles.field(), children: [
465
- field.icon && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: styles.menuItemIcon(), children: field.icon }),
466
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: styles.fieldLabel(), children: field.label }),
467
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: styles.fieldOperator(), children: operatorLabel }),
468
- valueDisplay && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: styles.fieldValue(), children: valueDisplay }),
469
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
470
- "button",
471
- {
472
- type: "button",
473
- className: styles.fieldRemove(),
474
- onClick: (e) => {
475
- e.stopPropagation();
476
- removeFilter(filter.id);
477
- },
478
- "aria-label": "Remove filter",
479
- children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_icons.CloseIcon, { className: "size-3" })
480
- }
481
- )
482
- ] }),
473
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
474
+ import_popover.Popover.Trigger,
475
+ {
476
+ "data-slot": "filter-field",
477
+ className: styles.field(),
478
+ render: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", {}),
479
+ nativeButton: false,
480
+ children: [
481
+ field.icon && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: styles.menuItemIcon(), children: field.icon }),
482
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: styles.fieldLabel(), children: field.label }),
483
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: styles.fieldOperator(), children: operatorLabel }),
484
+ isBooleanWithValue && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
485
+ import_switch.Switch,
486
+ {
487
+ size: "sm",
488
+ checked: Boolean(filter.value),
489
+ onCheckedChange: (checked) => {
490
+ updateFilter(filter.id, { value: checked });
491
+ },
492
+ onClick: (e) => e.stopPropagation(),
493
+ "aria-label": field.label
494
+ }
495
+ ),
496
+ valueDisplay && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: styles.fieldValue(), children: valueDisplay }),
497
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
498
+ "button",
499
+ {
500
+ type: "button",
501
+ className: styles.fieldRemove(),
502
+ onClick: (e) => {
503
+ e.stopPropagation();
504
+ removeFilter(filter.id);
505
+ },
506
+ "aria-label": "Remove filter",
507
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_icons.CloseIcon, { className: "size-3" })
508
+ }
509
+ )
510
+ ]
511
+ }
512
+ ),
483
513
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
484
514
  import_popover.Popover.Content,
485
515
  {
@@ -2,11 +2,11 @@
2
2
  "use client";
3
3
  import {
4
4
  FilterActive
5
- } from "./chunk-7KY2PDNL.mjs";
6
- import "./chunk-63P4ITVP.mjs";
5
+ } from "./chunk-WCKTCW7Y.mjs";
6
+ import "./chunk-WUUOSJHW.mjs";
7
7
  import "./chunk-URDCG5NI.mjs";
8
8
  import "./chunk-I3Z2T4N2.mjs";
9
- import "./chunk-7QP7FRID.mjs";
9
+ import "./chunk-PHESMHTT.mjs";
10
10
  export {
11
11
  FilterActive
12
12
  };
@@ -42,7 +42,7 @@ var DEFAULT_OPERATORS = {
42
42
  multiselect: ["equals", "not_equals", "is_empty", "is_not_empty"],
43
43
  date: ["equals", "not_equals", "gt", "lt", "gte", "lte", "between"],
44
44
  daterange: ["between"],
45
- boolean: ["equals"]
45
+ boolean: ["equals", "not_equals", "is_empty", "is_not_empty"]
46
46
  };
47
47
  function getDefaultOperator(type) {
48
48
  switch (type) {
@@ -3,7 +3,7 @@ import {
3
3
  DEFAULT_OPERATORS,
4
4
  generateFilterId,
5
5
  getDefaultOperator
6
- } from "./chunk-7QP7FRID.mjs";
6
+ } from "./chunk-PHESMHTT.mjs";
7
7
  export {
8
8
  DEFAULT_OPERATORS,
9
9
  generateFilterId,
@@ -55,7 +55,7 @@ var DEFAULT_OPERATORS = {
55
55
  multiselect: ["equals", "not_equals", "is_empty", "is_not_empty"],
56
56
  date: ["equals", "not_equals", "gt", "lt", "gte", "lte", "between"],
57
57
  daterange: ["between"],
58
- boolean: ["equals"]
58
+ boolean: ["equals", "not_equals", "is_empty", "is_not_empty"]
59
59
  };
60
60
 
61
61
  // src/messages.ts
@@ -2,10 +2,10 @@
2
2
  "use client";
3
3
  import {
4
4
  FilterValueEditor
5
- } from "./chunk-63P4ITVP.mjs";
5
+ } from "./chunk-WUUOSJHW.mjs";
6
6
  import "./chunk-URDCG5NI.mjs";
7
7
  import "./chunk-I3Z2T4N2.mjs";
8
- import "./chunk-7QP7FRID.mjs";
8
+ import "./chunk-PHESMHTT.mjs";
9
9
  export {
10
10
  FilterValueEditor
11
11
  };
package/dist/filter.mjs CHANGED
@@ -2,10 +2,10 @@
2
2
  "use client";
3
3
  import {
4
4
  Filter
5
- } from "./chunk-PTJ7HZPA.mjs";
5
+ } from "./chunk-SH7DBK54.mjs";
6
6
  import "./chunk-3WNAREG6.mjs";
7
7
  import "./chunk-I3Z2T4N2.mjs";
8
- import "./chunk-7QP7FRID.mjs";
8
+ import "./chunk-PHESMHTT.mjs";
9
9
  export {
10
10
  Filter
11
11
  };
package/dist/index.js CHANGED
@@ -99,7 +99,7 @@ var DEFAULT_OPERATORS = {
99
99
  multiselect: ["equals", "not_equals", "is_empty", "is_not_empty"],
100
100
  date: ["equals", "not_equals", "gt", "lt", "gte", "lte", "between"],
101
101
  daterange: ["between"],
102
- boolean: ["equals"]
102
+ boolean: ["equals", "not_equals", "is_empty", "is_not_empty"]
103
103
  };
104
104
  function getDefaultOperator(type) {
105
105
  switch (type) {
@@ -270,6 +270,7 @@ var import_i18n3 = require("@kopexa/i18n");
270
270
  var import_icons = require("@kopexa/icons");
271
271
  var import_popover = require("@kopexa/popover");
272
272
  var import_shared_utils2 = require("@kopexa/shared-utils");
273
+ var import_switch = require("@kopexa/switch");
273
274
 
274
275
  // src/filter-value-editor.tsx
275
276
  var import_checkbox = require("@kopexa/checkbox");
@@ -660,39 +661,68 @@ function FilterActive(props) {
660
661
  }
661
662
  FilterActive.displayName = "FilterActive";
662
663
  function FilterField({ filter }) {
663
- const { fields, styles, removeFilter, editingFilterId, setEditingFilterId } = useFilterContext();
664
+ const {
665
+ fields,
666
+ styles,
667
+ removeFilter,
668
+ editingFilterId,
669
+ setEditingFilterId,
670
+ updateFilter
671
+ } = useFilterContext();
664
672
  const t = (0, import_i18n3.useSafeIntl)();
665
673
  const field = fields.get(filter.fieldId);
666
674
  if (!field) return null;
667
675
  const isEditing = editingFilterId === filter.id;
668
676
  const operatorKey = `op_${filter.operator}`;
669
677
  const operatorLabel = messages[operatorKey] ? t.formatMessage(messages[operatorKey]) : filter.operator;
670
- const valueDisplay = getValueDisplay(filter, field);
678
+ const isBooleanWithValue = field.type === "boolean" && filter.operator !== "is_empty" && filter.operator !== "is_not_empty";
679
+ const valueDisplay = isBooleanWithValue ? null : getValueDisplay(filter, field);
671
680
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
672
681
  import_popover.Popover.Root,
673
682
  {
674
683
  open: isEditing,
675
684
  onOpenChange: (open) => setEditingFilterId(open ? filter.id : null),
676
685
  children: [
677
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_popover.Popover.Trigger, { "data-slot": "filter-field", className: styles.field(), children: [
678
- field.icon && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: styles.menuItemIcon(), children: field.icon }),
679
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: styles.fieldLabel(), children: field.label }),
680
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: styles.fieldOperator(), children: operatorLabel }),
681
- valueDisplay && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: styles.fieldValue(), children: valueDisplay }),
682
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
683
- "button",
684
- {
685
- type: "button",
686
- className: styles.fieldRemove(),
687
- onClick: (e) => {
688
- e.stopPropagation();
689
- removeFilter(filter.id);
690
- },
691
- "aria-label": "Remove filter",
692
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icons.CloseIcon, { className: "size-3" })
693
- }
694
- )
695
- ] }),
686
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
687
+ import_popover.Popover.Trigger,
688
+ {
689
+ "data-slot": "filter-field",
690
+ className: styles.field(),
691
+ render: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", {}),
692
+ nativeButton: false,
693
+ children: [
694
+ field.icon && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: styles.menuItemIcon(), children: field.icon }),
695
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: styles.fieldLabel(), children: field.label }),
696
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: styles.fieldOperator(), children: operatorLabel }),
697
+ isBooleanWithValue && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
698
+ import_switch.Switch,
699
+ {
700
+ size: "sm",
701
+ checked: Boolean(filter.value),
702
+ onCheckedChange: (checked) => {
703
+ updateFilter(filter.id, { value: checked });
704
+ },
705
+ onClick: (e) => e.stopPropagation(),
706
+ "aria-label": field.label
707
+ }
708
+ ),
709
+ valueDisplay && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: styles.fieldValue(), children: valueDisplay }),
710
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
711
+ "button",
712
+ {
713
+ type: "button",
714
+ className: styles.fieldRemove(),
715
+ onClick: (e) => {
716
+ e.stopPropagation();
717
+ removeFilter(filter.id);
718
+ },
719
+ "aria-label": "Remove filter",
720
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icons.CloseIcon, { className: "size-3" })
721
+ }
722
+ )
723
+ ]
724
+ }
725
+ ),
696
726
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
697
727
  import_popover.Popover.Content,
698
728
  {
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  FilterActive
4
- } from "./chunk-7KY2PDNL.mjs";
4
+ } from "./chunk-WCKTCW7Y.mjs";
5
5
  import {
6
6
  FilterGroup,
7
7
  FilterItem,
@@ -13,18 +13,18 @@ import {
13
13
  } from "./chunk-EF4VI36D.mjs";
14
14
  import {
15
15
  FilterValueEditor
16
- } from "./chunk-63P4ITVP.mjs";
16
+ } from "./chunk-WUUOSJHW.mjs";
17
17
  import {
18
18
  messages
19
19
  } from "./chunk-URDCG5NI.mjs";
20
20
  import {
21
21
  Filter
22
- } from "./chunk-PTJ7HZPA.mjs";
22
+ } from "./chunk-SH7DBK54.mjs";
23
23
  import "./chunk-3WNAREG6.mjs";
24
24
  import {
25
25
  useFilterContext
26
26
  } from "./chunk-I3Z2T4N2.mjs";
27
- import "./chunk-7QP7FRID.mjs";
27
+ import "./chunk-PHESMHTT.mjs";
28
28
  export {
29
29
  Filter,
30
30
  FilterActive,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kopexa/filter",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "description": "A filter component for building complex filtering interfaces",
5
5
  "keywords": [
6
6
  "filter",
@@ -30,22 +30,23 @@
30
30
  "peerDependencies": {
31
31
  "react": ">=19.0.0-rc.0",
32
32
  "react-dom": ">=19.0.0-rc.0",
33
- "@kopexa/theme": "17.7.0"
33
+ "@kopexa/theme": "17.8.1"
34
34
  },
35
35
  "dependencies": {
36
- "@kopexa/react-utils": "17.0.13",
37
- "@kopexa/shared-utils": "17.0.13",
38
- "@kopexa/use-controllable-state": "17.0.13",
39
- "@kopexa/i18n": "17.2.0",
40
- "@kopexa/icons": "17.2.1",
41
- "@kopexa/input": "17.0.13",
42
- "@kopexa/select": "17.0.13",
43
- "@kopexa/calendar": "17.0.13",
44
- "@kopexa/button": "17.0.13",
45
- "@kopexa/popover": "17.0.13",
46
- "@kopexa/dropdown-menu": "17.0.13",
47
- "@kopexa/combobox": "17.1.2",
48
- "@kopexa/checkbox": "17.0.13"
36
+ "@kopexa/shared-utils": "17.0.15",
37
+ "@kopexa/react-utils": "17.0.15",
38
+ "@kopexa/use-controllable-state": "17.0.15",
39
+ "@kopexa/icons": "17.2.3",
40
+ "@kopexa/i18n": "17.3.1",
41
+ "@kopexa/button": "17.0.15",
42
+ "@kopexa/select": "17.0.15",
43
+ "@kopexa/calendar": "17.0.15",
44
+ "@kopexa/input": "17.0.15",
45
+ "@kopexa/combobox": "17.1.4",
46
+ "@kopexa/switch": "17.0.15",
47
+ "@kopexa/popover": "17.0.15",
48
+ "@kopexa/checkbox": "17.0.15",
49
+ "@kopexa/dropdown-menu": "17.0.15"
49
50
  },
50
51
  "clean-package": "../../../clean-package.config.json",
51
52
  "module": "dist/index.mjs",