@rolster/react-components 18.12.4 → 18.12.5

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 (24) hide show
  1. package/dist/cjs/assets/{index-XotqmUMW.css → index-r16o2aIF.css} +21 -8
  2. package/dist/cjs/index.js +52 -26
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/es/assets/{index-XotqmUMW.css → index-r16o2aIF.css} +21 -8
  5. package/dist/es/index.js +53 -27
  6. package/dist/es/index.js.map +1 -1
  7. package/dist/esm/components/definitions.d.ts +1 -1
  8. package/dist/esm/components/molecules/DayRangePicker/DayRangePicker.css +17 -3
  9. package/dist/esm/components/molecules/DayRangePicker/DayRangePicker.js +14 -7
  10. package/dist/esm/components/molecules/DayRangePicker/DayRangePicker.js.map +1 -1
  11. package/dist/esm/components/organisms/DateField/DateField.js +1 -1
  12. package/dist/esm/components/organisms/DateField/DateField.js.map +1 -1
  13. package/dist/esm/components/organisms/DatePicker/DatePicker.js +3 -3
  14. package/dist/esm/components/organisms/DatePicker/DatePicker.js.map +1 -1
  15. package/dist/esm/components/organisms/DateRangeField/DateRangeField.js +1 -1
  16. package/dist/esm/components/organisms/DateRangeField/DateRangeField.js.map +1 -1
  17. package/dist/esm/components/organisms/DateRangePicker/DateRangePicker.css +4 -5
  18. package/dist/esm/components/organisms/DateRangePicker/DateRangePicker.js +3 -3
  19. package/dist/esm/components/organisms/DateRangePicker/DateRangePicker.js.map +1 -1
  20. package/dist/esm/helpers/date-range-picker.d.ts +2 -0
  21. package/dist/esm/helpers/date-range-picker.js +18 -13
  22. package/dist/esm/helpers/date-range-picker.js.map +1 -1
  23. package/dist/esm/models.d.ts +3 -2
  24. package/package.json +5 -5
@@ -1066,15 +1066,25 @@
1066
1066
  --pvt-span-nothover-font-color: inherit;
1067
1067
  --pvt-span-background: transparent;
1068
1068
  position: relative;
1069
- float: left;
1069
+ display: flex;
1070
1070
  width: 100%;
1071
1071
  max-width: 140rem;
1072
+ flex-direction: column;
1073
+ row-gap: var(--sizing-x4);
1072
1074
  box-sizing: border-box;
1073
1075
  user-select: none;
1074
1076
  }
1077
+ .rls-day-range-picker__title {
1078
+ color: var(--color-rolster-500);
1079
+ text-align: center;
1080
+ padding: var(--sizing-x4) 0rem;
1081
+ font-size: var(--subtitle-font-size);
1082
+ letter-spacing: var(--subtitle-letter-spacing);
1083
+ line-height: var(--subtitle-line-height);
1084
+ font-weight: var(--font-weight-bold);
1085
+ }
1075
1086
  .rls-day-range-picker__header {
1076
1087
  display: flex;
1077
- margin-bottom: var(--sizing-x4);
1078
1088
  background: var(--background-theme-100);
1079
1089
  color: var(--color-theme-500);
1080
1090
  border-radius: var(--sizing-x2);
@@ -1113,7 +1123,11 @@
1113
1123
  color: var(--color-light-500);
1114
1124
  background: var(--color-rolster-900);
1115
1125
  }
1116
- .rls-day-range-picker__day--selected {
1126
+ .rls-day-range-picker__day--end {
1127
+ --pvt-span-nothover-background: var(--color-theme-500);
1128
+ --pvt-span-nothover-font-color: var(--background-theme-500);
1129
+ }
1130
+ .rls-day-range-picker__day--source {
1117
1131
  --pvt-span-nothover-background: var(--color-rolster-500);
1118
1132
  --pvt-span-nothover-font-color: var(--color-light-500);
1119
1133
  }
@@ -1924,6 +1938,7 @@
1924
1938
  position: relative;
1925
1939
  display: flex;
1926
1940
  flex-direction: column;
1941
+ row-gap: var(--sizing-x4);
1927
1942
  overflow: hidden;
1928
1943
  max-width: 150rem;
1929
1944
  }
@@ -1931,7 +1946,6 @@
1931
1946
  background: var(--color-rolster-100);
1932
1947
  padding: var(--sizing-x4);
1933
1948
  box-sizing: border-box;
1934
- margin-bottom: var(--sizing-x8);
1935
1949
  }
1936
1950
  .rls-date-range-picker__title {
1937
1951
  color: var(--color-theme-500);
@@ -1967,17 +1981,16 @@
1967
1981
  }
1968
1982
  .rls-date-range-picker__component {
1969
1983
  display: flex;
1984
+ justify-content: center;
1970
1985
  width: 150rem;
1971
1986
  padding: 0rem var(--sizing-x2);
1972
1987
  box-sizing: border-box;
1973
- margin-bottom: var(--sizing-x4);
1974
1988
  }
1975
1989
  .rls-date-range-picker__component > * {
1976
- margin: 0rem auto;
1977
1990
  display: none;
1978
1991
  }
1979
1992
  .rls-date-range-picker__component--day .rls-day-range-picker {
1980
- display: block;
1993
+ display: flex;
1981
1994
  }
1982
1995
  .rls-date-range-picker__component--month .rls-month-picker {
1983
1996
  display: grid;
@@ -1992,7 +2005,7 @@
1992
2005
  display: flex;
1993
2006
  flex-wrap: wrap;
1994
2007
  gap: var(--sizing-x4);
1995
- padding: var(--sizing-x4) var(--sizing-x8) var(--sizing-x6) var(--sizing-x8);
2008
+ padding: 0rem var(--sizing-x8) var(--sizing-x6) var(--sizing-x8);
1996
2009
  overflow: hidden;
1997
2010
  box-sizing: border-box;
1998
2011
  }
package/dist/cjs/index.js CHANGED
@@ -384,12 +384,13 @@ function RlsDayPicker({ date, disabled: disabledPicker, formControl, maxDate, mi
384
384
  }, children: jsxRuntime.jsx("span", { className: "rls-day-picker__day__span", children: value || '??' }) }, index))) }, index))) })] }));
385
385
  }
386
386
 
387
- const DATE_FORMAT = '{dd}/{mx}/{aa}';
387
+ const DATE_RANGE_FORMAT = '{dd}/{mx}/{aa}';
388
388
  class DateRangePickerFactory {
389
389
  constructor(props) {
390
- const { date, range, maxDate, minDate } = props;
390
+ const { date, range, sourceDate, maxDate, minDate } = props;
391
391
  this.date = new Date(date.getTime());
392
392
  this.range = range;
393
+ this.sourceDate = sourceDate;
393
394
  this.maxDate = maxDate;
394
395
  this.minDate = minDate;
395
396
  this.date.setDate(1);
@@ -442,16 +443,10 @@ class DateRangePickerFactory {
442
443
  }
443
444
  return daysPending;
444
445
  }
445
- createDayRangeState(day) {
446
- return {
447
- value: day,
448
- disabled: this.overflowDay(day || 0),
449
- forbidden: !day,
450
- ranged: day ? this.isRangedFromDate(day) : false,
451
- selected: day ? this.isSelected(day) : false
452
- };
446
+ isSelectedSource(day) {
447
+ return this.isSelectedForDate(this.sourceDate, day);
453
448
  }
454
- isSelected(day) {
449
+ isSelectedEnd(day) {
455
450
  return (this.isSelectedForDate(this.range.minDate, day) ||
456
451
  this.isSelectedForDate(this.range.maxDate, day));
457
452
  }
@@ -476,10 +471,20 @@ class DateRangePickerFactory {
476
471
  ? helpersDate.weight(helpersDate.assignDay(this.date, day)) > helpersDate.weight(this.maxDate)
477
472
  : false;
478
473
  }
474
+ createDayRangeState(day) {
475
+ return {
476
+ value: day,
477
+ disabled: this.overflowDay(day || 0),
478
+ forbidden: !day,
479
+ ranged: day ? this.isRangedFromDate(day) : false,
480
+ end: day ? this.isSelectedEnd(day) : false,
481
+ source: day ? this.isSelectedSource(day) : false
482
+ };
483
+ }
479
484
  }
480
485
  function formatRange(range) {
481
- const minFormat = helpersDate.formatDate(range.minDate, DATE_FORMAT);
482
- const maxFormat = helpersDate.formatDate(range.maxDate, DATE_FORMAT);
486
+ const minFormat = helpersDate.formatDate(range.minDate, DATE_RANGE_FORMAT);
487
+ const maxFormat = helpersDate.formatDate(range.maxDate, DATE_RANGE_FORMAT);
483
488
  return `${minFormat} - ${maxFormat}`;
484
489
  }
485
490
  function createRangePicker(props) {
@@ -489,26 +494,33 @@ function createRangePicker(props) {
489
494
  function RlsDayRangePicker({ date, disabled: disabledPicker, formControl, maxDate, minDate, rlsTheme }) {
490
495
  const initialRange = formControl?.state || helpersDate.DateRange.now();
491
496
  const initialDate = helpersDate.normalizeMinTime(date || initialRange.minDate);
497
+ const sourceDate = react.useRef(initialRange.minDate);
492
498
  const [weeks, setWeeks] = react.useState([]);
493
499
  const [range, setRange] = react.useState(initialRange);
494
500
  react.useEffect(() => {
495
501
  setWeeks(createRangePicker({
496
502
  date: initialDate,
497
503
  range,
504
+ sourceDate: sourceDate.current,
498
505
  minDate,
499
506
  maxDate
500
507
  }));
501
508
  }, [range, date, minDate, maxDate]);
502
509
  function onChange(value) {
503
- const newRange = range.recalculate(helpersDate.assignDay(initialDate, value));
510
+ const newDate = helpersDate.assignDay(initialDate, value);
511
+ const newRange = helpersDate.before(newDate, sourceDate.current)
512
+ ? new helpersDate.DateRange(sourceDate.current, newDate)
513
+ : new helpersDate.DateRange(newDate, sourceDate.current);
514
+ sourceDate.current = newDate;
504
515
  setRange(newRange);
505
516
  formControl?.setState(newRange);
506
517
  }
507
- return (jsxRuntime.jsxs("div", { className: "rls-day-range-picker", "rls-theme": rlsTheme, children: [jsxRuntime.jsx("div", { className: "rls-day-range-picker__header", children: helpersDate.DAY_LABELS().map((title, index) => (jsxRuntime.jsx("label", { className: "rls-day-range-picker__label", children: title }, index))) }), jsxRuntime.jsx("div", { className: "rls-day-range-picker__component", children: weeks.map(({ days }, index) => (jsxRuntime.jsx("div", { className: "rls-day-range-picker__week", children: days.map(({ value, disabled, forbidden, ranged, selected }, index) => (jsxRuntime.jsx("div", { className: renderClassStatus('rls-day-range-picker__day', {
518
+ return (jsxRuntime.jsxs("div", { className: "rls-day-range-picker", "rls-theme": rlsTheme, children: [jsxRuntime.jsx("div", { className: "rls-day-range-picker__title", children: helpersDate.formatDate(sourceDate.current, DATE_RANGE_FORMAT) }), jsxRuntime.jsx("div", { className: "rls-day-range-picker__header", children: helpersDate.DAY_LABELS().map((title, index) => (jsxRuntime.jsx("label", { className: "rls-day-range-picker__label", children: title }, index))) }), jsxRuntime.jsx("div", { className: "rls-day-range-picker__component", children: weeks.map(({ days }, index) => (jsxRuntime.jsx("div", { className: "rls-day-range-picker__week", children: days.map(({ disabled, end, forbidden, source, ranged, value }, index) => (jsxRuntime.jsx("div", { className: renderClassStatus('rls-day-range-picker__day', {
508
519
  disabled: disabled || disabledPicker,
520
+ end,
509
521
  forbidden,
510
- selected,
511
- ranged
522
+ ranged,
523
+ source
512
524
  }), onClick: () => {
513
525
  if (value && !disabled) {
514
526
  onChange(value);
@@ -1540,7 +1552,21 @@ const controlIsValid = (props) => {
1540
1552
  }, []);
1541
1553
  };
1542
1554
 
1543
- function useReactControl(props = {}) {
1555
+ function instanceOfReactControlProps(props) {
1556
+ return (typeof props === 'object' && ('state' in props || 'validators' in props));
1557
+ }
1558
+ function getReactControlProps(props, validators) {
1559
+ if (props === undefined || props === null) {
1560
+ return { state: undefined, validators: undefined };
1561
+ }
1562
+ if (instanceOfReactControlProps(props)) {
1563
+ return props;
1564
+ }
1565
+ const state = props;
1566
+ return { state, validators };
1567
+ }
1568
+ function useReactControl(reactProps, validatorsFn) {
1569
+ const props = getReactControlProps(reactProps, validatorsFn);
1544
1570
  const [state, setCurrentState] = react.useState(props.state);
1545
1571
  const [value, setValue] = react.useState(props.state);
1546
1572
  const [touched, setTouched] = react.useState(props.touched || false);
@@ -1654,9 +1680,9 @@ const VISIBILITY$1 = {
1654
1680
  };
1655
1681
  function RlsDatePicker({ automatic, date, formControl, disabled, maxDate, minDate, rlsTheme, onListener }) {
1656
1682
  const dateInitial = formControl?.state || date || new Date();
1657
- const yearControl = useReactControl({ state: dateInitial.getFullYear() });
1658
- const dayControl = useReactControl({ state: dateInitial.getDate() });
1659
- const monthControl = useReactControl({ state: dateInitial.getMonth() });
1683
+ const yearControl = useReactControl(dateInitial.getFullYear());
1684
+ const dayControl = useReactControl(dateInitial.getDate());
1685
+ const monthControl = useReactControl(dateInitial.getMonth());
1660
1686
  const [value, setValue] = react.useState(dateInitial);
1661
1687
  const [{ day, month, year }, setVisibility] = react.useState(VISIBILITY$1.DAY);
1662
1688
  const title = helpersDate.formatDate(value, FORMAT_DESCRIPTION);
@@ -1754,7 +1780,7 @@ function RlsDateField({ children, date, disabled, formControl, maxDate, minDate,
1754
1780
  setShow(true);
1755
1781
  }
1756
1782
  }
1757
- return (jsxRuntime.jsxs("div", { className: "rls-date-field", "rls-theme": rlsTheme, children: [jsxRuntime.jsxs("div", { className: renderClassStatus('rls-box-field', { disabled }), children: [children && jsxRuntime.jsx("label", { className: "rls-box-field__label", children: children }), jsxRuntime.jsx("div", { className: "rls-box-field__component", children: jsxRuntime.jsxs("div", { className: "rls-box-field__body", children: [jsxRuntime.jsx("input", { className: "rls-date-field__control", type: "text", value: description, readOnly: true, placeholder: placeholder, onClick: onClickInput, disabled: disabled }), jsxRuntime.jsx("button", { className: "rls-date-field__action", onClick: onClean, disabled: disabled, children: jsxRuntime.jsx(RlsIcon, { value: value ? 'trash-2' : 'calendar' }) })] }) }), formControl?.touched && formControl?.error && (jsxRuntime.jsx("div", { className: "rls-box-field__error", children: jsxRuntime.jsx(RlsMessageIcon, { icon: "alert-triangle", rlsTheme: "danger", children: formControl.error.message }) }))] }), jsxRuntime.jsx(RlsModal, { visible: show, children: jsxRuntime.jsx(RlsDatePicker, { formControl: formControl, date: date, disabled: disabled, maxDate: maxDate, minDate: minDate, onListener: ({ value, type }) => {
1783
+ return (jsxRuntime.jsxs("div", { className: "rls-date-field", "rls-theme": rlsTheme, children: [jsxRuntime.jsxs("div", { className: renderClassStatus('rls-box-field', { disabled }), children: [children && jsxRuntime.jsx("label", { className: "rls-box-field__label", children: children }), jsxRuntime.jsx("div", { className: "rls-box-field__component", children: jsxRuntime.jsxs("div", { className: "rls-box-field__body", children: [jsxRuntime.jsx("input", { className: "rls-date-field__control", type: "text", value: description, readOnly: true, placeholder: placeholder, onClick: onClickInput, disabled: disabled }), jsxRuntime.jsx("button", { className: "rls-date-field__action", onClick: onClean, disabled: disabled, children: jsxRuntime.jsx(RlsIcon, { value: value ? 'trash-2' : 'calendar' }) })] }) }), formControl?.touched && formControl?.error && (jsxRuntime.jsx("div", { className: "rls-box-field__error", children: jsxRuntime.jsx(RlsMessageIcon, { icon: "alert-triangle", rlsTheme: "danger", children: formControl.error.message }) }))] }), jsxRuntime.jsx(RlsModal, { visible: show, rlsTheme: rlsTheme, children: jsxRuntime.jsx(RlsDatePicker, { formControl: formControl, date: date, disabled: disabled, maxDate: maxDate, minDate: minDate, onListener: ({ value, type }) => {
1758
1784
  if (type !== PickerListenerType.Cancel) {
1759
1785
  onChange(value, true);
1760
1786
  }
@@ -1787,9 +1813,9 @@ const VISIBILITY = {
1787
1813
  function RlsDateRangePicker({ automatic, date: datePicker, disabled, formControl, maxDate, minDate, rlsTheme, onListener }) {
1788
1814
  const dateInitial = helpersDate.normalizeMinTime(datePicker || new Date());
1789
1815
  const rangeInitial = formControl?.state || helpersDate.DateRange.now();
1790
- const yearControl = useReactControl({ state: dateInitial.getFullYear() });
1791
- const monthControl = useReactControl({ state: dateInitial.getMonth() });
1792
- const dayControl = useReactControl({ state: rangeInitial });
1816
+ const yearControl = useReactControl(dateInitial.getFullYear());
1817
+ const monthControl = useReactControl(dateInitial.getMonth());
1818
+ const dayControl = useReactControl(rangeInitial);
1793
1819
  const [value, setValue] = react.useState(rangeInitial);
1794
1820
  const [date, setDate] = react.useState(dateInitial);
1795
1821
  const [{ day, month, year }, setVisibility] = react.useState(VISIBILITY.DAY);
@@ -1864,7 +1890,7 @@ function RlsDateRangeField({ children, date: datePicker, disabled, formControl,
1864
1890
  setShow(true);
1865
1891
  }
1866
1892
  }
1867
- return (jsxRuntime.jsxs("div", { className: "rls-date-field", "rls-theme": rlsTheme, children: [jsxRuntime.jsxs("div", { className: "rls-box-field", children: [children && jsxRuntime.jsx("label", { className: "rls-box-field__label", children: children }), jsxRuntime.jsx("div", { className: "rls-box-field__component", children: jsxRuntime.jsxs("div", { className: "rls-box-field__body", children: [jsxRuntime.jsx("input", { className: "rls-date-field__control", type: "text", value: description, readOnly: true, placeholder: placeholder, onClick: onClickInput }), jsxRuntime.jsx("button", { className: "rls-date-field__action", onClick: onClickAction, children: jsxRuntime.jsx(RlsIcon, { value: value ? 'trash-2' : 'calendar' }) })] }) })] }), jsxRuntime.jsx(RlsModal, { visible: show, children: jsxRuntime.jsx(RlsDateRangePicker, { formControl: formControl, date: date, disabled: disabled, maxDate: maxDate, minDate: minDate, onListener: ({ value }) => {
1893
+ return (jsxRuntime.jsxs("div", { className: "rls-date-field", "rls-theme": rlsTheme, children: [jsxRuntime.jsxs("div", { className: "rls-box-field", children: [children && jsxRuntime.jsx("label", { className: "rls-box-field__label", children: children }), jsxRuntime.jsx("div", { className: "rls-box-field__component", children: jsxRuntime.jsxs("div", { className: "rls-box-field__body", children: [jsxRuntime.jsx("input", { className: "rls-date-field__control", type: "text", value: description, readOnly: true, placeholder: placeholder, onClick: onClickInput }), jsxRuntime.jsx("button", { className: "rls-date-field__action", onClick: onClickAction, children: jsxRuntime.jsx(RlsIcon, { value: value ? 'trash-2' : 'calendar' }) })] }) })] }), jsxRuntime.jsx(RlsModal, { visible: show, rlsTheme: rlsTheme, children: jsxRuntime.jsx(RlsDateRangePicker, { formControl: formControl, date: date, disabled: disabled, maxDate: maxDate, minDate: minDate, onListener: ({ value }) => {
1868
1894
  if (value) {
1869
1895
  setValue(value);
1870
1896
  }