@drivenets/design-system 0.0.5 → 0.1.0

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.
Files changed (214) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/components/ds-alert-banner/ds-alert-banner.d.ts +5 -5
  3. package/dist/components/ds-alert-banner/ds-alert-banner.d.ts.map +1 -1
  4. package/dist/components/ds-button/ds-button.d.cts +2 -2
  5. package/dist/components/ds-button/ds-button.d.ts +2 -2
  6. package/dist/components/ds-button/versions/ds-button-new/ds-button-new.module.cjs +18 -18
  7. package/dist/components/ds-button/versions/ds-button-new/ds-button-new.module.js +18 -18
  8. package/dist/components/ds-button/versions/ds-button-new/ds-button-new.module.js.map +1 -1
  9. package/dist/components/ds-confirmation/ds-confirmation.d.cts +8 -8
  10. package/dist/components/ds-confirmation/ds-confirmation.d.cts.map +1 -1
  11. package/dist/components/ds-confirmation/ds-confirmation.d.ts +8 -8
  12. package/dist/components/ds-date-input/ds-date-input.cjs +352 -0
  13. package/dist/components/ds-date-input/ds-date-input.d.cts +31 -0
  14. package/dist/components/ds-date-input/ds-date-input.d.cts.map +1 -0
  15. package/dist/components/ds-date-input/ds-date-input.d.ts +31 -0
  16. package/dist/components/ds-date-input/ds-date-input.d.ts.map +1 -0
  17. package/dist/components/ds-date-input/ds-date-input.js +351 -0
  18. package/dist/components/ds-date-input/ds-date-input.js.map +1 -0
  19. package/dist/components/ds-date-input/ds-date-input.module.cjs +29 -0
  20. package/dist/components/ds-date-input/ds-date-input.module.js +29 -0
  21. package/dist/components/ds-date-input/ds-date-input.module.js.map +1 -0
  22. package/dist/components/ds-date-input/ds-date-input.types.d.cts +92 -0
  23. package/dist/components/ds-date-input/ds-date-input.types.d.cts.map +1 -0
  24. package/dist/components/ds-date-input/ds-date-input.types.d.ts +92 -0
  25. package/dist/components/ds-date-input/ds-date-input.types.d.ts.map +1 -0
  26. package/dist/components/ds-date-input/ds-date-input.utils.cjs +169 -0
  27. package/dist/components/ds-date-input/ds-date-input.utils.js +164 -0
  28. package/dist/components/ds-date-input/ds-date-input.utils.js.map +1 -0
  29. package/dist/components/ds-date-input/index.cjs +1 -0
  30. package/dist/components/ds-date-input/index.d.ts +2 -0
  31. package/dist/components/ds-date-input/index.js +1 -0
  32. package/dist/components/ds-divider/ds-divider.cjs +47 -0
  33. package/dist/components/ds-divider/ds-divider.d.cts +8 -0
  34. package/dist/components/ds-divider/ds-divider.d.cts.map +1 -0
  35. package/dist/components/ds-divider/ds-divider.d.ts +8 -0
  36. package/dist/components/ds-divider/ds-divider.d.ts.map +1 -0
  37. package/dist/components/ds-divider/ds-divider.js +46 -0
  38. package/dist/components/ds-divider/ds-divider.js.map +1 -0
  39. package/dist/components/ds-divider/ds-divider.module.cjs +10 -0
  40. package/dist/components/ds-divider/ds-divider.module.js +10 -0
  41. package/dist/components/ds-divider/ds-divider.module.js.map +1 -0
  42. package/dist/components/ds-divider/ds-divider.types.d.cts +25 -0
  43. package/dist/components/ds-divider/ds-divider.types.d.cts.map +1 -0
  44. package/dist/components/ds-divider/ds-divider.types.d.ts +25 -0
  45. package/dist/components/ds-divider/ds-divider.types.d.ts.map +1 -0
  46. package/dist/components/ds-divider/index.cjs +1 -0
  47. package/dist/components/ds-divider/index.d.ts +2 -0
  48. package/dist/components/ds-divider/index.js +1 -0
  49. package/dist/components/ds-drawer/ds-drawer.d.cts +9 -9
  50. package/dist/components/ds-drawer/ds-drawer.d.ts +9 -9
  51. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.cjs +80 -24
  52. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.d.cts +1 -0
  53. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.d.cts.map +1 -1
  54. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.d.ts +1 -0
  55. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.d.ts.map +1 -1
  56. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.js +80 -24
  57. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.js.map +1 -1
  58. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.module.cjs +20 -18
  59. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.module.js +20 -18
  60. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.module.js.map +1 -1
  61. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.types.d.cts +5 -1
  62. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.types.d.cts.map +1 -1
  63. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.types.d.ts +5 -1
  64. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.types.d.ts.map +1 -1
  65. package/dist/components/ds-dropdown-menu/index.d.ts +1 -1
  66. package/dist/components/ds-expandable-text-input/ds-expandable-text-input.d.cts +2 -2
  67. package/dist/components/ds-expandable-text-input/ds-expandable-text-input.d.ts +2 -2
  68. package/dist/components/ds-form-control/ds-form-control.cjs +3 -0
  69. package/dist/components/ds-form-control/ds-form-control.d.cts +9 -7
  70. package/dist/components/ds-form-control/ds-form-control.d.cts.map +1 -1
  71. package/dist/components/ds-form-control/ds-form-control.d.ts +10 -7
  72. package/dist/components/ds-form-control/ds-form-control.d.ts.map +1 -1
  73. package/dist/components/ds-form-control/ds-form-control.js +3 -0
  74. package/dist/components/ds-form-control/ds-form-control.js.map +1 -1
  75. package/dist/components/ds-modal/ds-modal.d.cts +8 -8
  76. package/dist/components/ds-modal/ds-modal.d.cts.map +1 -1
  77. package/dist/components/ds-modal/ds-modal.d.ts +8 -8
  78. package/dist/components/ds-modal/ds-modal.d.ts.map +1 -1
  79. package/dist/components/ds-panel/ds-panel.d.cts +2 -2
  80. package/dist/components/ds-panel/ds-panel.d.ts +2 -2
  81. package/dist/components/ds-radio-group/ds-radio-group.types.d.cts +1 -1
  82. package/dist/components/ds-radio-group/ds-radio-group.types.d.cts.map +1 -1
  83. package/dist/components/ds-radio-group/ds-radio-group.types.d.ts +1 -1
  84. package/dist/components/ds-radio-group/ds-radio-group.types.d.ts.map +1 -1
  85. package/dist/components/ds-select/ds-select.d.cts +2 -2
  86. package/dist/components/ds-select/ds-select.d.ts +2 -2
  87. package/dist/components/ds-smart-tabs/ds-smart-tabs.d.cts +2 -2
  88. package/dist/components/ds-smart-tabs/ds-smart-tabs.d.ts +2 -2
  89. package/dist/components/ds-stepper/components/ds-step-content.d.cts +2 -2
  90. package/dist/components/ds-stepper/components/ds-step-content.d.ts +2 -2
  91. package/dist/components/ds-stepper/components/ds-step-next-button.d.cts +2 -2
  92. package/dist/components/ds-stepper/components/ds-step-next-button.d.ts +2 -2
  93. package/dist/components/ds-stepper/components/ds-step.d.ts +2 -2
  94. package/dist/components/ds-stepper/ds-stepper.d.cts +2 -2
  95. package/dist/components/ds-stepper/ds-stepper.d.ts +2 -2
  96. package/dist/components/ds-table/components/ds-table-cell/ds-table-cell.types.d.cts +1 -0
  97. package/dist/components/ds-table/components/ds-table-cell/ds-table-cell.types.d.cts.map +1 -1
  98. package/dist/components/ds-table/components/ds-table-cell/ds-table-cell.types.d.ts +1 -1
  99. package/dist/components/ds-table/ds-table.d.cts +2 -2
  100. package/dist/components/ds-table/ds-table.d.ts +2 -2
  101. package/dist/components/ds-table/filters/adapters/create-checkbox-filter-adapter.cjs +55 -0
  102. package/dist/components/ds-table/filters/adapters/create-checkbox-filter-adapter.d.cts +49 -0
  103. package/dist/components/ds-table/filters/adapters/create-checkbox-filter-adapter.d.cts.map +1 -0
  104. package/dist/components/ds-table/filters/adapters/create-checkbox-filter-adapter.d.ts +50 -0
  105. package/dist/components/ds-table/filters/adapters/create-checkbox-filter-adapter.d.ts.map +1 -0
  106. package/dist/components/ds-table/filters/adapters/create-checkbox-filter-adapter.js +55 -0
  107. package/dist/components/ds-table/filters/adapters/create-checkbox-filter-adapter.js.map +1 -0
  108. package/dist/components/ds-table/filters/adapters/create-dual-range-filter-adapter.cjs +87 -0
  109. package/dist/components/ds-table/filters/adapters/create-dual-range-filter-adapter.d.cts +44 -0
  110. package/dist/components/ds-table/filters/adapters/create-dual-range-filter-adapter.d.cts.map +1 -0
  111. package/dist/components/ds-table/filters/adapters/create-dual-range-filter-adapter.d.ts +44 -0
  112. package/dist/components/ds-table/filters/adapters/create-dual-range-filter-adapter.d.ts.map +1 -0
  113. package/dist/components/ds-table/filters/adapters/create-dual-range-filter-adapter.js +87 -0
  114. package/dist/components/ds-table/filters/adapters/create-dual-range-filter-adapter.js.map +1 -0
  115. package/dist/components/ds-table/filters/adapters/create-filter-adapter.cjs +83 -0
  116. package/dist/components/ds-table/filters/adapters/create-filter-adapter.d.cts +111 -0
  117. package/dist/components/ds-table/filters/adapters/create-filter-adapter.d.cts.map +1 -0
  118. package/dist/components/ds-table/filters/adapters/create-filter-adapter.d.ts +111 -0
  119. package/dist/components/ds-table/filters/adapters/create-filter-adapter.d.ts.map +1 -0
  120. package/dist/components/ds-table/filters/adapters/create-filter-adapter.js +83 -0
  121. package/dist/components/ds-table/filters/adapters/create-filter-adapter.js.map +1 -0
  122. package/dist/components/ds-table/filters/adapters/index.cjs +3 -0
  123. package/dist/components/ds-table/filters/adapters/index.d.ts +3 -0
  124. package/dist/components/ds-table/filters/adapters/index.js +3 -0
  125. package/dist/components/ds-table/filters/components/checkbox-filter/checkbox-filter.cjs +22 -0
  126. package/dist/components/ds-table/filters/components/checkbox-filter/checkbox-filter.d.cts +17 -0
  127. package/dist/components/ds-table/filters/components/checkbox-filter/checkbox-filter.d.cts.map +1 -0
  128. package/dist/components/ds-table/filters/components/checkbox-filter/checkbox-filter.d.ts +18 -0
  129. package/dist/components/ds-table/filters/components/checkbox-filter/checkbox-filter.d.ts.map +1 -0
  130. package/dist/components/ds-table/filters/components/checkbox-filter/checkbox-filter.js +22 -0
  131. package/dist/components/ds-table/filters/components/checkbox-filter/checkbox-filter.js.map +1 -0
  132. package/dist/components/ds-table/filters/components/checkbox-filter/index.cjs +1 -0
  133. package/dist/components/ds-table/filters/components/checkbox-filter/index.d.ts +1 -0
  134. package/dist/components/ds-table/filters/components/checkbox-filter/index.js +1 -0
  135. package/dist/components/ds-table/filters/components/range-filter/index.cjs +1 -0
  136. package/dist/components/ds-table/filters/components/range-filter/index.d.ts +1 -0
  137. package/dist/components/ds-table/filters/components/range-filter/index.js +1 -0
  138. package/dist/components/ds-table/filters/components/range-filter/range-filter.cjs +177 -0
  139. package/dist/components/ds-table/filters/components/range-filter/range-filter.d.cts +14 -0
  140. package/dist/components/ds-table/filters/components/range-filter/range-filter.d.cts.map +1 -0
  141. package/dist/components/ds-table/filters/components/range-filter/range-filter.d.ts +16 -0
  142. package/dist/components/ds-table/filters/components/range-filter/range-filter.d.ts.map +1 -0
  143. package/dist/components/ds-table/filters/components/range-filter/range-filter.js +177 -0
  144. package/dist/components/ds-table/filters/components/range-filter/range-filter.js.map +1 -0
  145. package/dist/components/ds-table/filters/components/range-filter/range-filter.module.cjs +11 -0
  146. package/dist/components/ds-table/filters/components/range-filter/range-filter.module.js +11 -0
  147. package/dist/components/ds-table/filters/components/range-filter/range-filter.module.js.map +1 -0
  148. package/dist/components/ds-table/filters/hooks/index.cjs +1 -0
  149. package/dist/components/ds-table/filters/hooks/index.d.ts +1 -0
  150. package/dist/components/ds-table/filters/hooks/index.js +1 -0
  151. package/dist/components/ds-table/filters/hooks/use-table-filters.cjs +211 -0
  152. package/dist/components/ds-table/filters/hooks/use-table-filters.d.cts +65 -0
  153. package/dist/components/ds-table/filters/hooks/use-table-filters.d.cts.map +1 -0
  154. package/dist/components/ds-table/filters/hooks/use-table-filters.d.ts +66 -0
  155. package/dist/components/ds-table/filters/hooks/use-table-filters.d.ts.map +1 -0
  156. package/dist/components/ds-table/filters/hooks/use-table-filters.js +211 -0
  157. package/dist/components/ds-table/filters/hooks/use-table-filters.js.map +1 -0
  158. package/dist/components/ds-table/filters/index.cjs +6 -0
  159. package/dist/components/ds-table/filters/index.d.ts +11 -0
  160. package/dist/components/ds-table/filters/index.js +6 -0
  161. package/dist/components/ds-table/filters/types/filter-adapter.types.d.cts +101 -0
  162. package/dist/components/ds-table/filters/types/filter-adapter.types.d.cts.map +1 -0
  163. package/dist/components/ds-table/filters/types/filter-adapter.types.d.ts +102 -0
  164. package/dist/components/ds-table/filters/types/filter-adapter.types.d.ts.map +1 -0
  165. package/dist/components/ds-table/index.cjs +5 -0
  166. package/dist/components/ds-table/index.d.ts +8 -0
  167. package/dist/components/ds-table/index.js +5 -0
  168. package/dist/components/ds-toggle/ds-toggle.cjs +192 -0
  169. package/dist/components/ds-toggle/ds-toggle.d.cts +24 -0
  170. package/dist/components/ds-toggle/ds-toggle.d.cts.map +1 -0
  171. package/dist/components/ds-toggle/ds-toggle.d.ts +24 -0
  172. package/dist/components/ds-toggle/ds-toggle.d.ts.map +1 -0
  173. package/dist/components/ds-toggle/ds-toggle.js +191 -0
  174. package/dist/components/ds-toggle/ds-toggle.js.map +1 -0
  175. package/dist/components/ds-toggle/ds-toggle.module.cjs +13 -0
  176. package/dist/components/ds-toggle/ds-toggle.module.js +13 -0
  177. package/dist/components/ds-toggle/ds-toggle.module.js.map +1 -0
  178. package/dist/components/ds-toggle/ds-toggle.types.d.cts +67 -0
  179. package/dist/components/ds-toggle/ds-toggle.types.d.cts.map +1 -0
  180. package/dist/components/ds-toggle/ds-toggle.types.d.ts +67 -0
  181. package/dist/components/ds-toggle/ds-toggle.types.d.ts.map +1 -0
  182. package/dist/components/ds-toggle/index.cjs +1 -0
  183. package/dist/components/ds-toggle/index.d.ts +2 -0
  184. package/dist/components/ds-toggle/index.js +1 -0
  185. package/dist/components/ds-vertical-tabs/ds-vertical-tabs.d.cts +5 -5
  186. package/dist/components/ds-vertical-tabs/ds-vertical-tabs.d.ts +5 -5
  187. package/dist/index.cjs +17 -0
  188. package/dist/index.d.cts +15 -2
  189. package/dist/index.d.ts +18 -2
  190. package/dist/index.js +11 -1
  191. package/dist/index.min.css +1 -1
  192. package/package.json +2 -1
  193. package/src/components/ds-button/versions/ds-button-new/ds-button-new.module.scss +0 -1
  194. package/src/components/ds-date-input/ds-date-input.module.scss +246 -0
  195. package/src/components/ds-date-input/ds-date-input.tsx +309 -0
  196. package/src/components/ds-date-input/ds-date-input.types.tsx +104 -0
  197. package/src/components/ds-date-input/ds-date-input.utils.ts +242 -0
  198. package/src/components/ds-date-input/index.ts +2 -0
  199. package/src/components/ds-divider/ds-divider.module.scss +21 -0
  200. package/src/components/ds-divider/ds-divider.tsx +22 -0
  201. package/src/components/ds-divider/ds-divider.types.ts +21 -0
  202. package/src/components/ds-divider/index.ts +2 -0
  203. package/src/components/ds-dropdown-menu/ds-dropdown-menu.module.scss +11 -3
  204. package/src/components/ds-dropdown-menu/ds-dropdown-menu.tsx +17 -1
  205. package/src/components/ds-dropdown-menu/ds-dropdown-menu.types.tsx +5 -0
  206. package/src/components/ds-form-control/ds-form-control.tsx +2 -0
  207. package/src/components/ds-radio-group/ds-radio-group.types.tsx +1 -1
  208. package/src/components/ds-table/filters/hooks/index.ts +1 -0
  209. package/src/components/ds-table/index.ts +2 -0
  210. package/src/components/ds-toggle/ds-toggle.module.scss +154 -0
  211. package/src/components/ds-toggle/ds-toggle.tsx +78 -0
  212. package/src/components/ds-toggle/ds-toggle.types.tsx +76 -0
  213. package/src/components/ds-toggle/index.tsx +2 -0
  214. package/src/index.ts +3 -0
@@ -1,6 +1,6 @@
1
1
  import { IconType } from "../../../ds-icon/ds-icon.types.js";
2
2
  import "../../../ds-icon/index.js";
3
- import "@tanstack/react-table";
3
+ import { Row } from "@tanstack/react-table";
4
4
 
5
5
  //#region src/components/ds-table/components/ds-table-cell/ds-table-cell.types.d.ts
6
6
  /**
@@ -1,5 +1,5 @@
1
1
  import { DsDataTableProps } from "./ds-table.types.cjs";
2
- import * as react_jsx_runtime36 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime29 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/ds-table/ds-table.d.ts
5
5
  /**
@@ -39,7 +39,7 @@ declare const DsTable: <TData extends {
39
39
  columnVisibility: externalColumnVisibility,
40
40
  onColumnVisibilityChange,
41
41
  activeRowId
42
- }: DsDataTableProps<TData, TValue>) => react_jsx_runtime36.JSX.Element;
42
+ }: DsDataTableProps<TData, TValue>) => react_jsx_runtime29.JSX.Element;
43
43
  //#endregion
44
44
  export { DsTable };
45
45
  //# sourceMappingURL=ds-table.d.cts.map
@@ -1,5 +1,5 @@
1
1
  import { DsDataTableProps } from "./ds-table.types.js";
2
- import * as react_jsx_runtime44 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime47 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/ds-table/ds-table.d.ts
5
5
  /**
@@ -39,7 +39,7 @@ declare const DsTable: <TData extends {
39
39
  columnVisibility: externalColumnVisibility,
40
40
  onColumnVisibilityChange,
41
41
  activeRowId
42
- }: DsDataTableProps<TData, TValue>) => react_jsx_runtime44.JSX.Element;
42
+ }: DsDataTableProps<TData, TValue>) => react_jsx_runtime47.JSX.Element;
43
43
  //#endregion
44
44
  export { DsTable };
45
45
  //# sourceMappingURL=ds-table.d.ts.map
@@ -0,0 +1,55 @@
1
+ const require_rolldown_runtime = require('../../../../_virtual/rolldown_runtime.cjs');
2
+ const require_create_filter_adapter = require('./create-filter-adapter.cjs');
3
+ const require_checkbox_filter = require('../components/checkbox-filter/checkbox-filter.cjs');
4
+ require('../components/checkbox-filter/index.cjs');
5
+ let react_jsx_runtime = require("react/jsx-runtime");
6
+
7
+ //#region src/components/ds-table/filters/adapters/create-checkbox-filter-adapter.tsx
8
+ /**
9
+ * Factory function to create a checkbox filter adapter
10
+ *
11
+ * Handles multi-select checkbox filtering with inclusion model:
12
+ * - Empty selection = show all data (no filter active)
13
+ * - Selected items = show only those items
14
+ */
15
+ function createCheckboxFilterAdapter(config) {
16
+ const { id, label, items, renderer, chipLabelTemplate = (item) => `${label}: ${item.label}`, cellRenderer, getRowValue = (row) => row.getValue(id) } = config;
17
+ return require_create_filter_adapter.createFilterAdapter({
18
+ id,
19
+ label,
20
+ initialValue: [],
21
+ filterFn: (row, columnId, filterValue) => {
22
+ if (filterValue.length === 0) return true;
23
+ const rowValue = getRowValue(row);
24
+ return filterValue.some((item) => item.value === rowValue);
25
+ },
26
+ cellRenderer,
27
+ toChips: (selectedItems) => {
28
+ return selectedItems.map((item) => ({
29
+ id: `${id}_${String(item.value)}`,
30
+ label: chipLabelTemplate(item),
31
+ metadata: {
32
+ key: id,
33
+ value: item.value
34
+ }
35
+ }));
36
+ },
37
+ fromChip: (chip, currentValue) => {
38
+ return currentValue.filter((item) => item.value !== chip.metadata?.value);
39
+ },
40
+ getActiveFiltersCount: (selectedItems) => {
41
+ return selectedItems.length;
42
+ },
43
+ renderFilter: (value, onChange) => {
44
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_checkbox_filter.CheckboxFilter, {
45
+ items,
46
+ renderer,
47
+ selectedItems: value,
48
+ onSelectionChange: onChange
49
+ });
50
+ }
51
+ });
52
+ }
53
+
54
+ //#endregion
55
+ exports.createCheckboxFilterAdapter = createCheckboxFilterAdapter;
@@ -0,0 +1,49 @@
1
+ import { FilterAdapter } from "../types/filter-adapter.types.cjs";
2
+ import { CheckboxFilterItem } from "../components/checkbox-filter/checkbox-filter.cjs";
3
+ import { ReactNode } from "react";
4
+ import { Row } from "@tanstack/react-table";
5
+
6
+ //#region src/components/ds-table/filters/adapters/create-checkbox-filter-adapter.d.ts
7
+ interface CheckboxFilterAdapterConfig<TData, TValue> {
8
+ /**
9
+ * Unique identifier (should match column accessorKey)
10
+ */
11
+ id: string;
12
+ /**
13
+ * Display label for filter navigation
14
+ */
15
+ label: string;
16
+ /**
17
+ * Available items to select from
18
+ */
19
+ items: CheckboxFilterItem<TValue>[];
20
+ /**
21
+ * Optional custom renderer for each item
22
+ */
23
+ renderer?: (item: CheckboxFilterItem<TValue>) => ReactNode;
24
+ /**
25
+ * Optional custom chip label generator
26
+ * @default (item) => `${label}: ${item.label}`
27
+ */
28
+ chipLabelTemplate?: (item: CheckboxFilterItem<TValue>) => string;
29
+ /**
30
+ * Optional custom cell renderer for table column
31
+ */
32
+ cellRenderer?: (value: TValue) => ReactNode;
33
+ /**
34
+ * How to extract the value from a row for comparison
35
+ * @default (row) => row.getValue(id)
36
+ */
37
+ getRowValue?: (row: Row<TData>) => TValue;
38
+ }
39
+ /**
40
+ * Factory function to create a checkbox filter adapter
41
+ *
42
+ * Handles multi-select checkbox filtering with inclusion model:
43
+ * - Empty selection = show all data (no filter active)
44
+ * - Selected items = show only those items
45
+ */
46
+ declare function createCheckboxFilterAdapter<TData, TValue = string>(config: CheckboxFilterAdapterConfig<TData, TValue>): FilterAdapter<TData, CheckboxFilterItem<TValue>[], TValue>;
47
+ //#endregion
48
+ export { CheckboxFilterAdapterConfig, createCheckboxFilterAdapter };
49
+ //# sourceMappingURL=create-checkbox-filter-adapter.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-checkbox-filter-adapter.d.cts","names":[],"sources":["../../../../../src/components/ds-table/filters/adapters/create-checkbox-filter-adapter.tsx"],"sourcesContent":[],"mappings":";;;;;;UAMiB;;AAAjB;;EAcQ,EAAA,EAAA,MAAA;EAK8B;;;EAMS,KAAA,EAAA,MAAA;EAAnB;;;EAWH,KAAA,EAtBjB,kBAsBiB,CAtBE,MAsBF,CAAA,EAAA;EAAJ;;;EAUL,QAAA,CAAA,EAAA,CAAA,IAAA,EA3BG,kBA2BwB,CA3BL,MA2BK,CAAA,EAAA,GA3BO,SA2BP;EACN;;;;EACM,iBAAA,CAAA,EAAA,CAAA,IAAA,EAvBf,kBAuBe,CAvBI,MAuBJ,CAAA,EAAA,GAAA,MAAA;EAAnB;;;EAAR,YAAA,CAAA,EAAA,CAAA,KAAA,EAlBQ,MAkBR,EAAA,GAlBmB,SAkBnB;;;;;sBAZK,IAAI,WAAW;;;;;;;;;iBAUpB,4DACP,4BAA4B,OAAO,UACzC,cAAc,OAAO,mBAAmB,WAAW"}
@@ -0,0 +1,50 @@
1
+ import { FilterAdapter } from "../types/filter-adapter.types.js";
2
+ import { CheckboxFilterItem } from "../components/checkbox-filter/checkbox-filter.js";
3
+ import "../components/checkbox-filter/index.js";
4
+ import { ReactNode } from "react";
5
+ import { Row } from "@tanstack/react-table";
6
+
7
+ //#region src/components/ds-table/filters/adapters/create-checkbox-filter-adapter.d.ts
8
+ interface CheckboxFilterAdapterConfig<TData, TValue> {
9
+ /**
10
+ * Unique identifier (should match column accessorKey)
11
+ */
12
+ id: string;
13
+ /**
14
+ * Display label for filter navigation
15
+ */
16
+ label: string;
17
+ /**
18
+ * Available items to select from
19
+ */
20
+ items: CheckboxFilterItem<TValue>[];
21
+ /**
22
+ * Optional custom renderer for each item
23
+ */
24
+ renderer?: (item: CheckboxFilterItem<TValue>) => ReactNode;
25
+ /**
26
+ * Optional custom chip label generator
27
+ * @default (item) => `${label}: ${item.label}`
28
+ */
29
+ chipLabelTemplate?: (item: CheckboxFilterItem<TValue>) => string;
30
+ /**
31
+ * Optional custom cell renderer for table column
32
+ */
33
+ cellRenderer?: (value: TValue) => ReactNode;
34
+ /**
35
+ * How to extract the value from a row for comparison
36
+ * @default (row) => row.getValue(id)
37
+ */
38
+ getRowValue?: (row: Row<TData>) => TValue;
39
+ }
40
+ /**
41
+ * Factory function to create a checkbox filter adapter
42
+ *
43
+ * Handles multi-select checkbox filtering with inclusion model:
44
+ * - Empty selection = show all data (no filter active)
45
+ * - Selected items = show only those items
46
+ */
47
+ declare function createCheckboxFilterAdapter<TData, TValue = string>(config: CheckboxFilterAdapterConfig<TData, TValue>): FilterAdapter<TData, CheckboxFilterItem<TValue>[], TValue>;
48
+ //#endregion
49
+ export { CheckboxFilterAdapterConfig, createCheckboxFilterAdapter };
50
+ //# sourceMappingURL=create-checkbox-filter-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-checkbox-filter-adapter.d.ts","names":[],"sources":["../../../../../src/components/ds-table/filters/adapters/create-checkbox-filter-adapter.tsx"],"sourcesContent":[],"mappings":";;;;;;;UAMiB;;;AAAjB;EAc2B,EAAA,EAAA,MAAA;EAAnB;;;EAK0C,KAAA,EAAA,MAAA;EAMH;;;EAKZ,KAAA,EAhB3B,kBAgB2B,CAhBR,MAgBQ,CAAA,EAAA;EAMV;;;EAAiB,QAAA,CAAA,EAAA,CAAA,IAAA,EAjBvB,kBAiBuB,CAjBJ,MAiBI,CAAA,EAAA,GAjBQ,SAiBR;EAU1B;;;;EAEC,iBAAA,CAAA,EAAA,CAAA,IAAA,EAvBW,kBAuBX,CAvB8B,MAuB9B,CAAA,EAAA,GAAA,MAAA;EAA0B;;;EAAxC,YAAA,CAAA,EAAA,CAAA,KAAA,EAlBqB,MAkBrB,EAAA,GAlBgC,SAkBhC;EAAa;;;;sBAZK,IAAI,WAAW;;;;;;;;;iBAUpB,4DACP,4BAA4B,OAAO,UACzC,cAAc,OAAO,mBAAmB,WAAW"}
@@ -0,0 +1,55 @@
1
+ import { createFilterAdapter } from "./create-filter-adapter.js";
2
+ import { CheckboxFilter } from "../components/checkbox-filter/checkbox-filter.js";
3
+ import "../components/checkbox-filter/index.js";
4
+ import { jsx } from "react/jsx-runtime";
5
+
6
+ //#region src/components/ds-table/filters/adapters/create-checkbox-filter-adapter.tsx
7
+ /**
8
+ * Factory function to create a checkbox filter adapter
9
+ *
10
+ * Handles multi-select checkbox filtering with inclusion model:
11
+ * - Empty selection = show all data (no filter active)
12
+ * - Selected items = show only those items
13
+ */
14
+ function createCheckboxFilterAdapter(config) {
15
+ const { id, label, items, renderer, chipLabelTemplate = (item) => `${label}: ${item.label}`, cellRenderer, getRowValue = (row) => row.getValue(id) } = config;
16
+ return createFilterAdapter({
17
+ id,
18
+ label,
19
+ initialValue: [],
20
+ filterFn: (row, columnId, filterValue) => {
21
+ if (filterValue.length === 0) return true;
22
+ const rowValue = getRowValue(row);
23
+ return filterValue.some((item) => item.value === rowValue);
24
+ },
25
+ cellRenderer,
26
+ toChips: (selectedItems) => {
27
+ return selectedItems.map((item) => ({
28
+ id: `${id}_${String(item.value)}`,
29
+ label: chipLabelTemplate(item),
30
+ metadata: {
31
+ key: id,
32
+ value: item.value
33
+ }
34
+ }));
35
+ },
36
+ fromChip: (chip, currentValue) => {
37
+ return currentValue.filter((item) => item.value !== chip.metadata?.value);
38
+ },
39
+ getActiveFiltersCount: (selectedItems) => {
40
+ return selectedItems.length;
41
+ },
42
+ renderFilter: (value, onChange) => {
43
+ return /* @__PURE__ */ jsx(CheckboxFilter, {
44
+ items,
45
+ renderer,
46
+ selectedItems: value,
47
+ onSelectionChange: onChange
48
+ });
49
+ }
50
+ });
51
+ }
52
+
53
+ //#endregion
54
+ export { createCheckboxFilterAdapter };
55
+ //# sourceMappingURL=create-checkbox-filter-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-checkbox-filter-adapter.js","names":["ReactNode","Row","FilterAdapter","CheckboxFilterItem","CheckboxFilter","createFilterAdapter","CheckboxFilterAdapterConfig","id","label","items","TValue","renderer","item","chipLabelTemplate","cellRenderer","value","getRowValue","row","TData","createCheckboxFilterAdapter","config","getValue","initialValue","filterFn","columnId","filterValue","length","rowValue","some","toChips","selectedItems","map","String","metadata","key","fromChip","chip","currentValue","filter","getActiveFiltersCount","renderFilter","onChange"],"sources":["../../../../../src/components/ds-table/filters/adapters/create-checkbox-filter-adapter.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport type { Row } from '@tanstack/react-table';\nimport type { FilterAdapter } from '../types/filter-adapter.types';\nimport { type CheckboxFilterItem, CheckboxFilter } from '../components/checkbox-filter';\nimport { createFilterAdapter } from './create-filter-adapter';\n\nexport interface CheckboxFilterAdapterConfig<TData, TValue> {\n\t/**\n\t * Unique identifier (should match column accessorKey)\n\t */\n\tid: string;\n\n\t/**\n\t * Display label for filter navigation\n\t */\n\tlabel: string;\n\n\t/**\n\t * Available items to select from\n\t */\n\titems: CheckboxFilterItem<TValue>[];\n\n\t/**\n\t * Optional custom renderer for each item\n\t */\n\trenderer?: (item: CheckboxFilterItem<TValue>) => ReactNode;\n\n\t/**\n\t * Optional custom chip label generator\n\t * @default (item) => `${label}: ${item.label}`\n\t */\n\tchipLabelTemplate?: (item: CheckboxFilterItem<TValue>) => string;\n\n\t/**\n\t * Optional custom cell renderer for table column\n\t */\n\tcellRenderer?: (value: TValue) => ReactNode;\n\n\t/**\n\t * How to extract the value from a row for comparison\n\t * @default (row) => row.getValue(id)\n\t */\n\tgetRowValue?: (row: Row<TData>) => TValue;\n}\n\n/**\n * Factory function to create a checkbox filter adapter\n *\n * Handles multi-select checkbox filtering with inclusion model:\n * - Empty selection = show all data (no filter active)\n * - Selected items = show only those items\n */\nexport function createCheckboxFilterAdapter<TData, TValue = string>(\n\tconfig: CheckboxFilterAdapterConfig<TData, TValue>,\n): FilterAdapter<TData, CheckboxFilterItem<TValue>[], TValue> {\n\tconst {\n\t\tid,\n\t\tlabel,\n\t\titems,\n\t\trenderer,\n\t\tchipLabelTemplate = (item) => `${label}: ${item.label}`,\n\t\tcellRenderer,\n\t\tgetRowValue = (row) => row.getValue(id),\n\t} = config;\n\n\treturn createFilterAdapter<TData, CheckboxFilterItem<TValue>[], TValue>({\n\t\tid,\n\t\tlabel,\n\t\tinitialValue: [], // Start with nothing selected (show all)\n\n\t\tfilterFn: (row, columnId, filterValue) => {\n\t\t\t// Empty selection = no filter = show all\n\t\t\tif (filterValue.length === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Otherwise, show only selected items\n\t\t\tconst rowValue = getRowValue(row);\n\t\t\treturn filterValue.some((item) => item.value === rowValue);\n\t\t},\n\n\t\tcellRenderer,\n\n\t\ttoChips: (selectedItems) => {\n\t\t\t// Generate chips for all selected items\n\t\t\treturn selectedItems.map((item) => ({\n\t\t\t\tid: `${id}_${String(item.value)}`,\n\t\t\t\tlabel: chipLabelTemplate(item),\n\t\t\t\tmetadata: {\n\t\t\t\t\tkey: id,\n\t\t\t\t\tvalue: item.value,\n\t\t\t\t},\n\t\t\t}));\n\t\t},\n\n\t\tfromChip: (chip, currentValue) => {\n\t\t\treturn currentValue.filter((item) => item.value !== chip.metadata?.value);\n\t\t},\n\n\t\tgetActiveFiltersCount: (selectedItems) => {\n\t\t\t// Count = number of selected items (0 means none selected)\n\t\t\treturn selectedItems.length;\n\t\t},\n\n\t\trenderFilter: (value, onChange) => {\n\t\t\treturn (\n\t\t\t\t<CheckboxFilter\n\t\t\t\t\titems={items}\n\t\t\t\t\trenderer={renderer}\n\t\t\t\t\tselectedItems={value}\n\t\t\t\t\tonSelectionChange={onChange}\n\t\t\t\t/>\n\t\t\t);\n\t\t},\n\t});\n}\n"],"mappings":";;;;;;;;;;;;;AAoDA,SAAgBmB,4BACfC,QAC6D;CAC7D,MAAM,EACLb,IACAC,OACAC,OACAE,UACAE,qBAAqBD,SAAS,GAAGJ,MAAK,IAAKI,KAAKJ,SAChDM,cACAE,eAAeC,QAAQA,IAAII,SAASd,GAAE,KACnCa;AAEJ,QAAOf,oBAAiE;EACvEE;EACAC;EACAc,cAAc,EAAE;EAEhBC,WAAWN,KAAKO,UAAUC,gBAAgB;AAEzC,OAAIA,YAAYC,WAAW,EAC1B,QAAO;GAIR,MAAMC,WAAWX,YAAYC,IAAI;AACjC,UAAOQ,YAAYG,MAAMhB,SAASA,KAAKG,UAAUY,SAAS;;EAG3Db;EAEAe,UAAUC,kBAAkB;AAE3B,UAAOA,cAAcC,KAAKnB,UAAU;IACnCL,IAAI,GAAGA,GAAE,GAAIyB,OAAOpB,KAAKG,MAAM;IAC/BP,OAAOK,kBAAkBD,KAAK;IAC9BqB,UAAU;KACTC,KAAK3B;KACLQ,OAAOH,KAAKG;KACb;IACA,EAAE;;EAGJoB,WAAWC,MAAMC,iBAAiB;AACjC,UAAOA,aAAaC,QAAQ1B,SAASA,KAAKG,UAAUqB,KAAKH,UAAUlB,MAAM;;EAG1EwB,wBAAwBT,kBAAkB;AAEzC,UAAOA,cAAcJ;;EAGtBc,eAAezB,OAAO0B,aAAa;AAClC,UACC,oBAAC;IACOhC;IACGE;IACV,eAAeI;IACf,mBAAmB0B;KAClB;;EAGJ,CAAC"}
@@ -0,0 +1,87 @@
1
+ const require_rolldown_runtime = require('../../../../_virtual/rolldown_runtime.cjs');
2
+ const require_create_filter_adapter = require('./create-filter-adapter.cjs');
3
+ const require_range_filter = require('../components/range-filter/range-filter.cjs');
4
+ require('../components/range-filter/index.cjs');
5
+ let react_jsx_runtime = require("react/jsx-runtime");
6
+
7
+ //#region src/components/ds-table/filters/adapters/create-dual-range-filter-adapter.tsx
8
+ /**
9
+ * Factory function to create a dual-range filter adapter
10
+ * Handles filtering on multiple numeric ranges within a single column
11
+ */
12
+ function createDualRangeFilterAdapter(config) {
13
+ const { id, label, fields, formatNumber = (num) => num.toLocaleString("en-US"), getRowValue = (row) => row.getValue(id) } = config;
14
+ const initialValue = {};
15
+ Object.keys(fields).forEach((key) => {
16
+ initialValue[key] = {};
17
+ });
18
+ return require_create_filter_adapter.createFilterAdapter({
19
+ id,
20
+ label,
21
+ initialValue,
22
+ filterFn: (row, columnId, filterValue) => {
23
+ const rowValue = getRowValue(row);
24
+ for (const [fieldKey, range] of Object.entries(filterValue)) if (range.from !== void 0 || range.to !== void 0) {
25
+ const fieldValue = rowValue[fieldKey];
26
+ const matchesFrom = range.from === void 0 || fieldValue >= range.from;
27
+ const matchesTo = range.to === void 0 || fieldValue <= range.to;
28
+ if (!matchesFrom || !matchesTo) return false;
29
+ }
30
+ return true;
31
+ },
32
+ cellRenderer: void 0,
33
+ toChips: (value) => {
34
+ const chips = [];
35
+ Object.entries(value).forEach(([fieldKey, range]) => {
36
+ if (range.from !== void 0 || range.to !== void 0) {
37
+ const fieldLabel = fields[fieldKey] || fieldKey;
38
+ const fromText = range.from !== void 0 ? formatNumber(range.from) : "";
39
+ const toText = range.to !== void 0 ? formatNumber(range.to) : "";
40
+ chips.push({
41
+ id: `${id}_${fieldKey}`,
42
+ label: `${fieldLabel}: From ${fromText} to ${toText}`,
43
+ metadata: {
44
+ key: id,
45
+ field: fieldKey,
46
+ from: range.from,
47
+ to: range.to
48
+ }
49
+ });
50
+ }
51
+ });
52
+ return chips;
53
+ },
54
+ fromChip: (chip, currentValue) => {
55
+ const fieldKey = chip.metadata?.field;
56
+ if (!fieldKey) return currentValue;
57
+ return {
58
+ ...currentValue,
59
+ [fieldKey]: {}
60
+ };
61
+ },
62
+ getActiveFiltersCount: (value) => {
63
+ let count = 0;
64
+ Object.values(value).forEach((range) => {
65
+ if (range.from !== void 0 || range.to !== void 0) count++;
66
+ });
67
+ return count;
68
+ },
69
+ renderFilter: (value, onChange) => {
70
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: Object.entries(fields).map(([fieldKey, fieldLabel]) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_range_filter.RangeFilter, {
71
+ label: fieldLabel,
72
+ value: value[fieldKey] || {},
73
+ onChange: (rangeValue) => onChange({
74
+ ...value,
75
+ [fieldKey]: rangeValue
76
+ }),
77
+ onClear: () => onChange({
78
+ ...value,
79
+ [fieldKey]: {}
80
+ })
81
+ }, fieldKey)) });
82
+ }
83
+ });
84
+ }
85
+
86
+ //#endregion
87
+ exports.createDualRangeFilterAdapter = createDualRangeFilterAdapter;
@@ -0,0 +1,44 @@
1
+ import { FilterAdapter } from "../types/filter-adapter.types.cjs";
2
+ import { Row } from "@tanstack/react-table";
3
+
4
+ //#region src/components/ds-table/filters/adapters/create-dual-range-filter-adapter.d.ts
5
+ interface RangeValue {
6
+ from?: number;
7
+ to?: number;
8
+ }
9
+ interface DualRangeFilterValue {
10
+ [fieldName: string]: RangeValue;
11
+ }
12
+ interface DualRangeFilterAdapterConfig<TData> {
13
+ /**
14
+ * Unique identifier (should match column accessorKey)
15
+ */
16
+ id: string;
17
+ /**
18
+ * Display label for filter navigation
19
+ */
20
+ label: string;
21
+ /**
22
+ * Field configurations: { fieldKey: displayLabel }
23
+ * Example: { running: 'Running', completed: 'Completed' }
24
+ */
25
+ fields: Record<string, string>;
26
+ /**
27
+ * Optional formatter for chip display
28
+ * @default (num) => num.toLocaleString('en-US')
29
+ */
30
+ formatNumber?: (num: number) => string;
31
+ /**
32
+ * How to extract the value object from a row
33
+ * @default (row) => row.getValue(id)
34
+ */
35
+ getRowValue?: (row: Row<TData>) => Record<string, number>;
36
+ }
37
+ /**
38
+ * Factory function to create a dual-range filter adapter
39
+ * Handles filtering on multiple numeric ranges within a single column
40
+ */
41
+ declare function createDualRangeFilterAdapter<TData>(config: DualRangeFilterAdapterConfig<TData>): FilterAdapter<TData, DualRangeFilterValue, Record<string, number>>;
42
+ //#endregion
43
+ export { DualRangeFilterAdapterConfig, DualRangeFilterValue, RangeValue, createDualRangeFilterAdapter };
44
+ //# sourceMappingURL=create-dual-range-filter-adapter.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-dual-range-filter-adapter.d.cts","names":[],"sources":["../../../../../src/components/ds-table/filters/adapters/create-dual-range-filter-adapter.tsx"],"sourcesContent":[],"mappings":";;;;UAMiB,UAAA;;EAAA,EAAA,CAAA,EAAA,MAAA;AAKjB;AAIiB,UAJA,oBAAA,CAI4B;EAepC,CAAA,SAAA,EAAA,MAAA,CAAA,EAlBa,UAkBb;;AAYY,UA3BJ,4BA2BI,CAAA,KAAA,CAAA,CAAA;EAAe;;AAOpC;EACsC,EAAA,EAAA,MAAA;EAA7B;;;EACqC,KAAA,EAAA,MAAA;EAA3C;;;;UArBM;;;;;;;;;;sBAYY,IAAI,WAAW;;;;;;iBAOpB,4CACP,6BAA6B,SACnC,cAAc,OAAO,sBAAsB"}
@@ -0,0 +1,44 @@
1
+ import { FilterAdapter } from "../types/filter-adapter.types.js";
2
+ import { Row } from "@tanstack/react-table";
3
+
4
+ //#region src/components/ds-table/filters/adapters/create-dual-range-filter-adapter.d.ts
5
+ interface RangeValue {
6
+ from?: number;
7
+ to?: number;
8
+ }
9
+ interface DualRangeFilterValue {
10
+ [fieldName: string]: RangeValue;
11
+ }
12
+ interface DualRangeFilterAdapterConfig<TData> {
13
+ /**
14
+ * Unique identifier (should match column accessorKey)
15
+ */
16
+ id: string;
17
+ /**
18
+ * Display label for filter navigation
19
+ */
20
+ label: string;
21
+ /**
22
+ * Field configurations: { fieldKey: displayLabel }
23
+ * Example: { running: 'Running', completed: 'Completed' }
24
+ */
25
+ fields: Record<string, string>;
26
+ /**
27
+ * Optional formatter for chip display
28
+ * @default (num) => num.toLocaleString('en-US')
29
+ */
30
+ formatNumber?: (num: number) => string;
31
+ /**
32
+ * How to extract the value object from a row
33
+ * @default (row) => row.getValue(id)
34
+ */
35
+ getRowValue?: (row: Row<TData>) => Record<string, number>;
36
+ }
37
+ /**
38
+ * Factory function to create a dual-range filter adapter
39
+ * Handles filtering on multiple numeric ranges within a single column
40
+ */
41
+ declare function createDualRangeFilterAdapter<TData>(config: DualRangeFilterAdapterConfig<TData>): FilterAdapter<TData, DualRangeFilterValue, Record<string, number>>;
42
+ //#endregion
43
+ export { DualRangeFilterAdapterConfig, DualRangeFilterValue, RangeValue, createDualRangeFilterAdapter };
44
+ //# sourceMappingURL=create-dual-range-filter-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-dual-range-filter-adapter.d.ts","names":[],"sources":["../../../../../src/components/ds-table/filters/adapters/create-dual-range-filter-adapter.tsx"],"sourcesContent":[],"mappings":";;;;UAMiB,UAAA;;EAAA,EAAA,CAAA,EAAA,MAAA;AAKjB;AAIiB,UAJA,oBAAA,CAI4B;EAepC,CAAA,SAAA,EAAA,MAAA,CAAA,EAlBa,UAkBb;;AAYY,UA3BJ,4BA2BI,CAAA,KAAA,CAAA,CAAA;EAAe;;AAOpC;EACsC,EAAA,EAAA,MAAA;EAA7B;;;EACqC,KAAA,EAAA,MAAA;EAA3C;;;;UArBM;;;;;;;;;;sBAYY,IAAI,WAAW;;;;;;iBAOpB,4CACP,6BAA6B,SACnC,cAAc,OAAO,sBAAsB"}
@@ -0,0 +1,87 @@
1
+ import { createFilterAdapter } from "./create-filter-adapter.js";
2
+ import { RangeFilter } from "../components/range-filter/range-filter.js";
3
+ import "../components/range-filter/index.js";
4
+ import { jsx } from "react/jsx-runtime";
5
+
6
+ //#region src/components/ds-table/filters/adapters/create-dual-range-filter-adapter.tsx
7
+ /**
8
+ * Factory function to create a dual-range filter adapter
9
+ * Handles filtering on multiple numeric ranges within a single column
10
+ */
11
+ function createDualRangeFilterAdapter(config) {
12
+ const { id, label, fields, formatNumber = (num) => num.toLocaleString("en-US"), getRowValue = (row) => row.getValue(id) } = config;
13
+ const initialValue = {};
14
+ Object.keys(fields).forEach((key) => {
15
+ initialValue[key] = {};
16
+ });
17
+ return createFilterAdapter({
18
+ id,
19
+ label,
20
+ initialValue,
21
+ filterFn: (row, columnId, filterValue) => {
22
+ const rowValue = getRowValue(row);
23
+ for (const [fieldKey, range] of Object.entries(filterValue)) if (range.from !== void 0 || range.to !== void 0) {
24
+ const fieldValue = rowValue[fieldKey];
25
+ const matchesFrom = range.from === void 0 || fieldValue >= range.from;
26
+ const matchesTo = range.to === void 0 || fieldValue <= range.to;
27
+ if (!matchesFrom || !matchesTo) return false;
28
+ }
29
+ return true;
30
+ },
31
+ cellRenderer: void 0,
32
+ toChips: (value) => {
33
+ const chips = [];
34
+ Object.entries(value).forEach(([fieldKey, range]) => {
35
+ if (range.from !== void 0 || range.to !== void 0) {
36
+ const fieldLabel = fields[fieldKey] || fieldKey;
37
+ const fromText = range.from !== void 0 ? formatNumber(range.from) : "";
38
+ const toText = range.to !== void 0 ? formatNumber(range.to) : "";
39
+ chips.push({
40
+ id: `${id}_${fieldKey}`,
41
+ label: `${fieldLabel}: From ${fromText} to ${toText}`,
42
+ metadata: {
43
+ key: id,
44
+ field: fieldKey,
45
+ from: range.from,
46
+ to: range.to
47
+ }
48
+ });
49
+ }
50
+ });
51
+ return chips;
52
+ },
53
+ fromChip: (chip, currentValue) => {
54
+ const fieldKey = chip.metadata?.field;
55
+ if (!fieldKey) return currentValue;
56
+ return {
57
+ ...currentValue,
58
+ [fieldKey]: {}
59
+ };
60
+ },
61
+ getActiveFiltersCount: (value) => {
62
+ let count = 0;
63
+ Object.values(value).forEach((range) => {
64
+ if (range.from !== void 0 || range.to !== void 0) count++;
65
+ });
66
+ return count;
67
+ },
68
+ renderFilter: (value, onChange) => {
69
+ return /* @__PURE__ */ jsx("div", { children: Object.entries(fields).map(([fieldKey, fieldLabel]) => /* @__PURE__ */ jsx(RangeFilter, {
70
+ label: fieldLabel,
71
+ value: value[fieldKey] || {},
72
+ onChange: (rangeValue) => onChange({
73
+ ...value,
74
+ [fieldKey]: rangeValue
75
+ }),
76
+ onClear: () => onChange({
77
+ ...value,
78
+ [fieldKey]: {}
79
+ })
80
+ }, fieldKey)) });
81
+ }
82
+ });
83
+ }
84
+
85
+ //#endregion
86
+ export { createDualRangeFilterAdapter };
87
+ //# sourceMappingURL=create-dual-range-filter-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-dual-range-filter-adapter.js","names":["Row","ChipItem","FilterAdapter","RangeFilter","createFilterAdapter","RangeValue","from","to","DualRangeFilterValue","fieldName","DualRangeFilterAdapterConfig","id","label","fields","Record","formatNumber","num","getRowValue","row","TData","createDualRangeFilterAdapter","config","toLocaleString","getValue","initialValue","Object","keys","forEach","key","filterFn","columnId","filterValue","rowValue","fieldKey","range","entries","hasFilter","undefined","fieldValue","matchesFrom","matchesTo","cellRenderer","toChips","value","chips","fieldLabel","fromText","toText","push","metadata","field","fromChip","chip","currentValue","getActiveFiltersCount","count","values","renderFilter","onChange","map","rangeValue"],"sources":["../../../../../src/components/ds-table/filters/adapters/create-dual-range-filter-adapter.tsx"],"sourcesContent":["import type { Row } from '@tanstack/react-table';\nimport type { ChipItem } from '../../../ds-chip-group';\nimport type { FilterAdapter } from '../types/filter-adapter.types';\nimport { RangeFilter } from '../components/range-filter';\nimport { createFilterAdapter } from './create-filter-adapter';\n\nexport interface RangeValue {\n\tfrom?: number;\n\tto?: number;\n}\n\nexport interface DualRangeFilterValue {\n\t[fieldName: string]: RangeValue;\n}\n\nexport interface DualRangeFilterAdapterConfig<TData> {\n\t/**\n\t * Unique identifier (should match column accessorKey)\n\t */\n\tid: string;\n\n\t/**\n\t * Display label for filter navigation\n\t */\n\tlabel: string;\n\n\t/**\n\t * Field configurations: { fieldKey: displayLabel }\n\t * Example: { running: 'Running', completed: 'Completed' }\n\t */\n\tfields: Record<string, string>;\n\n\t/**\n\t * Optional formatter for chip display\n\t * @default (num) => num.toLocaleString('en-US')\n\t */\n\tformatNumber?: (num: number) => string;\n\n\t/**\n\t * How to extract the value object from a row\n\t * @default (row) => row.getValue(id)\n\t */\n\tgetRowValue?: (row: Row<TData>) => Record<string, number>;\n}\n\n/**\n * Factory function to create a dual-range filter adapter\n * Handles filtering on multiple numeric ranges within a single column\n */\nexport function createDualRangeFilterAdapter<TData>(\n\tconfig: DualRangeFilterAdapterConfig<TData>,\n): FilterAdapter<TData, DualRangeFilterValue, Record<string, number>> {\n\tconst {\n\t\tid,\n\t\tlabel,\n\t\tfields,\n\t\tformatNumber = (num) => num.toLocaleString('en-US'),\n\t\tgetRowValue = (row) => row.getValue(id),\n\t} = config;\n\n\tconst initialValue: DualRangeFilterValue = {};\n\tObject.keys(fields).forEach((key) => {\n\t\tinitialValue[key] = {};\n\t});\n\n\treturn createFilterAdapter<TData, DualRangeFilterValue, Record<string, number>>({\n\t\tid,\n\t\tlabel,\n\t\tinitialValue,\n\n\t\tfilterFn: (row, columnId, filterValue) => {\n\t\t\tconst rowValue = getRowValue(row);\n\n\t\t\t// Check each field's range\n\t\t\tfor (const [fieldKey, range] of Object.entries(filterValue)) {\n\t\t\t\tconst hasFilter = range.from !== undefined || range.to !== undefined;\n\n\t\t\t\tif (hasFilter) {\n\t\t\t\t\tconst fieldValue = rowValue[fieldKey];\n\t\t\t\t\tconst matchesFrom = range.from === undefined || fieldValue >= range.from;\n\t\t\t\t\tconst matchesTo = range.to === undefined || fieldValue <= range.to;\n\n\t\t\t\t\tif (!matchesFrom || !matchesTo) {\n\t\t\t\t\t\treturn false; // AND logic: all ranges must match\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tcellRenderer: undefined, // Let the column definition handle rendering\n\n\t\ttoChips: (value) => {\n\t\t\tconst chips: ChipItem[] = [];\n\n\t\t\tObject.entries(value).forEach(([fieldKey, range]) => {\n\t\t\t\tconst hasFilter = range.from !== undefined || range.to !== undefined;\n\n\t\t\t\tif (hasFilter) {\n\t\t\t\t\tconst fieldLabel = fields[fieldKey] || fieldKey;\n\t\t\t\t\tconst fromText = range.from !== undefined ? formatNumber(range.from) : '';\n\t\t\t\t\tconst toText = range.to !== undefined ? formatNumber(range.to) : '';\n\n\t\t\t\t\tchips.push({\n\t\t\t\t\t\tid: `${id}_${fieldKey}`,\n\t\t\t\t\t\tlabel: `${fieldLabel}: From ${fromText} to ${toText}`,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tkey: id,\n\t\t\t\t\t\t\tfield: fieldKey,\n\t\t\t\t\t\t\tfrom: range.from,\n\t\t\t\t\t\t\tto: range.to,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn chips;\n\t\t},\n\n\t\tfromChip: (chip, currentValue) => {\n\t\t\tconst fieldKey = chip.metadata?.field as string;\n\t\t\tif (!fieldKey) {\n\t\t\t\treturn currentValue;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...currentValue,\n\t\t\t\t[fieldKey]: {},\n\t\t\t};\n\t\t},\n\n\t\tgetActiveFiltersCount: (value) => {\n\t\t\tlet count = 0;\n\t\t\tObject.values(value).forEach((range) => {\n\t\t\t\tif (range.from !== undefined || range.to !== undefined) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn count;\n\t\t},\n\n\t\trenderFilter: (value, onChange) => {\n\t\t\treturn (\n\t\t\t\t<div>\n\t\t\t\t\t{Object.entries(fields).map(([fieldKey, fieldLabel]) => (\n\t\t\t\t\t\t<RangeFilter\n\t\t\t\t\t\t\tkey={fieldKey}\n\t\t\t\t\t\t\tlabel={fieldLabel}\n\t\t\t\t\t\t\t// This is not necessarily a redundant condition. It depends on `noUncheckedIndexedAccess`.\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\t\t\t\t\tvalue={value[fieldKey] || {}}\n\t\t\t\t\t\t\tonChange={(rangeValue) =>\n\t\t\t\t\t\t\t\tonChange({\n\t\t\t\t\t\t\t\t\t...value,\n\t\t\t\t\t\t\t\t\t[fieldKey]: rangeValue,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonClear={() =>\n\t\t\t\t\t\t\t\tonChange({\n\t\t\t\t\t\t\t\t\t...value,\n\t\t\t\t\t\t\t\t\t[fieldKey]: {},\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t);\n\t\t},\n\t});\n}\n"],"mappings":";;;;;;;;;;AAiDA,SAAgBoB,6BACfC,QACqE;CACrE,MAAM,EACLV,IACAC,OACAC,QACAE,gBAAgBC,QAAQA,IAAIM,eAAe,QAAQ,EACnDL,eAAeC,QAAQA,IAAIK,SAASZ,GAAE,KACnCU;CAEJ,MAAMG,eAAqC,EAAE;AAC7CC,QAAOC,KAAKb,OAAO,CAACc,SAASC,QAAQ;AACpCJ,eAAaI,OAAO,EAAE;GACrB;AAEF,QAAOxB,oBAAyE;EAC/EO;EACAC;EACAY;EAEAK,WAAWX,KAAKY,UAAUC,gBAAgB;GACzC,MAAMC,WAAWf,YAAYC,IAAI;AAGjC,QAAK,MAAM,CAACe,UAAUC,UAAUT,OAAOU,QAAQJ,YAAY,CAG1D,KAFkBG,MAAM5B,SAAS+B,UAAaH,MAAM3B,OAAO8B,QAE5C;IACd,MAAMC,aAAaN,SAASC;IAC5B,MAAMM,cAAcL,MAAM5B,SAAS+B,UAAaC,cAAcJ,MAAM5B;IACpE,MAAMkC,YAAYN,MAAM3B,OAAO8B,UAAaC,cAAcJ,MAAM3B;AAEhE,QAAI,CAACgC,eAAe,CAACC,UACpB,QAAO;;AAKV,UAAO;;EAGRC,cAAcJ;EAEdK,UAAUC,UAAU;GACnB,MAAMC,QAAoB,EAAE;AAE5BnB,UAAOU,QAAQQ,MAAM,CAAChB,SAAS,CAACM,UAAUC,WAAW;AAGpD,QAFkBA,MAAM5B,SAAS+B,UAAaH,MAAM3B,OAAO8B,QAE5C;KACd,MAAMQ,aAAahC,OAAOoB,aAAaA;KACvC,MAAMa,WAAWZ,MAAM5B,SAAS+B,SAAYtB,aAAamB,MAAM5B,KAAK,GAAG;KACvE,MAAMyC,SAASb,MAAM3B,OAAO8B,SAAYtB,aAAamB,MAAM3B,GAAG,GAAG;AAEjEqC,WAAMI,KAAK;MACVrC,IAAI,GAAGA,GAAE,GAAIsB;MACbrB,OAAO,GAAGiC,WAAU,SAAUC,SAAQ,MAAOC;MAC7CE,UAAU;OACTrB,KAAKjB;OACLuC,OAAOjB;OACP3B,MAAM4B,MAAM5B;OACZC,IAAI2B,MAAM3B;OACX;MACA,CAAC;;KAEF;AAEF,UAAOqC;;EAGRO,WAAWC,MAAMC,iBAAiB;GACjC,MAAMpB,WAAWmB,KAAKH,UAAUC;AAChC,OAAI,CAACjB,SACJ,QAAOoB;AAGR,UAAO;IACN,GAAGA;KACFpB,WAAW,EAAC;IACb;;EAGFqB,wBAAwBX,UAAU;GACjC,IAAIY,QAAQ;AACZ9B,UAAO+B,OAAOb,MAAM,CAAChB,SAASO,UAAU;AACvC,QAAIA,MAAM5B,SAAS+B,UAAaH,MAAM3B,OAAO8B,OAC5CkB;KAEA;AACF,UAAOA;;EAGRE,eAAed,OAAOe,aAAa;AAClC,UACC,oBAAC,mBACCjC,OAAOU,QAAQtB,OAAO,CAAC8C,KAAK,CAAC1B,UAAUY,gBACvC,oBAAC;IAEA,OAAOA;IAGP,OAAOF,MAAMV,aAAa,EAAE;IAC5B,WAAW2B,eACVF,SAAS;KACR,GAAGf;MACFV,WAAW2B;KACZ,CACF;IACA,eACCF,SAAS;KACR,GAAGf;MACFV,WAAW,EAAC;KACb,CACF;MAhBKA,SAkBN,CAAC,GACG;;EAGR,CAAC"}
@@ -0,0 +1,83 @@
1
+
2
+ //#region src/components/ds-table/filters/adapters/create-filter-adapter.ts
3
+ /**
4
+ * Base factory function to create a filter adapter
5
+ *
6
+ * This is the core function that all specialized filter adapters use internally.
7
+ * Use this when checkbox or dual-range adapters don't fit your requirements.
8
+ *
9
+ * ## When to use directly:
10
+ * - Complex filtering logic (e.g., editor + date range)
11
+ * - Unique UI that doesn't fit generic patterns
12
+ * - Combining multiple sub-filters
13
+ * - Special chip generation requirements
14
+ *
15
+ * ## When to use specialized helpers instead:
16
+ * - **Checkbox filters**: Use `createCheckboxFilterAdapter` for multi-select
17
+ * - **Range filters**: Use `createDualRangeFilterAdapter` for numeric ranges
18
+ *
19
+ * ## Example:
20
+ * ```typescript
21
+ * interface MyFilterValue {
22
+ * users: string[];
23
+ * dateRange: { from?: Date; to?: Date };
24
+ * }
25
+ *
26
+ * const myFilter = createFilterAdapter<DataType, MyFilterValue>({
27
+ * id: 'myColumn',
28
+ * label: 'My Filter',
29
+ * initialValue: { users: [], dateRange: {} },
30
+ *
31
+ * filterFn: (row, columnId, filterValue) => {
32
+ * // Your custom logic
33
+ * return matchesUsers && matchesDateRange;
34
+ * },
35
+ *
36
+ * toChips: (value) => {
37
+ * // Generate chips from your filter value
38
+ * return chips;
39
+ * },
40
+ *
41
+ * fromChip: (chip, currentValue) => {
42
+ * // Remove chip's effect from value
43
+ * return updatedValue;
44
+ * },
45
+ *
46
+ * getActiveFiltersCount: (value) => {
47
+ * // Count active filters (0 means none active)
48
+ * return count;
49
+ * },
50
+ *
51
+ * renderFilter: (value, onChange) => (
52
+ * <YourCustomFilterComponent
53
+ * value={value}
54
+ * onChange={onChange}
55
+ * />
56
+ * ),
57
+ * });
58
+ * ```
59
+ *
60
+ * ## Reference Implementation:
61
+ * See `workflow-filters.config.tsx` for a complete example (lastEditedFilterAdapter).
62
+ *
63
+ * ## Note:
64
+ * Most use cases are covered by `createCheckboxFilterAdapter` or `createDualRangeFilterAdapter`.
65
+ * Only use this base function directly when you need completely custom filter logic.
66
+ */
67
+ function createFilterAdapter(config) {
68
+ return {
69
+ id: config.id,
70
+ label: config.label,
71
+ initialValue: config.initialValue,
72
+ columnFilterFn: config.filterFn,
73
+ cellRenderer: config.cellRenderer,
74
+ toChips: config.toChips,
75
+ fromChip: config.fromChip,
76
+ getActiveFiltersCount: config.getActiveFiltersCount,
77
+ reset: () => config.initialValue,
78
+ renderFilter: config.renderFilter
79
+ };
80
+ }
81
+
82
+ //#endregion
83
+ exports.createFilterAdapter = createFilterAdapter;