@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.
Files changed (120) 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.css +5 -5
  8. package/dist/components/composed/common/QuickActions.svelte +76 -33
  9. package/dist/components/composed/common/ToolTip.svelte +51 -32
  10. package/dist/components/composed/dashboard/DashboardShaper.svelte +280 -147
  11. package/dist/components/composed/dashboard/DashboardShaper.svelte.d.ts +54 -45
  12. package/dist/components/composed/forms/AsyncAutocomplete.svelte +81 -30
  13. package/dist/components/composed/forms/AsyncAutocomplete.svelte.d.ts +17 -5
  14. package/dist/components/composed/forms/AvatarDropdown.svelte +146 -70
  15. package/dist/components/composed/forms/AvatarDropdown.svelte.d.ts +27 -22
  16. package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte +65 -19
  17. package/dist/components/composed/forms/CountriesAutocomplete.svelte +33 -4
  18. package/dist/components/composed/forms/DatePickerTextField.svelte +266 -161
  19. package/dist/components/composed/forms/Dropdown.svelte +89 -22
  20. package/dist/components/composed/forms/Dropdown.svelte.d.ts +18 -13
  21. package/dist/components/composed/forms/IconsDropdown.svelte +85 -40
  22. package/dist/components/composed/forms/IconsDropdown.svelte.d.ts +15 -8
  23. package/dist/components/composed/forms/LabelAndSelect.svelte +46 -5
  24. package/dist/components/composed/forms/LabelAndTextField.svelte +56 -3
  25. package/dist/components/composed/forms/PeriodPicker.svelte +38 -18
  26. package/dist/components/composed/forms/PeriodPicker.svelte.d.ts +32 -7
  27. package/dist/components/composed/forms/PeriodSelector.svelte +427 -312
  28. package/dist/components/composed/forms/PeriodSelector.svelte.d.ts +20 -13
  29. package/dist/components/composed/forms/ToggleList.svelte +71 -37
  30. package/dist/components/composed/forms/ToggleList.svelte.d.ts +14 -7
  31. package/dist/components/composed/forms/YearPickerTextField.svelte +154 -82
  32. package/dist/components/composed/list/DynamicTable.svelte +1377 -808
  33. package/dist/components/composed/list/DynamicTable.svelte.d.ts +85 -70
  34. package/dist/components/composed/list/EnhancedPaginatedTable.svelte +75 -32
  35. package/dist/components/composed/list/EnhancedPaginatedTable.svelte.d.ts +16 -6
  36. package/dist/components/composed/list/PaginatedTable.svelte +325 -120
  37. package/dist/components/composed/list/PaginatedTable.svelte.d.ts +26 -22
  38. package/dist/components/composed/progress/HorizontalStackedProgress.svelte +67 -29
  39. package/dist/components/composed/search/DynamicFilters.svelte +126 -91
  40. package/dist/components/composed/search/FilterEditor.svelte +178 -115
  41. package/dist/components/composed/search/Filters.svelte +441 -301
  42. package/dist/components/composed/search/GlobalSearchTextField.svelte +102 -42
  43. package/dist/components/composed/search/GlobalSearchTextField.svelte.d.ts +23 -20
  44. package/dist/components/composed/search/MobileFilterEditor.svelte +174 -120
  45. package/dist/components/composed/search/QuickFilters.svelte +133 -23
  46. package/dist/components/composed/search/SearchBar.svelte +42 -3
  47. package/dist/components/composed/search/SearchResults.svelte +48 -5
  48. package/dist/components/composed/search/SearchResults.svelte.d.ts +17 -17
  49. package/dist/components/layouts/CollapsibleSideBarLayout.svelte +100 -24
  50. package/dist/components/layouts/StableDividedSideBarLayout.svelte +74 -24
  51. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte +140 -57
  52. package/dist/components/simple/buttons/Button.svelte +86 -36
  53. package/dist/components/simple/buttons/LinkButton.svelte +81 -25
  54. package/dist/components/simple/charts/BarChart.svelte +137 -105
  55. package/dist/components/simple/charts/LineChart.svelte +124 -92
  56. package/dist/components/simple/charts/PieChart.svelte +51 -23
  57. package/dist/components/simple/common/CollapsibleDivider.svelte +58 -26
  58. package/dist/components/simple/common/Divider.svelte +2 -1
  59. package/dist/components/simple/common/InfiniteScroll.svelte +60 -34
  60. package/dist/components/simple/common/MediaQuery.svelte +28 -3
  61. package/dist/components/simple/common/Menu.svelte +516 -390
  62. package/dist/components/simple/common/NoData.svelte +18 -4
  63. package/dist/components/simple/common/VerticalDraggableList.svelte +52 -26
  64. package/dist/components/simple/common/VerticalDraggableList.svelte.d.ts +20 -9
  65. package/dist/components/simple/dashboards/DashboardGridShaper.svelte +28 -22
  66. package/dist/components/simple/dates/Calendar.svelte +142 -72
  67. package/dist/components/simple/dates/DatePicker.svelte +138 -71
  68. package/dist/components/simple/dates/MonthSelector.svelte +49 -13
  69. package/dist/components/simple/dates/YearSelector.svelte +73 -30
  70. package/dist/components/simple/dialogs/Dialog.svelte +109 -59
  71. package/dist/components/simple/forms/Autocomplete.css +3 -0
  72. package/dist/components/simple/forms/Autocomplete.svelte +366 -164
  73. package/dist/components/simple/forms/Autocomplete.svelte.d.ts +31 -19
  74. package/dist/components/simple/forms/Checkbox.svelte +57 -29
  75. package/dist/components/simple/forms/FileInput.svelte +103 -58
  76. package/dist/components/simple/forms/FileInputList.svelte +115 -51
  77. package/dist/components/simple/forms/RadioButton.svelte +36 -3
  78. package/dist/components/simple/forms/Select.svelte +30 -3
  79. package/dist/components/simple/forms/SimpleTextField.svelte +94 -4
  80. package/dist/components/simple/forms/Switch.svelte +33 -11
  81. package/dist/components/simple/forms/Textarea.svelte +22 -5
  82. package/dist/components/simple/forms/VerticalSwitch.svelte +19 -2
  83. package/dist/components/simple/forms/VerticalTextSwitch.svelte +35 -3
  84. package/dist/components/simple/lists/BoxList.svelte +42 -11
  85. package/dist/components/simple/lists/ColorInvertedSelector.svelte +83 -25
  86. package/dist/components/simple/lists/HierarchyMenu.svelte +55 -20
  87. package/dist/components/simple/lists/Paginator.svelte +53 -34
  88. package/dist/components/simple/lists/SelectableMenuList.svelte +52 -16
  89. package/dist/components/simple/lists/SelectableVerticalList.svelte +169 -85
  90. package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +21 -14
  91. package/dist/components/simple/lists/SidebarMenuList.svelte +127 -79
  92. package/dist/components/simple/lists/SimpleTable.svelte +449 -239
  93. package/dist/components/simple/lists/SimpleTable.svelte.d.ts +31 -22
  94. package/dist/components/simple/loaders/CircularLoader.css +1 -1
  95. package/dist/components/simple/loaders/CircularLoader.svelte +11 -3
  96. package/dist/components/simple/loaders/Skeleton.svelte +3 -2
  97. package/dist/components/simple/media/Avatar.svelte +35 -15
  98. package/dist/components/simple/media/DescriptiveAvatar.svelte +30 -4
  99. package/dist/components/simple/media/FlagIcon.svelte +13 -3
  100. package/dist/components/simple/media/Icon.svelte +21 -6
  101. package/dist/components/simple/navigation/Breadcrumb.svelte +41 -9
  102. package/dist/components/simple/navigation/Chip.css +1 -1
  103. package/dist/components/simple/navigation/Chip.svelte +65 -36
  104. package/dist/components/simple/navigation/Drawer.svelte +132 -71
  105. package/dist/components/simple/navigation/HeaderMenu.svelte +69 -25
  106. package/dist/components/simple/navigation/Navigator.svelte +45 -11
  107. package/dist/components/simple/navigation/TabSwitcher.svelte +60 -19
  108. package/dist/components/simple/notifiers/AlertBanner.svelte +59 -11
  109. package/dist/components/simple/progress/ProgressBar.svelte +26 -10
  110. package/dist/components/simple/timeline/SimpleTimeLine.svelte +52 -5
  111. package/dist/components/simple/timeline/SimpleTimeLine.svelte.d.ts +16 -9
  112. package/dist/components/simple/typography/Code.svelte +41 -12
  113. package/dist/stores/layouts/unstableSidebarOpened.d.ts +1 -1
  114. package/dist/stores/layouts/unstableSidebarOpened.js +1 -1
  115. package/dist/stores/theme.js +2 -2
  116. package/dist/utils/filters/builder.d.ts +2 -2
  117. package/dist/utils/filters/builder.js +7 -7
  118. package/dist/utils/filters/modifiers/where.d.ts +1 -1
  119. package/dist/utils/teleporter.js +4 -4
  120. package/package.json +39 -33
@@ -1,11 +1,29 @@
1
- <script lang="ts">import Button from "../../simple/buttons/Button.svelte";
2
- let { active = $bindable(false), buttonProps = {}, onclick, children, appendSnippet: appendInternalSnippet, } = $props();
3
- function handleOnClick(e) {
4
- active = !active;
5
- if (onclick) {
6
- onclick(e);
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">import { Button, Divider, Drawer, Icon, MediaQuery, Switch, VerticalDraggableList } from "../../..";
2
- import { flip } from "svelte/animate";
3
- import { quintOut } from "svelte/easing";
4
- import { crossfade } from "svelte/transition";
5
- import EnhancedPaginatedTable from "../list/EnhancedPaginatedTable.svelte";
6
- import lodash from "lodash";
7
- const deepClone = lodash.cloneDeep;
8
- let { drawerProps, open = $bindable(), lang, availableHeaders, headersToShow = $bindable(), pinnableColumns, onsaveHeadersToShow, itemSnippet: internalItemSnippet, headersToAddSnippet, contentSnippet, } = $props();
9
- const [send, receive] = crossfade({
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
- const style = getComputedStyle(node);
13
- const transform = style.transform === "none" ? "" : style.transform;
14
- return {
15
- duration: 500,
16
- easing: quintOut,
17
- css: (t) => `
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
- let internalHeadersToShow = $state(deepClone(headersToShow));
25
- $effect(() => {
26
- internalHeadersToShow = deepClone(headersToShow);
27
- });
28
- function saveHeadersToShow() {
29
- headersToShow = internalHeadersToShow;
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
- detail: {
32
- headersToShow,
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
- declare class __sveltets_Render<Item extends {
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: import("../../simple/lists/SimpleTable.svelte").Header<Data>[];
11
- headersToShow: import("../../simple/lists/SimpleTable.svelte").Header<Data>[];
11
+ availableHeaders: ComponentProps<typeof EnhancedPaginatedTable<Item, Data>>["headers"];
12
+ headersToShow: ComponentProps<typeof EnhancedPaginatedTable<Item, Data>>["headers"];
12
13
  pinnableColumns?: boolean;
13
- onsaveHeadersToShow?: ((event: {
14
+ onsaveHeadersToShow?: (event: {
14
15
  detail: {
15
- headersToShow: import("../../simple/lists/SimpleTable.svelte").Header<Data>[];
16
+ headersToShow: ComponentProps<typeof EnhancedPaginatedTable<Item, Data>>["headers"];
16
17
  };
17
- }) => void) | undefined;
18
+ }) => void;
18
19
  itemSnippet?: ComponentProps<typeof VerticalDraggableList>["itemSnippet"];
19
20
  headersToAddSnippet?: Snippet<[{
20
- header: import("../../simple/lists/SimpleTable.svelte").Header<Data>;
21
- }]> | undefined;
21
+ header: ComponentProps<typeof EnhancedPaginatedTable<Item, Data>>["headers"][number];
22
+ }]>;
22
23
  contentSnippet?: Snippet<[]>;
23
24
  };
24
- events(): {};
25
- slots(): {};
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">import '../../../css/main.css';
2
- import Drawer from '../../simple/navigation/Drawer.svelte';
3
- import Menu from '../../simple/common/Menu.svelte';
4
- import MediaQuery from '../../simple/common/MediaQuery.svelte';
5
- import lodash from 'lodash';
6
- let { open = $bindable(), drawerProps, menuProps, children, } = $props();
7
- const menuPropsDefaultValue = {
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
- let finalMenuProps = $derived(lodash.clone(lodash.merge(menuPropsDefaultValue, menuProps)));
18
- const drawerPropsDefaultValue = {
37
+ }
38
+
39
+ let finalMenuProps = $derived(
40
+ lodash.clone(lodash.merge(menuPropsDefaultValue, menuProps))
41
+ )
42
+
43
+ const drawerPropsDefaultValue = {
19
44
  position: 'bottom'
20
- };
21
- let finalDrawerProps = $derived(lodash.clone(lodash.merge(drawerPropsDefaultValue, drawerProps)));
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>export {};
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">import '../../../css/main.css';
5
- import MenuOrDrawer from "./MenuOrDrawer.svelte";
6
- import SelectableVerticalList from '../../simple/lists/SelectableVerticalList.svelte';
7
- import lodash from 'lodash';
8
- let { open = $bindable(), elements = [], onselect, menuProps, drawerProps, } = $props();
9
- const menuPropsDefaultValue = {
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
- let finalMenuProps = $derived(lodash.clone(lodash.merge(menuPropsDefaultValue, menuProps)));
21
- const drawerPropsDefaultValue = {
35
+ }
36
+
37
+ let finalMenuProps = $derived(
38
+ lodash.clone(lodash.merge(menuPropsDefaultValue, menuProps))
39
+ )
40
+
41
+ const drawerPropsDefaultValue = {
22
42
  position: 'bottom'
23
- };
24
- let finalDrawerProps = $derived(lodash.clone(lodash.merge(drawerPropsDefaultValue, drawerProps)));
25
- let selected = $state();
26
- let focused = $state();
27
- $effect(() => {
28
- if (!!selected)
29
- selected = undefined;
30
- });
31
- $effect(() => {
32
- if (!!focused && !open)
33
- focused = undefined;
34
- });
35
- function handleOnSelect(e) {
36
- open = false;
37
- if (onselect) {
38
- onselect(e);
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
- declare class __sveltets_Render<Data> {
4
- props(): import("./MenuOrDrawer.svelte").Props & {
5
- elements?: import("../../simple/lists/SelectableVerticalList.svelte").Element<Data>[] | undefined;
6
- onselect?: ((event: {
7
- detail: {
8
- element: import("../../simple/lists/SelectableVerticalList.svelte").Element<Data>;
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
- events(): {};
13
- slots(): {};
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-200));
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-300));
5
- --quick-actions-default-selected-items-button-background-color-disabled: rgb(var(--global-color-background-300), .5);
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-300), .5);
11
- --quick-actions-default-buttons-background-color-hover: rgb(var(--global-color-background-300));
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">export {};
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">import { Button, Icon, mediaQuery, ToolTip } from "../../..";
5
- import { fly } from "svelte/transition";
6
- import { cubicIn } from "svelte/easing";
7
- import MenuOrDrawer from "./MenuOrDrawer.svelte";
8
- import './QuickActions.css';
9
- let { selectedItems, disabled, actionsForSelectedItems, position = 'top', lang = 'en', onClose, } = $props();
10
- let actions = $state([]), extraActions = $state([]), slotSelectActionsContainer = $state(), moreActionsActivator = $state(), openMoreActions = $state(false), infoActivators = $state({}), disabledInfoActivators = $state({});
11
- $effect(() => {
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
- let numberOfSplit = $mediaQuery.xl ? 5 :
14
- $mediaQuery.l ? 4 :
15
- $mediaQuery.m ? 2 :
16
- $mediaQuery.s ? 0 :
17
- $mediaQuery.xs ? 0 : 3;
18
- if (actionsForSelectedItems.length > numberOfSplit) {
19
- extraActions = actionsForSelectedItems.slice(numberOfSplit);
20
- actions = actionsForSelectedItems.slice(0, numberOfSplit);
21
- }
22
- else {
23
- actions = actionsForSelectedItems;
24
- extraActions = [];
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={action.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={action.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: 10px;
354
- border-radius: 10px;
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: 15px;
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: 10px;
385
- border-radius: 10px;
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: 15px;
433
+ gap: 4px;
391
434
  left: 73dvw;
392
435
  }
393
436
  }
@@ -1,36 +1,55 @@
1
- <script lang="ts">import '../../../css/main.css';
2
- import Menu from "../../simple/common/Menu.svelte";
3
- import { tick } from 'svelte';
4
- let { activator = $bindable(), menuOpen = $bindable(false), menuProps = {}, appearTimeout = undefined, children, } = $props();
5
- let mouseEnterHandler = undefined, mouseLeaveHandler = undefined, appearTimeoutId = undefined;
6
- $effect(() => {
7
- if (!!activator) {
8
- if (!!mouseEnterHandler)
9
- activator.removeEventListener('mouseenter', mouseEnterHandler);
10
- if (!!mouseLeaveHandler)
11
- activator.removeEventListener('mouseleave', mouseLeaveHandler);
12
- mouseEnterHandler = () => {
13
- if (appearTimeout !== undefined) {
14
- if (appearTimeoutId !== undefined)
15
- clearTimeout(appearTimeoutId);
16
- appearTimeoutId = setTimeout(async () => {
17
- menuOpen = true;
18
- await tick();
19
- }, appearTimeout);
20
- }
21
- else {
22
- menuOpen = true;
23
- }
24
- };
25
- activator.addEventListener('mouseenter', mouseEnterHandler);
26
- mouseLeaveHandler = () => {
27
- if (appearTimeoutId !== undefined)
28
- clearTimeout(appearTimeoutId);
29
- menuOpen = false;
30
- };
31
- activator.addEventListener('mouseleave', mouseLeaveHandler);
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