draft-components 1.7.0 → 1.8.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.
@@ -14,7 +14,7 @@ const keyboardKeys = require('../../lib/keyboard-keys.cjs');
14
14
  const helpers = require('../../lib/helpers.cjs');
15
15
  const reactHelpers = require('../../lib/react-helpers.cjs');
16
16
 
17
- function FilteredSearch({ className, placeholder = 'Search and filter', applyButtonLabel = 'Apply', cancelButtonLabel = 'Cancel', clearButtonAccessibleName = 'Clear', removeFilterButtonAccessibleName = 'Remove filter', filtersConfig, filters, onChange, onMouseDown, ...props }) {
17
+ function FilteredSearch({ className, placeholder = 'Search and filter', applyButtonLabel = 'Apply', cancelButtonLabel = 'Cancel', clearButtonAccessibleName = 'Clear', removeFilterButtonAccessibleName = 'Remove filter', filtersConfig, filters, onChangeFilters, onMouseDown, ...props }) {
18
18
  const containerRef = react.useRef(null);
19
19
  const [query, setQuery] = react.useState('');
20
20
  const [hasFocus, setHasFocus] = react.useState(false);
@@ -39,18 +39,18 @@ function FilteredSearch({ className, placeholder = 'Search and filter', applyBut
39
39
  const addFilter = (config) => {
40
40
  const filter = createFilter(config);
41
41
  const textBoxElement = getTextBoxElement();
42
- onChange([...filters, filter]);
42
+ onChangeFilters([...filters, filter]);
43
43
  textBoxElement.blur();
44
44
  setQuery('');
45
45
  setActiveField(filter.field);
46
46
  };
47
47
  const changeFilter = (changedFilter) => {
48
48
  const newFilters = filters.map((filter) => (filter.field === changedFilter.field ? changedFilter : filter));
49
- onChange(newFilters);
49
+ onChangeFilters(newFilters);
50
50
  };
51
51
  const removeFilter = (filterToRemove) => {
52
52
  const newFilters = filters.filter((filter) => (filter.field !== filterToRemove.field));
53
- onChange(newFilters);
53
+ onChangeFilters(newFilters);
54
54
  };
55
55
  const onFilterEditStarted = (filter) => {
56
56
  setActiveField(filter.field);
@@ -133,7 +133,7 @@ function FilteredSearch({ className, placeholder = 'Search and filter', applyBut
133
133
  }
134
134
  else if (key === keyboardKeys.KeyboardKeys.Backspace) {
135
135
  if (query === '' && filters.length > 0) {
136
- onChange(filters.slice(0, -1));
136
+ onChangeFilters(filters.slice(0, -1));
137
137
  isHandled = true;
138
138
  }
139
139
  }
@@ -163,7 +163,7 @@ function FilteredSearch({ className, placeholder = 'Search and filter', applyBut
163
163
  };
164
164
  const onClearButtonPressed = (event) => {
165
165
  event.stopPropagation();
166
- onChange([]);
166
+ onChangeFilters([]);
167
167
  };
168
168
  const onContainerPressed = (event) => {
169
169
  if (event.currentTarget === event.target) {
@@ -24,9 +24,9 @@ const emptyState = require('./empty-state/empty-state.cjs');
24
24
  const filePicker = require('./file-picker/file-picker.cjs');
25
25
  const filterButtons = require('./filter-buttons/filter-buttons.cjs');
26
26
  const filterButton = require('./filter-buttons/filter-button.cjs');
27
+ const filteredSearch = require('./filtered-search/filtered-search.cjs');
27
28
  const stringFilter = require('./filtered-search/model/string-filter.cjs');
28
29
  const stringSetFilter = require('./filtered-search/model/string-set-filter.cjs');
29
- const filteredSearch = require('./filtered-search/filtered-search.cjs');
30
30
  const formField = require('./form-field/form-field.cjs');
31
31
  const label = require('./label/label.cjs');
32
32
  const menu = require('./menu/menu.cjs');
@@ -95,9 +95,9 @@ exports.EmptyState = emptyState.EmptyState;
95
95
  exports.FilePicker = filePicker.FilePicker;
96
96
  exports.FilterButtons = filterButtons.FilterButtons;
97
97
  exports.FilterButton = filterButton.FilterButton;
98
+ exports.FilteredSearch = filteredSearch.FilteredSearch;
98
99
  exports.StringFilter = stringFilter.StringFilter;
99
100
  exports.StringSetFilter = stringSetFilter.StringSetFilter;
100
- exports.FilteredSearch = filteredSearch.FilteredSearch;
101
101
  exports.FormField = formField.FormField;
102
102
  exports.Label = label.Label;
103
103
  exports.Menu = menu.Menu;
package/cjs/index.cjs CHANGED
@@ -31,9 +31,9 @@ const emptyState = require('./components/empty-state/empty-state.cjs');
31
31
  const filePicker = require('./components/file-picker/file-picker.cjs');
32
32
  const filterButtons = require('./components/filter-buttons/filter-buttons.cjs');
33
33
  const filterButton = require('./components/filter-buttons/filter-button.cjs');
34
+ const filteredSearch = require('./components/filtered-search/filtered-search.cjs');
34
35
  const stringFilter = require('./components/filtered-search/model/string-filter.cjs');
35
36
  const stringSetFilter = require('./components/filtered-search/model/string-set-filter.cjs');
36
- const filteredSearch = require('./components/filtered-search/filtered-search.cjs');
37
37
  const formField = require('./components/form-field/form-field.cjs');
38
38
  const label = require('./components/label/label.cjs');
39
39
  const menu = require('./components/menu/menu.cjs');
@@ -115,9 +115,9 @@ exports.EmptyState = emptyState.EmptyState;
115
115
  exports.FilePicker = filePicker.FilePicker;
116
116
  exports.FilterButtons = filterButtons.FilterButtons;
117
117
  exports.FilterButton = filterButton.FilterButton;
118
+ exports.FilteredSearch = filteredSearch.FilteredSearch;
118
119
  exports.StringFilter = stringFilter.StringFilter;
119
120
  exports.StringSetFilter = stringSetFilter.StringSetFilter;
120
- exports.FilteredSearch = filteredSearch.FilteredSearch;
121
121
  exports.FormField = formField.FormField;
122
122
  exports.Label = label.Label;
123
123
  exports.Menu = menu.Menu;
@@ -3925,12 +3925,17 @@
3925
3925
  }
3926
3926
 
3927
3927
  .dc-filtered-search__clear-button {
3928
+ flex-shrink: 0;
3928
3929
  margin-top: 1px;
3929
3930
  margin-right: 1px;
3930
3931
  white-space: nowrap;
3931
3932
  border-radius: calc(var(--dc-filtered-search-border-radius) - 1px);
3932
3933
  }
3933
3934
 
3935
+ .dc-filtered-search__clear-button:focus::after {
3936
+ border-radius: inherit;
3937
+ }
3938
+
3934
3939
  .dc-filtered-search__filters {
3935
3940
  display: flex;
3936
3941
  flex-grow: 1;
@@ -12,7 +12,7 @@ import { KeyboardKeys } from '../../lib/keyboard-keys.js';
12
12
  import { exhaustiveCheck } from '../../lib/helpers.js';
13
13
  import { classNames } from '../../lib/react-helpers.js';
14
14
 
15
- function FilteredSearch({ className, placeholder = 'Search and filter', applyButtonLabel = 'Apply', cancelButtonLabel = 'Cancel', clearButtonAccessibleName = 'Clear', removeFilterButtonAccessibleName = 'Remove filter', filtersConfig, filters, onChange, onMouseDown, ...props }) {
15
+ function FilteredSearch({ className, placeholder = 'Search and filter', applyButtonLabel = 'Apply', cancelButtonLabel = 'Cancel', clearButtonAccessibleName = 'Clear', removeFilterButtonAccessibleName = 'Remove filter', filtersConfig, filters, onChangeFilters, onMouseDown, ...props }) {
16
16
  const containerRef = useRef(null);
17
17
  const [query, setQuery] = useState('');
18
18
  const [hasFocus, setHasFocus] = useState(false);
@@ -37,18 +37,18 @@ function FilteredSearch({ className, placeholder = 'Search and filter', applyBut
37
37
  const addFilter = (config) => {
38
38
  const filter = createFilter(config);
39
39
  const textBoxElement = getTextBoxElement();
40
- onChange([...filters, filter]);
40
+ onChangeFilters([...filters, filter]);
41
41
  textBoxElement.blur();
42
42
  setQuery('');
43
43
  setActiveField(filter.field);
44
44
  };
45
45
  const changeFilter = (changedFilter) => {
46
46
  const newFilters = filters.map((filter) => (filter.field === changedFilter.field ? changedFilter : filter));
47
- onChange(newFilters);
47
+ onChangeFilters(newFilters);
48
48
  };
49
49
  const removeFilter = (filterToRemove) => {
50
50
  const newFilters = filters.filter((filter) => (filter.field !== filterToRemove.field));
51
- onChange(newFilters);
51
+ onChangeFilters(newFilters);
52
52
  };
53
53
  const onFilterEditStarted = (filter) => {
54
54
  setActiveField(filter.field);
@@ -131,7 +131,7 @@ function FilteredSearch({ className, placeholder = 'Search and filter', applyBut
131
131
  }
132
132
  else if (key === KeyboardKeys.Backspace) {
133
133
  if (query === '' && filters.length > 0) {
134
- onChange(filters.slice(0, -1));
134
+ onChangeFilters(filters.slice(0, -1));
135
135
  isHandled = true;
136
136
  }
137
137
  }
@@ -161,7 +161,7 @@ function FilteredSearch({ className, placeholder = 'Search and filter', applyBut
161
161
  };
162
162
  const onClearButtonPressed = (event) => {
163
163
  event.stopPropagation();
164
- onChange([]);
164
+ onChangeFilters([]);
165
165
  };
166
166
  const onContainerPressed = (event) => {
167
167
  if (event.currentTarget === event.target) {
@@ -22,9 +22,9 @@ export { EmptyState } from './empty-state/empty-state.js';
22
22
  export { FilePicker } from './file-picker/file-picker.js';
23
23
  export { FilterButtons } from './filter-buttons/filter-buttons.js';
24
24
  export { FilterButton } from './filter-buttons/filter-button.js';
25
+ export { FilteredSearch } from './filtered-search/filtered-search.js';
25
26
  export { StringFilter } from './filtered-search/model/string-filter.js';
26
27
  export { StringSetFilter } from './filtered-search/model/string-set-filter.js';
27
- export { FilteredSearch } from './filtered-search/filtered-search.js';
28
28
  export { FormField } from './form-field/form-field.js';
29
29
  export { Label } from './label/label.js';
30
30
  export { Menu } from './menu/menu.js';
package/esm/index.js CHANGED
@@ -29,9 +29,9 @@ export { EmptyState } from './components/empty-state/empty-state.js';
29
29
  export { FilePicker } from './components/file-picker/file-picker.js';
30
30
  export { FilterButtons } from './components/filter-buttons/filter-buttons.js';
31
31
  export { FilterButton } from './components/filter-buttons/filter-button.js';
32
+ export { FilteredSearch } from './components/filtered-search/filtered-search.js';
32
33
  export { StringFilter } from './components/filtered-search/model/string-filter.js';
33
34
  export { StringSetFilter } from './components/filtered-search/model/string-set-filter.js';
34
- export { FilteredSearch } from './components/filtered-search/filtered-search.js';
35
35
  export { FormField } from './components/form-field/form-field.js';
36
36
  export { Label } from './components/label/label.js';
37
37
  export { Menu } from './components/menu/menu.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "draft-components",
3
- "version": "1.7.0",
3
+ "version": "1.8.0",
4
4
  "description": "The React based UI components library.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -29,8 +29,8 @@
29
29
  "coverage": "npm run test -- --coverage --no-cache",
30
30
  "lint": "eslint '**/*.{js,ts,tsx}'",
31
31
  "lint-styles": "stylelint 'src/**/*.css'",
32
- "check-types": "tsc --noEmit",
33
- "prebuild": "npm run test && npm run lint && npm run lint-styles",
32
+ "check-types": "tsc --project 'tsconfig.json' --noEmit",
33
+ "prebuild": "npm run check-types && npm run test && npm run lint && npm run lint-styles",
34
34
  "build": "node scripts/build.js",
35
35
  "build-storybook": "storybook build",
36
36
  "preversion": "npm run build",
@@ -56,50 +56,50 @@
56
56
  "react-dom": ">= 18"
57
57
  },
58
58
  "devDependencies": {
59
- "@alexzimakov/eslint-config": "1.5.0",
60
- "@babel/core": "7.22.5",
61
- "@babel/preset-env": "7.22.5",
59
+ "@alexzimakov/eslint-config": "1.6.0",
60
+ "@babel/core": "7.22.9",
61
+ "@babel/preset-env": "7.22.9",
62
62
  "@babel/preset-react": "7.22.5",
63
63
  "@babel/preset-typescript": "7.22.5",
64
64
  "@heroicons/react": "2.0.18",
65
- "@rollup/plugin-typescript": "11.1.1",
66
- "@storybook/addon-actions": "7.0.23",
67
- "@storybook/addon-essentials": "7.0.23",
68
- "@storybook/addon-links": "7.0.23",
69
- "@storybook/react": "7.0.23",
70
- "@storybook/react-vite": "7.0.23",
65
+ "@rollup/plugin-typescript": "11.1.2",
66
+ "@storybook/addon-actions": "7.1.1",
67
+ "@storybook/addon-essentials": "7.1.1",
68
+ "@storybook/addon-links": "7.1.1",
69
+ "@storybook/react": "7.1.1",
70
+ "@storybook/react-vite": "7.1.1",
71
71
  "@testing-library/dom": "9.3.1",
72
- "@testing-library/jest-dom": "5.16.5",
72
+ "@testing-library/jest-dom": "5.17.0",
73
73
  "@testing-library/react": "14.0.0",
74
74
  "@testing-library/user-event": "14.4.3",
75
- "@types/jest": "29.5.2",
76
- "@types/node": "18.16.18",
77
- "@types/react": "18.2.13",
78
- "@types/react-dom": "18.2.6",
79
- "@typescript-eslint/eslint-plugin": "5.60.0",
80
- "@typescript-eslint/parser": "5.60.0",
75
+ "@types/jest": "29.5.3",
76
+ "@types/node": "18.17.0",
77
+ "@types/react": "18.2.16",
78
+ "@types/react-dom": "18.2.7",
79
+ "@typescript-eslint/eslint-plugin": "6.2.0",
80
+ "@typescript-eslint/parser": "6.2.0",
81
81
  "autoprefixer": "10.4.14",
82
- "eslint": "8.43.0",
82
+ "eslint": "8.45.0",
83
83
  "eslint-plugin-jsx-a11y": "6.7.1",
84
- "eslint-plugin-react": "7.32.2",
84
+ "eslint-plugin-react": "7.33.0",
85
85
  "eslint-plugin-react-hooks": "4.6.0",
86
- "eslint-plugin-storybook": "0.6.12",
86
+ "eslint-plugin-storybook": "0.6.13",
87
87
  "eslint-plugin-testing-library": "5.11.0",
88
88
  "husky": "8.0.3",
89
- "jest": "29.5.0",
90
- "jest-environment-jsdom": "29.5.0",
91
- "lint-staged": "13.2.2",
92
- "postcss": "8.4.24",
89
+ "jest": "29.6.1",
90
+ "jest-environment-jsdom": "29.6.1",
91
+ "lint-staged": "13.2.3",
92
+ "postcss": "8.4.27",
93
93
  "postcss-import": "15.1.0",
94
94
  "react": "18.2.0",
95
95
  "react-dom": "18.2.0",
96
- "rollup": "3.25.1",
97
- "storybook": "7.0.23",
98
- "stylelint": "15.8.0",
99
- "stylelint-config-standard": "33.0.0",
96
+ "rollup": "3.26.3",
97
+ "storybook": "7.1.1",
98
+ "stylelint": "15.10.2",
99
+ "stylelint-config-standard": "34.0.0",
100
100
  "stylelint-order": "6.0.3",
101
- "typescript": "5.1.3",
102
- "vite": "4.3.9"
101
+ "typescript": "5.1.6",
102
+ "vite": "4.4.7"
103
103
  },
104
104
  "lint-staged": {
105
105
  "*.ts?(x)": "npm run lint",
@@ -10,6 +10,6 @@ export type FilteredSearchProps = FilteredSearchBaseProps & {
10
10
  removeFilterButtonAccessibleName?: string;
11
11
  filtersConfig: FilterConfig[];
12
12
  filters: Filter[];
13
- onChange: (filters: Filter[]) => void;
13
+ onChangeFilters: (filters: Filter[]) => void;
14
14
  };
15
- export declare function FilteredSearch({ className, placeholder, applyButtonLabel, cancelButtonLabel, clearButtonAccessibleName, removeFilterButtonAccessibleName, filtersConfig, filters, onChange, onMouseDown, ...props }: FilteredSearchProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function FilteredSearch({ className, placeholder, applyButtonLabel, cancelButtonLabel, clearButtonAccessibleName, removeFilterButtonAccessibleName, filtersConfig, filters, onChangeFilters, onMouseDown, ...props }: FilteredSearchProps): import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,4 @@
1
- export { StringFilter } from './model/string-filter';
2
- export { StringSetFilter } from './model/string-set-filter';
3
1
  export { FilteredSearch, type FilteredSearchProps, type FilteredSearchBaseProps, type FilteredSearchHTMLProps, } from './filtered-search';
4
2
  export { type Filter, type FilterConfig, } from './types';
3
+ export { StringFilter, type StringFilterState, type StringFilterConfig, } from './model/string-filter';
4
+ export { StringSetFilter, type StringSetFilterState, type StringSetFilterConfig, } from './model/string-set-filter';
@@ -1,6 +1,6 @@
1
1
  import { AbstractFilter } from './abstract-filter';
2
2
  import { ValidationResult } from './validation-result';
3
- declare const TYPE = "STRING";
3
+ declare const TYPE: "STRING";
4
4
  declare const OPERATORS: {
5
5
  readonly equal: "EQUAL";
6
6
  readonly notEqual: "NOT_EQUAL";
@@ -25,7 +25,7 @@ export type StringFilterState = {
25
25
  operator: StringFilterOperator;
26
26
  };
27
27
  export declare class StringFilter extends AbstractFilter {
28
- static readonly Type = "STRING";
28
+ static readonly Type: "STRING";
29
29
  static readonly Operators: {
30
30
  readonly equal: "EQUAL";
31
31
  readonly notEqual: "NOT_EQUAL";
@@ -1,5 +1,5 @@
1
1
  import { AbstractFilter } from './abstract-filter';
2
- declare const TYPE = "STRING_SET";
2
+ declare const TYPE: "STRING_SET";
3
3
  declare const OPERATORS: {
4
4
  readonly in: "IN";
5
5
  readonly notIn: "NOT_IN";
@@ -21,7 +21,7 @@ export type StringSetFilterState = {
21
21
  operator: StringSetFilterOperator;
22
22
  };
23
23
  export declare class StringSetFilter extends AbstractFilter {
24
- static readonly Type = "STRING_SET";
24
+ static readonly Type: "STRING_SET";
25
25
  static readonly Operators: {
26
26
  readonly in: "IN";
27
27
  readonly notIn: "NOT_IN";