@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,7 +1,21 @@
1
- <script lang="ts">import '../../../css/main.css';
2
- import './NoData.css';
3
- import Icon from "../media/Icon.svelte";
4
- let { lang = 'en', noItemsText = lang == 'en' ? 'No data available' : 'Nessun dato disponibile', iconName = 'mdi-database-off', class: clazz, } = $props();
1
+ <script lang="ts">
2
+ import '../../../css/main.css'
3
+ import './NoData.css'
4
+ import Icon from "../media/Icon.svelte";
5
+
6
+ interface Props {
7
+ lang?: 'it' | 'en',
8
+ noItemsText?: string,
9
+ iconName?: string,
10
+ class?: string
11
+ }
12
+
13
+ let {
14
+ lang = 'en',
15
+ noItemsText = lang == 'en' ? 'No data available' : 'Nessun dato disponibile',
16
+ iconName = 'mdi-database-off',
17
+ class: clazz,
18
+ }: Props = $props()
5
19
  </script>
6
20
 
7
21
  <div class="no-data-container">
@@ -1,31 +1,57 @@
1
- <script lang="ts" generics="Item extends { id: string, name: string, pinned?: boolean }">import '../../../css/main.css';
2
- import './VerticalDraggableList.css';
3
- import { flip } from "svelte/animate";
4
- import { dndzone } from "svelte-dnd-action";
5
- import {} from "svelte";
6
- import { Icon } from "../../..";
7
- let { items = [], class: clazz = '', itemSnippet, onchangeOrder, } = $props();
8
- const flipDurationMs = 300;
9
- let pinnedItems = $derived.by(() => items.filter(item => item.pinned)), internalItems = $derived.by(() => items.filter(item => !item.pinned));
10
- function handleDndConsider(e) {
11
- items = [
12
- ...pinnedItems,
13
- ...e.detail.items
14
- ];
15
- }
16
- function handleDndFinalize(e) {
1
+ <script lang="ts" generics="Item extends { id: string, name: string, pinned?: boolean }">
2
+ import '../../../css/main.css'
3
+ import './VerticalDraggableList.css'
4
+ import { flip } from "svelte/animate";
5
+ import { dndzone, type DndEvent } from "svelte-dnd-action";
6
+ import { type Snippet } from "svelte"
7
+ import { Icon } from "../../..";
8
+
9
+ interface Props {
10
+ items?: Item[];
11
+ class?: string;
12
+ itemSnippet?: Snippet<[{
13
+ item: typeof items[number],
14
+ index: number
15
+ }]>
16
+ onchangeOrder?: (event: {
17
+ detail: {
18
+ items: typeof items
19
+ }
20
+ }) => void
21
+ }
22
+
23
+ let {
24
+ items = [],
25
+ class: clazz = '',
26
+ itemSnippet,
27
+ onchangeOrder,
28
+ }: Props = $props();
29
+
30
+ const flipDurationMs = 300;
31
+
32
+ let pinnedItems = $derived.by(() => items.filter(item => item.pinned)),
33
+ internalItems = $derived.by(() => items.filter(item => !item.pinned));
34
+
35
+ function handleDndConsider(e: CustomEvent<DndEvent<Item>>) {
17
36
  items = [
18
- ...pinnedItems,
19
- ...e.detail.items
20
- ];
21
- if (onchangeOrder) {
22
- onchangeOrder({
23
- detail: {
24
- items
25
- }
26
- });
37
+ ...pinnedItems,
38
+ ...e.detail.items
39
+ ]
40
+ }
41
+
42
+ function handleDndFinalize(e: CustomEvent<DndEvent<Item>>) {
43
+ items = [
44
+ ...pinnedItems,
45
+ ...e.detail.items
46
+ ]
47
+ if(onchangeOrder){
48
+ onchangeOrder({
49
+ detail: {
50
+ items
51
+ }
52
+ })
27
53
  }
28
- }
54
+ }
29
55
  </script>
30
56
 
31
57
  {#each pinnedItems as item, index (item.id)}
@@ -1,26 +1,37 @@
1
1
  import '../../../css/main.css';
2
2
  import './VerticalDraggableList.css';
3
3
  import { type Snippet } from "svelte";
4
- declare class __sveltets_Render<Item extends {
4
+ declare function $$render<Item extends {
5
5
  id: string;
6
6
  name: string;
7
7
  pinned?: boolean;
8
- }> {
9
- props(): {
10
- items?: Item[] | undefined;
8
+ }>(): {
9
+ props: {
10
+ items?: Item[];
11
11
  class?: string;
12
12
  itemSnippet?: Snippet<[{
13
13
  item: Item;
14
14
  index: number;
15
- }]> | undefined;
16
- onchangeOrder?: ((event: {
15
+ }]>;
16
+ onchangeOrder?: (event: {
17
17
  detail: {
18
18
  items: Item[];
19
19
  };
20
- }) => void) | undefined;
20
+ }) => void;
21
21
  };
22
- events(): {};
23
- slots(): {};
22
+ exports: {};
23
+ bindings: "";
24
+ slots: {};
25
+ events: {};
26
+ };
27
+ declare class __sveltets_Render<Item extends {
28
+ id: string;
29
+ name: string;
30
+ pinned?: boolean;
31
+ }> {
32
+ props(): ReturnType<typeof $$render<Item>>['props'];
33
+ events(): ReturnType<typeof $$render<Item>>['events'];
34
+ slots(): ReturnType<typeof $$render<Item>>['slots'];
24
35
  bindings(): "";
25
36
  exports(): {};
26
37
  }
@@ -1,29 +1,35 @@
1
- <script lang="ts">import Grid from "svelte-grid";
2
- import gridHelp from "svelte-grid/build/helper/index.mjs";
3
- const id = () => "_" + Math.random().toString(36).slice(2, 11);
4
- let items = [
1
+ <script lang="ts">
2
+ import Grid from "svelte-grid";
3
+ import gridHelp from "svelte-grid/build/helper/index.mjs";
4
+
5
+ const id = () => "_" + Math.random().toString(36).slice(2, 11);
6
+
7
+ let items = [
5
8
  {
6
- 6: gridHelp.item({
7
- x: 0,
8
- y: 0,
9
- w: 2,
10
- h: 2,
11
- }),
12
- id: id(),
9
+ 6: gridHelp.item({
10
+ x: 0,
11
+ y: 0,
12
+ w: 2,
13
+ h: 2,
14
+ }),
15
+ id: id(),
13
16
  },
17
+
14
18
  {
15
- 6: gridHelp.item({
16
- x: 2,
17
- y: 0,
18
- w: 2,
19
- h: 2,
20
- }),
21
- id: id(),
19
+ 6: gridHelp.item({
20
+ x: 2,
21
+ y: 0,
22
+ w: 2,
23
+ h: 2,
24
+ }),
25
+ id: id(),
22
26
  },
23
- ];
24
- const breakpoint = 1;
25
- const column = 6;
26
- const cols = [[breakpoint, column]];
27
+ ]
28
+
29
+ const breakpoint = 1
30
+ const column = 6
31
+
32
+ const cols = [[breakpoint, column]]
27
33
  </script>
28
34
 
29
35
  <div class=demo-container style:width="100%">
@@ -1,89 +1,159 @@
1
- <script lang="ts">import '../../../css/main.css';
2
- import './Calendar.css';
3
- import { fly } from "svelte/transition";
4
- import { dateToDateStat, getDateRowsStats, getDaysNames } from "./utils";
5
- let { selectedDate = $bindable(undefined), selectedDateTo = $bindable(undefined), visibleMonth = $bindable(new Date().getMonth()), visibleYear = $bindable(new Date().getFullYear()), locale = "it", showExtraMonthDays = true, showHeader = true, animationDuration = 200, disabled = false, type = 'singleDate', fillOpenRange = false, class: clazz = {}, ondayClick, weekHeaderSnippet, daySnippet, } = $props();
6
- const today = new Date();
7
- let hoveredDateStat = $state();
8
- function handleDayClick(dateStat, extraMonth) {
9
- if (disabled)
10
- return;
11
- const clickedDate = new Date(dateStat.year, dateStat.month, dateStat.dayOfMonth, 0, 0, 0, 0);
1
+ <script lang="ts">
2
+ import '../../../css/main.css'
3
+ import './Calendar.css'
4
+ import { fly } from "svelte/transition";
5
+ import { dateToDateStat, getDateRowsStats, getDaysNames } from "./utils";
6
+ import type { DateStat, Locale } from "./utils";
7
+ import type { Snippet } from 'svelte';
8
+
9
+ interface Props {
10
+ selectedDate?: Date;
11
+ selectedDateTo?: Date;
12
+ visibleMonth?: number;
13
+ visibleYear?: number;
14
+ locale?: Locale;
15
+ showExtraMonthDays?: boolean;
16
+ showHeader?: boolean;
17
+ animationDuration?: number;
18
+ disabled?: boolean;
19
+ type?: 'singleDate' | 'dateRange'
20
+ fillOpenRange?: boolean;
21
+ class?: {
22
+ container?: string,
23
+ weekHeader?: string,
24
+ day?: string
25
+ }
26
+ ondayClick?: (event: {
27
+ detail: {
28
+ dateStat: DateStat;
29
+ selected: boolean;
30
+ extraMonth: boolean;
31
+ }
32
+ }) => void
33
+ weekHeaderSnippet?: Snippet<[{
34
+ header: string,
35
+ index: number
36
+ }]>
37
+ daySnippet?: Snippet<[{
38
+ dayStat: DateStat,
39
+ extraMonth: boolean
40
+ selected: boolean
41
+ }]>
42
+ }
43
+
44
+ let {
45
+ selectedDate = $bindable(undefined),
46
+ selectedDateTo = $bindable(undefined),
47
+ visibleMonth = $bindable(new Date().getMonth()),
48
+ visibleYear = $bindable(new Date().getFullYear()),
49
+ locale = "it",
50
+ showExtraMonthDays = true,
51
+ showHeader = true,
52
+ animationDuration = 200,
53
+ disabled = false,
54
+ type = 'singleDate',
55
+ fillOpenRange = false,
56
+ class: clazz = {},
57
+ ondayClick,
58
+ weekHeaderSnippet,
59
+ daySnippet,
60
+ }: Props = $props();
61
+
62
+ const today = new Date()
63
+ let hoveredDateStat: DateStat | undefined = $state()
64
+
65
+ function handleDayClick(dateStat: DateStat, extraMonth: boolean) {
66
+ if(disabled) return
67
+
68
+ const clickedDate = new Date(
69
+ dateStat.year,
70
+ dateStat.month,
71
+ dateStat.dayOfMonth,
72
+ 0,
73
+ 0,
74
+ 0,
75
+ 0
76
+ );
77
+
12
78
  if (!extraMonth) {
13
- if (type == 'dateRange') {
14
- if (!selectedDate) {
15
- selectedDate = clickedDate;
16
- }
17
- else {
18
- if (!!selectedDateTo) {
19
- selectedDate = clickedDate;
20
- selectedDateTo = undefined;
21
- }
22
- else if (selectedDate < clickedDate) {
23
- selectedDateTo = clickedDate;
24
- }
25
- else if (selectedDate > clickedDate) {
26
- selectedDateTo = selectedDate;
27
- selectedDate = clickedDate;
28
- }
29
- }
30
- }
31
- else {
32
- selectedDate = clickedDate;
79
+ if(type == 'dateRange') {
80
+ if(!selectedDate) {
81
+ selectedDate = clickedDate
82
+ } else {
83
+ if (!!selectedDateTo) {
84
+ selectedDate = clickedDate
85
+ selectedDateTo = undefined
86
+ } else if(selectedDate < clickedDate) {
87
+ selectedDateTo = clickedDate
88
+ } else if (selectedDate > clickedDate) {
89
+ selectedDateTo = selectedDate
90
+ selectedDate = clickedDate
91
+ }
33
92
  }
93
+ } else {
94
+ selectedDate = clickedDate
95
+ }
34
96
  }
35
- if (ondayClick) {
36
- ondayClick({
37
- detail: {
38
- dateStat,
39
- selected: !extraMonth,
40
- extraMonth,
41
- }
42
- });
97
+
98
+ if(ondayClick){
99
+ ondayClick({
100
+ detail: {
101
+ dateStat,
102
+ selected: !extraMonth,
103
+ extraMonth,
104
+ }
105
+ })
43
106
  }
44
- }
45
- function hoverDateStat(dateStat) {
46
- hoveredDateStat = dateStat;
47
- }
48
- function isBetweenRange(dateStat) {
49
- if (type !== 'dateRange')
50
- return false;
107
+ }
108
+
109
+ function hoverDateStat(dateStat?: DateStat) {
110
+ hoveredDateStat = dateStat
111
+ }
112
+
113
+ function isBetweenRange(dateStat: DateStat): boolean {
114
+ if (type !== 'dateRange') return false;
115
+
51
116
  const current = new Date(dateStat.year, dateStat.month, dateStat.dayOfMonth);
52
- const start = selectedDate
53
- ? new Date(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate())
54
- : undefined;
55
- const end = selectedDateTo
56
- ? new Date(selectedDateTo.getFullYear(), selectedDateTo.getMonth(), selectedDateTo.getDate())
57
- : undefined;
58
- let limitA;
59
- let limitB;
117
+
118
+ const start = selectedDate
119
+ ? new Date(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate())
120
+ : undefined;
121
+
122
+ const end = selectedDateTo
123
+ ? new Date(selectedDateTo.getFullYear(), selectedDateTo.getMonth(), selectedDateTo.getDate())
124
+ : undefined;
125
+
126
+ let limitA: Date | undefined;
127
+ let limitB: Date | undefined;
128
+
60
129
  if (start && end) {
61
- limitA = start;
62
- limitB = end;
63
- }
130
+ limitA = start;
131
+ limitB = end;
132
+ }
64
133
  else if (start && hoveredDateStat) {
65
- limitA = start;
66
- limitB = new Date(hoveredDateStat.year, hoveredDateStat.month, hoveredDateStat.dayOfMonth);
67
- }
134
+ limitA = start;
135
+ limitB = new Date(hoveredDateStat.year, hoveredDateStat.month, hoveredDateStat.dayOfMonth);
136
+ }
68
137
  else if (end && hoveredDateStat) {
69
- limitA = new Date(hoveredDateStat.year, hoveredDateStat.month, hoveredDateStat.dayOfMonth);
70
- limitB = end;
138
+ limitA = new Date(hoveredDateStat.year, hoveredDateStat.month, hoveredDateStat.dayOfMonth);
139
+ limitB = end;
71
140
  }
141
+
72
142
  if (limitA && limitB) {
73
- if (limitA.getTime() !== limitB.getTime()) {
74
- const min = limitA < limitB ? limitA : limitB;
75
- const max = limitA < limitB ? limitB : limitA;
76
- return current > min && current < max;
77
- }
143
+ if (limitA.getTime() !== limitB.getTime()) {
144
+ const min = limitA < limitB ? limitA : limitB;
145
+ const max = limitA < limitB ? limitB : limitA;
146
+ return current > min && current < max;
147
+ }
78
148
  }
149
+
79
150
  if (fillOpenRange) {
80
- if (start && !end)
81
- return current > start;
82
- if (!start && end)
83
- return current < end;
151
+ if (start && !end) return current > start;
152
+ if (!start && end) return current < end;
84
153
  }
154
+
85
155
  return false;
86
- }
156
+ }
87
157
  </script>
88
158
 
89
159
  <div class="calendar-container {clazz.container || ''}">
@@ -1,89 +1,156 @@
1
- <script lang="ts">import '../../../css/main.css';
2
- import './DatePicker.css';
3
- import { getMonthName, dateToString } from "./utils";
4
- import YearSelector from "./YearSelector.svelte";
5
- import MonthSelector from "./MonthSelector.svelte";
6
- import Calendar from "./Calendar.svelte";
7
- import Button from "../buttons/Button.svelte";
8
- let { selectedYear = $bindable(new Date().getFullYear()), selectedMonth = $bindable(new Date().getMonth()), selectedDate = $bindable(undefined), selectedDateTo = $bindable(undefined), visibleMonth = $bindable(selectedMonth), visibleYear = $bindable(selectedYear), view = "day", locale = "it", selectableYears = [...Array(150).keys()].map((i) => i + (new Date().getFullYear() - 75)), skipTabs = false, disabled = false, type, fillOpenRange, class: clazz = {}, headerLabelSnippet, onmonthClick, onyearClick, ondayClick, } = $props();
9
- let visibleSelector = $derived(view == "day" || view == "month");
10
- let selectorText = $derived(view == "day"
11
- ? getMonthName(visibleMonth, locale) + " " + visibleYear
12
- : visibleYear.toString());
13
- let elementDisabled = $derived(view == "year" ? "year" : "date");
14
- let lastSelectedYear = selectedYear;
15
- let minSelectableYear = $derived(selectableYears[0]);
16
- let maxSelectableYear = $derived(selectableYears[selectableYears.length - 1]);
17
- function next() {
18
- if (view == "day") {
19
- if (visibleMonth == 11) {
20
- if (visibleYear < maxSelectableYear) {
21
- visibleMonth = 0;
22
- visibleYear += 1;
23
- }
24
- }
25
- else {
26
- visibleMonth += 1;
27
- }
1
+ <script lang="ts">
2
+ import '../../../css/main.css'
3
+ import './DatePicker.css'
4
+ import { getMonthName, dateToString } from "./utils";
5
+ import type { Locale } from "./utils";
6
+ import YearSelector from "./YearSelector.svelte";
7
+ import MonthSelector from "./MonthSelector.svelte";
8
+ import Calendar from "./Calendar.svelte";
9
+ import Button from "../buttons/Button.svelte";
10
+ import type { ComponentProps, Snippet } from 'svelte';
11
+
12
+ interface Props {
13
+ selectedYear?: number;
14
+ selectedMonth?: number;
15
+ selectedDate?: Date;
16
+ selectedDateTo?: Date;
17
+ visibleMonth?: number;
18
+ visibleYear?: number;
19
+ view?: "year" | "month" | "day";
20
+ type?: ComponentProps<typeof Calendar>['type']
21
+ locale?: Locale;
22
+ selectableYears?: number[];
23
+ skipTabs?: boolean;
24
+ disabled?: boolean;
25
+ fillOpenRange?: boolean
26
+ class?: {
27
+ container?: string,
28
+ header?: string,
29
+ selectorRow?: string
28
30
  }
29
- else {
31
+ headerLabelSnippet?: Snippet<[{
32
+ dateString?: string
33
+ dateToString?: string
34
+ }]>
35
+ onyearClick?: (event: {
36
+ detail: {
37
+ year: number
38
+ }
39
+ }) => void
40
+ onmonthClick?: (event: {
41
+ detail: {
42
+ month: number
43
+ }
44
+ }) => void
45
+ ondayClick?: ComponentProps<typeof Calendar>['ondayClick']
46
+ }
47
+
48
+ let {
49
+ selectedYear = $bindable(new Date().getFullYear()),
50
+ selectedMonth = $bindable(new Date().getMonth()),
51
+ selectedDate = $bindable(undefined),
52
+ selectedDateTo = $bindable(undefined),
53
+ visibleMonth = $bindable(selectedMonth),
54
+ visibleYear = $bindable(selectedYear),
55
+ view = "day",
56
+ locale = "it",
57
+ selectableYears = [...Array(150).keys()].map((i) => i + (new Date().getFullYear() - 75)),
58
+ skipTabs = false,
59
+ disabled = false,
60
+ type,
61
+ fillOpenRange,
62
+ class: clazz = {},
63
+ headerLabelSnippet,
64
+ onmonthClick,
65
+ onyearClick,
66
+ ondayClick,
67
+ }: Props = $props();
68
+
69
+ let visibleSelector = $derived(view == "day" || view == "month");
70
+ let selectorText =
71
+ $derived(view == "day"
72
+ ? getMonthName(visibleMonth, locale) + " " + visibleYear
73
+ : visibleYear.toString()
74
+ )
75
+ let elementDisabled = $derived(view == "year" ? "year" : "date");
76
+ let lastSelectedYear: number = selectedYear
77
+
78
+ let minSelectableYear = $derived(selectableYears[0]);
79
+ let maxSelectableYear = $derived(selectableYears[selectableYears.length - 1]);
80
+
81
+ function next() {
82
+ if (view == "day") {
83
+ if (visibleMonth == 11) {
30
84
  if (visibleYear < maxSelectableYear) {
31
- visibleYear++;
85
+ visibleMonth = 0;
86
+ visibleYear += 1;
32
87
  }
88
+ } else {
89
+ visibleMonth += 1;
90
+ }
91
+ } else {
92
+ if (visibleYear < maxSelectableYear) {
93
+ visibleYear++;
94
+ }
33
95
  }
34
- }
35
- function previous() {
96
+ }
97
+
98
+ function previous() {
36
99
  if (view == "day") {
37
- if (visibleMonth == 0) {
38
- if (visibleYear > minSelectableYear) {
39
- visibleMonth = 11;
40
- visibleYear -= 1;
41
- }
42
- }
43
- else {
44
- visibleMonth -= 1;
45
- }
46
- }
47
- else {
100
+ if (visibleMonth == 0) {
48
101
  if (visibleYear > minSelectableYear) {
49
- visibleYear--;
102
+ visibleMonth = 11;
103
+ visibleYear -= 1;
50
104
  }
105
+ } else {
106
+ visibleMonth -= 1;
107
+ }
108
+ } else {
109
+ if (visibleYear > minSelectableYear) {
110
+ visibleYear--;
111
+ }
51
112
  }
52
- }
53
- function SelectorHandler() {
54
- if (view == "month")
55
- view = "year";
56
- else
57
- view = "month";
58
- }
59
- function handleYearChange() {
60
- if (visibleYear == undefined) {
61
- visibleYear = lastSelectedYear;
113
+ }
114
+
115
+ function SelectorHandler() {
116
+ if (view == "month") view = "year";
117
+ else view = "month";
118
+ }
119
+
120
+ function handleYearChange() {
121
+ if(visibleYear == undefined) {
122
+ visibleYear = lastSelectedYear
62
123
  }
63
124
  else {
64
- lastSelectedYear = visibleYear;
125
+ lastSelectedYear = visibleYear
65
126
  }
66
- visibleYear = selectedYear;
67
- if (onyearClick) {
68
- onyearClick({
69
- detail: {
70
- year: selectedYear
71
- }
72
- });
127
+
128
+ visibleYear = selectedYear
129
+
130
+ if(onyearClick){
131
+ onyearClick({
132
+ detail: {
133
+ year: selectedYear
134
+ }
135
+ })
73
136
  }
137
+
74
138
  view = "month";
75
- }
76
- function handleMonthChange() {
77
- visibleMonth = selectedMonth;
78
- if (onmonthClick) {
79
- onmonthClick({
80
- detail: {
81
- month: selectedMonth
82
- }
83
- });
139
+ }
140
+
141
+ function handleMonthChange() {
142
+ visibleMonth = selectedMonth
143
+
144
+ if(onmonthClick){
145
+ onmonthClick({
146
+ detail: {
147
+ month: selectedMonth
148
+ }
149
+ })
84
150
  }
151
+
85
152
  view = "day";
86
- }
153
+ }
87
154
  </script>
88
155
 
89
156
  <div