@likable-hair/svelte 4.2.4 → 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.
- package/dist/components/composed/buttons/ActivableButton.svelte +25 -7
- package/dist/components/composed/common/HeadersDrawer.svelte +66 -28
- package/dist/components/composed/common/HeadersDrawer.svelte.d.ts +22 -12
- package/dist/components/composed/common/MenuOrDrawer.svelte +40 -12
- package/dist/components/composed/common/MenuOrDrawerOptions.svelte +51 -27
- package/dist/components/composed/common/MenuOrDrawerOptions.svelte.d.ts +15 -10
- package/dist/components/composed/common/QuickActions.css +5 -5
- package/dist/components/composed/common/QuickActions.svelte +76 -33
- package/dist/components/composed/common/ToolTip.svelte +51 -32
- package/dist/components/composed/dashboard/DashboardShaper.svelte +280 -147
- package/dist/components/composed/dashboard/DashboardShaper.svelte.d.ts +54 -45
- package/dist/components/composed/forms/AsyncAutocomplete.svelte +81 -30
- package/dist/components/composed/forms/AsyncAutocomplete.svelte.d.ts +17 -5
- package/dist/components/composed/forms/AvatarDropdown.svelte +146 -70
- package/dist/components/composed/forms/AvatarDropdown.svelte.d.ts +27 -22
- package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte +65 -19
- package/dist/components/composed/forms/CountriesAutocomplete.svelte +33 -4
- package/dist/components/composed/forms/DatePickerTextField.svelte +266 -161
- package/dist/components/composed/forms/Dropdown.svelte +89 -22
- package/dist/components/composed/forms/Dropdown.svelte.d.ts +18 -13
- package/dist/components/composed/forms/IconsDropdown.svelte +85 -40
- package/dist/components/composed/forms/IconsDropdown.svelte.d.ts +15 -8
- package/dist/components/composed/forms/LabelAndSelect.svelte +46 -5
- package/dist/components/composed/forms/LabelAndTextField.svelte +56 -3
- package/dist/components/composed/forms/PeriodPicker.svelte +38 -18
- package/dist/components/composed/forms/PeriodPicker.svelte.d.ts +32 -7
- package/dist/components/composed/forms/PeriodSelector.svelte +427 -312
- package/dist/components/composed/forms/PeriodSelector.svelte.d.ts +20 -13
- package/dist/components/composed/forms/ToggleList.svelte +71 -37
- package/dist/components/composed/forms/ToggleList.svelte.d.ts +14 -7
- package/dist/components/composed/forms/YearPickerTextField.svelte +154 -82
- package/dist/components/composed/list/DynamicTable.svelte +1377 -808
- package/dist/components/composed/list/DynamicTable.svelte.d.ts +85 -70
- package/dist/components/composed/list/EnhancedPaginatedTable.svelte +75 -32
- package/dist/components/composed/list/EnhancedPaginatedTable.svelte.d.ts +16 -6
- package/dist/components/composed/list/PaginatedTable.svelte +325 -120
- package/dist/components/composed/list/PaginatedTable.svelte.d.ts +26 -22
- package/dist/components/composed/progress/HorizontalStackedProgress.svelte +67 -29
- package/dist/components/composed/search/DynamicFilters.svelte +126 -91
- package/dist/components/composed/search/FilterEditor.svelte +178 -115
- package/dist/components/composed/search/Filters.svelte +441 -301
- package/dist/components/composed/search/GlobalSearchTextField.svelte +102 -42
- package/dist/components/composed/search/GlobalSearchTextField.svelte.d.ts +23 -20
- package/dist/components/composed/search/MobileFilterEditor.svelte +174 -120
- package/dist/components/composed/search/QuickFilters.svelte +133 -23
- package/dist/components/composed/search/SearchBar.svelte +42 -3
- package/dist/components/composed/search/SearchResults.svelte +48 -5
- package/dist/components/composed/search/SearchResults.svelte.d.ts +17 -17
- package/dist/components/layouts/CollapsibleSideBarLayout.svelte +100 -24
- package/dist/components/layouts/StableDividedSideBarLayout.svelte +74 -24
- package/dist/components/layouts/UnstableDividedSideBarLayout.svelte +140 -57
- package/dist/components/simple/buttons/Button.svelte +86 -36
- package/dist/components/simple/buttons/LinkButton.svelte +81 -25
- package/dist/components/simple/charts/BarChart.svelte +137 -105
- package/dist/components/simple/charts/LineChart.svelte +124 -92
- package/dist/components/simple/charts/PieChart.svelte +51 -23
- package/dist/components/simple/common/CollapsibleDivider.svelte +58 -26
- package/dist/components/simple/common/Divider.svelte +2 -1
- package/dist/components/simple/common/InfiniteScroll.svelte +60 -34
- package/dist/components/simple/common/MediaQuery.svelte +28 -3
- package/dist/components/simple/common/Menu.svelte +516 -390
- package/dist/components/simple/common/NoData.svelte +18 -4
- package/dist/components/simple/common/VerticalDraggableList.svelte +52 -26
- package/dist/components/simple/common/VerticalDraggableList.svelte.d.ts +20 -9
- package/dist/components/simple/dashboards/DashboardGridShaper.svelte +28 -22
- package/dist/components/simple/dates/Calendar.svelte +142 -72
- package/dist/components/simple/dates/DatePicker.svelte +138 -71
- package/dist/components/simple/dates/MonthSelector.svelte +49 -13
- package/dist/components/simple/dates/YearSelector.svelte +73 -30
- package/dist/components/simple/dialogs/Dialog.svelte +109 -59
- package/dist/components/simple/forms/Autocomplete.css +3 -0
- package/dist/components/simple/forms/Autocomplete.svelte +366 -164
- package/dist/components/simple/forms/Autocomplete.svelte.d.ts +31 -19
- package/dist/components/simple/forms/Checkbox.svelte +57 -29
- package/dist/components/simple/forms/FileInput.svelte +103 -58
- package/dist/components/simple/forms/FileInputList.svelte +115 -51
- package/dist/components/simple/forms/RadioButton.svelte +36 -3
- package/dist/components/simple/forms/Select.svelte +30 -3
- package/dist/components/simple/forms/SimpleTextField.svelte +94 -4
- package/dist/components/simple/forms/Switch.svelte +33 -11
- package/dist/components/simple/forms/Textarea.svelte +22 -5
- package/dist/components/simple/forms/VerticalSwitch.svelte +19 -2
- package/dist/components/simple/forms/VerticalTextSwitch.svelte +35 -3
- package/dist/components/simple/lists/BoxList.svelte +42 -11
- package/dist/components/simple/lists/ColorInvertedSelector.svelte +83 -25
- package/dist/components/simple/lists/HierarchyMenu.svelte +55 -20
- package/dist/components/simple/lists/Paginator.svelte +53 -34
- package/dist/components/simple/lists/SelectableMenuList.svelte +52 -16
- package/dist/components/simple/lists/SelectableVerticalList.svelte +169 -85
- package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +21 -14
- package/dist/components/simple/lists/SidebarMenuList.svelte +127 -79
- package/dist/components/simple/lists/SimpleTable.svelte +449 -239
- package/dist/components/simple/lists/SimpleTable.svelte.d.ts +31 -22
- package/dist/components/simple/loaders/CircularLoader.css +1 -1
- package/dist/components/simple/loaders/CircularLoader.svelte +11 -3
- package/dist/components/simple/loaders/Skeleton.svelte +3 -2
- package/dist/components/simple/media/Avatar.svelte +35 -15
- package/dist/components/simple/media/DescriptiveAvatar.svelte +30 -4
- package/dist/components/simple/media/FlagIcon.svelte +13 -3
- package/dist/components/simple/media/Icon.svelte +21 -6
- package/dist/components/simple/navigation/Breadcrumb.svelte +41 -9
- package/dist/components/simple/navigation/Chip.css +1 -1
- package/dist/components/simple/navigation/Chip.svelte +65 -36
- package/dist/components/simple/navigation/Drawer.svelte +132 -71
- package/dist/components/simple/navigation/HeaderMenu.svelte +69 -25
- package/dist/components/simple/navigation/Navigator.svelte +45 -11
- package/dist/components/simple/navigation/TabSwitcher.svelte +60 -19
- package/dist/components/simple/notifiers/AlertBanner.svelte +59 -11
- package/dist/components/simple/progress/ProgressBar.svelte +26 -10
- package/dist/components/simple/timeline/SimpleTimeLine.svelte +52 -5
- package/dist/components/simple/timeline/SimpleTimeLine.svelte.d.ts +16 -9
- package/dist/components/simple/typography/Code.svelte +41 -12
- package/dist/stores/layouts/unstableSidebarOpened.d.ts +1 -1
- package/dist/stores/layouts/unstableSidebarOpened.js +1 -1
- package/dist/stores/theme.js +2 -2
- package/dist/utils/filters/builder.d.ts +2 -2
- package/dist/utils/filters/builder.js +7 -7
- package/dist/utils/filters/modifiers/where.d.ts +1 -1
- package/dist/utils/teleporter.js +4 -4
- package/package.json +39 -33
|
@@ -1,11 +1,29 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Button from "../../simple/buttons/Button.svelte";
|
|
3
|
+
import type { ComponentProps, Snippet } from "svelte";
|
|
4
|
+
interface Props {
|
|
5
|
+
active?: boolean;
|
|
6
|
+
buttonProps?: ComponentProps<typeof Button>;
|
|
7
|
+
onclick?: ComponentProps<typeof Button>['onclick']
|
|
8
|
+
children?: Snippet<[]>
|
|
9
|
+
appendSnippet?: Snippet<[]>
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
let {
|
|
13
|
+
active = $bindable(false),
|
|
14
|
+
buttonProps = {},
|
|
15
|
+
onclick,
|
|
16
|
+
children,
|
|
17
|
+
appendSnippet: appendInternalSnippet,
|
|
18
|
+
}: Props = $props();
|
|
19
|
+
|
|
20
|
+
function handleOnClick(e: Parameters<NonNullable<typeof onclick>>[0]) {
|
|
21
|
+
active = !active
|
|
22
|
+
|
|
23
|
+
if(onclick) {
|
|
24
|
+
onclick(e)
|
|
7
25
|
}
|
|
8
|
-
}
|
|
26
|
+
}
|
|
9
27
|
</script>
|
|
10
28
|
|
|
11
29
|
<Button
|
|
@@ -1,39 +1,77 @@
|
|
|
1
|
-
<script lang="ts" generics="Item extends {[key: string]: any}, Data">
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
<script lang="ts" generics="Item extends {[key: string]: any}, Data">
|
|
2
|
+
import { Button, Divider, Drawer, Icon, MediaQuery, Switch, VerticalDraggableList } from "../../..";
|
|
3
|
+
import type { ComponentProps, Snippet } from "svelte";
|
|
4
|
+
import { flip } from "svelte/animate";
|
|
5
|
+
import { quintOut } from "svelte/easing";
|
|
6
|
+
import { crossfade } from "svelte/transition";
|
|
7
|
+
import EnhancedPaginatedTable from "../list/EnhancedPaginatedTable.svelte";
|
|
8
|
+
import lodash from "lodash";
|
|
9
|
+
|
|
10
|
+
const deepClone = lodash.cloneDeep;
|
|
11
|
+
|
|
12
|
+
interface Props {
|
|
13
|
+
drawerProps?: Omit<ComponentProps<typeof Drawer>, 'open'>
|
|
14
|
+
open?: boolean,
|
|
15
|
+
lang: 'en' | 'it',
|
|
16
|
+
availableHeaders: ComponentProps<typeof EnhancedPaginatedTable<Item, Data>>['headers'],
|
|
17
|
+
headersToShow: ComponentProps<typeof EnhancedPaginatedTable<Item, Data>>['headers'],
|
|
18
|
+
pinnableColumns?: boolean,
|
|
19
|
+
onsaveHeadersToShow?: (event: {
|
|
20
|
+
detail: {
|
|
21
|
+
headersToShow: ComponentProps<typeof EnhancedPaginatedTable<Item, Data>>['headers'];
|
|
22
|
+
}
|
|
23
|
+
}) => void
|
|
24
|
+
itemSnippet?: ComponentProps<typeof VerticalDraggableList>['itemSnippet']
|
|
25
|
+
headersToAddSnippet?: Snippet<[{ header: ComponentProps<typeof EnhancedPaginatedTable<Item, Data>>['headers'][number] }]>
|
|
26
|
+
contentSnippet?: Snippet<[]>
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
let {
|
|
30
|
+
drawerProps,
|
|
31
|
+
open = $bindable(),
|
|
32
|
+
lang,
|
|
33
|
+
availableHeaders,
|
|
34
|
+
headersToShow = $bindable(),
|
|
35
|
+
pinnableColumns,
|
|
36
|
+
onsaveHeadersToShow,
|
|
37
|
+
itemSnippet: internalItemSnippet,
|
|
38
|
+
headersToAddSnippet,
|
|
39
|
+
contentSnippet,
|
|
40
|
+
}: Props = $props()
|
|
41
|
+
|
|
42
|
+
const [send, receive] = crossfade({
|
|
10
43
|
duration: 500,
|
|
11
44
|
fallback(node, params) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
45
|
+
const style = getComputedStyle(node);
|
|
46
|
+
const transform = style.transform === "none" ? "" : style.transform;
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
duration: 500,
|
|
50
|
+
easing: quintOut,
|
|
51
|
+
css: (t) => `
|
|
18
52
|
transform: ${transform} scale(${t});
|
|
19
53
|
opacity: ${t}
|
|
20
54
|
`,
|
|
21
|
-
|
|
55
|
+
};
|
|
22
56
|
},
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
$
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
let internalHeadersToShow = $state(deepClone(headersToShow))
|
|
60
|
+
$effect(() => {
|
|
61
|
+
internalHeadersToShow = deepClone(headersToShow)
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
function saveHeadersToShow() {
|
|
65
|
+
headersToShow = internalHeadersToShow
|
|
66
|
+
|
|
30
67
|
onsaveHeadersToShow?.({
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
})
|
|
68
|
+
detail: {
|
|
69
|
+
headersToShow,
|
|
70
|
+
}
|
|
71
|
+
})
|
|
72
|
+
|
|
35
73
|
open = false;
|
|
36
|
-
}
|
|
74
|
+
}
|
|
37
75
|
</script>
|
|
38
76
|
|
|
39
77
|
<MediaQuery>
|
|
@@ -1,28 +1,38 @@
|
|
|
1
1
|
import { Drawer, VerticalDraggableList } from "../../..";
|
|
2
2
|
import type { ComponentProps, Snippet } from "svelte";
|
|
3
|
-
|
|
3
|
+
import EnhancedPaginatedTable from "../list/EnhancedPaginatedTable.svelte";
|
|
4
|
+
declare function $$render<Item extends {
|
|
4
5
|
[key: string]: any;
|
|
5
|
-
}, Data> {
|
|
6
|
-
props
|
|
6
|
+
}, Data>(): {
|
|
7
|
+
props: {
|
|
7
8
|
drawerProps?: Omit<ComponentProps<typeof Drawer>, "open">;
|
|
8
9
|
open?: boolean;
|
|
9
10
|
lang: "en" | "it";
|
|
10
|
-
availableHeaders:
|
|
11
|
-
headersToShow:
|
|
11
|
+
availableHeaders: ComponentProps<typeof EnhancedPaginatedTable<Item, Data>>["headers"];
|
|
12
|
+
headersToShow: ComponentProps<typeof EnhancedPaginatedTable<Item, Data>>["headers"];
|
|
12
13
|
pinnableColumns?: boolean;
|
|
13
|
-
onsaveHeadersToShow?: (
|
|
14
|
+
onsaveHeadersToShow?: (event: {
|
|
14
15
|
detail: {
|
|
15
|
-
headersToShow:
|
|
16
|
+
headersToShow: ComponentProps<typeof EnhancedPaginatedTable<Item, Data>>["headers"];
|
|
16
17
|
};
|
|
17
|
-
}) => void
|
|
18
|
+
}) => void;
|
|
18
19
|
itemSnippet?: ComponentProps<typeof VerticalDraggableList>["itemSnippet"];
|
|
19
20
|
headersToAddSnippet?: Snippet<[{
|
|
20
|
-
header:
|
|
21
|
-
}]
|
|
21
|
+
header: ComponentProps<typeof EnhancedPaginatedTable<Item, Data>>["headers"][number];
|
|
22
|
+
}]>;
|
|
22
23
|
contentSnippet?: Snippet<[]>;
|
|
23
24
|
};
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
exports: {};
|
|
26
|
+
bindings: "open" | "headersToShow";
|
|
27
|
+
slots: {};
|
|
28
|
+
events: {};
|
|
29
|
+
};
|
|
30
|
+
declare class __sveltets_Render<Item extends {
|
|
31
|
+
[key: string]: any;
|
|
32
|
+
}, Data> {
|
|
33
|
+
props(): ReturnType<typeof $$render<Item, Data>>['props'];
|
|
34
|
+
events(): ReturnType<typeof $$render<Item, Data>>['events'];
|
|
35
|
+
slots(): ReturnType<typeof $$render<Item, Data>>['slots'];
|
|
26
36
|
bindings(): "open" | "headersToShow";
|
|
27
37
|
exports(): {};
|
|
28
38
|
}
|
|
@@ -1,10 +1,31 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import '../../../css/main.css'
|
|
3
|
+
import Drawer from '../../simple/navigation/Drawer.svelte';
|
|
4
|
+
import Menu from '../../simple/common/Menu.svelte';
|
|
5
|
+
import MediaQuery from '../../simple/common/MediaQuery.svelte';
|
|
6
|
+
import type { ComponentProps, Snippet } from 'svelte';
|
|
7
|
+
import lodash from 'lodash'
|
|
8
|
+
|
|
9
|
+
export interface Props {
|
|
10
|
+
open?: boolean
|
|
11
|
+
drawerProps?: Omit<ComponentProps<typeof Drawer>, 'open'>
|
|
12
|
+
menuProps?: Omit<ComponentProps<typeof Menu>, 'open'>
|
|
13
|
+
children?: Snippet<[
|
|
14
|
+
{
|
|
15
|
+
isDrawer: boolean,
|
|
16
|
+
isMenu: boolean
|
|
17
|
+
}
|
|
18
|
+
]>
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
let {
|
|
22
|
+
open = $bindable(),
|
|
23
|
+
drawerProps,
|
|
24
|
+
menuProps,
|
|
25
|
+
children,
|
|
26
|
+
}: Props = $props();
|
|
27
|
+
|
|
28
|
+
const menuPropsDefaultValue = {
|
|
8
29
|
closeOnClickOutside: true,
|
|
9
30
|
_boxShadow: "rgb(var(--global-color-grey-900), .5) 0px 2px 4px",
|
|
10
31
|
_height: "fit-content",
|
|
@@ -13,12 +34,19 @@ const menuPropsDefaultValue = {
|
|
|
13
34
|
_width: "",
|
|
14
35
|
anchor: 'bottom-center',
|
|
15
36
|
stayInViewport: true
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
let finalMenuProps = $derived(
|
|
40
|
+
lodash.clone(lodash.merge(menuPropsDefaultValue, menuProps))
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
const drawerPropsDefaultValue = {
|
|
19
44
|
position: 'bottom'
|
|
20
|
-
}
|
|
21
|
-
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
let finalDrawerProps = $derived(
|
|
48
|
+
lodash.clone(lodash.merge(drawerPropsDefaultValue, drawerProps))
|
|
49
|
+
)
|
|
22
50
|
</script>
|
|
23
51
|
|
|
24
52
|
<MediaQuery>
|
|
@@ -1,12 +1,28 @@
|
|
|
1
|
-
<script lang="ts" module>
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
export type ArrayElement<ArrayType extends readonly unknown[]> = ArrayType extends readonly (infer ElementType)[] ? ElementType : never;
|
|
2
3
|
</script>
|
|
3
4
|
|
|
4
|
-
<script lang="ts" generics="Data">
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
<script lang="ts" generics="Data">
|
|
6
|
+
import '../../../css/main.css'
|
|
7
|
+
import type { ComponentProps } from 'svelte';
|
|
8
|
+
import MenuOrDrawer from "./MenuOrDrawer.svelte";
|
|
9
|
+
import SelectableVerticalList from '../../simple/lists/SelectableVerticalList.svelte';
|
|
10
|
+
import lodash from 'lodash'
|
|
11
|
+
|
|
12
|
+
interface Props extends ComponentProps<typeof MenuOrDrawer> {
|
|
13
|
+
elements?: ComponentProps<typeof SelectableVerticalList<Data>>['elements'];
|
|
14
|
+
onselect?: ComponentProps<typeof SelectableVerticalList<Data>>['onselect']
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
let {
|
|
18
|
+
open = $bindable(),
|
|
19
|
+
elements = [],
|
|
20
|
+
onselect,
|
|
21
|
+
menuProps,
|
|
22
|
+
drawerProps,
|
|
23
|
+
}: Props = $props();
|
|
24
|
+
|
|
25
|
+
const menuPropsDefaultValue = {
|
|
10
26
|
anchor: 'bottom-center',
|
|
11
27
|
stayInViewport: true,
|
|
12
28
|
flipOnOverflow: false,
|
|
@@ -16,28 +32,36 @@ const menuPropsDefaultValue = {
|
|
|
16
32
|
_minWidth: '100px',
|
|
17
33
|
_borderRadius: '5px',
|
|
18
34
|
openingId: undefined
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
let finalMenuProps = $derived(
|
|
38
|
+
lodash.clone(lodash.merge(menuPropsDefaultValue, menuProps))
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
const drawerPropsDefaultValue = {
|
|
22
42
|
position: 'bottom'
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
let
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
$effect(() => {
|
|
32
|
-
if
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
let finalDrawerProps = $derived(
|
|
46
|
+
lodash.clone(lodash.merge(drawerPropsDefaultValue, drawerProps))
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
let selected: ArrayElement<NonNullable<ComponentProps<typeof SelectableVerticalList<Data>>['elements']>>['name'] | undefined = $state()
|
|
50
|
+
let focused: ArrayElement<NonNullable<ComponentProps<typeof SelectableVerticalList<Data>>['elements']>>['name'] | undefined = $state()
|
|
51
|
+
$effect(() => {
|
|
52
|
+
if(!!selected) selected = undefined
|
|
53
|
+
})
|
|
54
|
+
$effect(() => {
|
|
55
|
+
if(!!focused && !open) focused = undefined
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
function handleOnSelect(e: Parameters<NonNullable<ComponentProps<typeof SelectableVerticalList<Data>>['onselect']>>[0]){
|
|
59
|
+
open = false
|
|
60
|
+
|
|
61
|
+
if(onselect){
|
|
62
|
+
onselect(e)
|
|
39
63
|
}
|
|
40
|
-
}
|
|
64
|
+
}
|
|
41
65
|
</script>
|
|
42
66
|
|
|
43
67
|
<MenuOrDrawer
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
export type ArrayElement<ArrayType extends readonly unknown[]> = ArrayType extends readonly (infer ElementType)[] ? ElementType : never;
|
|
2
2
|
import '../../../css/main.css';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
};
|
|
10
|
-
}) => void) | undefined;
|
|
3
|
+
import type { ComponentProps } from 'svelte';
|
|
4
|
+
import SelectableVerticalList from '../../simple/lists/SelectableVerticalList.svelte';
|
|
5
|
+
declare function $$render<Data>(): {
|
|
6
|
+
props: import("./MenuOrDrawer.svelte").Props & {
|
|
7
|
+
elements?: ComponentProps<typeof SelectableVerticalList<Data>>["elements"];
|
|
8
|
+
onselect?: ComponentProps<typeof SelectableVerticalList<Data>>["onselect"];
|
|
11
9
|
};
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
exports: {};
|
|
11
|
+
bindings: "open";
|
|
12
|
+
slots: {};
|
|
13
|
+
events: {};
|
|
14
|
+
};
|
|
15
|
+
declare class __sveltets_Render<Data> {
|
|
16
|
+
props(): ReturnType<typeof $$render<Data>>['props'];
|
|
17
|
+
events(): ReturnType<typeof $$render<Data>>['events'];
|
|
18
|
+
slots(): ReturnType<typeof $$render<Data>>['slots'];
|
|
14
19
|
bindings(): "open";
|
|
15
20
|
exports(): {};
|
|
16
21
|
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
:root {
|
|
2
|
-
--quick-actions-default-background-color: rgb(var(--global-color-background-
|
|
2
|
+
--quick-actions-default-background-color: rgb(var(--global-color-background-300));
|
|
3
3
|
--quick-actions-default-selected-items-button-background-color: rgb(var(--global-color-background-500));
|
|
4
|
-
--quick-actions-default-selected-items-button-background-color-hover: rgb(var(--global-color-background-
|
|
5
|
-
--quick-actions-default-selected-items-button-background-color-disabled: rgb(var(--global-color-background-
|
|
4
|
+
--quick-actions-default-selected-items-button-background-color-hover: rgb(var(--global-color-background-400));
|
|
5
|
+
--quick-actions-default-selected-items-button-background-color-disabled: rgb(var(--global-color-background-400), .5);
|
|
6
6
|
--quick-actions-default-selected-items-button-color-disabled: rgb(var(--global-color-contrast-900), .5);
|
|
7
7
|
--quick-actions-default-z-index: 48;
|
|
8
8
|
|
|
9
9
|
--quick-actions-default-buttons-background-color: var(--quick-actions-background-color, var(--quick-actions-default-background-color));
|
|
10
|
-
--quick-actions-default-buttons-background-color-disabled: rgb(var(--global-color-background-
|
|
11
|
-
--quick-actions-default-buttons-background-color-hover: rgb(var(--global-color-background-
|
|
10
|
+
--quick-actions-default-buttons-background-color-disabled: rgb(var(--global-color-background-400), .5);
|
|
11
|
+
--quick-actions-default-buttons-background-color-hover: rgb(var(--global-color-background-400));
|
|
12
12
|
--quick-actions-default-buttons-color: rgb(var(--global-color-contrast-900));
|
|
13
13
|
--quick-actions-default-buttons-color-disabled: rgb(var(--global-color-contrast-900), .5)
|
|
14
14
|
}
|
|
@@ -1,30 +1,66 @@
|
|
|
1
|
-
<script module lang="ts">
|
|
1
|
+
<script module lang="ts">
|
|
2
|
+
export type Action = {
|
|
3
|
+
label: string;
|
|
4
|
+
icon?: string;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
loading?: boolean;
|
|
7
|
+
info?: string;
|
|
8
|
+
disabledInfo?: string
|
|
9
|
+
onClick: NonNullable<ComponentProps<typeof Button>['onclick']>
|
|
10
|
+
};
|
|
2
11
|
</script>
|
|
3
12
|
|
|
4
|
-
<script lang="ts">
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
13
|
+
<script lang="ts">
|
|
14
|
+
import { Button, Icon, mediaQuery, ToolTip } from "../../..";
|
|
15
|
+
import type { ComponentProps } from "svelte";
|
|
16
|
+
import { fly } from "svelte/transition";
|
|
17
|
+
import { cubicIn } from "svelte/easing";
|
|
18
|
+
import MenuOrDrawer from "./MenuOrDrawer.svelte";
|
|
19
|
+
import './QuickActions.css'
|
|
20
|
+
|
|
21
|
+
interface Props {
|
|
22
|
+
selectedItems: number;
|
|
23
|
+
disabled?: boolean;
|
|
24
|
+
actionsForSelectedItems: Action[];
|
|
25
|
+
position?: 'top' | 'bottom';
|
|
26
|
+
lang?: 'it' | 'en';
|
|
27
|
+
onClose?: () => void
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
let {
|
|
31
|
+
selectedItems,
|
|
32
|
+
disabled,
|
|
33
|
+
actionsForSelectedItems,
|
|
34
|
+
position = 'top',
|
|
35
|
+
lang = 'en',
|
|
36
|
+
onClose,
|
|
37
|
+
}: Props = $props();
|
|
38
|
+
|
|
39
|
+
let actions: Action[] = $state([]),
|
|
40
|
+
extraActions: Action[] = $state([]),
|
|
41
|
+
slotSelectActionsContainer: HTMLElement | undefined = $state(),
|
|
42
|
+
moreActionsActivator: HTMLElement | undefined = $state(),
|
|
43
|
+
openMoreActions: boolean = $state(false),
|
|
44
|
+
infoActivators: { [actionLabel: string]: HTMLElement } = $state({}),
|
|
45
|
+
disabledInfoActivators: { [actionLabel: string]: HTMLElement } = $state({});
|
|
46
|
+
|
|
47
|
+
$effect(() => {
|
|
12
48
|
if (!!slotSelectActionsContainer) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
49
|
+
let numberOfSplit = $mediaQuery.xl ? 5 :
|
|
50
|
+
$mediaQuery.l ? 4 :
|
|
51
|
+
$mediaQuery.m ? 2 :
|
|
52
|
+
$mediaQuery.s ? 0 :
|
|
53
|
+
$mediaQuery.xs ? 0 : 3
|
|
54
|
+
|
|
55
|
+
if (actionsForSelectedItems.length > numberOfSplit) {
|
|
56
|
+
extraActions = actionsForSelectedItems.slice(numberOfSplit);
|
|
57
|
+
actions = actionsForSelectedItems.slice(0, numberOfSplit);
|
|
58
|
+
} else {
|
|
59
|
+
actions = actionsForSelectedItems;
|
|
60
|
+
extraActions = [];
|
|
61
|
+
}
|
|
26
62
|
}
|
|
27
|
-
})
|
|
63
|
+
})
|
|
28
64
|
</script>
|
|
29
65
|
|
|
30
66
|
{#if selectedItems > 0}
|
|
@@ -98,7 +134,11 @@ $effect(() => {
|
|
|
98
134
|
--circular-loader-height="17px"
|
|
99
135
|
disabled={action.disabled || action.loading || disabled}
|
|
100
136
|
loading={action.loading}
|
|
101
|
-
onclick={
|
|
137
|
+
onclick={e => {
|
|
138
|
+
action.loading = true
|
|
139
|
+
action.onClick(e)
|
|
140
|
+
action.loading = false
|
|
141
|
+
}}
|
|
102
142
|
>
|
|
103
143
|
<div class="action" bind:this={disabledInfoActivators[action.label]}>
|
|
104
144
|
{#if action.icon}
|
|
@@ -130,8 +170,7 @@ $effect(() => {
|
|
|
130
170
|
--button-hover-color: var(--quick-actions-buttons-color, var(--quick-actions-default-buttons-color));
|
|
131
171
|
--button-focus-color: var(--quick-actions-buttons-color, var(--quick-actions-default-buttons-color));
|
|
132
172
|
--button-disabled-color: var(--quick-actions-buttons-color-disabled, var(--quick-actions-default-buttons-color-disabled));
|
|
133
|
-
--button-box-shadow: none;
|
|
134
|
-
margin-left: 8px;
|
|
173
|
+
--button-box-shadow: none;
|
|
135
174
|
'
|
|
136
175
|
--button-height="20px"
|
|
137
176
|
onclick={(e) => {
|
|
@@ -189,7 +228,11 @@ $effect(() => {
|
|
|
189
228
|
--circular-loader-height="25px"
|
|
190
229
|
disabled={action.disabled || action.loading || disabled}
|
|
191
230
|
loading={action.loading}
|
|
192
|
-
onclick={
|
|
231
|
+
onclick={e => {
|
|
232
|
+
action.loading = true
|
|
233
|
+
action.onClick(e)
|
|
234
|
+
action.loading = false
|
|
235
|
+
}}
|
|
193
236
|
>
|
|
194
237
|
<div class="action" bind:this={disabledInfoActivators[action.label]}>
|
|
195
238
|
{#if action.icon}
|
|
@@ -350,13 +393,13 @@ $effect(() => {
|
|
|
350
393
|
align-items: center;
|
|
351
394
|
box-shadow: 2px 2px 2px 2px rgba(0, 0, 0, 0.2);
|
|
352
395
|
position: fixed;
|
|
353
|
-
padding:
|
|
354
|
-
border-radius:
|
|
396
|
+
padding: 8px;
|
|
397
|
+
border-radius: 8px;
|
|
355
398
|
background-color: var(
|
|
356
399
|
--quick-actions-background-color,
|
|
357
400
|
var(--quick-actions-default-background-color)
|
|
358
401
|
);
|
|
359
|
-
gap:
|
|
402
|
+
gap: 4px;
|
|
360
403
|
left: 79dvw;
|
|
361
404
|
}
|
|
362
405
|
|
|
@@ -381,13 +424,13 @@ $effect(() => {
|
|
|
381
424
|
align-items: center;
|
|
382
425
|
box-shadow: 2px 2px 2px 2px rgba(0, 0, 0, 0.2);
|
|
383
426
|
position: fixed;
|
|
384
|
-
padding:
|
|
385
|
-
border-radius:
|
|
427
|
+
padding: 8px;
|
|
428
|
+
border-radius: 8px;
|
|
386
429
|
background-color: var(
|
|
387
430
|
--quick-actions-background-color,
|
|
388
431
|
var(--quick-actions-default-background-color)
|
|
389
432
|
);
|
|
390
|
-
gap:
|
|
433
|
+
gap: 4px;
|
|
391
434
|
left: 73dvw;
|
|
392
435
|
}
|
|
393
436
|
}
|
|
@@ -1,36 +1,55 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import '../../../css/main.css'
|
|
3
|
+
import Menu from "../../simple/common/Menu.svelte";
|
|
4
|
+
import { tick, type ComponentProps, type Snippet } from 'svelte';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
activator: HTMLElement;
|
|
8
|
+
menuOpen?: boolean;
|
|
9
|
+
menuProps?: ComponentProps<typeof Menu>;
|
|
10
|
+
appearTimeout?: number;
|
|
11
|
+
children?: Snippet<[]>
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
let {
|
|
15
|
+
activator = $bindable(),
|
|
16
|
+
menuOpen = $bindable(false),
|
|
17
|
+
menuProps = {},
|
|
18
|
+
appearTimeout = undefined,
|
|
19
|
+
children,
|
|
20
|
+
}: Props = $props();
|
|
21
|
+
|
|
22
|
+
let mouseEnterHandler: (() => void) | undefined = undefined,
|
|
23
|
+
mouseLeaveHandler: (() => void) | undefined = undefined,
|
|
24
|
+
appearTimeoutId: NodeJS.Timeout | undefined = undefined
|
|
25
|
+
|
|
26
|
+
$effect(() => {
|
|
27
|
+
if(!!activator) {
|
|
28
|
+
if(!!mouseEnterHandler) activator.removeEventListener('mouseenter', mouseEnterHandler)
|
|
29
|
+
if(!!mouseLeaveHandler) activator.removeEventListener('mouseleave', mouseLeaveHandler)
|
|
30
|
+
|
|
31
|
+
mouseEnterHandler = () => {
|
|
32
|
+
if(appearTimeout !== undefined) {
|
|
33
|
+
if(appearTimeoutId !== undefined) clearTimeout(appearTimeoutId)
|
|
34
|
+
|
|
35
|
+
appearTimeoutId = setTimeout(async () => {
|
|
36
|
+
menuOpen = true
|
|
37
|
+
await tick()
|
|
38
|
+
}, appearTimeout);
|
|
39
|
+
} else {
|
|
40
|
+
menuOpen = true
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
activator.addEventListener('mouseenter', mouseEnterHandler)
|
|
44
|
+
|
|
45
|
+
mouseLeaveHandler = () => {
|
|
46
|
+
if(appearTimeoutId !== undefined) clearTimeout(appearTimeoutId)
|
|
47
|
+
menuOpen = false
|
|
48
|
+
}
|
|
49
|
+
activator.addEventListener('mouseleave', mouseLeaveHandler)
|
|
32
50
|
}
|
|
33
|
-
})
|
|
51
|
+
})
|
|
52
|
+
|
|
34
53
|
</script>
|
|
35
54
|
|
|
36
55
|
<Menu
|