fuma 0.4.0 → 0.4.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.
@@ -4,6 +4,8 @@ export let numberOfMonths = 3;
4
4
  export let numberOfColumns = numberOfMonths;
5
5
  export let showWeekNumbers = true;
6
6
  export let range = void 0;
7
+ export let minDate = void 0;
8
+ export let maxDate = void 0;
7
9
  let startElement;
8
10
  let endElement;
9
11
  let picker;
@@ -30,6 +32,8 @@ async function initTimePicker() {
30
32
  numberOfMonths,
31
33
  numberOfColumns,
32
34
  showWeekNumbers,
35
+ minDate,
36
+ maxDate,
33
37
  startDate: range?.start ? dayjs(range.start).toDate() : void 0,
34
38
  endDate: range?.end ? dayjs(range.end).toDate() : void 0,
35
39
  setup: (picker2) => {
@@ -6,6 +6,8 @@ declare const __propDef: {
6
6
  numberOfColumns?: number | undefined;
7
7
  showWeekNumbers?: boolean | undefined;
8
8
  range?: Range | undefined;
9
+ minDate?: Date | number | string | undefined;
10
+ maxDate?: Date | number | string | undefined;
9
11
  };
10
12
  events: {
11
13
  change: CustomEvent<Range>;
@@ -1,4 +1,5 @@
1
1
  <script>import { mdiCalendarMonthOutline, mdiClose } from "@mdi/js";
2
+ import dayjs from "dayjs";
2
3
  import { goto } from "$app/navigation";
3
4
  import { page } from "$app/stores";
4
5
  import { urlParam } from "../../store/param.js";
@@ -7,16 +8,17 @@ import { Icon } from "../icon/index.js";
7
8
  import { DropDown } from "../menu/index.js";
8
9
  import { InputTime } from "../input/index.js";
9
10
  import { RangePicker } from "./index.js";
10
- import dayjs from "dayjs";
11
+ export let minDate = void 0;
12
+ export let maxDate = void 0;
11
13
  let dropDown;
12
14
  const start = $page.url.searchParams.get("start");
13
15
  const end = $page.url.searchParams.get("end");
14
- let period = {
15
- start: start ? new Date(start) : null,
16
- end: end ? new Date(end) : null
16
+ export let range = {
17
+ start: start ? new Date(start) : void 0,
18
+ end: end ? new Date(end) : void 0
17
19
  };
18
20
  $:
19
- isValidPeriod = !!period.start && !!period.end;
21
+ isValidPeriod = !!range.start && !!range.end;
20
22
  function getLabel(_range) {
21
23
  if (!_range || !_range.start || !_range.end)
22
24
  return "P\xE9riodes";
@@ -28,15 +30,15 @@ function handleSubmit() {
28
30
  return;
29
31
  goto(
30
32
  $urlParam.with({
31
- start: dayjs(period.start).format("HH:mm"),
32
- end: dayjs(period.end).format("HH:mm")
33
+ start: dayjs(range.start).format("HH:mm"),
34
+ end: dayjs(range.end).format("HH:mm")
33
35
  }),
34
36
  { replaceState: true, noScroll: true }
35
37
  );
36
38
  }
37
39
  function handleReset() {
38
40
  dropDown.hide();
39
- period = { start: null, end: null };
41
+ range = { start: void 0, end: void 0 };
40
42
  goto($urlParam.without("start", "end"), { replaceState: true, noScroll: true });
41
43
  }
42
44
  </script>
@@ -45,7 +47,7 @@ function handleReset() {
45
47
  <div slot="activator" class="join">
46
48
  <button class="btn join-item btn-sm shrink flex-nowrap">
47
49
  <Icon path={mdiCalendarMonthOutline} class="opacity-60" size={20} />
48
- {getLabel(period)}
50
+ {getLabel(range)}
49
51
  </button>
50
52
  {#if isValidPeriod}
51
53
  <button class="btn btn-square join-item btn-sm" on:click|preventDefault={handleReset}>
@@ -55,14 +57,36 @@ function handleReset() {
55
57
  </div>
56
58
 
57
59
  <form class="flex flex-col" on:submit|preventDefault={handleSubmit} data-sveltekit-replacestate>
58
- <RangePicker numberOfMonths={1} bind:range={period} />
60
+ <RangePicker numberOfMonths={1} bind:range {minDate} {maxDate} />
59
61
 
60
- <input class="hidden" type="text" name="start" value={period.start?.toJSON()} />
61
- <input class="hidden" type="text" name="end" value={period.end?.toJSON()} />
62
+ <input
63
+ class="hidden"
64
+ type="text"
65
+ name="start"
66
+ value={range.start ? dayjs(range.start).toJSON() : ''}
67
+ />
68
+ <input
69
+ class="hidden"
70
+ type="text"
71
+ name="end"
72
+ value={range.end ? dayjs(range.end).toJSON() : ''}
73
+ />
62
74
 
63
75
  <div class="flex gap-2 p-2">
64
- <InputTime label="A partir de" bind:value={period.start} enhanceDisabled class="grow" />
65
- <InputTime label="Jusqu'à" bind:value={period.end} enhanceDisabled class="grow" />
76
+ <InputTime
77
+ label="A partir de"
78
+ value={dayjs(range.start).toDate()}
79
+ on:input={({ detail: newDate }) => (range.start = newDate)}
80
+ enhanceDisabled
81
+ class="grow"
82
+ />
83
+ <InputTime
84
+ label="Jusqu'à"
85
+ value={dayjs(range.end).toDate()}
86
+ on:input={({ detail: newDate }) => (range.end = newDate)}
87
+ enhanceDisabled
88
+ class="grow"
89
+ />
66
90
  </div>
67
91
  <button class="btn m-2"> Valider </button>
68
92
  </form>
@@ -1,6 +1,11 @@
1
1
  import { SvelteComponent } from "svelte";
2
+ import { type Range } from './index.js';
2
3
  declare const __propDef: {
3
- props: Record<string, never>;
4
+ props: {
5
+ minDate?: Date | number | string | undefined;
6
+ maxDate?: Date | number | string | undefined;
7
+ range?: Range | undefined;
8
+ };
4
9
  events: {
5
10
  [evt: string]: CustomEvent<any>;
6
11
  };
@@ -1,10 +1,10 @@
1
- import dayjs, { type ConfigType } from 'dayjs';
2
- export type RangeDate = ConfigType;
1
+ import { Dayjs } from 'dayjs';
2
+ export type RangeDate = Date | Dayjs | null | undefined;
3
3
  export type Range = {
4
4
  start: RangeDate;
5
5
  end: RangeDate;
6
6
  };
7
7
  export type RangeRequired = {
8
- start: string | number | Date | dayjs.Dayjs;
9
- end: string | number | Date | dayjs.Dayjs;
8
+ start: Date | Dayjs;
9
+ end: Date | Dayjs;
10
10
  };
@@ -1 +1 @@
1
- import dayjs, {} from 'dayjs';
1
+ import { Dayjs } from 'dayjs';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fuma",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "description": "My fullstack material build with sveltekit, daisyui, zod, prisma, lucia",
5
5
  "author": {
6
6
  "name": "Jonas Voisard",