@react-fabric/date 1.0.0-beta.5 → 1.0.0-beta.6

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.
@@ -19,8 +19,18 @@ var jsxRuntime = require('react/jsx-runtime');
19
19
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20
20
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
21
21
  var makeList = function makeList(year) {
22
- var predefined = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
22
+ var recurring = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
23
+ var predefined = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
23
24
  var list = _toConsumableArray(predefined);
25
+ recurring.forEach(function (evt) {
26
+ return list.push({
27
+ label: evt.label,
28
+ hijri: evt.hijri,
29
+ icon: evt.icon,
30
+ start: dateFns.setYear(dateUtil.DateUtil.parseDate(evt.start), year),
31
+ end: dateFns.setYear(dateUtil.DateUtil.parseDate(evt.end), year)
32
+ });
33
+ });
24
34
  list.push({
25
35
  label: "superdate:event.newYear",
26
36
  start: dateFns.startOfDay(new Date("".concat(year - 1, "-12-31"))),
@@ -51,7 +61,9 @@ var EventPanel = function EventPanel(_ref) {
51
61
  var isHijri = _ref.isHijri,
52
62
  onChange = _ref.onChange,
53
63
  _ref$events = _ref.events,
54
- events = _ref$events === void 0 ? utilities.EMPTY_ARRAY : _ref$events;
64
+ events = _ref$events === void 0 ? utilities.EMPTY_ARRAY : _ref$events,
65
+ _ref$recurringEvents = _ref.recurringEvents,
66
+ recurringEvents = _ref$recurringEvents === void 0 ? utilities.EMPTY_ARRAY : _ref$recurringEvents;
55
67
  var _useTranslation = reactI18next.useTranslation(),
56
68
  t = _useTranslation.t;
57
69
  var _useState = react.useState({}),
@@ -77,7 +89,7 @@ var EventPanel = function EventPanel(_ref) {
77
89
  if (resetList) {
78
90
  var _predefined$year;
79
91
  var year = state.pageDate.getFullYear();
80
- state.events = makeList(year, (_predefined$year = predefined[year]) !== null && _predefined$year !== void 0 ? _predefined$year : []);
92
+ state.events = makeList(year, recurringEvents !== null && recurringEvents !== void 0 ? recurringEvents : [], (_predefined$year = predefined[year]) !== null && _predefined$year !== void 0 ? _predefined$year : []);
81
93
  }
82
94
  return _objectSpread({}, state);
83
95
  }, {
@@ -16,13 +16,14 @@ var RelativePanel = require('./RelativePanel.js');
16
16
  var SuperDate_module = require('./SuperDate.module.css');
17
17
  var jsxRuntime = require('react/jsx-runtime');
18
18
 
19
- var _excluded = ["as", "color", "variant", "onChange", "value"];
19
+ var _excluded = ["as", "color", "variant", "disabled", "onChange", "value", "data-test-value", "data-testid"];
20
20
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
21
21
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
22
22
  var SuperDateTabs = function SuperDateTabs(_ref) {
23
23
  var events = _ref.events,
24
24
  value = _ref.value,
25
25
  presets = _ref.presets,
26
+ recurringEvents = _ref.recurringEvents,
26
27
  onChange = _ref.onChange;
27
28
  var _useTranslation = reactI18next.useTranslation("superdate"),
28
29
  t = _useTranslation.t;
@@ -97,7 +98,8 @@ var SuperDateTabs = function SuperDateTabs(_ref) {
97
98
  children: /*#__PURE__*/jsxRuntime.jsx(EventPanel.EventPanel, {
98
99
  isHijri: isHijri,
99
100
  onChange: handleChange,
100
- events: events
101
+ events: events,
102
+ recurringEvents: recurringEvents
101
103
  })
102
104
  })]
103
105
  })
@@ -125,8 +127,11 @@ var SuperDate = function SuperDate(_ref4) {
125
127
  _ref4$color = _ref4.color,
126
128
  color = _ref4$color === void 0 ? "primary" : _ref4$color,
127
129
  variant = _ref4.variant,
130
+ disabled = _ref4.disabled,
128
131
  onChange = _ref4.onChange,
129
132
  value = _ref4.value,
133
+ testValue = _ref4["data-test-value"],
134
+ testId = _ref4["data-testid"],
130
135
  props = _objectWithoutProperties(_ref4, _excluded);
131
136
  var _useGlobals2 = core.useGlobals(),
132
137
  currentCalendar = _useGlobals2.currentCalendar,
@@ -155,7 +160,10 @@ var SuperDate = function SuperDate(_ref4) {
155
160
  children: /*#__PURE__*/jsxRuntime.jsx(E, {
156
161
  icon: core.CoreIcons.clock,
157
162
  color: color,
163
+ disabled: disabled,
158
164
  variant: variant,
165
+ "data-test-value": testValue,
166
+ "data-testid": testId,
159
167
  children: (_DateUtil$relativeLab = dateUtil.DateUtil.relativeLabel(relValue, isHijri)) !== null && _DateUtil$relativeLab !== void 0 ? _DateUtil$relativeLab : ""
160
168
  })
161
169
  }), /*#__PURE__*/jsxRuntime.jsx(SuperDateTabs, _objectSpread(_objectSpread({}, props), {}, {
@@ -81,7 +81,7 @@ exports.DateUtil = void 0;
81
81
  return formatted;
82
82
  };
83
83
  var isRelative = _DateUtil.isRelative = function (date) {
84
- return utilities.isString(date) && date.match(/^(\$\w+)([+-])(\d+)?$/) !== null;
84
+ return utilities.isString(date) && date.match(/^(\$\w+)([+-])?(\d+)?$/) !== null;
85
85
  };
86
86
  _DateUtil.isRelativeRange = function (date) {
87
87
  return utilities.isString(date) && date.match(/^(\$\w+)([+-])(\d+)?\|(\$\w+)([+-])(\d+)?$/) !== null;
@@ -375,6 +375,7 @@ exports.DateUtil = void 0;
375
375
  };
376
376
  var _parse = function _parse(dt, rounded) {
377
377
  var _dt$match2;
378
+ if (!isRelative(dt)) return new Date(dt);
378
379
  var _ref3 = (_dt$match2 = dt.match(/^(\$\w+)([+-]\d+)?$/)) !== null && _dt$match2 !== void 0 ? _dt$match2 : [],
379
380
  _ref4 = _slicedToArray(_ref3, 3),
380
381
  part = _ref4[1],
@@ -5,7 +5,7 @@ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
5
5
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
6
6
  import { Section, Content } from '@react-fabric/core';
7
7
  import { EMPTY_ARRAY } from '@react-fabric/utilities';
8
- import { startOfDay, endOfDay, isSameMonth } from 'date-fns';
8
+ import { startOfDay, endOfDay, isSameMonth, setYear } from 'date-fns';
9
9
  import i18next from 'i18next';
10
10
  import { useState, useReducer, useEffect } from 'react';
11
11
  import { useTranslation } from 'react-i18next';
@@ -19,8 +19,18 @@ import { jsxs, jsx } from 'react/jsx-runtime';
19
19
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20
20
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
21
21
  var makeList = function makeList(year) {
22
- var predefined = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
22
+ var recurring = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
23
+ var predefined = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
23
24
  var list = _toConsumableArray(predefined);
25
+ recurring.forEach(function (evt) {
26
+ return list.push({
27
+ label: evt.label,
28
+ hijri: evt.hijri,
29
+ icon: evt.icon,
30
+ start: setYear(DateUtil.parseDate(evt.start), year),
31
+ end: setYear(DateUtil.parseDate(evt.end), year)
32
+ });
33
+ });
24
34
  list.push({
25
35
  label: "superdate:event.newYear",
26
36
  start: startOfDay(new Date("".concat(year - 1, "-12-31"))),
@@ -51,7 +61,9 @@ var EventPanel = function EventPanel(_ref) {
51
61
  var isHijri = _ref.isHijri,
52
62
  onChange = _ref.onChange,
53
63
  _ref$events = _ref.events,
54
- events = _ref$events === void 0 ? EMPTY_ARRAY : _ref$events;
64
+ events = _ref$events === void 0 ? EMPTY_ARRAY : _ref$events,
65
+ _ref$recurringEvents = _ref.recurringEvents,
66
+ recurringEvents = _ref$recurringEvents === void 0 ? EMPTY_ARRAY : _ref$recurringEvents;
55
67
  var _useTranslation = useTranslation(),
56
68
  t = _useTranslation.t;
57
69
  var _useState = useState({}),
@@ -77,7 +89,7 @@ var EventPanel = function EventPanel(_ref) {
77
89
  if (resetList) {
78
90
  var _predefined$year;
79
91
  var year = state.pageDate.getFullYear();
80
- state.events = makeList(year, (_predefined$year = predefined[year]) !== null && _predefined$year !== void 0 ? _predefined$year : []);
92
+ state.events = makeList(year, recurringEvents !== null && recurringEvents !== void 0 ? recurringEvents : [], (_predefined$year = predefined[year]) !== null && _predefined$year !== void 0 ? _predefined$year : []);
81
93
  }
82
94
  return _objectSpread({}, state);
83
95
  }, {
@@ -16,13 +16,14 @@ import { RelativePanel } from './RelativePanel.js';
16
16
  import classes from './SuperDate.module.css';
17
17
  import { jsxs, jsx } from 'react/jsx-runtime';
18
18
 
19
- var _excluded = ["as", "color", "variant", "onChange", "value"];
19
+ var _excluded = ["as", "color", "variant", "disabled", "onChange", "value", "data-test-value", "data-testid"];
20
20
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
21
21
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
22
22
  var SuperDateTabs = function SuperDateTabs(_ref) {
23
23
  var events = _ref.events,
24
24
  value = _ref.value,
25
25
  presets = _ref.presets,
26
+ recurringEvents = _ref.recurringEvents,
26
27
  onChange = _ref.onChange;
27
28
  var _useTranslation = useTranslation("superdate"),
28
29
  t = _useTranslation.t;
@@ -97,7 +98,8 @@ var SuperDateTabs = function SuperDateTabs(_ref) {
97
98
  children: /*#__PURE__*/jsx(EventPanel, {
98
99
  isHijri: isHijri,
99
100
  onChange: handleChange,
100
- events: events
101
+ events: events,
102
+ recurringEvents: recurringEvents
101
103
  })
102
104
  })]
103
105
  })
@@ -125,8 +127,11 @@ var SuperDate = function SuperDate(_ref4) {
125
127
  _ref4$color = _ref4.color,
126
128
  color = _ref4$color === void 0 ? "primary" : _ref4$color,
127
129
  variant = _ref4.variant,
130
+ disabled = _ref4.disabled,
128
131
  onChange = _ref4.onChange,
129
132
  value = _ref4.value,
133
+ testValue = _ref4["data-test-value"],
134
+ testId = _ref4["data-testid"],
130
135
  props = _objectWithoutProperties(_ref4, _excluded);
131
136
  var _useGlobals2 = useGlobals(),
132
137
  currentCalendar = _useGlobals2.currentCalendar,
@@ -155,7 +160,10 @@ var SuperDate = function SuperDate(_ref4) {
155
160
  children: /*#__PURE__*/jsx(E, {
156
161
  icon: CoreIcons.clock,
157
162
  color: color,
163
+ disabled: disabled,
158
164
  variant: variant,
165
+ "data-test-value": testValue,
166
+ "data-testid": testId,
159
167
  children: (_DateUtil$relativeLab = DateUtil.relativeLabel(relValue, isHijri)) !== null && _DateUtil$relativeLab !== void 0 ? _DateUtil$relativeLab : ""
160
168
  })
161
169
  }), /*#__PURE__*/jsx(SuperDateTabs, _objectSpread(_objectSpread({}, props), {}, {
@@ -81,7 +81,7 @@ var DateUtil;
81
81
  return formatted;
82
82
  };
83
83
  var isRelative = _DateUtil.isRelative = function (date) {
84
- return isString(date) && date.match(/^(\$\w+)([+-])(\d+)?$/) !== null;
84
+ return isString(date) && date.match(/^(\$\w+)([+-])?(\d+)?$/) !== null;
85
85
  };
86
86
  _DateUtil.isRelativeRange = function (date) {
87
87
  return isString(date) && date.match(/^(\$\w+)([+-])(\d+)?\|(\$\w+)([+-])(\d+)?$/) !== null;
@@ -375,6 +375,7 @@ var DateUtil;
375
375
  };
376
376
  var _parse = function _parse(dt, rounded) {
377
377
  var _dt$match2;
378
+ if (!isRelative(dt)) return new Date(dt);
378
379
  var _ref3 = (_dt$match2 = dt.match(/^(\$\w+)([+-]\d+)?$/)) !== null && _dt$match2 !== void 0 ? _dt$match2 : [],
379
380
  _ref4 = _slicedToArray(_ref3, 3),
380
381
  part = _ref4[1],
@@ -1,4 +1,4 @@
1
1
  import { type SuperDateProps } from "../types";
2
- export declare const EventPanel: ({ isHijri, onChange, events, }: {
2
+ export declare const EventPanel: ({ isHijri, onChange, events, recurringEvents, }: {
3
3
  isHijri: boolean;
4
4
  } & Partial<SuperDateProps>) => import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import { type SuperDateProps } from "../types";
2
- export declare const SuperDateTabs: ({ events, value, presets, onChange, }: SuperDateProps) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const SuperDateTabs: ({ events, value, presets, recurringEvents, onChange, }: SuperDateProps) => import("react/jsx-runtime").JSX.Element;
3
3
  /**
4
4
  * Superdate panel provides ability to select relative and absolute dates
5
5
  *
@@ -14,4 +14,4 @@ export declare const SuperDateTabs: ({ events, value, presets, onChange, }: Supe
14
14
  * `$year`,
15
15
  * `$decade`
16
16
  */
17
- export declare const SuperDate: ({ as, color, variant, onChange, value, ...props }: SuperDateProps) => import("react/jsx-runtime").JSX.Element;
17
+ export declare const SuperDate: ({ as, color, variant, disabled, onChange, value, "data-test-value": testValue, "data-testid": testId, ...props }: SuperDateProps) => import("react/jsx-runtime").JSX.Element;
@@ -45,10 +45,11 @@ export interface PresetType {
45
45
  value: string;
46
46
  label: string;
47
47
  }
48
- export interface SuperDateProps {
48
+ export interface SuperDateProps extends TestProps {
49
49
  as?: "button" | "chip";
50
50
  color?: ColorType;
51
51
  variant?: "solid" | "outline" | "link";
52
+ disabled?: boolean;
52
53
  /**
53
54
  * relative date value
54
55
  */
@@ -61,6 +62,10 @@ export interface SuperDateProps {
61
62
  * list of calendar events
62
63
  */
63
64
  events?: EventType[];
65
+ /**
66
+ * list of calendar events
67
+ */
68
+ recurringEvents?: EventType[];
64
69
  /**
65
70
  * list of relative presets
66
71
  *
@@ -23,7 +23,7 @@ export declare namespace DateUtil {
23
23
  const isSameMonth: (date: Date, compare: Date, isHijri?: boolean) => boolean;
24
24
  const isSameYear: (date: Date, compare: Date, isHijri?: boolean) => boolean;
25
25
  const isDisabled: (date: Date, page: PageType, min?: DateLike, max?: DateLike) => boolean;
26
- const parseDate: (datelike: string) => Date;
26
+ const parseDate: (datelike: DateLike) => Date;
27
27
  const parseRange: (datelike: string) => [Date, Date];
28
28
  const relativeTooltip: (datelike?: string, isHijri?: boolean) => string;
29
29
  const relativeLabel: (datelike?: string, isHijri?: boolean) => string | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-fabric/date",
3
- "version": "1.0.0-beta.5",
3
+ "version": "1.0.0-beta.6",
4
4
  "description": "RUF: Date package",
5
5
  "author": "Adarsh Pastakia <adarshpastakia@outlook.com>",
6
6
  "license": "MIT",
@@ -34,9 +34,9 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@floating-ui/react": "^0.26.24",
37
- "@react-fabric/core": "^1.0.0-beta.5",
38
- "@react-fabric/form": "^1.0.0-beta.5",
39
- "@react-fabric/utilities": "^1.0.0-beta.5",
37
+ "@react-fabric/core": "^1.0.0-beta.6",
38
+ "@react-fabric/form": "^1.0.0-beta.6",
39
+ "@react-fabric/utilities": "^1.0.0-beta.6",
40
40
  "classnames": "^2.5.1",
41
41
  "date-fns": "^4.0.0",
42
42
  "resize-observer-polyfill": "^1.5.1"
@@ -54,5 +54,5 @@
54
54
  "node": ">=18.12.0",
55
55
  "npm": ">=8.19.0"
56
56
  },
57
- "gitHead": "7d4a7ed1ea9890652826bef58d01c31280d761c8"
57
+ "gitHead": "21167df13cedeae8b365e87b9bab6d7401298cb6"
58
58
  }
@@ -23,7 +23,7 @@
23
23
 
24
24
  import { Content, Section } from "@react-fabric/core";
25
25
  import { EMPTY_ARRAY } from "@react-fabric/utilities";
26
- import { endOfDay, isSameMonth, startOfDay } from "date-fns";
26
+ import { endOfDay, isSameMonth, setYear, startOfDay } from "date-fns";
27
27
  import i18next from "i18next";
28
28
  import { useEffect, useReducer, useState } from "react";
29
29
  import { useTranslation } from "react-i18next";
@@ -44,8 +44,21 @@ type EventActions =
44
44
  | { type: "changePage"; page: PageType }
45
45
  | { type: "changePageDate"; date: Date; changePage?: boolean };
46
46
 
47
- const makeList = (year: number, predefined: Array<EventType<Date>> = []) => {
47
+ const makeList = (
48
+ year: number,
49
+ recurring: EventType[] = [],
50
+ predefined: Array<EventType<Date>> = [],
51
+ ) => {
48
52
  const list = [...predefined];
53
+ recurring.forEach((evt) =>
54
+ list.push({
55
+ label: evt.label,
56
+ hijri: evt.hijri,
57
+ icon: evt.icon,
58
+ start: setYear(DateUtil.parseDate(evt.start), year),
59
+ end: setYear(DateUtil.parseDate(evt.end), year),
60
+ }),
61
+ );
49
62
  list.push({
50
63
  label: "superdate:event.newYear",
51
64
  start: startOfDay(new Date(`${year - 1}-12-31`)),
@@ -81,6 +94,7 @@ export const EventPanel = ({
81
94
  isHijri,
82
95
  onChange,
83
96
  events = EMPTY_ARRAY,
97
+ recurringEvents = EMPTY_ARRAY,
84
98
  }: { isHijri: boolean } & Partial<SuperDateProps>) => {
85
99
  const { t } = useTranslation();
86
100
  const [predefined, setPredefined] = useState<
@@ -106,7 +120,11 @@ export const EventPanel = ({
106
120
  }
107
121
  if (resetList) {
108
122
  const year = state.pageDate.getFullYear();
109
- state.events = makeList(year, predefined[year] ?? []);
123
+ state.events = makeList(
124
+ year,
125
+ recurringEvents ?? [],
126
+ predefined[year] ?? [],
127
+ );
110
128
  }
111
129
  return { ...state };
112
130
  },
@@ -48,6 +48,7 @@ export const SuperDateTabs = ({
48
48
  events,
49
49
  value,
50
50
  presets,
51
+ recurringEvents,
51
52
  onChange,
52
53
  }: SuperDateProps) => {
53
54
  const { t } = useTranslation("superdate");
@@ -121,6 +122,7 @@ export const SuperDateTabs = ({
121
122
  isHijri={isHijri}
122
123
  onChange={handleChange}
123
124
  events={events}
125
+ recurringEvents={recurringEvents}
124
126
  />
125
127
  </Tab>
126
128
  </TabPanel>
@@ -146,8 +148,11 @@ export const SuperDate = ({
146
148
  as = "button",
147
149
  color = "primary",
148
150
  variant,
151
+ disabled,
149
152
  onChange,
150
153
  value,
154
+ "data-test-value": testValue,
155
+ "data-testid": testId,
151
156
  ...props
152
157
  }: SuperDateProps) => {
153
158
  const { currentCalendar, currentLocale } = useGlobals();
@@ -176,7 +181,14 @@ export const SuperDate = ({
176
181
  return (
177
182
  <Dropdown showArrow>
178
183
  <Tooltip content={DateUtil.relativeTooltip(relValue, isHijri)}>
179
- <E icon={CoreIcons.clock} color={color} variant={variant as AnyObject}>
184
+ <E
185
+ icon={CoreIcons.clock}
186
+ color={color}
187
+ disabled={disabled}
188
+ variant={variant as AnyObject}
189
+ data-test-value={testValue}
190
+ data-testid={testId}
191
+ >
180
192
  {DateUtil.relativeLabel(relValue, isHijri) ?? ""}
181
193
  </E>
182
194
  </Tooltip>
@@ -96,10 +96,11 @@ export interface PresetType {
96
96
  label: string;
97
97
  }
98
98
 
99
- export interface SuperDateProps {
99
+ export interface SuperDateProps extends TestProps {
100
100
  as?: "button" | "chip";
101
101
  color?: ColorType;
102
102
  variant?: "solid" | "outline" | "link";
103
+ disabled?: boolean;
103
104
  /**
104
105
  * relative date value
105
106
  */
@@ -112,6 +113,10 @@ export interface SuperDateProps {
112
113
  * list of calendar events
113
114
  */
114
115
  events?: EventType[];
116
+ /**
117
+ * list of calendar events
118
+ */
119
+ recurringEvents?: EventType[];
115
120
  /**
116
121
  * list of relative presets
117
122
  *
@@ -157,7 +157,7 @@ export namespace DateUtil {
157
157
  };
158
158
 
159
159
  export const isRelative = (date: DateLike): date is string => {
160
- return isString(date) && date.match(/^(\$\w+)([+-])(\d+)?$/) !== null;
160
+ return isString(date) && date.match(/^(\$\w+)([+-])?(\d+)?$/) !== null;
161
161
  };
162
162
 
163
163
  export const isRelativeRange = (date: DateLike): date is string => {
@@ -407,7 +407,7 @@ export namespace DateUtil {
407
407
  );
408
408
  };
409
409
 
410
- export const parseDate = (datelike: string): Date => {
410
+ export const parseDate = (datelike: DateLike): Date => {
411
411
  return _parse(datelike);
412
412
  };
413
413
 
@@ -490,7 +490,8 @@ export namespace DateUtil {
490
490
  }
491
491
  };
492
492
 
493
- const _parse = (dt: string, rounded?: "start" | "end") => {
493
+ const _parse = (dt: DateLike, rounded?: "start" | "end") => {
494
+ if (!isRelative(dt)) return new Date(dt);
494
495
  const [, part, diff = "0"] = dt.match(/^(\$\w+)([+-]\d+)?$/) ?? [];
495
496
  if (part) {
496
497
  let date = startOfMinute(new Date());