@likable-hair/svelte 4.2.5 → 4.3.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 (117) hide show
  1. package/dist/components/composed/buttons/ActivableButton.svelte +25 -7
  2. package/dist/components/composed/common/HeadersDrawer.svelte +66 -28
  3. package/dist/components/composed/common/HeadersDrawer.svelte.d.ts +22 -12
  4. package/dist/components/composed/common/MenuOrDrawer.svelte +40 -12
  5. package/dist/components/composed/common/MenuOrDrawerOptions.svelte +51 -27
  6. package/dist/components/composed/common/MenuOrDrawerOptions.svelte.d.ts +15 -10
  7. package/dist/components/composed/common/QuickActions.svelte +59 -23
  8. package/dist/components/composed/common/ToolTip.svelte +51 -32
  9. package/dist/components/composed/dashboard/DashboardShaper.svelte +280 -147
  10. package/dist/components/composed/dashboard/DashboardShaper.svelte.d.ts +54 -45
  11. package/dist/components/composed/forms/AsyncAutocomplete.svelte +81 -30
  12. package/dist/components/composed/forms/AsyncAutocomplete.svelte.d.ts +12 -5
  13. package/dist/components/composed/forms/AvatarDropdown.svelte +146 -70
  14. package/dist/components/composed/forms/AvatarDropdown.svelte.d.ts +27 -22
  15. package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte +65 -19
  16. package/dist/components/composed/forms/CountriesAutocomplete.svelte +33 -4
  17. package/dist/components/composed/forms/DatePickerTextField.svelte +266 -161
  18. package/dist/components/composed/forms/Dropdown.svelte +88 -21
  19. package/dist/components/composed/forms/Dropdown.svelte.d.ts +18 -13
  20. package/dist/components/composed/forms/IconsDropdown.svelte +85 -40
  21. package/dist/components/composed/forms/IconsDropdown.svelte.d.ts +15 -8
  22. package/dist/components/composed/forms/LabelAndSelect.svelte +46 -5
  23. package/dist/components/composed/forms/LabelAndTextField.svelte +56 -3
  24. package/dist/components/composed/forms/PeriodPicker.svelte +38 -18
  25. package/dist/components/composed/forms/PeriodPicker.svelte.d.ts +32 -7
  26. package/dist/components/composed/forms/PeriodSelector.svelte +427 -312
  27. package/dist/components/composed/forms/PeriodSelector.svelte.d.ts +20 -13
  28. package/dist/components/composed/forms/ToggleList.svelte +71 -37
  29. package/dist/components/composed/forms/ToggleList.svelte.d.ts +14 -7
  30. package/dist/components/composed/forms/YearPickerTextField.svelte +154 -82
  31. package/dist/components/composed/list/DynamicTable.svelte +1372 -809
  32. package/dist/components/composed/list/DynamicTable.svelte.d.ts +85 -70
  33. package/dist/components/composed/list/EnhancedPaginatedTable.svelte +75 -32
  34. package/dist/components/composed/list/EnhancedPaginatedTable.svelte.d.ts +16 -6
  35. package/dist/components/composed/list/PaginatedTable.svelte +324 -116
  36. package/dist/components/composed/list/PaginatedTable.svelte.d.ts +26 -22
  37. package/dist/components/composed/progress/HorizontalStackedProgress.svelte +67 -29
  38. package/dist/components/composed/search/DynamicFilters.svelte +126 -91
  39. package/dist/components/composed/search/FilterEditor.svelte +169 -109
  40. package/dist/components/composed/search/Filters.svelte +385 -275
  41. package/dist/components/composed/search/GlobalSearchTextField.svelte +102 -42
  42. package/dist/components/composed/search/GlobalSearchTextField.svelte.d.ts +23 -20
  43. package/dist/components/composed/search/MobileFilterEditor.svelte +174 -120
  44. package/dist/components/composed/search/QuickFilters.svelte +124 -75
  45. package/dist/components/composed/search/SearchBar.svelte +42 -3
  46. package/dist/components/composed/search/SearchResults.svelte +48 -5
  47. package/dist/components/composed/search/SearchResults.svelte.d.ts +17 -17
  48. package/dist/components/layouts/CollapsibleSideBarLayout.svelte +100 -24
  49. package/dist/components/layouts/StableDividedSideBarLayout.svelte +74 -24
  50. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte +140 -57
  51. package/dist/components/simple/buttons/Button.svelte +86 -36
  52. package/dist/components/simple/buttons/LinkButton.svelte +81 -25
  53. package/dist/components/simple/charts/BarChart.svelte +137 -105
  54. package/dist/components/simple/charts/LineChart.svelte +124 -92
  55. package/dist/components/simple/charts/PieChart.svelte +51 -23
  56. package/dist/components/simple/common/CollapsibleDivider.svelte +58 -26
  57. package/dist/components/simple/common/Divider.svelte +2 -1
  58. package/dist/components/simple/common/InfiniteScroll.svelte +60 -34
  59. package/dist/components/simple/common/MediaQuery.svelte +28 -3
  60. package/dist/components/simple/common/Menu.svelte +516 -371
  61. package/dist/components/simple/common/NoData.svelte +18 -4
  62. package/dist/components/simple/common/VerticalDraggableList.svelte +52 -26
  63. package/dist/components/simple/common/VerticalDraggableList.svelte.d.ts +20 -9
  64. package/dist/components/simple/dashboards/DashboardGridShaper.svelte +28 -22
  65. package/dist/components/simple/dates/Calendar.svelte +142 -72
  66. package/dist/components/simple/dates/DatePicker.svelte +138 -71
  67. package/dist/components/simple/dates/MonthSelector.svelte +49 -13
  68. package/dist/components/simple/dates/YearSelector.svelte +73 -30
  69. package/dist/components/simple/dialogs/Dialog.svelte +109 -59
  70. package/dist/components/simple/forms/Autocomplete.svelte +341 -164
  71. package/dist/components/simple/forms/Autocomplete.svelte.d.ts +27 -20
  72. package/dist/components/simple/forms/Checkbox.svelte +57 -29
  73. package/dist/components/simple/forms/FileInput.svelte +103 -58
  74. package/dist/components/simple/forms/FileInputList.svelte +115 -51
  75. package/dist/components/simple/forms/RadioButton.svelte +36 -3
  76. package/dist/components/simple/forms/Select.svelte +30 -3
  77. package/dist/components/simple/forms/SimpleTextField.svelte +94 -4
  78. package/dist/components/simple/forms/Switch.svelte +33 -11
  79. package/dist/components/simple/forms/Textarea.svelte +22 -5
  80. package/dist/components/simple/forms/VerticalSwitch.svelte +19 -2
  81. package/dist/components/simple/forms/VerticalTextSwitch.svelte +35 -3
  82. package/dist/components/simple/lists/BoxList.svelte +42 -11
  83. package/dist/components/simple/lists/ColorInvertedSelector.svelte +83 -25
  84. package/dist/components/simple/lists/HierarchyMenu.svelte +55 -20
  85. package/dist/components/simple/lists/Paginator.svelte +53 -34
  86. package/dist/components/simple/lists/SelectableMenuList.svelte +52 -16
  87. package/dist/components/simple/lists/SelectableVerticalList.svelte +169 -85
  88. package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +21 -14
  89. package/dist/components/simple/lists/SidebarMenuList.svelte +127 -79
  90. package/dist/components/simple/lists/SimpleTable.svelte +442 -245
  91. package/dist/components/simple/lists/SimpleTable.svelte.d.ts +31 -22
  92. package/dist/components/simple/loaders/CircularLoader.css +1 -1
  93. package/dist/components/simple/loaders/CircularLoader.svelte +11 -3
  94. package/dist/components/simple/loaders/Skeleton.svelte +3 -2
  95. package/dist/components/simple/media/Avatar.svelte +35 -15
  96. package/dist/components/simple/media/DescriptiveAvatar.svelte +30 -4
  97. package/dist/components/simple/media/FlagIcon.svelte +13 -3
  98. package/dist/components/simple/media/Icon.svelte +21 -6
  99. package/dist/components/simple/navigation/Breadcrumb.svelte +41 -9
  100. package/dist/components/simple/navigation/Chip.svelte +65 -29
  101. package/dist/components/simple/navigation/Drawer.svelte +132 -71
  102. package/dist/components/simple/navigation/HeaderMenu.svelte +69 -25
  103. package/dist/components/simple/navigation/Navigator.svelte +45 -11
  104. package/dist/components/simple/navigation/TabSwitcher.svelte +60 -19
  105. package/dist/components/simple/notifiers/AlertBanner.svelte +59 -11
  106. package/dist/components/simple/progress/ProgressBar.svelte +26 -10
  107. package/dist/components/simple/timeline/SimpleTimeLine.svelte +52 -5
  108. package/dist/components/simple/timeline/SimpleTimeLine.svelte.d.ts +16 -9
  109. package/dist/components/simple/typography/Code.svelte +41 -12
  110. package/dist/stores/layouts/unstableSidebarOpened.d.ts +1 -1
  111. package/dist/stores/layouts/unstableSidebarOpened.js +1 -1
  112. package/dist/stores/theme.js +2 -2
  113. package/dist/utils/filters/builder.d.ts +2 -2
  114. package/dist/utils/filters/builder.js +7 -7
  115. package/dist/utils/filters/modifiers/where.d.ts +1 -1
  116. package/dist/utils/teleporter.js +4 -4
  117. package/package.json +39 -33
@@ -1,48 +1,108 @@
1
- <script lang="ts" generics="Data">import '../../../css/main.css';
2
- import './GlobalSearchTextField.css';
3
- import Dialog from '../../simple/dialogs/Dialog.svelte';
4
- import { onMount } from 'svelte';
5
- import SearchBar from './SearchBar.svelte';
6
- import Keyboarder, {} from '../../../utils/keyboarder';
7
- import SearchResults, {} from './SearchResults.svelte';
8
- let { searchButtonText = "Search", searchDialogOpened = $bindable(false), transitionDuration = ".8s", searcher = () => Promise.resolve([]), class: clazz = {}, ontoggleSearchDialog, searchBarSnippet, searchButtonIconSnippet, searchButtonShortcutSnippet, searchButtonSnippet, searchButtonTextSnippet, searchResultsSnippet, onselect, } = $props();
9
- let searchBarInput = $state(), searchText = $state(), searchResults = $state(), searchLoading = $state(false), searchBarFocused = $state(false);
10
- onMount(() => {
11
- let handler = (params) => {
12
- if ((params.meta || params.ctrl) && params.key == 'k') {
13
- toggleSearchDialog();
14
- }
15
- };
16
- Keyboarder.on(handler);
1
+ <script lang="ts" generics="Data">
2
+ import '../../../css/main.css'
3
+ import './GlobalSearchTextField.css'
4
+ import Dialog from '../../simple/dialogs/Dialog.svelte'
5
+ import { onMount, type ComponentProps, type Snippet } from 'svelte';
6
+ import SearchBar from './SearchBar.svelte';
7
+ import Keyboarder, { type CallbackFunction } from '../../../utils/keyboarder';
8
+ import SearchResults, { type Result } from './SearchResults.svelte'
9
+
10
+ interface Props {
11
+ searchButtonText?: string;
12
+ searchDialogOpened?: boolean;
13
+ transitionDuration?: string;
14
+ class?: {
15
+ container?: string,
16
+ button?: string,
17
+ shortcut?: string
18
+ }
19
+ searcher?: (params: { searchText: string }) => Promise<Result<Data>[] | undefined>;
20
+ ontoggleSearchDialog?: (event: {
21
+ detail: {
22
+ opened: boolean
23
+ }
24
+ }) => void
25
+ searchButtonSnippet?: Snippet<[{
26
+ toggleSearchDialog: typeof toggleSearchDialog
27
+ }]>
28
+ searchButtonIconSnippet?: Snippet<[{
29
+ toggleSearchDialog: typeof toggleSearchDialog
30
+ }]>
31
+ searchButtonTextSnippet?: Snippet<[]>
32
+ searchButtonShortcutSnippet?: Snippet<[]>
33
+ searchBarSnippet?: Snippet<[{
34
+ searchBarInput: typeof searchBarInput,
35
+ searchText: typeof searchText,
36
+ search: typeof search,
37
+ }]>
38
+ searchResultsSnippet?: Snippet<[{
39
+ searchLoading: typeof searchLoading,
40
+ searchResults: typeof searchResults,
41
+ }]>
42
+ onselect?: ComponentProps<typeof SearchResults<Data>>['onselect']
43
+ }
44
+
45
+ let {
46
+ searchButtonText = "Search",
47
+ searchDialogOpened = $bindable(false),
48
+ transitionDuration = ".8s",
49
+ searcher = () => Promise.resolve([]),
50
+ class: clazz = {},
51
+ ontoggleSearchDialog,
52
+ searchBarSnippet,
53
+ searchButtonIconSnippet,
54
+ searchButtonShortcutSnippet,
55
+ searchButtonSnippet,
56
+ searchButtonTextSnippet,
57
+ searchResultsSnippet,
58
+ onselect,
59
+ }: Props = $props();
60
+
61
+ let searchBarInput: HTMLElement | undefined = $state(),
62
+ searchText: string | undefined = $state(),
63
+ searchResults: Result<Data>[] | undefined = $state(),
64
+ searchLoading: boolean = $state(false),
65
+ searchBarFocused: boolean = $state(false)
66
+
67
+ onMount(() => {
68
+ let handler: CallbackFunction = (params) => {
69
+ if((params.meta || params.ctrl) && params.key == 'k') {
70
+ toggleSearchDialog()
71
+ }
72
+ }
73
+
74
+ Keyboarder.on(handler)
75
+
17
76
  return () => {
18
- Keyboarder.off(handler);
19
- };
20
- });
21
- function handleKeydown(event) {
22
- if (event.key == 'ArrowDown' || event.key == 'ArrowUp')
23
- event.preventDefault();
24
- }
25
- function toggleSearchDialog() {
26
- searchDialogOpened = !searchDialogOpened;
27
- if (searchDialogOpened)
28
- searchBarInput?.focus();
29
- if (ontoggleSearchDialog) {
30
- ontoggleSearchDialog({
31
- detail: {
32
- opened: searchDialogOpened
33
- }
34
- });
77
+ Keyboarder.off(handler)
35
78
  }
36
- }
37
- async function search() {
38
- if (!!searchText) {
39
- searchLoading = true;
40
- searchResults = await searcher({
41
- searchText
42
- });
43
- searchLoading = false;
79
+ })
80
+
81
+ function handleKeydown(event: KeyboardEvent) {
82
+ if(event.key == 'ArrowDown' || event.key == 'ArrowUp') event.preventDefault()
83
+ }
84
+
85
+ function toggleSearchDialog() {
86
+ searchDialogOpened = !searchDialogOpened
87
+ if(searchDialogOpened) searchBarInput?.focus()
88
+ if(ontoggleSearchDialog) {
89
+ ontoggleSearchDialog({
90
+ detail: {
91
+ opened: searchDialogOpened
92
+ }
93
+ })
44
94
  }
45
- }
95
+ }
96
+
97
+ async function search() {
98
+ if(!!searchText) {
99
+ searchLoading = true
100
+ searchResults = await searcher({
101
+ searchText
102
+ })
103
+ searchLoading = false
104
+ }
105
+ }
46
106
  </script>
47
107
 
48
108
  <div class={clazz.container || ''}>
@@ -1,9 +1,9 @@
1
1
  import '../../../css/main.css';
2
2
  import './GlobalSearchTextField.css';
3
- import { type Snippet } from 'svelte';
4
- import { type Result } from './SearchResults.svelte';
5
- declare class __sveltets_Render<Data> {
6
- props(): {
3
+ import { type ComponentProps, type Snippet } from 'svelte';
4
+ import SearchResults, { type Result } from './SearchResults.svelte';
5
+ declare function $$render<Data>(): {
6
+ props: {
7
7
  searchButtonText?: string;
8
8
  searchDialogOpened?: boolean;
9
9
  transitionDuration?: string;
@@ -11,40 +11,43 @@ declare class __sveltets_Render<Data> {
11
11
  container?: string;
12
12
  button?: string;
13
13
  shortcut?: string;
14
- } | undefined;
15
- searcher?: ((params: {
14
+ };
15
+ searcher?: (params: {
16
16
  searchText: string;
17
- }) => Promise<Result<Data>[] | undefined>) | undefined;
18
- ontoggleSearchDialog?: ((event: {
17
+ }) => Promise<Result<Data>[] | undefined>;
18
+ ontoggleSearchDialog?: (event: {
19
19
  detail: {
20
20
  opened: boolean;
21
21
  };
22
- }) => void) | undefined;
22
+ }) => void;
23
23
  searchButtonSnippet?: Snippet<[{
24
24
  toggleSearchDialog: () => void;
25
- }]> | undefined;
25
+ }]>;
26
26
  searchButtonIconSnippet?: Snippet<[{
27
27
  toggleSearchDialog: () => void;
28
- }]> | undefined;
28
+ }]>;
29
29
  searchButtonTextSnippet?: Snippet<[]>;
30
30
  searchButtonShortcutSnippet?: Snippet<[]>;
31
31
  searchBarSnippet?: Snippet<[{
32
32
  searchBarInput: HTMLElement | undefined;
33
33
  searchText: string | undefined;
34
34
  search: () => Promise<void>;
35
- }]> | undefined;
35
+ }]>;
36
36
  searchResultsSnippet?: Snippet<[{
37
37
  searchLoading: boolean;
38
38
  searchResults: Result<Data>[] | undefined;
39
- }]> | undefined;
40
- onselect?: ((event: {
41
- detail: {
42
- element: import("../../simple/lists/SelectableVerticalList.svelte").Element<Data>;
43
- };
44
- }) => void) | undefined;
39
+ }]>;
40
+ onselect?: ComponentProps<typeof SearchResults<Data>>["onselect"];
45
41
  };
46
- events(): {};
47
- slots(): {};
42
+ exports: {};
43
+ bindings: "searchDialogOpened";
44
+ slots: {};
45
+ events: {};
46
+ };
47
+ declare class __sveltets_Render<Data> {
48
+ props(): ReturnType<typeof $$render<Data>>['props'];
49
+ events(): ReturnType<typeof $$render<Data>>['events'];
50
+ slots(): ReturnType<typeof $$render<Data>>['slots'];
48
51
  bindings(): "searchDialogOpened";
49
52
  exports(): {};
50
53
  }
@@ -1,133 +1,187 @@
1
- <script lang="ts">import { GENERIC_MODES, SELECT_MODES, STRING_MODES } from '../../../utils/filters/filters';
2
- import SimpleTextField from "../../simple/forms/SimpleTextField.svelte";
3
- import DatePickerTextField from "../forms/DatePickerTextField.svelte";
4
- import Validator from "../../../utils/filters/validator";
5
- import SelectableVerticalList, {} from "../../simple/lists/SelectableVerticalList.svelte";
6
- import Icon from "../../simple/media/Icon.svelte";
7
- import { fly } from "svelte/transition";
8
- import Autocomplete from "../../simple/forms/Autocomplete.svelte";
9
- import Checkbox from "../../simple/forms/Checkbox.svelte";
10
- import ToggleList from "../forms/ToggleList.svelte";
11
- import lodash from 'lodash';
12
- let { filter = $bindable(), lang = 'en', backIcon = "mdi-arrow-left", betweenFromLabel = lang === 'en' ? "From" : "Da", betweenToLabel = lang === 'en' ? "To" : "A", labelsMapper, forceApplyValid = false, tmpFilter = $bindable(), onbackClick, onkeypress, onclick: onclickInternal, onclose, customSnippet, filterActionsSnippet, titleSnippet, } = $props();
13
- let step = $state();
14
- function initTmpFilter() {
15
- tmpFilter = filter === undefined ? undefined : lodash.cloneDeep(filter);
16
- if (!!tmpFilter && tmpFilter.advanced) {
17
- if (['string', 'number', 'date', 'select'].includes(tmpFilter.type) && Object.keys(tmpFilter).includes('mode')) {
18
- //@ts-ignore
19
- if ((tmpFilter.mode == 'between' && tmpFilter.from !== undefined && tmpFilter.to !== undefined) || tmpFilter.value !== undefined || (tmpFilter.type == 'select' && tmpFilter.values !== undefined && tmpFilter.values.length > 0)) {
20
- step = 'editor';
21
- //@ts-ignore
22
- advancedModeSelectedOption = tmpFilter.mode;
23
- }
24
- else {
25
- step = 'advanced';
26
- }
27
- }
28
- else {
29
- step = 'advanced';
1
+ <script lang="ts">
2
+ import type { Filter, NumberMode, SelectMode, StringMode } from "../../../utils/filters/filters";
3
+ import { GENERIC_MODES, SELECT_MODES, STRING_MODES } from '../../../utils/filters/filters';
4
+ import type { DateMode } from "../../../utils/filters/filters";
5
+ import SimpleTextField from "../../simple/forms/SimpleTextField.svelte";
6
+ import DatePickerTextField from "../forms/DatePickerTextField.svelte";
7
+ import Validator from "../../../utils/filters/validator";
8
+ import SelectableVerticalList, { type Element } from "../../simple/lists/SelectableVerticalList.svelte";
9
+ import Icon from "../../simple/media/Icon.svelte";
10
+ import { fly } from "svelte/transition";
11
+ import Autocomplete from "../../simple/forms/Autocomplete.svelte";
12
+ import Checkbox from "../../simple/forms/Checkbox.svelte";
13
+ import type { LabelMapper } from "./Filters.svelte";
14
+ import ToggleList from "../forms/ToggleList.svelte";
15
+ import type { KeyboardEventHandler, MouseEventHandler } from "svelte/elements";
16
+ import type { ComponentProps, Snippet } from "svelte";
17
+ import lodash from 'lodash'
18
+
19
+ interface Props {
20
+ filter?: Filter;
21
+ lang?: 'it' | 'en';
22
+ backIcon?: string;
23
+ betweenFromLabel?: string;
24
+ betweenToLabel?: string;
25
+ labelsMapper: LabelMapper;
26
+ forceApplyValid?: boolean;
27
+ tmpFilter?: Filter;
28
+ onbackClick?: () => void
29
+ onkeypress?: KeyboardEventHandler<HTMLDivElement>
30
+ onclick?: MouseEventHandler<HTMLDivElement>
31
+ onclose?: ComponentProps<typeof Autocomplete>['onclose']
32
+ titleSnippet?: Snippet<[]>
33
+ customSnippet?: Snippet<[{
34
+ filter: Filter
35
+ }]>
36
+ filterActionsSnippet?: Snippet<[{
37
+ filter: Filter,
38
+ applyFilterDisabled: typeof applyFilterDisabled
39
+ }]>
40
+ }
41
+
42
+ let {
43
+ filter = $bindable(),
44
+ lang = 'en',
45
+ backIcon = "mdi-arrow-left",
46
+ betweenFromLabel = lang === 'en' ? "From" : "Da",
47
+ betweenToLabel = lang === 'en' ? "To" : "A",
48
+ labelsMapper,
49
+ forceApplyValid = false,
50
+ tmpFilter = $bindable(),
51
+ onbackClick,
52
+ onkeypress,
53
+ onclick: onclickInternal,
54
+ onclose,
55
+ customSnippet,
56
+ filterActionsSnippet,
57
+ titleSnippet,
58
+ }: Props = $props();
59
+
60
+ let step: 'advanced' | 'editor' | undefined = $state()
61
+
62
+ function initTmpFilter() {
63
+ tmpFilter = filter === undefined ? undefined : lodash.cloneDeep(filter)
64
+ if(!!tmpFilter && tmpFilter.advanced) {
65
+ if(['string', 'number', 'date', 'select'].includes(tmpFilter.type) && Object.keys(tmpFilter).includes('mode')) {
66
+ //@ts-ignore
67
+ if((tmpFilter.mode == 'between' && tmpFilter.from !== undefined && tmpFilter.to !== undefined) || tmpFilter.value !== undefined || (tmpFilter.type == 'select' && tmpFilter.values !== undefined && tmpFilter.values.length > 0)) {
68
+ step = 'editor'
69
+ //@ts-ignore
70
+ advancedModeSelectedOption = tmpFilter.mode
71
+ } else {
72
+ step = 'advanced'
30
73
  }
74
+ } else {
75
+ step = 'advanced'
76
+ }
77
+ } else {
78
+ step = "editor"
31
79
  }
32
- else {
33
- step = "editor";
34
- }
35
- }
36
- let advancedModeOptions = $state(), advancedModeSelectedOption = $state();
37
- let calendarOpened = $state(false), calendarOpened2 = $state(false);
38
- // TODO I don't like that there is a single dropdown to handle all filter advance mode.
39
- // In some case would be necessary to handle more than one selection and this code
40
- // could become non sense
41
- function handleAdvancedModeSelection() {
42
- if (!!advancedModeSelectedOption && !!tmpFilter) {
43
- if (tmpFilter.type == 'date')
44
- tmpFilter.mode = advancedModeSelectedOption;
45
- else if (tmpFilter.type == 'string')
46
- tmpFilter.mode = advancedModeSelectedOption;
47
- else if (tmpFilter.type == 'number')
48
- tmpFilter.mode = advancedModeSelectedOption;
49
- else if (tmpFilter.type == 'select')
50
- tmpFilter.mode = advancedModeSelectedOption;
51
- step = 'editor';
52
- canRenderOptions = false;
80
+ }
81
+
82
+
83
+
84
+ let advancedModeOptions: Element[] | undefined = $state(),
85
+ advancedModeSelectedOption: string | undefined = $state()
86
+
87
+ let calendarOpened: boolean = $state(false),
88
+ calendarOpened2: boolean = $state(false)
89
+
90
+ // TODO I don't like that there is a single dropdown to handle all filter advance mode.
91
+ // In some case would be necessary to handle more than one selection and this code
92
+ // could become non sense
93
+ function handleAdvancedModeSelection() {
94
+ if(!!advancedModeSelectedOption && !!tmpFilter) {
95
+ if(tmpFilter.type == 'date') tmpFilter.mode = advancedModeSelectedOption as DateMode
96
+ else if(tmpFilter.type == 'string') tmpFilter.mode = advancedModeSelectedOption as StringMode
97
+ else if(tmpFilter.type == 'number') tmpFilter.mode = advancedModeSelectedOption as NumberMode
98
+ else if(tmpFilter.type == 'select') tmpFilter.mode = advancedModeSelectedOption as SelectMode
99
+
100
+ step = 'editor'
101
+ canRenderOptions = false
53
102
  }
54
- }
55
- let canRenderOptions = $state(true);
56
- let applyFilterDisabled = $derived(!Validator.isValid(tmpFilter) && !forceApplyValid);
57
- let lastSyncedFilter = $state(filter);
58
- $effect(() => {
59
- if (!tmpFilter || !step || (!!filter && !lodash.isEqual($state.snapshot(filter), $state.snapshot(lastSyncedFilter)))) {
60
- initTmpFilter();
61
- lastSyncedFilter = filter;
103
+ }
104
+
105
+ let canRenderOptions: boolean = $state(true)
106
+
107
+
108
+ let applyFilterDisabled = $derived(!Validator.isValid(tmpFilter) && !forceApplyValid)
109
+
110
+ let lastSyncedFilter = $state(filter)
111
+ $effect(() => {
112
+ if(!tmpFilter || !step || (!!filter && !lodash.isEqual($state.snapshot(filter), $state.snapshot(lastSyncedFilter)))) {
113
+ initTmpFilter()
114
+ lastSyncedFilter = filter
62
115
  }
63
- if (!!tmpFilter) {
64
- if (tmpFilter.type == 'bool') {
65
- if (tmpFilter.value === undefined) {
66
- tmpFilter.value = false;
67
- }
68
- }
69
- else if (tmpFilter.type == 'select') {
70
- if (tmpFilter.values === undefined) {
71
- tmpFilter.values = [];
72
- }
73
- }
74
- else if (tmpFilter.type == 'date' && tmpFilter.mode == 'between' && !tmpFilter.betweenModeSingleTextField) {
75
- if (!tmpFilter.from)
76
- tmpFilter.from = new Date();
77
- if (!tmpFilter.to)
78
- tmpFilter.to = new Date();
79
- }
80
- if (!tmpFilter.advanced) {
81
- advancedModeSelectedOption = undefined;
82
- }
83
- let modes;
84
- if (tmpFilter.type == 'string') {
85
- modes = STRING_MODES;
86
- }
87
- else if (tmpFilter.type == 'date') {
88
- modes = GENERIC_MODES;
89
- }
90
- else if (tmpFilter.type == 'number') {
91
- modes = GENERIC_MODES;
92
- }
93
- else if (tmpFilter.type == 'select') {
94
- modes = SELECT_MODES;
116
+
117
+ if(!!tmpFilter) {
118
+ if(tmpFilter.type == 'bool') {
119
+ if(tmpFilter.value === undefined) {
120
+ tmpFilter.value = false
95
121
  }
96
- if (!!modes) {
97
- advancedModeOptions = modes.map(mode => {
98
- return {
99
- title: labelsMapper[mode].short || mode,
100
- name: mode
101
- };
102
- });
122
+ } else if(tmpFilter.type == 'select') {
123
+ if(tmpFilter.values === undefined) {
124
+ tmpFilter.values = []
103
125
  }
126
+ } else if(tmpFilter.type == 'date' && tmpFilter.mode == 'between' && !tmpFilter.betweenModeSingleTextField) {
127
+ if(!tmpFilter.from) tmpFilter.from = new Date()
128
+ if(!tmpFilter.to) tmpFilter.to = new Date()
129
+ }
130
+
131
+ if(!tmpFilter.advanced) {
132
+ advancedModeSelectedOption = undefined
133
+ }
134
+
135
+ let modes
136
+ if(tmpFilter.type == 'string') {
137
+ modes = STRING_MODES
138
+ } else if(tmpFilter.type == 'date') {
139
+ modes = GENERIC_MODES
140
+ } else if(tmpFilter.type == 'number') {
141
+ modes = GENERIC_MODES
142
+ } else if(tmpFilter.type == 'select') {
143
+ modes = SELECT_MODES
144
+ }
145
+
146
+ if(!!modes) {
147
+ advancedModeOptions = modes.map(mode => {
148
+ return {
149
+ title: labelsMapper[mode].short || mode,
150
+ name: mode
151
+ }
152
+ })
153
+ }
104
154
  }
105
- });
106
- function handleModeBackClick() {
107
- if (onbackClick) {
108
- onbackClick();
109
- }
110
- }
111
- function handleEditorBackCLick() {
112
- if (!!tmpFilter && !tmpFilter.advanced) {
113
- if (onbackClick) {
114
- onbackClick();
115
- }
155
+ })
156
+
157
+ function handleModeBackClick() {
158
+ if(onbackClick) {
159
+ onbackClick()
116
160
  }
117
- else {
118
- step = 'advanced';
119
- advancedModeSelectedOption = undefined;
120
- setTimeout(() => {
121
- canRenderOptions = true;
122
- }, 100);
161
+ }
162
+
163
+ function handleEditorBackCLick() {
164
+ if(!!tmpFilter && !tmpFilter.advanced) {
165
+ if(onbackClick) {
166
+ onbackClick()
167
+ }
168
+ } else {
169
+ step = 'advanced'
170
+ advancedModeSelectedOption = undefined
171
+ setTimeout(() => {
172
+ canRenderOptions = true
173
+ }, 100)
123
174
  }
124
- }
125
- function onclick(event) {
126
- event.stopPropagation();
127
- if (onclickInternal) {
128
- onclickInternal(event);
175
+ }
176
+
177
+ function onclick(event: MouseEvent & {
178
+ currentTarget: EventTarget & HTMLDivElement;
179
+ }) {
180
+ event.stopPropagation()
181
+ if(onclickInternal) {
182
+ onclickInternal(event)
129
183
  }
130
- }
184
+ }
131
185
  </script>
132
186
 
133
187
  <div class="container">