diff --git a/packages/demo/src/App.svelte b/packages/demo/src/App.svelte
index d5fad75b..2be1b371 100644
--- a/packages/demo/src/App.svelte
+++ b/packages/demo/src/App.svelte
@@ -11,15 +11,16 @@
import AutocompleteDemo from './FormFieldDemos/AutocompleteDemo.svelte';
import CheckboxDemo from './FormFieldDemos/CheckboxDemo.svelte';
import ChipsDemo from './FormFieldDemos/ChipsDemo.svelte';
- import CkEditorDemo from './FormFieldDemos/CkEditorDemo.svelte';
- import DateRangeDemo from './FormFieldDemos/DateRangeDemo.svelte';
+ import CkEditorDemo from './FormFieldDemos/CkEditorDemo.svelte'; */
+ import DateRangeDemo from './FormFieldDemos/DateRangeDemo.svelte'; /*
import DatepickerDemo from './FormFieldDemos/DatepickerDemo.svelte';
import FileListDemo from './FormFieldDemos/FileListDemo.svelte';
import MultiSearchDemo from './FormFieldDemos/MultiSearchDemo.svelte';
import QuillDemo from './FormFieldDemos/QuillDemo.svelte';
import RadioDemo from './FormFieldDemos/RadioDemo.svelte';
- import RangeDemo from './FormFieldDemos/RangeDemo.svelte';
- import SliderDemo from './FormFieldDemos/SliderDemo.svelte';
+ import RangeDemo from './FormFieldDemos/RangeDemo.svelte';
+ import SelectDemo from './FormFieldDemos/SelectDemo.svelte';
+ import SliderDemo from './FormFieldDemos/SliderDemo.svelte';
import TextareaDemo from './FormFieldDemos/TextareaDemo.svelte';
import ToggleDemo from './FormFieldDemos/ToggleDemo.svelte';
//EDITORS
@@ -91,7 +92,7 @@
-
+
diff --git a/packages/demo/src/FormFieldDemos/DateRangeDemo.svelte b/packages/demo/src/FormFieldDemos/DateRangeDemo.svelte
index 8482e952..91b8c569 100644
--- a/packages/demo/src/FormFieldDemos/DateRangeDemo.svelte
+++ b/packages/demo/src/FormFieldDemos/DateRangeDemo.svelte
@@ -28,9 +28,9 @@
-
+
-
+
-->
diff --git a/packages/lib/src/form-fields/date-range/date-range.pcss b/packages/lib/src/form-fields/date-range/date-range.pcss
index c39a468d..df2391f4 100644
--- a/packages/lib/src/form-fields/date-range/date-range.pcss
+++ b/packages/lib/src/form-fields/date-range/date-range.pcss
@@ -93,11 +93,58 @@
left: 0;
right: 0;
bottom: 0;
+
+ &-content {
+ position: absolute;
+ display: flex;
+ flex-direction: row;
+ box-shadow: 0 6px 9px rgba(0, 0, 0, 0.16);
+ background-color: var(--background-primary);
+ }
}
+ &-presets {
+ z-index: 100;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ max-width: calc(280px + 2rem);
+ max-height: 395px;
+ padding: 1rem;
+ overflow-y: auto;
+ border-bottom-right-radius: 0.25rem;
+ background-color: var(--background-primary);
+ box-sizing: border-box;
+
+ > button {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ border: none;
+ gap: 0.75rem;
+ padding: 0.75rem;
+ text-align: left;
+ outline: none;
+ background-color: var(--background-primary);
+ border-radius: 0.25rem;
+
+ &:hover {
+ background-color: var(--background-secondary);
+ }
+
+ &:focus{
+ background-color: var(--primary-color);
+ color: var(--text-on-primary);
+ }
+ }
+ &-active {
+ background-color: var(--primary-color) !important;
+ color: var(--text-on-primary);
+ }
+ }
+
&-menu {
z-index: 100;
- position: absolute;
display: flex;
flex-direction: column;
max-width: calc(280px + 2rem);
@@ -105,8 +152,6 @@
padding: 1rem;
overflow-y: auto;
border-bottom-left-radius: 0.25rem;
- border-bottom-right-radius: 0.25rem;
- box-shadow: 0 6px 9px rgba(0, 0, 0, 0.16);
background-color: var(--background-primary);
box-sizing: border-box;
@@ -181,19 +226,20 @@
&-cell {
& button {
flex: 1 1 0;
- padding: 0.25rem 1rem;
+ padding: 0.75rem 1rem;
width: 100%;
border: 0;
- border-radius: 50%;
+ border-radius: 999px;
+ background-color: transparent;
&:not(:disabled):hover {
background-color: var(--primary-color);
color: var(--text-on-primary);
}
}
-
+
&-active {
- background-color: var(--primary-color);
+ background-color: var(--primary-color) !important;
color: var(--text-on-primary);
}
diff --git a/packages/lib/src/form-fields/date-range/date-range.wc.svelte b/packages/lib/src/form-fields/date-range/date-range.wc.svelte
index cf539f9e..1aa201ef 100644
--- a/packages/lib/src/form-fields/date-range/date-range.wc.svelte
+++ b/packages/lib/src/form-fields/date-range/date-range.wc.svelte
@@ -56,7 +56,7 @@
export let minSelectableDays: number;
export let maxDateSelectable: Date;
export let minDateSelectable: Date;
-
+ export let enablePreset: boolean = true;
let firstSelectedDateObject = new Date();
let secondSelectedDateObject = new Date();
let displayedDateString = '';
@@ -92,6 +92,83 @@
'Dec'
];
let yearPickerIndex = 0;
+
+ const date = new Date();
+ const createRelativeDate = (days = 0, months = 0, years = 0) => {
+ const newDate = new Date(date);
+ if (days) newDate.setDate(date.getDate() + days);
+ if (months) newDate.setMonth(date.getMonth() + months);
+ if (years) newDate.setFullYear(date.getFullYear() + years);
+ return newDate;
+ };
+ const yesterday = createRelativeDate(-1);
+ const sevenDaysAgo = createRelativeDate(-7);
+ const thirtyDaysAgo = createRelativeDate(-30);
+ const nintyDaysAgo = createRelativeDate(-90);
+ const twelveMonthsAgo = createRelativeDate(0, -12);
+ const firstDayOfLastYear = new Date(date.getFullYear() - 1, 0, 1);
+ const lastDayOfLastYear = new Date(date.getFullYear() - 1, 11, 31);
+ const firstDayOfThisYear = new Date(date.getFullYear(), 0, 1);
+
+ function handlePresets(label: string) {
+ const setDates = (start: Date, end: Date) => {
+ firstDateSelected = start.getDate();
+ firstMonthSelected = start.getMonth();
+ firstYearSelected = start.getFullYear();
+ secondDateSelected = end.getDate();
+ secondMonthSelected = end.getMonth();
+ secondYearSelected = end.getFullYear();
+ pickerMonth = start.getMonth();
+ pickerYear = start.getFullYear();
+ };
+ const updatePreset = (index: number) => {
+ presets = presets.map((preset, i) => ({
+ ...preset,
+ active: i === index,
+ }));
+ };
+ if (label === 'Today') {
+ setDates(date, date);
+ updatePreset(0);
+ } else if (label === 'Yesterday') {
+ const yesterday = new Date(date);
+ yesterday.setDate(date.getDate() - 1);
+ setDates(yesterday, yesterday);
+ updatePreset(1);
+ } else if (label === 'Last 7 days') {
+ const sevenDaysAgo = new Date(date);
+ sevenDaysAgo.setDate(date.getDate() - 7);
+ setDates(sevenDaysAgo, date);
+ updatePreset(2);
+ } else if (label === 'Last 30 days') {
+ const thirtyDaysAgo = new Date(date);
+ thirtyDaysAgo.setDate(date.getDate() - 30);
+ setDates(thirtyDaysAgo, date);
+ updatePreset(3);
+ } else if (label === 'Last 90 days') {
+ const ninetyDaysAgo = new Date(date);
+ ninetyDaysAgo.setDate(date.getDate() - 90);
+ setDates(ninetyDaysAgo, date);
+ updatePreset(4);
+ } else if (label === 'Last 12 months') {
+ const twelveMonthsAgo = new Date(date);
+ twelveMonthsAgo.setMonth(date.getMonth() - 12);
+ setDates(twelveMonthsAgo, date);
+ updatePreset(5);
+ } else if (label === 'Last year') {
+ const firstDayOfLastYear = new Date(date.getFullYear() - 1, 0, 1);
+ const lastDayOfLastYear = new Date(firstDayOfLastYear.getFullYear(), 12, 0);
+ setDates(firstDayOfLastYear, lastDayOfLastYear);
+ updatePreset(6);
+ } else if (label === 'This year') {
+ const firstDayOfThisYear = new Date(date.getFullYear(), 0, 1);
+ const internalMaxDate = maxDate ? (maxDate instanceof Date ? maxDate : new Date(maxDate)) : null;
+ const isOutOfBounds = isOutOfMaxBounds(internalMaxDate, date.getFullYear(), date.getMonth(), date.getDate());
+ setDates(firstDayOfThisYear, isOutOfBounds ? internalMaxDate : date);
+ updatePreset(7);
+ }
+ }
+
function handleYearSelected(event: { detail: { year: any } }) {
const { year } = event.detail;
@@ -421,6 +498,17 @@
}
}
$: displayLabel = required ? `${label} *` : label;
+
+ $: presets = [
+ {label: 'Today', disabled: isOutOfMaxBounds(internalMaxDate, date.getFullYear(), date.getMonth(), date.getDate()) || isOutOfMinBounds(internalMinDate, date.getFullYear(), date.getMonth(), date.getDate()), active: false},
+ {label: 'Yesterday', disabled: isOutOfMaxBounds(internalMaxDate, yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate()) || isOutOfMinBounds(internalMinDate, yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate()), active: false},
+ {label: 'Last 7 days', disabled: isOutOfMinBounds(internalMinDate, sevenDaysAgo.getFullYear(), sevenDaysAgo.getMonth(), sevenDaysAgo.getDate()) || isOutOfMaxBounds(internalMaxDate, date.getFullYear(), date.getMonth(), date.getDate()), active: false},
+ {label: 'Last 30 days', disabled: isOutOfMinBounds(internalMinDate, thirtyDaysAgo.getFullYear(), thirtyDaysAgo.getMonth(), thirtyDaysAgo.getDate()) || isOutOfMaxBounds(internalMaxDate, date.getFullYear(), date.getMonth(), date.getDate()), active: false},
+ {label: 'Last 90 days', disabled: isOutOfMinBounds(internalMinDate, nintyDaysAgo.getFullYear(), nintyDaysAgo.getMonth(), nintyDaysAgo.getDate()) || isOutOfMaxBounds(internalMaxDate, date.getFullYear(), date.getMonth(), date.getDate()), active: false},
+ {label: 'Last 12 months', disabled: isOutOfMinBounds(internalMinDate, twelveMonthsAgo.getFullYear(), twelveMonthsAgo.getMonth(), twelveMonthsAgo.getDate()) || isOutOfMaxBounds(internalMaxDate, date.getFullYear(), date.getMonth(), date.getDate()), active: false},
+ {label: 'Last year', disabled: isOutOfMinBounds(internalMinDate, firstDayOfLastYear.getFullYear(), firstDayOfLastYear.getMonth(), firstDayOfLastYear.getDate()) || isOutOfMaxBounds(internalMaxDate, lastDayOfLastYear.getFullYear(), lastDayOfLastYear.getMonth(), lastDayOfLastYear.getDate()), active: false},
+ {label: 'This year', disabled: isOutOfMaxBounds(internalMaxDate, firstDayOfThisYear.getFullYear(), firstDayOfThisYear.getMonth(), firstDayOfThisYear.getDate()) || isOutOfMinBounds(internalMinDate, firstDayOfThisYear.getFullYear(), firstDayOfThisYear.getMonth(), firstDayOfThisYear.getDate()), active: false}
+ ];
{#if label && labelType == 'outside'}
@@ -462,195 +550,218 @@
{#if openPicker}