@likable-hair/svelte 3.0.20 → 3.0.21

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 (43) hide show
  1. package/dist/components/composed/common/MenuOrDrawer.svelte +3 -2
  2. package/dist/components/composed/common/MenuOrDrawer.svelte.d.ts +2 -1
  3. package/dist/components/composed/common/MenuOrDrawerOptions.svelte +2 -2
  4. package/dist/components/composed/common/MenuOrDrawerOptions.svelte.d.ts +1 -1
  5. package/dist/components/composed/forms/Dropdown.svelte +6 -4
  6. package/dist/components/composed/forms/Dropdown.svelte.d.ts +3 -0
  7. package/dist/components/composed/list/PaginatedTable.svelte +62 -10
  8. package/dist/components/composed/list/PaginatedTable.svelte.d.ts +3 -0
  9. package/dist/components/composed/search/FilterEditor.svelte +260 -0
  10. package/dist/components/composed/search/FilterEditor.svelte.d.ts +29 -0
  11. package/dist/components/composed/search/Filters.svelte +445 -42
  12. package/dist/components/composed/search/Filters.svelte.d.ts +24 -4
  13. package/dist/components/composed/search/MobileFilterEditor.svelte +342 -0
  14. package/dist/components/composed/search/MobileFilterEditor.svelte.d.ts +34 -0
  15. package/dist/components/composed/search/SearchBar.svelte +12 -11
  16. package/dist/components/composed/search/SearchBar.svelte.d.ts +1 -0
  17. package/dist/components/simple/buttons/Button.svelte +4 -0
  18. package/dist/components/simple/common/Menu.svelte +29 -10
  19. package/dist/components/simple/common/Menu.svelte.d.ts +2 -0
  20. package/dist/components/simple/dates/DatePickerTextField.svelte +91 -61
  21. package/dist/components/simple/dates/DatePickerTextField.svelte.d.ts +2 -0
  22. package/dist/components/simple/dialogs/Dialog.svelte.d.ts +1 -1
  23. package/dist/components/simple/forms/Autocomplete.css +1 -0
  24. package/dist/components/simple/forms/Autocomplete.svelte +96 -46
  25. package/dist/components/simple/forms/Autocomplete.svelte.d.ts +3 -0
  26. package/dist/components/simple/lists/SelectableVerticalList.svelte +52 -9
  27. package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +9 -0
  28. package/dist/components/simple/lists/SimpleTable.svelte.d.ts +2 -2
  29. package/dist/components/simple/lists/columnTypes.d.ts +1 -1
  30. package/dist/components/simple/media/DescriptiveAvatar.svelte.d.ts +1 -1
  31. package/dist/components/simple/navigation/Chip.css +2 -1
  32. package/dist/components/simple/navigation/Chip.svelte +16 -5
  33. package/dist/components/simple/navigation/Chip.svelte.d.ts +1 -0
  34. package/dist/components/simple/navigation/Drawer.svelte +10 -0
  35. package/dist/components/simple/navigation/Drawer.svelte.d.ts +1 -0
  36. package/dist/utils/filters/builder.d.ts +1 -1
  37. package/dist/utils/filters/builder.js +1 -1
  38. package/dist/utils/filters/filters.d.ts +67 -4
  39. package/dist/utils/filters/filters.js +73 -0
  40. package/dist/utils/filters/modifiers/where.d.ts +1 -1
  41. package/dist/utils/filters/validator.d.ts +4 -0
  42. package/dist/utils/filters/validator.js +30 -0
  43. package/package.json +2 -1
@@ -1,10 +1,18 @@
1
1
  <script>import "../../../css/main.css";
2
2
  import "./Drawer.css";
3
3
  import Navigator from "./Navigator.svelte";
4
+ import { createEventDispatcher } from "svelte";
4
5
  export let open = false, position = "left", overlay = true, items = [];
6
+ const dispatch = createEventDispatcher();
5
7
  function handleClickOverlay() {
6
8
  open = false;
9
+ overlay = false;
10
+ dispatch("close");
7
11
  }
12
+ $:
13
+ if (open) {
14
+ overlay = true;
15
+ }
8
16
  </script>
9
17
 
10
18
  <div
@@ -75,6 +83,8 @@ function handleClickOverlay() {
75
83
  );
76
84
  color: var(--drawer-color, var(--drawer-default-color));
77
85
  overflow: var(--drawer-overflow, var(--drawer-default-overflow));
86
+ border-radius: var(--drawer-border-radius);
87
+ margin: var(--drawer-margin);
78
88
  }
79
89
 
80
90
  .overlay {
@@ -13,6 +13,7 @@ declare const __propDef: {
13
13
  'item-click': CustomEvent<{
14
14
  item: Item;
15
15
  }>;
16
+ close: CustomEvent<{}>;
16
17
  } & {
17
18
  [evt: string]: CustomEvent<any>;
18
19
  };
@@ -10,7 +10,7 @@ export default class Builder {
10
10
  where(callback: (builder: Builder) => void): Builder;
11
11
  where(key: Record<string, string | number | Date>): Builder;
12
12
  where(key: string, value: string | number | Date): Builder;
13
- where(key: string, operator: string, value: string | number | Date): Builder;
13
+ where(key: string, operator: string, value: string | number | Date | boolean): Builder;
14
14
  whereNot(callback: (builder: Builder) => void): Builder;
15
15
  whereNot(key: Record<string, string | number | Date>): Builder;
16
16
  whereNot(key: string, value: string | number | Date): Builder;
@@ -7,7 +7,7 @@ export default class Builder {
7
7
  return this.applyWhereClause('and', first, second, third);
8
8
  }
9
9
  whereNot(first, second, third) {
10
- return this.applyWhereClause('and', first, second, third);
10
+ return this.applyWhereClause('andNot', first, second, third);
11
11
  }
12
12
  orWhere(first, second, third) {
13
13
  return this.applyWhereClause('or', first, second, third);
@@ -1,26 +1,89 @@
1
1
  import Builder from "./builder";
2
+ export declare const StringModes: readonly ["equal", "like", "ilike"];
3
+ export type StringMode = typeof StringModes[number];
4
+ export declare const GenericModes: readonly ["equal", "greater", "lower", "between"];
5
+ export type DateMode = typeof GenericModes[number];
6
+ export type NumberMode = typeof GenericModes[number];
7
+ export declare const SelectModes: readonly ["equal", "different"];
8
+ export type SelectMode = typeof SelectModes[number];
2
9
  type MultiStringFilter = {
3
10
  type: 'multiString';
4
11
  columns: string[];
5
12
  operator?: 'or' | 'and';
13
+ value?: string;
14
+ };
15
+ type ChoiceFilter = {
16
+ type: 'choice';
17
+ column: string;
18
+ value?: string;
19
+ operator?: 'or' | 'and';
20
+ options: any[];
6
21
  };
7
22
  type StringFilter = {
8
23
  type: 'string';
9
24
  column: string;
10
- value: string | undefined;
11
- mode?: 'equal' | 'like' | 'ilike';
25
+ value?: string;
26
+ mode?: StringMode;
27
+ };
28
+ type DateFilter = {
29
+ type: 'date';
30
+ column: string;
31
+ } & ({
32
+ mode: 'between';
33
+ from?: Date;
34
+ to?: Date;
35
+ } | {
36
+ mode: 'equal' | 'greater' | 'lower';
37
+ value?: Date;
38
+ });
39
+ type NumberFilter = {
40
+ type: 'number';
41
+ column: string;
42
+ } & ({
43
+ mode: 'between';
44
+ from?: number;
45
+ to?: number;
46
+ } | {
47
+ mode: 'equal' | 'greater' | 'lower';
48
+ value?: number;
49
+ });
50
+ type SelectFilter = {
51
+ type: 'select';
52
+ column: string;
53
+ mode: SelectMode;
54
+ items: {
55
+ value: string | number;
56
+ label: string;
57
+ }[];
58
+ values?: {
59
+ value: string | number;
60
+ label?: string | number;
61
+ }[];
62
+ };
63
+ type BoolFilter = {
64
+ type: 'bool';
65
+ column: string;
66
+ mode: 'equal';
67
+ value?: boolean;
68
+ advanced?: false;
69
+ desctiprion: string;
12
70
  };
13
71
  export type Filter = {
14
72
  name: string;
15
- active: boolean;
73
+ active?: boolean;
16
74
  hidden?: boolean;
17
75
  label: string;
18
- } & (StringFilter | MultiStringFilter);
76
+ advanced?: boolean;
77
+ } & (StringFilter | MultiStringFilter | ChoiceFilter | DateFilter | NumberFilter | SelectFilter | BoolFilter);
19
78
  export default class Converter {
20
79
  constructor();
21
80
  createBuilder(params: {
22
81
  filters: Filter[];
23
82
  }): Builder;
24
83
  private applyStringFilter;
84
+ private applyDateFilter;
85
+ private applyNumberFilter;
86
+ private applySelectFilter;
87
+ private applyBooleanFilter;
25
88
  }
26
89
  export {};
@@ -1,4 +1,7 @@
1
1
  import Builder from "./builder";
2
+ export const StringModes = ['equal', 'like', 'ilike'];
3
+ export const GenericModes = ['equal', 'greater', 'lower', 'between'];
4
+ export const SelectModes = ['equal', 'different'];
2
5
  export default class Converter {
3
6
  constructor() {
4
7
  }
@@ -9,6 +12,18 @@ export default class Converter {
9
12
  if (filter.type == 'string') {
10
13
  this.applyStringFilter({ builder, filter });
11
14
  }
15
+ else if (filter.type == 'date') {
16
+ this.applyDateFilter({ builder, filter });
17
+ }
18
+ else if (filter.type == 'number') {
19
+ this.applyNumberFilter({ builder, filter });
20
+ }
21
+ else if (filter.type == 'select') {
22
+ this.applySelectFilter({ builder, filter });
23
+ }
24
+ else if (filter.type == 'bool') {
25
+ this.applyBooleanFilter({ builder, filter });
26
+ }
12
27
  }
13
28
  return builder;
14
29
  }
@@ -26,4 +41,62 @@ export default class Converter {
26
41
  }
27
42
  return params.builder;
28
43
  }
44
+ applyDateFilter(params) {
45
+ if (params.filter.mode == 'equal' && !!params.filter.value) {
46
+ params.builder.where(params.filter.column, '=', params.filter.value);
47
+ }
48
+ else if (params.filter.mode == 'greater' && !!params.filter.value) {
49
+ params.builder.where(params.filter.column, '>', params.filter.value);
50
+ }
51
+ else if (params.filter.mode == 'lower' && !!params.filter.value) {
52
+ params.builder.where(params.filter.column, '<', params.filter.value);
53
+ }
54
+ else if (params.filter.mode == 'between' && !!params.filter.from && !!params.filter.to) {
55
+ params.builder.where(params.filter.column, '>', params.filter.from);
56
+ params.builder.where(params.filter.column, '<', params.filter.to);
57
+ }
58
+ return params.builder;
59
+ }
60
+ applyNumberFilter(params) {
61
+ if (params.filter.mode == 'equal' && !!params.filter.value) {
62
+ params.builder.where(params.filter.column, '=', params.filter.value);
63
+ }
64
+ else if (params.filter.mode == 'greater' && !!params.filter.value) {
65
+ params.builder.where(params.filter.column, '>', params.filter.value);
66
+ }
67
+ else if (params.filter.mode == 'lower' && !!params.filter.value) {
68
+ params.builder.where(params.filter.column, '<', params.filter.value);
69
+ }
70
+ else if (params.filter.mode == 'between' && !!params.filter.from && !!params.filter.to) {
71
+ params.builder.where(params.filter.column, '>', params.filter.from);
72
+ params.builder.where(params.filter.column, '<', params.filter.to);
73
+ }
74
+ return params.builder;
75
+ }
76
+ applySelectFilter(params) {
77
+ if (!!params.filter.values && params.filter.values.length > 0) {
78
+ if (params.filter.mode == 'equal') {
79
+ params.builder.where(b => {
80
+ b.where(params.filter.column, '=', params.filter.values[0].value);
81
+ for (let i = 1; i < params.filter.values.length; i += 1) {
82
+ b.orWhere(params.filter.column, '=', params.filter.values[i].value);
83
+ }
84
+ });
85
+ }
86
+ else {
87
+ params.builder.where(b => {
88
+ for (let i = 0; i < params.filter.values.length; i += 1) {
89
+ b.whereNot(params.filter.column, '=', params.filter.values[i].value);
90
+ }
91
+ });
92
+ }
93
+ }
94
+ return params.builder;
95
+ }
96
+ applyBooleanFilter(params) {
97
+ if (params.filter.value !== undefined) {
98
+ params.builder.where(params.filter.column, '=', params.filter.value);
99
+ }
100
+ return params.builder;
101
+ }
29
102
  }
@@ -16,7 +16,7 @@ type SimpleWhere = {
16
16
  logicalOperator?: 'and' | 'or' | 'andNot' | 'orNot';
17
17
  key: string;
18
18
  operator?: string;
19
- value: string | number | Date;
19
+ value: string | number | Date | boolean;
20
20
  };
21
21
  type InWhere = {
22
22
  method: 'where';
@@ -0,0 +1,4 @@
1
+ import type { Filter } from "./filters";
2
+ export default class Validator {
3
+ static isValid(filter?: Filter): boolean;
4
+ }
@@ -0,0 +1,30 @@
1
+ export default class Validator {
2
+ static isValid(filter) {
3
+ if (!filter)
4
+ return false;
5
+ else if (filter.type == 'string')
6
+ return !!filter.value;
7
+ else if (filter.type == 'date') {
8
+ if (filter.mode == 'between')
9
+ return !!filter.from && !!filter.to;
10
+ else
11
+ return !!filter.value;
12
+ }
13
+ else if (filter.type == 'multiString')
14
+ return !!filter.value;
15
+ else if (filter.type == 'number') {
16
+ if (filter.mode == 'between')
17
+ return filter.from != undefined && filter.to != undefined;
18
+ else
19
+ return filter.value != undefined;
20
+ }
21
+ else if (filter.type == 'select') {
22
+ return filter.values != undefined && filter.values.length > 0;
23
+ }
24
+ else if (filter.type == 'bool') {
25
+ return filter.value !== undefined;
26
+ }
27
+ else
28
+ return false;
29
+ }
30
+ }
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@likable-hair/svelte",
3
3
  "description": "A Svelte component for likablehair",
4
- "version": "3.0.20",
4
+ "version": "3.0.21",
5
5
  "scripts": {
6
+ "host": "vite --host",
6
7
  "dev": "vite dev",
7
8
  "build": "vite build && npm run package",
8
9
  "preview": "vite preview",