colibri-ui 0.7.110 → 0.7.113

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 (72) hide show
  1. package/Avatar/Avatar.module.css +1 -1
  2. package/Calendar/components/Month/Month.d.ts +2 -0
  3. package/Calendar/components/Month/Month.js +1 -1
  4. package/Calendar/components/Month/index.module.css +1 -1
  5. package/Calendar/index.d.ts +2 -18
  6. package/Calendar/index.js +28 -18
  7. package/Calendar/index.module.css +2 -7
  8. package/Calendar/index.props.d.ts +21 -0
  9. package/Checkbox/Checkbox.module.css +2 -2
  10. package/Datepicker/Datepicker.module.css +6 -0
  11. package/Datepicker/components/DatePicker/index.d.ts +7 -0
  12. package/Datepicker/components/DatePicker/index.js +56 -0
  13. package/Datepicker/components/DatePicker/index.module.css +47 -0
  14. package/Datepicker/components/TimePicker/Label/index.d.ts +8 -0
  15. package/Datepicker/components/TimePicker/Label/index.js +23 -0
  16. package/Datepicker/components/TimePicker/helpers.d.ts +12 -0
  17. package/Datepicker/components/TimePicker/helpers.js +41 -0
  18. package/Datepicker/components/TimePicker/index.d.ts +9 -0
  19. package/Datepicker/components/TimePicker/index.js +71 -0
  20. package/Datepicker/components/TimePicker/index.module.css +34 -0
  21. package/Datepicker/index.d.ts +8 -0
  22. package/Datepicker/index.js +31 -0
  23. package/Datepicker/package.json +6 -0
  24. package/Dropdown/index.js +25 -18
  25. package/Dropdown/index.props.d.ts +2 -0
  26. package/Menu/components/MenuItem/MenuItem.module.css +5 -5
  27. package/Menu/components/MenuItem/index.js +1 -1
  28. package/Select/index.d.ts +1 -1
  29. package/Select/index.js +5 -2
  30. package/Select/index.module.css +1 -1
  31. package/Select/index.props.d.ts +2 -0
  32. package/TimeSelect/index.d.ts +1 -1
  33. package/esm/Avatar/Avatar.module.css +1 -1
  34. package/esm/Calendar/components/Month/Month.d.ts +2 -0
  35. package/esm/Calendar/components/Month/Month.js +1 -1
  36. package/esm/Calendar/components/Month/index.module.css +1 -1
  37. package/esm/Calendar/index.d.ts +2 -18
  38. package/esm/Calendar/index.js +28 -18
  39. package/esm/Calendar/index.module.css +2 -7
  40. package/esm/Calendar/index.props.d.ts +21 -0
  41. package/esm/Checkbox/Checkbox.module.css +2 -2
  42. package/esm/Datepicker/Datepicker.module.css +6 -0
  43. package/esm/Datepicker/components/DatePicker/index.d.ts +7 -0
  44. package/esm/Datepicker/components/DatePicker/index.js +46 -0
  45. package/esm/Datepicker/components/DatePicker/index.module.css +47 -0
  46. package/esm/Datepicker/components/TimePicker/Label/index.d.ts +8 -0
  47. package/esm/Datepicker/components/TimePicker/Label/index.js +15 -0
  48. package/esm/Datepicker/components/TimePicker/helpers.d.ts +12 -0
  49. package/esm/Datepicker/components/TimePicker/helpers.js +35 -0
  50. package/esm/Datepicker/components/TimePicker/index.d.ts +9 -0
  51. package/esm/Datepicker/components/TimePicker/index.js +61 -0
  52. package/esm/Datepicker/components/TimePicker/index.module.css +34 -0
  53. package/esm/Datepicker/index.d.ts +8 -0
  54. package/esm/Datepicker/index.js +21 -0
  55. package/esm/Dropdown/index.js +25 -18
  56. package/esm/Dropdown/index.props.d.ts +2 -0
  57. package/esm/Menu/components/MenuItem/MenuItem.module.css +5 -5
  58. package/esm/Menu/components/MenuItem/index.js +1 -1
  59. package/esm/Select/index.d.ts +1 -1
  60. package/esm/Select/index.js +5 -2
  61. package/esm/Select/index.module.css +1 -1
  62. package/esm/Select/index.props.d.ts +2 -0
  63. package/esm/TimeSelect/index.d.ts +1 -1
  64. package/esm/helpers/date/index.d.ts +1 -0
  65. package/esm/helpers/date/index.js +5 -1
  66. package/esm/index.d.ts +1 -0
  67. package/esm/index.js +1 -0
  68. package/helpers/date/index.d.ts +1 -0
  69. package/helpers/date/index.js +5 -0
  70. package/index.d.ts +1 -0
  71. package/index.js +55 -53
  72. package/package.json +1 -1
@@ -5,6 +5,7 @@ export type Placement = Extract<PopperPlacement, "bottom-start" | "bottom" | "bo
5
5
  export type Trigger = "click" | "hover" | "focus";
6
6
  export type DropdownProps = {
7
7
  zIndex?: number;
8
+ fontSize?: number;
8
9
  disabled?: boolean;
9
10
  onVisibleChange?: (visible: boolean) => void;
10
11
  overlay: ReactNode;
@@ -13,5 +14,6 @@ export type DropdownProps = {
13
14
  trigger?: [Trigger, ...Trigger[]];
14
15
  visible?: boolean;
15
16
  preventOverflow?: boolean;
17
+ preventAutoClose?: boolean;
16
18
  samewidth?: boolean;
17
19
  };
@@ -2,11 +2,11 @@
2
2
  align-items: center;
3
3
  cursor: pointer;
4
4
  display: flex;
5
- font-size: 16px;
5
+ font-size: 1em;
6
6
  font-style: normal;
7
7
  font-weight: 400;
8
8
  justify-content: space-between;
9
- line-height: 22px;
9
+ line-height: 1.5;
10
10
  list-style: none;
11
11
  padding: 8px 6px;
12
12
  }
@@ -20,13 +20,13 @@
20
20
  background-color: var(--palette-white);
21
21
  }
22
22
  .item_variant_primary:hover {
23
- background-color: var(--palette-primary-1);
23
+ background-color: var(--palette-bg-2);
24
24
  }
25
25
  .item_variant_primary:active {
26
- background-color: var(--palette-primary-1);
26
+ background-color: var(--palette-bg-2);
27
27
  }
28
28
  .item_variant_primary:focus, .item_variant_primary:focus-within {
29
- background-color: var(--palette-primary-1);
29
+ background-color: var(--palette-bg-2);
30
30
  }
31
31
  .item > * {
32
32
  overflow: hidden;
@@ -26,7 +26,7 @@ var MenuItem = /*#__PURE__*/React.forwardRef(function (_a, ref) {
26
26
  ref: ref,
27
27
  "data-component": "menu-item",
28
28
  style: {
29
- backgroundColor: isSelected ? "var(--palette-primary-1, rgb(232, 240, 254))" : ""
29
+ backgroundColor: isSelected ? "var(--palette-bg-2, rgb(232, 240, 254))" : ""
30
30
  },
31
31
  "data-testid": "menuitem",
32
32
  className: clx("item", (_b = {
package/Select/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import React from "react";
2
2
  import type { SelectProps } from "./index.props";
3
- declare const Select: <T extends string>({ options, value, name, zIndex, label, hint, error, required, placeholder, disabled, size, fullWidth, className, onChange, }: SelectProps<T>) => React.JSX.Element;
3
+ declare const Select: <T extends string>({ options, value, name, zIndex, fontSize, label, hint, error, required, placeholder, disabled, size, fullWidth, customInputRoot, className, onChange, }: SelectProps<T>) => React.JSX.Element;
4
4
  export default Select;
package/Select/index.js CHANGED
@@ -24,6 +24,7 @@ var Select = function Select(_a) {
24
24
  value = _a.value,
25
25
  name = _a.name,
26
26
  zIndex = _a.zIndex,
27
+ fontSize = _a.fontSize,
27
28
  label = _a.label,
28
29
  hint = _a.hint,
29
30
  error = _a.error,
@@ -34,6 +35,7 @@ var Select = function Select(_a) {
34
35
  size = _c === void 0 ? "m" : _c,
35
36
  _d = _a.fullWidth,
36
37
  fullWidth = _d === void 0 ? false : _d,
38
+ customInputRoot = _a.customInputRoot,
37
39
  className = _a.className,
38
40
  onChange = _a.onChange;
39
41
  var _e = React.useState(false),
@@ -72,13 +74,14 @@ var Select = function Select(_a) {
72
74
  onVisibleChange: setIsOpen,
73
75
  trigger: ["click"],
74
76
  zIndex: zIndex,
77
+ fontSize: fontSize,
75
78
  disabled: !!disabled,
76
79
  overlay: /*#__PURE__*/React__default.default.createElement(index$2.default, {
77
80
  options: preparedOptions,
78
81
  onChange: onChange
79
82
  }),
80
83
  samewidth: true
81
- }, /*#__PURE__*/React__default.default.createElement(index$3.default, {
84
+ }, customInputRoot ? customInputRoot : (/*#__PURE__*/React__default.default.createElement(index$3.default, {
82
85
  error: error,
83
86
  size: size,
84
87
  className: clx(styles__default.default.root),
@@ -98,7 +101,7 @@ var Select = function Select(_a) {
98
101
  name: name,
99
102
  tabIndex: -1,
100
103
  value: value || ""
101
- }))));
104
+ })))));
102
105
  };
103
106
 
104
107
  exports.default = Select;
@@ -13,9 +13,9 @@
13
13
  .base-input {
14
14
  background: transparent;
15
15
  border: none;
16
+ display: inline-grid;
16
17
  flex: 1;
17
18
  margin: 7px 0;
18
- display: inline-grid;
19
19
  }
20
20
  .base-input ::placeholder {
21
21
  color: var(--palette-bg-2);
@@ -10,6 +10,7 @@ export interface SelectProps<T extends string> extends Omit<FormFieldProps, "chi
10
10
  options: IOption<T>[];
11
11
  value?: T;
12
12
  zIndex?: number;
13
+ fontSize?: number;
13
14
  onChange: (value: T) => void;
14
15
  disabled?: boolean;
15
16
  placeholder?: string;
@@ -17,6 +18,7 @@ export interface SelectProps<T extends string> extends Omit<FormFieldProps, "chi
17
18
  required?: boolean;
18
19
  size?: Size;
19
20
  className?: string;
21
+ customInputRoot?: ReactNode;
20
22
  name?: string;
21
23
  }
22
24
  export type Coordinates = {
@@ -1,6 +1,6 @@
1
1
  import type { SelectProps } from "../Select/index.props";
2
2
  import type { FC } from "react";
3
- interface TimeSelectProps extends Omit<SelectProps<string>, 'options'> {
3
+ interface TimeSelectProps extends Omit<SelectProps<string>, "options"> {
4
4
  interval?: 5 | 10 | 15 | 30;
5
5
  currentDate?: Date | null;
6
6
  selectedDate?: Date | null;
@@ -4,9 +4,9 @@
4
4
  transition: border-color 0.15s ease;
5
5
  }
6
6
  .avatar_bordered {
7
- padding: 3px;
8
7
  background-color: var(--palette-white);
9
8
  border: 3px solid var(--palette-bg-2);
9
+ padding: 3px;
10
10
  }
11
11
  .avatar_bordered:hover {
12
12
  border-color: var(--palette-bg-4);
@@ -1,3 +1,4 @@
1
+ import type { CalendarTitleSize } from "../../index.props";
1
2
  import type { FunctionComponent } from "react";
2
3
  export interface FCWithElements<T = {}> extends FunctionComponent<T> {
3
4
  }
@@ -10,6 +11,7 @@ type Props = {
10
11
  onDayClick: (date: string) => void;
11
12
  offsetLeft: number;
12
13
  availableDates?: string[];
14
+ titleSize?: CalendarTitleSize;
13
15
  };
14
16
  export declare const Month: FCWithElements<Props>;
15
17
  export {};
@@ -46,7 +46,7 @@ var Month = function Month(props) {
46
46
  className: clx(styles["month-name"])
47
47
  }, /*#__PURE__*/React.createElement(Typography, {
48
48
  tag: "span",
49
- size: "h3"
49
+ size: props.titleSize
50
50
  }, getUpperMonthName(props.startDate))), /*#__PURE__*/React.createElement("div", {
51
51
  className: clx(styles.table)
52
52
  }, /*#__PURE__*/React.createElement("ul", {
@@ -5,7 +5,7 @@
5
5
  }
6
6
 
7
7
  .month-name {
8
- padding: 6px 0 25px;
8
+ padding: 7px 0 25px;
9
9
  text-align: center;
10
10
  }
11
11
 
@@ -1,20 +1,4 @@
1
1
  import React from "react";
2
- import type { Preset } from "./components/Presets";
3
- type ChangePayload = {
4
- date: string;
5
- period: number;
6
- };
7
- type Props = {
8
- today: string;
9
- selectedDate?: string;
10
- selectedPeriod?: number;
11
- canSelectRange?: boolean;
12
- activeDates?: string[];
13
- datePresets?: Preset[];
14
- availableDates?: string[];
15
- onChange?: (payload: ChangePayload) => void;
16
- onCancel?: () => void;
17
- withContinueButton?: boolean;
18
- };
19
- declare const Calendar: React.FC<Props>;
2
+ import type { CalendarProps } from "./index.props";
3
+ declare const Calendar: React.FC<CalendarProps>;
20
4
  export default Calendar;
@@ -26,20 +26,25 @@ var Calendar = function Calendar(_a) {
26
26
  canSelectRange = _a.canSelectRange,
27
27
  onChange = _a.onChange,
28
28
  onCancel = _a.onCancel,
29
- _b = _a.withContinueButton,
30
- withContinueButton = _b === void 0 ? false : _b;
29
+ _b = _a.minWidth,
30
+ minWidth = _b === void 0 ? 360 : _b,
31
+ _c = _a.withContinueButton,
32
+ withContinueButton = _c === void 0 ? false : _c,
33
+ className = _a.className,
34
+ _d = _a.titleSize,
35
+ titleSize = _d === void 0 ? "h3" : _d;
31
36
  var $root = useRef(null);
32
37
  var startMonth = getStartMonth({
33
38
  today: today,
34
39
  activeDates: activeDates
35
40
  });
36
- var _c = useState(initialSelectedDate),
37
- selectedDate = _c[0],
38
- setSelectedDate = _c[1];
39
- var _d = useState(initialSelectedPeriod),
40
- selectedPeriod = _d[0],
41
- setSelectedPeriod = _d[1];
42
- var _e = useState(function () {
41
+ var _e = useState(initialSelectedDate),
42
+ selectedDate = _e[0],
43
+ setSelectedDate = _e[1];
44
+ var _f = useState(initialSelectedPeriod),
45
+ selectedPeriod = _f[0],
46
+ setSelectedPeriod = _f[1];
47
+ var _g = useState(function () {
43
48
  if (initialSelectedDate) {
44
49
  return getNumberOfMonthsBetweenDates(startMonth, initialSelectedDate);
45
50
  } else if (activeDates && activeDates.length) {
@@ -47,14 +52,14 @@ var Calendar = function Calendar(_a) {
47
52
  }
48
53
  return 0;
49
54
  }),
50
- currentMonthOffset = _e[0],
51
- setCurrentMonthOffset = _e[1];
52
- var _f = useState(0),
53
- contentWidth = _f[0],
54
- setContentWidth = _f[1];
55
- var _g = useState(true),
56
- isRangeCompleted = _g[0],
57
- setIsRangeCompleted = _g[1];
55
+ currentMonthOffset = _g[0],
56
+ setCurrentMonthOffset = _g[1];
57
+ var _h = useState(0),
58
+ contentWidth = _h[0],
59
+ setContentWidth = _h[1];
60
+ var _j = useState(true),
61
+ isRangeCompleted = _j[0],
62
+ setIsRangeCompleted = _j[1];
58
63
  useEffect(function () {
59
64
  var _a;
60
65
  setContentWidth(((_a = $root.current) === null || _a === void 0 ? void 0 : _a.offsetWidth) || 0);
@@ -139,7 +144,10 @@ var Calendar = function Calendar(_a) {
139
144
  onDayClick: handleDayClick
140
145
  };
141
146
  return /*#__PURE__*/React__default.createElement("div", {
142
- className: clx(styles.root),
147
+ className: clx(styles.root, className),
148
+ style: {
149
+ minWidth: "".concat(minWidth, "px")
150
+ },
143
151
  "data-testid": "calendar",
144
152
  ref: $root
145
153
  }, /*#__PURE__*/React__default.createElement("div", null, contentWidth ? (/*#__PURE__*/React__default.createElement("div", {
@@ -157,9 +165,11 @@ var Calendar = function Calendar(_a) {
157
165
  offsetLeft: index * contentWidth
158
166
  });
159
167
  return /*#__PURE__*/React__default.createElement(Month, __assign({}, attrs, {
168
+ titleSize: titleSize,
160
169
  key: "month-".concat(index)
161
170
  }));
162
171
  }))) : (/*#__PURE__*/React__default.createElement(Month, __assign({
172
+ titleSize: titleSize,
163
173
  today: today,
164
174
  startDate: getMonthStartDate(currentMonthOffset),
165
175
  offsetLeft: 0
@@ -3,18 +3,13 @@
3
3
  flex-direction: column;
4
4
  -moz-osx-font-smoothing: grayscale;
5
5
  -webkit-font-smoothing: antialiased;
6
- gap: 16px;
7
- min-width: 300px;
6
+ gap: 1rem;
7
+ min-width: 360px;
8
8
  overflow: hidden;
9
9
  position: relative;
10
10
  text-rendering: optimizelegibility;
11
11
  text-size-adjust: 100%;
12
12
  }
13
- @media (width >= 360px) {
14
- .root {
15
- min-width: 360px;
16
- }
17
- }
18
13
 
19
14
  .month-control {
20
15
  background: transparent;
@@ -0,0 +1,21 @@
1
+ import type { Preset } from "./components/Presets";
2
+ export type CalendarPayload = {
3
+ date: string;
4
+ period: number;
5
+ };
6
+ export type CalendarTitleSize = "xs" | "s" | "m" | "l" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
7
+ export type CalendarProps = {
8
+ today: string;
9
+ selectedDate?: string;
10
+ selectedPeriod?: number;
11
+ canSelectRange?: boolean;
12
+ activeDates?: string[];
13
+ datePresets?: Preset[];
14
+ availableDates?: string[];
15
+ onChange?: (payload: CalendarPayload) => void;
16
+ onCancel?: () => void;
17
+ withContinueButton?: boolean;
18
+ className?: string;
19
+ minWidth?: number;
20
+ titleSize?: CalendarTitleSize;
21
+ };
@@ -57,8 +57,8 @@
57
57
  box-shadow: 0 0 0 2px var(--palette-alert);
58
58
  }
59
59
  .variant_primary_checked::after {
60
- border-block-end: 2px solid var(--palette-white);
61
- border-inline-end: 2px solid var(--palette-white);
60
+ border-block-end: 2px solid var(--palette-black);
61
+ border-inline-end: 2px solid var(--palette-black);
62
62
  }
63
63
 
64
64
  .control {
@@ -0,0 +1,6 @@
1
+ .root {
2
+ display: flex;
3
+ flex-shrink: 0;
4
+ font-size: 14px;
5
+ height: 36px;
6
+ }
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ type Props = {
3
+ className?: string;
4
+ selectedDate?: string;
5
+ };
6
+ declare const DatePicker: ({ className, selectedDate }: Props) => React.JSX.Element;
7
+ export default DatePicker;
@@ -0,0 +1,46 @@
1
+ import React__default, { useState } from 'react';
2
+ import classNames from 'classnames/bind';
3
+ import Dropdown from '../../../Dropdown/index.js';
4
+ import Calendar from '../../../Calendar/index.js';
5
+ import { toISODate, toDMYDate } from '../../../helpers/date/index.js';
6
+ import styles from './index.module.css';
7
+
8
+ var clx = classNames.bind(styles);
9
+ var DatePicker = function DatePicker(_a) {
10
+ var className = _a.className,
11
+ _b = _a.selectedDate,
12
+ selectedDate = _b === void 0 ? "" : _b;
13
+ var _c = useState(selectedDate),
14
+ date = _c[0],
15
+ setDate = _c[1];
16
+ return /*#__PURE__*/React__default.createElement("div", {
17
+ className: clx(styles['input-container'], styles['input-date'], className)
18
+ }, /*#__PURE__*/React__default.createElement(Dropdown, {
19
+ placement: "bottom",
20
+ preventAutoClose: true,
21
+ fontSize: 14,
22
+ trigger: ["click"],
23
+ overlay: /*#__PURE__*/React__default.createElement(Calendar, {
24
+ minWidth: 260,
25
+ className: styles.calendar,
26
+ today: toISODate(new Date()),
27
+ titleSize: "h5",
28
+ selectedDate: date,
29
+ onChange: function onChange(payload) {
30
+ setDate(payload.date);
31
+ }
32
+ })
33
+ }, /*#__PURE__*/React__default.createElement("input", {
34
+ className: clx(styles['input-field']),
35
+ tabIndex: 0,
36
+ "aria-expanded": "false",
37
+ "aria-haspopup": "true",
38
+ "aria-invalid": "false",
39
+ autoComplete: "off",
40
+ maxLength: 7,
41
+ readOnly: true,
42
+ value: toDMYDate(date)
43
+ })));
44
+ };
45
+
46
+ export { DatePicker as default };
@@ -0,0 +1,47 @@
1
+ .input-container {
2
+ border-radius: 6px;
3
+ border: 1px solid var(--palette-bg-3);
4
+ display: flex;
5
+ justify-content: center;
6
+ align-items: center;
7
+ }
8
+
9
+ .input-field {
10
+ height: 100%;
11
+ padding: 4px;
12
+ text-align: center;
13
+ font-size: 1em;
14
+ outline: none;
15
+ border: none;
16
+ width: 100%;
17
+ background: transparent;
18
+ }
19
+
20
+ .input-date {
21
+ position: relative;
22
+ border-bottom-left-radius: 0;
23
+ border-left: none;
24
+ border-top-left-radius: 0;
25
+ width: 100px;
26
+ }
27
+
28
+ .input-date:focus-within {
29
+ border: 1px solid var(--palette-primary-3);
30
+ border-bottom-left-radius: 0;
31
+ border-left: none;
32
+ border-top-left-radius: 0;
33
+ box-shadow: 0 0 0 2px var(--palette-primary-2);
34
+ }
35
+
36
+ .input-date:focus-within::before {
37
+ content: "";
38
+ position: absolute;
39
+ height: 100%;
40
+ width: 1px;
41
+ background-color: var(--palette-primary-3);
42
+ left: 0;
43
+ }
44
+
45
+ .calendar {
46
+ max-width: 250px;
47
+ }
@@ -0,0 +1,8 @@
1
+ import type { FC } from "react";
2
+ type OptionLabelProps = {
3
+ time: string;
4
+ onClick?: () => void;
5
+ onMouseEnter?: () => void;
6
+ };
7
+ declare const OptionLabel: FC<OptionLabelProps>;
8
+ export default OptionLabel;
@@ -0,0 +1,15 @@
1
+ import React__default, { useRef } from 'react';
2
+
3
+ var OptionLabel = function OptionLabel(_a) {
4
+ var time = _a.time,
5
+ onClick = _a.onClick,
6
+ onMouseEnter = _a.onMouseEnter;
7
+ var ref = useRef(null);
8
+ return /*#__PURE__*/React__default.createElement("span", {
9
+ onClick: onClick,
10
+ onMouseEnter: onMouseEnter,
11
+ ref: ref
12
+ }, time);
13
+ };
14
+
15
+ export { OptionLabel as default };
@@ -0,0 +1,12 @@
1
+ export type Timestamp = {
2
+ time: string;
3
+ disabled?: boolean;
4
+ };
5
+ export declare const DEFAULT_TIME: {
6
+ index: number;
7
+ time: string;
8
+ };
9
+ export declare const formatTime: (date: Date) => string;
10
+ export declare const generateSuggest: (interval?: number) => Timestamp[];
11
+ export declare const checkIsBeforeNow: (time: string, currentDate?: Date | null) => boolean;
12
+ export declare const checkIsBeforeSelectedDate: (time: string, interval: number, date?: Date | null) => boolean;
@@ -0,0 +1,35 @@
1
+ import { format, addMinutes, isBefore, parse } from 'date-fns';
2
+
3
+ var day = new Date();
4
+ day.setHours(24, 0, 0, 0);
5
+ var DEFAULT_TIME = {
6
+ index: 24,
7
+ time: "12:00"
8
+ };
9
+ var formatTime = function formatTime(date) {
10
+ return format(date, "HH:mm");
11
+ };
12
+ var generateSuggest = function generateSuggest(interval) {
13
+ if (interval === void 0) {
14
+ interval = 15;
15
+ }
16
+ return new Array(24 * 60 / interval).fill(null).map(function (_, index) {
17
+ var date = addMinutes(day, index * interval);
18
+ return {
19
+ time: formatTime(date)
20
+ };
21
+ });
22
+ };
23
+ var checkIsBeforeNow = function checkIsBeforeNow(time, currentDate) {
24
+ return currentDate ? isBefore(parse(time, "HH:mm", currentDate), new Date()) : false;
25
+ };
26
+ var checkIsBeforeSelectedDate = function checkIsBeforeSelectedDate(time, interval, date) {
27
+ if (date) {
28
+ var selectedDate = new Date(date);
29
+ selectedDate.setMinutes(selectedDate.getMinutes() + interval);
30
+ return isBefore(parse(time, "HH:mm", date), selectedDate);
31
+ }
32
+ return false;
33
+ };
34
+
35
+ export { DEFAULT_TIME, checkIsBeforeNow, checkIsBeforeSelectedDate, formatTime, generateSuggest };
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ interface TimePickerProps {
3
+ className?: string;
4
+ interval?: 5 | 10 | 15 | 30;
5
+ value?: string;
6
+ selectedTime?: string;
7
+ }
8
+ declare const _default: React.MemoExoticComponent<({ className, interval, selectedTime, }: TimePickerProps) => React.JSX.Element>;
9
+ export default _default;
@@ -0,0 +1,61 @@
1
+ import { __assign } from 'tslib';
2
+ import React__default, { useState, useMemo, memo } from 'react';
3
+ import classNames from 'classnames/bind';
4
+ import Select from '../../../Select/index.js';
5
+ import styles from './index.module.css';
6
+ import { generateSuggest } from './helpers.js';
7
+ import OptionLabel from './Label/index.js';
8
+
9
+ var clx = classNames.bind(styles);
10
+ var TimePicker = function TimePicker(_a) {
11
+ var className = _a.className,
12
+ _b = _a.interval,
13
+ interval = _b === void 0 ? 30 : _b,
14
+ _c = _a.selectedTime,
15
+ selectedTime = _c === void 0 ? "" : _c;
16
+ var _d = useState(selectedTime),
17
+ time = _d[0],
18
+ setTime = _d[1];
19
+ var baseOptions = useMemo(function () {
20
+ return generateSuggest(interval).map(function (item) {
21
+ return {
22
+ value: item.time,
23
+ label: /*#__PURE__*/React__default.createElement(OptionLabel, {
24
+ time: item.time
25
+ })
26
+ };
27
+ });
28
+ }, [interval]);
29
+ var options = useMemo(function () {
30
+ return baseOptions.map(function (option) {
31
+ return __assign(__assign({}, option), {
32
+ disabled: false
33
+ });
34
+ });
35
+ }, [baseOptions, interval]);
36
+ return /*#__PURE__*/React__default.createElement(Select, {
37
+ className: className,
38
+ value: time,
39
+ options: options,
40
+ fontSize: 14,
41
+ customInputRoot: /*#__PURE__*/React__default.createElement("div", {
42
+ className: clx(styles['input-container'], styles['input-time'])
43
+ }, /*#__PURE__*/React__default.createElement("input", {
44
+ className: clx(styles['input-field']),
45
+ tabIndex: 0,
46
+ "aria-expanded": "false",
47
+ "aria-haspopup": "true",
48
+ "aria-invalid": "false",
49
+ autoComplete: "off",
50
+ maxLength: 5,
51
+ readOnly: true,
52
+ value: time
53
+ })),
54
+ onChange: function onChange(time) {
55
+ return setTime(time);
56
+ }
57
+ });
58
+ };
59
+ var TimePickerInput = /*#__PURE__*/memo(TimePicker);
60
+
61
+ export { TimePickerInput as default };
@@ -0,0 +1,34 @@
1
+ .input-container {
2
+ border-radius: 6px;
3
+ border: 1px solid var(--palette-bg-3);
4
+ display: flex;
5
+ justify-content: center;
6
+ align-items: center;
7
+ }
8
+
9
+ .input-field {
10
+ height: 100%;
11
+ padding: 4px;
12
+ text-align: center;
13
+ font-size: 1em;
14
+ outline: none;
15
+ border: none;
16
+ width: 100%;
17
+ background: transparent;
18
+ }
19
+
20
+ .input-time {
21
+ border-bottom-right-radius: 0;
22
+ border-right: 1px solid var(--palette-bg-3);
23
+ border-top-right-radius: 0;
24
+ width: 89px;
25
+ height: 100%;
26
+ }
27
+
28
+ .input-time:focus-within {
29
+ border: 1px solid var(--palette-primary-3);
30
+ border-bottom-right-radius: 0;
31
+ border-top-right-radius: 0;
32
+ box-shadow: 0 0 0 2px var(--palette-primary-2);
33
+ z-index: 3;
34
+ }
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ type Props = {
3
+ className?: string;
4
+ selectedTime?: string;
5
+ selectedDate?: string;
6
+ };
7
+ declare const Datepicker: ({ className, selectedTime, selectedDate }: Props) => React.JSX.Element;
8
+ export default Datepicker;