@likable-hair/svelte 4.2.0 → 4.2.2

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 (38) hide show
  1. package/dist/components/composed/common/MenuOrDrawer.svelte +1 -1
  2. package/dist/components/composed/common/MenuOrDrawerOptions.svelte +1 -1
  3. package/dist/components/composed/dashboard/DashboardShaper.svelte +20 -13
  4. package/dist/components/composed/dashboard/DashboardShaper.svelte.d.ts +123 -100
  5. package/dist/components/composed/forms/AsyncAutocomplete.svelte.d.ts +1 -0
  6. package/dist/components/composed/forms/DatePickerTextField.svelte +10 -2
  7. package/dist/components/composed/forms/DatePickerTextField.svelte.d.ts +1 -0
  8. package/dist/components/composed/forms/Dropdown.svelte +15 -6
  9. package/dist/components/composed/forms/PeriodPicker.svelte +115 -0
  10. package/dist/components/composed/forms/PeriodPicker.svelte.d.ts +21 -0
  11. package/dist/components/composed/forms/PeriodSelector.svelte +633 -0
  12. package/dist/components/composed/forms/PeriodSelector.svelte.d.ts +75 -0
  13. package/dist/components/composed/list/DynamicTable.svelte +130 -82
  14. package/dist/components/composed/list/DynamicTable.svelte.d.ts +2 -0
  15. package/dist/components/composed/list/EnhancedPaginatedTable.svelte +1 -2
  16. package/dist/components/composed/list/EnhancedPaginatedTable.svelte.d.ts +2 -1
  17. package/dist/components/composed/list/PaginatedTable.svelte +20 -16
  18. package/dist/components/composed/list/PaginatedTable.svelte.d.ts +2 -1
  19. package/dist/components/composed/search/DynamicFilters.svelte +10 -10
  20. package/dist/components/composed/search/DynamicFilters.svelte.d.ts +6 -0
  21. package/dist/components/composed/search/FilterEditor.svelte +10 -9
  22. package/dist/components/simple/buttons/Button.css +1 -0
  23. package/dist/components/simple/buttons/Button.svelte +4 -1
  24. package/dist/components/simple/common/Menu.svelte +124 -104
  25. package/dist/components/simple/common/Menu.svelte.d.ts +2 -0
  26. package/dist/components/simple/dates/Calendar.css +2 -2
  27. package/dist/components/simple/dates/Calendar.svelte +76 -27
  28. package/dist/components/simple/dates/Calendar.svelte.d.ts +1 -0
  29. package/dist/components/simple/dates/DatePicker.svelte +30 -12
  30. package/dist/components/simple/dates/DatePicker.svelte.d.ts +8 -1
  31. package/dist/components/simple/forms/Autocomplete.svelte +2 -2
  32. package/dist/components/simple/forms/Autocomplete.svelte.d.ts +1 -0
  33. package/dist/components/simple/lists/SelectableVerticalList.svelte +5 -4
  34. package/dist/components/simple/lists/SimpleTable.svelte +86 -54
  35. package/dist/components/simple/lists/SimpleTable.svelte.d.ts +1 -1
  36. package/dist/index.d.ts +2 -0
  37. package/dist/index.js +2 -0
  38. package/package.json +1 -1
@@ -3,7 +3,7 @@ import Drawer from '../../simple/navigation/Drawer.svelte';
3
3
  import Menu from '../../simple/common/Menu.svelte';
4
4
  import MediaQuery from '../../simple/common/MediaQuery.svelte';
5
5
  import lodash from 'lodash';
6
- let { open = $bindable(false), drawerProps, menuProps, children, } = $props();
6
+ let { open = $bindable(), drawerProps, menuProps, children, } = $props();
7
7
  const menuPropsDefaultValue = {
8
8
  closeOnClickOutside: true,
9
9
  _boxShadow: "rgb(var(--global-color-grey-900), .5) 0px 2px 4px",
@@ -5,7 +5,7 @@
5
5
  import MenuOrDrawer from "./MenuOrDrawer.svelte";
6
6
  import SelectableVerticalList from '../../simple/lists/SelectableVerticalList.svelte';
7
7
  import lodash from 'lodash';
8
- let { open = $bindable(false), elements = [], onselect, menuProps, drawerProps, } = $props();
8
+ let { open = $bindable(), elements = [], onselect, menuProps, drawerProps, } = $props();
9
9
  const menuPropsDefaultValue = {
10
10
  anchor: 'bottom-center',
11
11
  stayInViewport: true,
@@ -1,4 +1,4 @@
1
- <script lang="ts">import './DashboardShaper.css';
1
+ <script lang="ts" generics="Data, WidgetName extends string">import './DashboardShaper.css';
2
2
  import lodash from 'lodash';
3
3
  import { Dialog, Icon } from "../../..";
4
4
  import { createId } from "@paralleldrive/cuid2";
@@ -21,11 +21,12 @@ function calculateLocalWidgetsFromWidgets() {
21
21
  return {
22
22
  widget: {
23
23
  id: w.id,
24
- componentName: w.componentName,
24
+ name: w.name,
25
25
  height: w.height,
26
26
  width: w.width,
27
27
  left: w.left,
28
28
  top: w.top,
29
+ data: w.data,
29
30
  },
30
31
  columnSpanFrom: w.left,
31
32
  columnSpanTo: w.left + w.width,
@@ -149,7 +150,7 @@ function calculateWidgetsFromLocalWidgets() {
149
150
  widgets = widgetCells?.map((lWidget) => {
150
151
  return {
151
152
  id: lWidget.widget.id,
152
- componentName: lWidget.widget.componentName,
153
+ name: lWidget.widget.name,
153
154
  height: lWidget.widget.height,
154
155
  width: lWidget.widget.width,
155
156
  left: lWidget.widget.left,
@@ -180,9 +181,15 @@ function availableSizes(params) {
180
181
  <div class="widget-cell-preview"></div>
181
182
  {:else}
182
183
  {#if widgetCellSnippet}
183
- {@render widgetCellSnippet({ widgetCell, removeWidgetCell })}
184
+ {@render widgetCellSnippet({
185
+ widgetCell: {
186
+ ...widgetCell,
187
+ title: availableWidgetCells.find((awc) => awc.name === widgetCell.widget?.name)?.title
188
+ },
189
+ removeWidgetCell
190
+ })}
184
191
  {:else}
185
- {widgetCell.widget.componentName}
192
+ {widgetCell.widget.name}
186
193
  {/if}
187
194
  {/if}
188
195
  </div>
@@ -245,9 +252,9 @@ function availableSizes(params) {
245
252
  availableSizes: ws.availableSizes
246
253
  }).length > 0)
247
254
  .sort((a, b) => {
248
- if (a.label == 'Placeholder') return -1
249
- if (a.label < b.label) return -1
250
- if (a.label > b.label) return 1
255
+ if (a.title == 'Placeholder') return -1
256
+ if (a.title < b.title) return -1
257
+ if (a.title > b.title) return 1
251
258
  return 0
252
259
  }) as widgetSpec
253
260
  }
@@ -256,7 +263,7 @@ function availableSizes(params) {
256
263
  {#if widgetSpec.icon}
257
264
  <Icon name={widgetSpec.icon} --icon-size="30px" />
258
265
  {/if}
259
- <div class="widget-title">{widgetSpec.label}</div>
266
+ <div class="widget-title">{widgetSpec.title}</div>
260
267
  <div class="widget-desc">{widgetSpec.description}</div>
261
268
  </div>
262
269
 
@@ -273,7 +280,7 @@ function availableSizes(params) {
273
280
  addWidgetCell({
274
281
  widget: {
275
282
  id: createId(),
276
- componentName: widgetSpec.widgetComponentName,
283
+ name: widgetSpec.name,
277
284
  height: sizes[0],
278
285
  width: sizes[1],
279
286
  top: addWidgetInfo!.fromRow,
@@ -337,15 +344,15 @@ function availableSizes(params) {
337
344
 
338
345
  .header {
339
346
  display: flex;
340
- padding: 30px 24px 16px;
347
+ padding: 20px;
341
348
  gap: 12px;
342
349
  background-color: var(--dashboard-shaper-dialog-header-background-color, var(--dashboard-shaper-default-dialog-header-background-color));
343
350
  border-block-end: 1px solid rgb(var(--global-color-contrast-100));
344
- height: 35px;
351
+ height: min-content;
345
352
  }
346
353
 
347
354
  .title {
348
- font-size: x-large;
355
+ font-size: 1.35rem;
349
356
  font-weight: bold;
350
357
  text-align: center;
351
358
  }
@@ -1,104 +1,77 @@
1
1
  import './DashboardShaper.css';
2
2
  import type { Snippet } from "svelte";
3
- declare const DashboardShaper: import("svelte").Component<{
4
- layoutWidth?: number;
5
- layoutHeight?: number;
6
- widgets: {
7
- id: number | string;
8
- componentName: string;
9
- height: number;
10
- width: number;
11
- left: number;
12
- top: number;
13
- }[];
14
- availableWidgetCells: {
15
- widgetComponentName: string;
16
- label: string;
17
- description?: string;
18
- icon: string;
19
- availableSizes: [number, number][];
20
- }[];
21
- someRowSlotEmpty?: boolean;
22
- preview?: boolean;
23
- canAdd?: boolean;
24
- lang?: "it" | "en";
25
- onaddWidgetCell?: (event: {
26
- widgetCell: {
27
- widget: {
28
- id: number | string;
29
- componentName: string;
30
- height: number;
31
- width: number;
32
- left: number;
33
- top: number;
34
- };
35
- columnSpanFrom: number;
36
- columnSpanTo: number;
37
- rowSpanFrom: number;
38
- rowSpanTo: number;
39
- availableHeight?: number;
40
- availableWidth?: number;
41
- };
42
- }) => void;
43
- onremoveWidgetCell?: (event: {
44
- widgetCell: {
45
- widget: {
46
- id: number | string;
47
- componentName: string;
48
- height: number;
49
- width: number;
50
- left: number;
51
- top: number;
3
+ declare class __sveltets_Render<Data, WidgetName extends string> {
4
+ props(): {
5
+ layoutWidth?: number;
6
+ layoutHeight?: number;
7
+ widgets: {
8
+ id: number | string;
9
+ name: WidgetName;
10
+ height: number;
11
+ width: number;
12
+ left: number;
13
+ top: number;
14
+ data?: Data | undefined;
15
+ }[];
16
+ availableWidgetCells: {
17
+ name: WidgetName;
18
+ title: string;
19
+ description?: string;
20
+ icon: string;
21
+ availableSizes: [number, number][];
22
+ }[];
23
+ someRowSlotEmpty?: boolean;
24
+ preview?: boolean;
25
+ canAdd?: boolean;
26
+ lang?: "it" | "en";
27
+ onaddWidgetCell?: ((event: {
28
+ widgetCell: {
29
+ widget: {
30
+ id: number | string;
31
+ name: WidgetName;
32
+ height: number;
33
+ width: number;
34
+ left: number;
35
+ top: number;
36
+ data?: Data | undefined;
37
+ };
38
+ columnSpanFrom: number;
39
+ columnSpanTo: number;
40
+ rowSpanFrom: number;
41
+ rowSpanTo: number;
42
+ availableHeight?: number;
43
+ availableWidth?: number;
52
44
  };
53
- columnSpanFrom: number;
54
- columnSpanTo: number;
55
- rowSpanFrom: number;
56
- rowSpanTo: number;
57
- availableHeight?: number;
58
- availableWidth?: number;
59
- };
60
- }) => void;
61
- widgetCellSnippet?: Snippet<[{
62
- widgetCell: Omit<{
63
- widget: {
64
- id: number | string;
65
- componentName: string;
66
- height: number;
67
- width: number;
68
- left: number;
69
- top: number;
45
+ }) => void) | undefined;
46
+ onremoveWidgetCell?: ((event: {
47
+ widgetCell: {
48
+ widget: {
49
+ id: number | string;
50
+ name: WidgetName;
51
+ height: number;
52
+ width: number;
53
+ left: number;
54
+ top: number;
55
+ data?: Data | undefined;
56
+ };
57
+ columnSpanFrom: number;
58
+ columnSpanTo: number;
59
+ rowSpanFrom: number;
60
+ rowSpanTo: number;
61
+ availableHeight?: number;
62
+ availableWidth?: number;
70
63
  };
71
- columnSpanFrom: number;
72
- columnSpanTo: number;
73
- rowSpanFrom: number;
74
- rowSpanTo: number;
75
- availableHeight?: number;
76
- availableWidth?: number;
77
- }, "widget"> & {
78
- widget?: {
79
- id: number | string;
80
- componentName: string;
81
- height: number;
82
- width: number;
83
- left: number;
84
- top: number;
85
- } | undefined;
86
- };
87
- removeWidgetCell: (params: {
88
- id: string | number;
89
- }) => void;
90
- }]>;
91
- widgetSelectionDialogHeaderSnippet?: Snippet<[]>;
92
- addWidgetButtonSnippet?: Snippet<[{
93
- handleAddClick: (params: {
94
- slot: Omit<{
64
+ }) => void) | undefined;
65
+ widgetCellSnippet?: Snippet<[{
66
+ widgetCell: Omit<{
95
67
  widget: {
96
68
  id: number | string;
97
- componentName: string;
69
+ name: WidgetName;
98
70
  height: number;
99
71
  width: number;
100
72
  left: number;
101
73
  top: number;
74
+ data?: Data | undefined;
102
75
  };
103
76
  columnSpanFrom: number;
104
77
  columnSpanTo: number;
@@ -109,23 +82,60 @@ declare const DashboardShaper: import("svelte").Component<{
109
82
  }, "widget"> & {
110
83
  widget?: {
111
84
  id: number | string;
112
- componentName: string;
85
+ name: WidgetName;
113
86
  height: number;
114
87
  width: number;
115
88
  left: number;
116
89
  top: number;
90
+ data?: Data | undefined;
117
91
  } | undefined;
92
+ } & {
93
+ title?: string;
118
94
  };
119
- }) => void;
120
- slot: Parameters<(params: {
95
+ removeWidgetCell: (params: {
96
+ id: string | number;
97
+ }) => void;
98
+ }]> | undefined;
99
+ widgetSelectionDialogHeaderSnippet?: Snippet<[]>;
100
+ addWidgetButtonSnippet?: Snippet<[{
101
+ handleAddClick: (params: {
102
+ slot: Omit<{
103
+ widget: {
104
+ id: number | string;
105
+ name: WidgetName;
106
+ height: number;
107
+ width: number;
108
+ left: number;
109
+ top: number;
110
+ data?: Data | undefined;
111
+ };
112
+ columnSpanFrom: number;
113
+ columnSpanTo: number;
114
+ rowSpanFrom: number;
115
+ rowSpanTo: number;
116
+ availableHeight?: number;
117
+ availableWidth?: number;
118
+ }, "widget"> & {
119
+ widget?: {
120
+ id: number | string;
121
+ name: WidgetName;
122
+ height: number;
123
+ width: number;
124
+ left: number;
125
+ top: number;
126
+ data?: Data | undefined;
127
+ } | undefined;
128
+ };
129
+ }) => void;
121
130
  slot: Omit<{
122
131
  widget: {
123
132
  id: number | string;
124
- componentName: string;
133
+ name: WidgetName;
125
134
  height: number;
126
135
  width: number;
127
136
  left: number;
128
137
  top: number;
138
+ data?: Data | undefined;
129
139
  };
130
140
  columnSpanFrom: number;
131
141
  columnSpanTo: number;
@@ -136,15 +146,28 @@ declare const DashboardShaper: import("svelte").Component<{
136
146
  }, "widget"> & {
137
147
  widget?: {
138
148
  id: number | string;
139
- componentName: string;
149
+ name: WidgetName;
140
150
  height: number;
141
151
  width: number;
142
152
  left: number;
143
153
  top: number;
154
+ data?: Data | undefined;
144
155
  } | undefined;
145
156
  };
146
- }) => void>[0]["slot"];
147
- }]>;
148
- }, {}, "widgets" | "someRowSlotEmpty">;
149
- type DashboardShaper = ReturnType<typeof DashboardShaper>;
157
+ }]> | undefined;
158
+ };
159
+ events(): {};
160
+ slots(): {};
161
+ bindings(): "widgets" | "someRowSlotEmpty";
162
+ exports(): {};
163
+ }
164
+ interface $$IsomorphicComponent {
165
+ new <Data, WidgetName extends string>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<Data, WidgetName>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<Data, WidgetName>['props']>, ReturnType<__sveltets_Render<Data, WidgetName>['events']>, ReturnType<__sveltets_Render<Data, WidgetName>['slots']>> & {
166
+ $$bindings?: ReturnType<__sveltets_Render<Data, WidgetName>['bindings']>;
167
+ } & ReturnType<__sveltets_Render<Data, WidgetName>['exports']>;
168
+ <Data, WidgetName extends string>(internal: unknown, props: ReturnType<__sveltets_Render<Data, WidgetName>['props']> & {}): ReturnType<__sveltets_Render<Data, WidgetName>['exports']>;
169
+ z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
170
+ }
171
+ declare const DashboardShaper: $$IsomorphicComponent;
172
+ type DashboardShaper<Data, WidgetName extends string> = InstanceType<typeof DashboardShaper<Data, WidgetName>>;
150
173
  export default DashboardShaper;
@@ -48,6 +48,7 @@ declare class __sveltets_Render<Data> {
48
48
  menuAnchor?: ComponentProps<typeof Menu>["anchor"];
49
49
  menuStayInViewport?: ComponentProps<typeof Menu>["stayInViewport"];
50
50
  menuFlipOnOverflow?: ComponentProps<typeof Menu>["flipOnOverflow"];
51
+ menuMaxHeight?: string;
51
52
  adaptInputWidth?: boolean;
52
53
  class?: {
53
54
  activator?: string;
@@ -49,6 +49,10 @@ let activator = $state(), refreshPosition = $state(false), menuElement = $state(
49
49
  }
50
50
  }
51
51
  };
52
+ let selectableYears = $derived.by(() => {
53
+ const range = maxYearInRange - minYearInRange + 1;
54
+ return Array.from({ length: range }, (_, i) => minYearInRange + i);
55
+ });
52
56
  function handleTextFieldFocus(mobile) {
53
57
  if (!mobile || !mobileDialog) {
54
58
  menuOpened = true;
@@ -128,10 +132,11 @@ function handleInputChange(e) {
128
132
  selectedDateTo = undefined;
129
133
  }
130
134
  }
131
- if (oninput) {
135
+ if (oninput && (id == 'to' || id == 'from')) {
132
136
  oninput({
133
137
  detail: {
134
- datetime: id == "to" ? selectedDateTo : selectedDate
138
+ datetime: id == "to" ? selectedDateTo : selectedDate,
139
+ type: id,
135
140
  }
136
141
  });
137
142
  }
@@ -210,6 +215,7 @@ $effect(() => {
210
215
  {appendInnerSnippet}
211
216
  {prependSnippet}
212
217
  {appendSnippet}
218
+ autocomplete='off'
213
219
  --simple-textfield-default-padding='0.65rem 0.8rem'
214
220
  --simple-textfield-default-inner-gap='4px'
215
221
  >
@@ -248,6 +254,7 @@ $effect(() => {
248
254
  onyearClick={handleYearSelect}
249
255
  onmonthClick={handleMonthSelect}
250
256
  skipTabs
257
+ {selectableYears}
251
258
  {disabled}
252
259
  {type}
253
260
  ></DatePicker>
@@ -281,6 +288,7 @@ $effect(() => {
281
288
  onyearClick={handleYearSelect}
282
289
  onmonthClick={handleMonthSelect}
283
290
  skipTabs
291
+ {selectableYears}
284
292
  {disabled}
285
293
  {type}
286
294
  ></DatePicker>
@@ -33,6 +33,7 @@ declare const DatePickerTextField: import("svelte").Component<{
33
33
  oninput?: (event: {
34
34
  detail: {
35
35
  datetime: Date | undefined;
36
+ type: "from" | "to";
36
37
  };
37
38
  }) => void;
38
39
  activatorSnippet?: Snippet<[{
@@ -2,7 +2,7 @@
2
2
  import Autocomplete, {} from "../../../components/simple/forms/Autocomplete.svelte";
3
3
  import Button from '../../simple/buttons/Button.svelte';
4
4
  import Icon from '../../simple/media/Icon.svelte';
5
- let { items = [], values = $bindable([]), multiple = false, lang = 'en', searchText = $bindable(), maxVisibleChips, placeholder = lang === 'en' ? "Select" : "Seleziona", clearable = true, mandatory = true, icon, menuOpened = $bindable(false), openingId = $bindable("autocomplete-menu"), width, height, minWidth, menuWidth = width, mobileDrawer = false, disabled = false, onchange, itemLabelSnippet, labelSnippet, } = $props();
5
+ let { items = [], values = $bindable([]), multiple = false, lang = 'en', searchText = $bindable(), maxVisibleChips, placeholder = lang === 'en' ? "Select" : "Seleziona", clearable = true, mandatory = true, icon, menuOpened = $bindable(false), openingId = $bindable("autocomplete-menu"), width, height, minWidth = 'none', menuWidth = width, mobileDrawer = false, disabled = false, onchange, itemLabelSnippet, labelSnippet, } = $props();
6
6
  let generatedLabel = $derived(values.length == 1 ? values[0].label : `${values.length} Selezionati`);
7
7
  function handleCloseClick(event) {
8
8
  if (event) {
@@ -44,11 +44,6 @@ function handleCloseClick(event) {
44
44
  >
45
45
  {#snippet selectionContainerSnippet({ openMenu, handleKeyDown })}
46
46
  <Button
47
- --button-default-background-color="transparent"
48
- --button-default-focus-background-color="rgb(var(--global-color-primary-400), .3)"
49
- --button-default-focus-color="rgb(var(--global-color-contrast-900))"
50
- --button-default-border="2px solid rgb(var(--global-color-primary-400))"
51
- --button-default-color="rgb(var(--global-color-contrast-800))"
52
47
  onclick={openMenu}
53
48
  onkeydown={(event) => {
54
49
  handleKeyDown(event.detail.nativeEvent)
@@ -57,6 +52,20 @@ function handleCloseClick(event) {
57
52
  event.detail.nativeEvent.preventDefault()
58
53
  }
59
54
  }}
55
+ --button-padding="var(--dropdown-button-padding, 10px 12px)"
56
+ --button-border='var(--dropdown-button-border, none)'
57
+ --button-background-color='var(--dropdown-button-background-color, rgb(var(--global-color-background-300), .6))'
58
+ --button-hover-background-color='var(--dropdown-button-hover-color, rgb(var(--global-color-background-300), .6))'
59
+ --button-focus-background-color='var(--dropdown-button-focus-color, rgb(var(--global-color-background-300), .6))'
60
+ --button-active-background-color='var(--dropdown-button-active-color, rgb(var(--global-color-background-300), .6))'
61
+ --button-hover-color='var(--dropdown-button-hover-color, rgb(var(--global-color-contrast-800)))'
62
+ --button-color='var(--dropdown-button-color, rgb(var(--global-color-contrast-800)))'
63
+ --button-focus-color='var(--dropdown-button-focus-color, rgb(var(--global-color-contrast-800)))'
64
+ --button-border-radius='var(--dropdown-button-border-radius, 4px)'
65
+ --button-height='var(--dropdown-button-height, 38.78px)'
66
+ --button-active-box-shadow='var(--dropdown-button-active-box-shadow)'
67
+ --button-focus-box-shadow='var(--dropdown-button-focus-box-shadow)'
68
+ --button-box-sizing='var(--dropdown-button-box-sizing, border-box)'
60
69
  >
61
70
  {#if labelSnippet}
62
71
  {@render labelSnippet({
@@ -0,0 +1,115 @@
1
+ <script lang="ts" generics="Data extends string">import SimpleTextField from "../../simple/forms/SimpleTextField.svelte";
2
+ import MenuOrDrawer from "../common/MenuOrDrawer.svelte";
3
+ import PeriodSelector, { getPeriodLabel } from "./PeriodSelector.svelte"; // Import helper
4
+ import Button from "../../simple/buttons/Button.svelte";
5
+ import { fly } from "svelte/transition";
6
+ import Icon from "../../simple/media/Icon.svelte";
7
+ let { onchange, timespanSettings = $bindable(), valid = $bindable(), isSelectionMode = $bindable(), lang = 'en', quickSelectOptions, ...rest } = $props();
8
+ let open = $state(false), input = $state(), text = $derived(getPeriodLabel(timespanSettings, lang, quickSelectOptions));
9
+ function handleChange(event) {
10
+ if (timespanSettings?.method == 'quick') {
11
+ open = false;
12
+ }
13
+ onchange?.(event);
14
+ }
15
+ function openMenu() {
16
+ if (!open)
17
+ open = true;
18
+ else if (valid)
19
+ open = false;
20
+ }
21
+ </script>
22
+
23
+ <SimpleTextField
24
+ onfocus={() => open = true}
25
+ value={text}
26
+ bind:input
27
+ disabled
28
+ >
29
+ {#snippet appendInnerSnippet()}
30
+ <Icon
31
+ name='mdi-chevron-down'
32
+ onclick={openMenu}
33
+ --icon-size="20px"
34
+ ></Icon>
35
+ {/snippet}
36
+ </SimpleTextField>
37
+ <MenuOrDrawer
38
+ bind:open
39
+ menuProps={{
40
+ activator: input,
41
+ _activatorGap: 16,
42
+ closeOnClickOutside: valid,
43
+ _offsetLeft: -16,
44
+ anchor: 'bottom',
45
+ flipOnOverflow: true,
46
+ stayInViewport: true,
47
+ openingId: 'period-picker',
48
+ _overflow: 'hidden',
49
+ }}
50
+ drawerProps={{
51
+ closeOnClickOutside: valid,
52
+ _space: 'min(50%,420px)',
53
+ _borderRadius: '4px',
54
+ _overflow: 'hidden',
55
+ }}
56
+ >
57
+ {#snippet children({ isDrawer, isMenu })}
58
+ <div
59
+ class:menu={isMenu}
60
+ class:drawer={isDrawer}
61
+ >
62
+ <PeriodSelector
63
+ onchange={handleChange}
64
+ bind:timespanSettings
65
+ bind:valid
66
+ bind:isSelectionMode
67
+ {quickSelectOptions}
68
+ {lang}
69
+ {...rest}
70
+ ></PeriodSelector>
71
+ {#if !isSelectionMode}
72
+ <div
73
+ class:button-end={isMenu}
74
+ class:button-full={isDrawer}
75
+ in:fly={{ x: 200, duration: 250, delay: 200 }}
76
+ out:fly={{ x: 200, duration: 250 }}
77
+ >
78
+ <Button
79
+ disabled={!valid}
80
+ onclick={() => open = false}
81
+ >
82
+ {lang == 'en' ? 'Apply' : 'Applica'}
83
+ </Button>
84
+ </div>
85
+ {/if}
86
+ </div>
87
+ {/snippet}
88
+ </MenuOrDrawer>
89
+
90
+ <style>
91
+ .menu {
92
+ padding: 8px;
93
+ box-shadow: 2px 2px 2px 2px rgba(0, 0, 0, 0.2);
94
+ border-radius: 4px;
95
+ background-color: rgb(var(--global-color-background-200));
96
+ width: 400px;
97
+ --period-selector-min-height: 290px;
98
+ }
99
+
100
+ .drawer {
101
+ padding: 12px;
102
+ --period-selector-max-width: none;
103
+ --period-selector-list-element-padding: 8px;
104
+ }
105
+
106
+ .button-end {
107
+ display: flex;
108
+ justify-content: end;
109
+ }
110
+
111
+ .button-full {
112
+ display: flex;
113
+ --button-width: 100%
114
+ }
115
+ </style>
@@ -0,0 +1,21 @@
1
+ import type { ComponentProps } from "svelte";
2
+ import PeriodSelector from "./PeriodSelector.svelte";
3
+ interface Props extends Omit<ComponentProps<typeof PeriodSelector<Data>>, 'showTimeRangeLabel'> {
4
+ }
5
+ declare class __sveltets_Render<Data extends string> {
6
+ props(): Props;
7
+ events(): {};
8
+ slots(): {};
9
+ bindings(): "timespanSettings" | "valid" | "isSelectionMode";
10
+ exports(): {};
11
+ }
12
+ interface $$IsomorphicComponent {
13
+ new <Data extends string>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<Data>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<Data>['props']>, ReturnType<__sveltets_Render<Data>['events']>, ReturnType<__sveltets_Render<Data>['slots']>> & {
14
+ $$bindings?: ReturnType<__sveltets_Render<Data>['bindings']>;
15
+ } & ReturnType<__sveltets_Render<Data>['exports']>;
16
+ <Data extends string>(internal: unknown, props: ReturnType<__sveltets_Render<Data>['props']> & {}): ReturnType<__sveltets_Render<Data>['exports']>;
17
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
18
+ }
19
+ declare const PeriodPicker: $$IsomorphicComponent;
20
+ type PeriodPicker<Data extends string> = InstanceType<typeof PeriodPicker<Data>>;
21
+ export default PeriodPicker;