@likable-hair/svelte 4.2.5 → 4.3.1
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 +51 -15
- package/dist/components/composed/common/MenuOrDrawer.svelte.d.ts +1 -1
- 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.svelte +65 -25
- package/dist/components/composed/common/QuickActions.svelte.d.ts +2 -1
- package/dist/components/composed/common/ToolTip.svelte +51 -32
- package/dist/components/composed/dashboard/DashboardShaper.svelte +271 -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 +12 -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 +91 -21
- package/dist/components/composed/forms/Dropdown.svelte.d.ts +19 -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 +429 -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 +1372 -809
- 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 +17 -6
- package/dist/components/composed/list/PaginatedTable.svelte +327 -116
- package/dist/components/composed/list/PaginatedTable.svelte.d.ts +28 -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 +169 -109
- package/dist/components/composed/search/Filters.svelte +385 -275
- 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 +124 -75
- 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 -371
- 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.svelte +364 -187
- package/dist/components/simple/forms/Autocomplete.svelte.d.ts +27 -20
- 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/SimpleTextField.svelte.d.ts +1 -1
- 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 +442 -245
- 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.svelte +65 -29
- 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/filters.js +12 -3
- 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,33 @@
|
|
|
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 = $bindable(),
|
|
25
|
+
children,
|
|
26
|
+
}: Props = $props();
|
|
27
|
+
|
|
28
|
+
if (!menuProps) menuProps = {}
|
|
29
|
+
|
|
30
|
+
const menuPropsDefaultValue: Omit<ComponentProps<typeof Menu>, 'open'> = {
|
|
8
31
|
closeOnClickOutside: true,
|
|
9
32
|
_boxShadow: "rgb(var(--global-color-grey-900), .5) 0px 2px 4px",
|
|
10
33
|
_height: "fit-content",
|
|
@@ -13,27 +36,40 @@ const menuPropsDefaultValue = {
|
|
|
13
36
|
_width: "",
|
|
14
37
|
anchor: 'bottom-center',
|
|
15
38
|
stayInViewport: true
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
let finalMenuProps = $derived(
|
|
42
|
+
lodash.merge({}, menuPropsDefaultValue, menuProps)
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
const drawerPropsDefaultValue: Omit<ComponentProps<typeof Drawer>, 'open'> = {
|
|
19
46
|
position: 'bottom'
|
|
20
|
-
}
|
|
21
|
-
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
let finalDrawerProps = $derived(
|
|
50
|
+
lodash.merge({}, drawerPropsDefaultValue, drawerProps)
|
|
51
|
+
)
|
|
22
52
|
</script>
|
|
23
53
|
|
|
24
54
|
<MediaQuery>
|
|
25
|
-
{#snippet defaultSnippet({ mAndDown})}
|
|
55
|
+
{#snippet defaultSnippet({ mAndDown })}
|
|
26
56
|
{#if mAndDown}
|
|
27
57
|
<Drawer
|
|
28
|
-
bind:open={open}
|
|
29
58
|
{...finalDrawerProps}
|
|
59
|
+
bind:open={open}
|
|
30
60
|
>
|
|
31
61
|
{@render children?.({ isDrawer: true, isMenu: false })}
|
|
32
62
|
</Drawer>
|
|
33
63
|
{:else}
|
|
34
64
|
<Menu
|
|
35
|
-
bind:open={open}
|
|
36
65
|
{...finalMenuProps}
|
|
66
|
+
bind:open
|
|
67
|
+
bind:flipOnOverflow={menuProps.flipOnOverflow}
|
|
68
|
+
bind:refreshPosition={menuProps.refreshPosition}
|
|
69
|
+
bind:stayInViewport={menuProps.stayInViewport}
|
|
70
|
+
bind:activator={menuProps.activator}
|
|
71
|
+
bind:menuElement={menuProps.menuElement}
|
|
72
|
+
bind:openingId={menuProps.openingId}
|
|
37
73
|
>
|
|
38
74
|
{@render children?.({ isDrawer: false, isMenu: true })}
|
|
39
75
|
</Menu>
|
|
@@ -13,6 +13,6 @@ export interface Props {
|
|
|
13
13
|
}
|
|
14
14
|
]>;
|
|
15
15
|
}
|
|
16
|
-
declare const MenuOrDrawer: import("svelte").Component<Props, {}, "open">;
|
|
16
|
+
declare const MenuOrDrawer: import("svelte").Component<Props, {}, "open" | "menuProps">;
|
|
17
17
|
type MenuOrDrawer = ReturnType<typeof MenuOrDrawer>;
|
|
18
18
|
export default MenuOrDrawer;
|
|
@@ -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,30 +1,68 @@
|
|
|
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, Snippet } 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
|
+
selectedItemsTextSnippet?: Snippet<[]>
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
let {
|
|
32
|
+
selectedItems,
|
|
33
|
+
disabled,
|
|
34
|
+
actionsForSelectedItems,
|
|
35
|
+
position = 'top',
|
|
36
|
+
lang = 'en',
|
|
37
|
+
onClose,
|
|
38
|
+
selectedItemsTextSnippet,
|
|
39
|
+
}: Props = $props();
|
|
40
|
+
|
|
41
|
+
let actions: Action[] = $state([]),
|
|
42
|
+
extraActions: Action[] = $state([]),
|
|
43
|
+
slotSelectActionsContainer: HTMLElement | undefined = $state(),
|
|
44
|
+
moreActionsActivator: HTMLElement | undefined = $state(),
|
|
45
|
+
openMoreActions: boolean = $state(false),
|
|
46
|
+
infoActivators: { [actionLabel: string]: HTMLElement } = $state({}),
|
|
47
|
+
disabledInfoActivators: { [actionLabel: string]: HTMLElement } = $state({});
|
|
48
|
+
|
|
49
|
+
$effect(() => {
|
|
12
50
|
if (!!slotSelectActionsContainer) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
51
|
+
let numberOfSplit = $mediaQuery.xl ? 5 :
|
|
52
|
+
$mediaQuery.l ? 4 :
|
|
53
|
+
$mediaQuery.m ? 2 :
|
|
54
|
+
$mediaQuery.s ? 0 :
|
|
55
|
+
$mediaQuery.xs ? 0 : 3
|
|
56
|
+
|
|
57
|
+
if (actionsForSelectedItems.length > numberOfSplit) {
|
|
58
|
+
extraActions = actionsForSelectedItems.slice(numberOfSplit);
|
|
59
|
+
actions = actionsForSelectedItems.slice(0, numberOfSplit);
|
|
60
|
+
} else {
|
|
61
|
+
actions = actionsForSelectedItems;
|
|
62
|
+
extraActions = [];
|
|
63
|
+
}
|
|
26
64
|
}
|
|
27
|
-
})
|
|
65
|
+
})
|
|
28
66
|
</script>
|
|
29
67
|
|
|
30
68
|
{#if selectedItems > 0}
|
|
@@ -74,8 +112,10 @@ $effect(() => {
|
|
|
74
112
|
if(onClose) onClose()
|
|
75
113
|
}}
|
|
76
114
|
>
|
|
77
|
-
{
|
|
78
|
-
|
|
115
|
+
{#if selectedItemsTextSnippet}{@render selectedItemsTextSnippet()}{:else}
|
|
116
|
+
{selectedItems} {lang == 'en' ? 'items selected' : 'righe selezionate'}
|
|
117
|
+
<Icon name="mdi-close" />
|
|
118
|
+
{/if}
|
|
79
119
|
</button>
|
|
80
120
|
</div>
|
|
81
121
|
<div class="select-actions-container">
|
|
@@ -8,7 +8,7 @@ export type Action = {
|
|
|
8
8
|
onClick: NonNullable<ComponentProps<typeof Button>['onclick']>;
|
|
9
9
|
};
|
|
10
10
|
import { Button } from "../../..";
|
|
11
|
-
import type { ComponentProps } from "svelte";
|
|
11
|
+
import type { ComponentProps, Snippet } from "svelte";
|
|
12
12
|
import './QuickActions.css';
|
|
13
13
|
interface Props {
|
|
14
14
|
selectedItems: number;
|
|
@@ -17,6 +17,7 @@ interface Props {
|
|
|
17
17
|
position?: 'top' | 'bottom';
|
|
18
18
|
lang?: 'it' | 'en';
|
|
19
19
|
onClose?: () => void;
|
|
20
|
+
selectedItemsTextSnippet?: Snippet<[]>;
|
|
20
21
|
}
|
|
21
22
|
declare const QuickActions: import("svelte").Component<Props, {}, "">;
|
|
22
23
|
type QuickActions = ReturnType<typeof QuickActions>;
|
|
@@ -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
|