@heymantle/litho 0.0.1

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 (140) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +90 -0
  3. package/dist/cjs/components/ActionList.js +267 -0
  4. package/dist/cjs/components/AnnouncementBar.js +73 -0
  5. package/dist/cjs/components/AppProvider.js +245 -0
  6. package/dist/cjs/components/Autocomplete.js +351 -0
  7. package/dist/cjs/components/Badge.js +234 -0
  8. package/dist/cjs/components/Banner.js +264 -0
  9. package/dist/cjs/components/Box.js +247 -0
  10. package/dist/cjs/components/Button.js +1018 -0
  11. package/dist/cjs/components/ButtonGroup.js +196 -0
  12. package/dist/cjs/components/Card.js +593 -0
  13. package/dist/cjs/components/Checkbox.js +175 -0
  14. package/dist/cjs/components/ChoiceList.js +160 -0
  15. package/dist/cjs/components/Collapsible.js +42 -0
  16. package/dist/cjs/components/ColorField.js +159 -0
  17. package/dist/cjs/components/ContextualSaveBar.js +53 -0
  18. package/dist/cjs/components/DatePicker.js +547 -0
  19. package/dist/cjs/components/Divider.js +50 -0
  20. package/dist/cjs/components/DropZone.js +547 -0
  21. package/dist/cjs/components/EmptyState.js +111 -0
  22. package/dist/cjs/components/Filters.js +874 -0
  23. package/dist/cjs/components/FooterHelp.js +48 -0
  24. package/dist/cjs/components/Form.js +44 -0
  25. package/dist/cjs/components/Frame.js +386 -0
  26. package/dist/cjs/components/FrameSaveBar.js +239 -0
  27. package/dist/cjs/components/Grid.js +151 -0
  28. package/dist/cjs/components/HorizontalStack.js +180 -0
  29. package/dist/cjs/components/Icon.js +346 -0
  30. package/dist/cjs/components/Image.js +191 -0
  31. package/dist/cjs/components/InlineError.js +57 -0
  32. package/dist/cjs/components/Label.js +78 -0
  33. package/dist/cjs/components/Layout.js +228 -0
  34. package/dist/cjs/components/LayoutSection.js +133 -0
  35. package/dist/cjs/components/Link.js +128 -0
  36. package/dist/cjs/components/List.js +69 -0
  37. package/dist/cjs/components/Listbox.js +211 -0
  38. package/dist/cjs/components/Loading.js +103 -0
  39. package/dist/cjs/components/Modal.js +449 -0
  40. package/dist/cjs/components/Navigation.js +331 -0
  41. package/dist/cjs/components/Page.js +529 -0
  42. package/dist/cjs/components/Pagination.js +109 -0
  43. package/dist/cjs/components/Pane.js +128 -0
  44. package/dist/cjs/components/Popover.js +365 -0
  45. package/dist/cjs/components/PopoverManager.js +34 -0
  46. package/dist/cjs/components/ProgressBar.js +124 -0
  47. package/dist/cjs/components/RadioButton.js +172 -0
  48. package/dist/cjs/components/RadioButtonCard.js +193 -0
  49. package/dist/cjs/components/RangeSlider.js +235 -0
  50. package/dist/cjs/components/ResourceList.js +105 -0
  51. package/dist/cjs/components/Select.js +300 -0
  52. package/dist/cjs/components/SkeletonText.js +130 -0
  53. package/dist/cjs/components/Spinner.js +72 -0
  54. package/dist/cjs/components/Table.js +1184 -0
  55. package/dist/cjs/components/Tabs.js +421 -0
  56. package/dist/cjs/components/Tag.js +165 -0
  57. package/dist/cjs/components/Text.js +274 -0
  58. package/dist/cjs/components/TextField.js +584 -0
  59. package/dist/cjs/components/Thumbnail.js +73 -0
  60. package/dist/cjs/components/TimePicker.js +23 -0
  61. package/dist/cjs/components/Tip.js +220 -0
  62. package/dist/cjs/components/Tooltip.js +431 -0
  63. package/dist/cjs/components/TopBar.js +210 -0
  64. package/dist/cjs/components/VerticalStack.js +161 -0
  65. package/dist/cjs/index.js +308 -0
  66. package/dist/cjs/styles/Table.js +591 -0
  67. package/dist/cjs/utilities/dates.js +339 -0
  68. package/dist/cjs/utilities/useIndexResourceState.js +175 -0
  69. package/dist/cjs/utilities/useMounted.js +67 -0
  70. package/dist/cjs/utilities/useTableScrollState.js +142 -0
  71. package/dist/esm/components/ActionList.js +216 -0
  72. package/dist/esm/components/AnnouncementBar.js +63 -0
  73. package/dist/esm/components/AppProvider.js +185 -0
  74. package/dist/esm/components/Autocomplete.js +300 -0
  75. package/dist/esm/components/Badge.js +225 -0
  76. package/dist/esm/components/Banner.js +254 -0
  77. package/dist/esm/components/Box.js +238 -0
  78. package/dist/esm/components/Button.js +967 -0
  79. package/dist/esm/components/ButtonGroup.js +137 -0
  80. package/dist/esm/components/Card.js +537 -0
  81. package/dist/esm/components/Checkbox.js +165 -0
  82. package/dist/esm/components/ChoiceList.js +145 -0
  83. package/dist/esm/components/Collapsible.js +32 -0
  84. package/dist/esm/components/ColorField.js +149 -0
  85. package/dist/esm/components/ContextualSaveBar.js +43 -0
  86. package/dist/esm/components/DatePicker.js +532 -0
  87. package/dist/esm/components/Divider.js +41 -0
  88. package/dist/esm/components/DropZone.js +537 -0
  89. package/dist/esm/components/EmptyState.js +101 -0
  90. package/dist/esm/components/Filters.js +823 -0
  91. package/dist/esm/components/FooterHelp.js +38 -0
  92. package/dist/esm/components/Form.js +35 -0
  93. package/dist/esm/components/Frame.js +376 -0
  94. package/dist/esm/components/FrameSaveBar.js +229 -0
  95. package/dist/esm/components/Grid.js +142 -0
  96. package/dist/esm/components/HorizontalStack.js +171 -0
  97. package/dist/esm/components/Icon.js +296 -0
  98. package/dist/esm/components/Image.js +141 -0
  99. package/dist/esm/components/InlineError.js +43 -0
  100. package/dist/esm/components/Label.js +63 -0
  101. package/dist/esm/components/Layout.js +164 -0
  102. package/dist/esm/components/LayoutSection.js +82 -0
  103. package/dist/esm/components/Link.js +119 -0
  104. package/dist/esm/components/List.js +61 -0
  105. package/dist/esm/components/Listbox.js +201 -0
  106. package/dist/esm/components/Loading.js +93 -0
  107. package/dist/esm/components/Modal.js +390 -0
  108. package/dist/esm/components/Navigation.js +321 -0
  109. package/dist/esm/components/Page.js +473 -0
  110. package/dist/esm/components/Pagination.js +99 -0
  111. package/dist/esm/components/Pane.js +118 -0
  112. package/dist/esm/components/Popover.js +350 -0
  113. package/dist/esm/components/PopoverManager.js +24 -0
  114. package/dist/esm/components/ProgressBar.js +114 -0
  115. package/dist/esm/components/RadioButton.js +157 -0
  116. package/dist/esm/components/RadioButtonCard.js +178 -0
  117. package/dist/esm/components/RangeSlider.js +225 -0
  118. package/dist/esm/components/ResourceList.js +95 -0
  119. package/dist/esm/components/Select.js +285 -0
  120. package/dist/esm/components/SkeletonText.js +120 -0
  121. package/dist/esm/components/Spinner.js +63 -0
  122. package/dist/esm/components/Table.js +1129 -0
  123. package/dist/esm/components/Tabs.js +366 -0
  124. package/dist/esm/components/Tag.js +151 -0
  125. package/dist/esm/components/Text.js +265 -0
  126. package/dist/esm/components/TextField.js +533 -0
  127. package/dist/esm/components/Thumbnail.js +63 -0
  128. package/dist/esm/components/TimePicker.js +13 -0
  129. package/dist/esm/components/Tip.js +169 -0
  130. package/dist/esm/components/Tooltip.js +380 -0
  131. package/dist/esm/components/TopBar.js +200 -0
  132. package/dist/esm/components/VerticalStack.js +152 -0
  133. package/dist/esm/index.js +61 -0
  134. package/dist/esm/styles/Table.js +581 -0
  135. package/dist/esm/utilities/dates.js +289 -0
  136. package/dist/esm/utilities/useIndexResourceState.js +158 -0
  137. package/dist/esm/utilities/useMounted.js +57 -0
  138. package/dist/esm/utilities/useTableScrollState.js +132 -0
  139. package/index.css +1137 -0
  140. package/package.json +53 -0
@@ -0,0 +1,532 @@
1
+ "use client";
2
+ function _array_like_to_array(arr, len) {
3
+ if (len == null || len > arr.length) len = arr.length;
4
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
5
+ return arr2;
6
+ }
7
+ function _array_with_holes(arr) {
8
+ if (Array.isArray(arr)) return arr;
9
+ }
10
+ function _array_without_holes(arr) {
11
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
12
+ }
13
+ function _define_property(obj, key, value) {
14
+ if (key in obj) {
15
+ Object.defineProperty(obj, key, {
16
+ value: value,
17
+ enumerable: true,
18
+ configurable: true,
19
+ writable: true
20
+ });
21
+ } else {
22
+ obj[key] = value;
23
+ }
24
+ return obj;
25
+ }
26
+ function _iterable_to_array(iter) {
27
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
28
+ }
29
+ function _iterable_to_array_limit(arr, i) {
30
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
31
+ if (_i == null) return;
32
+ var _arr = [];
33
+ var _n = true;
34
+ var _d = false;
35
+ var _s, _e;
36
+ try {
37
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
38
+ _arr.push(_s.value);
39
+ if (i && _arr.length === i) break;
40
+ }
41
+ } catch (err) {
42
+ _d = true;
43
+ _e = err;
44
+ } finally{
45
+ try {
46
+ if (!_n && _i["return"] != null) _i["return"]();
47
+ } finally{
48
+ if (_d) throw _e;
49
+ }
50
+ }
51
+ return _arr;
52
+ }
53
+ function _non_iterable_rest() {
54
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
55
+ }
56
+ function _non_iterable_spread() {
57
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
58
+ }
59
+ function _object_spread(target) {
60
+ for(var i = 1; i < arguments.length; i++){
61
+ var source = arguments[i] != null ? arguments[i] : {};
62
+ var ownKeys = Object.keys(source);
63
+ if (typeof Object.getOwnPropertySymbols === "function") {
64
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
65
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
66
+ }));
67
+ }
68
+ ownKeys.forEach(function(key) {
69
+ _define_property(target, key, source[key]);
70
+ });
71
+ }
72
+ return target;
73
+ }
74
+ function ownKeys(object, enumerableOnly) {
75
+ var keys = Object.keys(object);
76
+ if (Object.getOwnPropertySymbols) {
77
+ var symbols = Object.getOwnPropertySymbols(object);
78
+ if (enumerableOnly) {
79
+ symbols = symbols.filter(function(sym) {
80
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
81
+ });
82
+ }
83
+ keys.push.apply(keys, symbols);
84
+ }
85
+ return keys;
86
+ }
87
+ function _object_spread_props(target, source) {
88
+ source = source != null ? source : {};
89
+ if (Object.getOwnPropertyDescriptors) {
90
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
91
+ } else {
92
+ ownKeys(Object(source)).forEach(function(key) {
93
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
94
+ });
95
+ }
96
+ return target;
97
+ }
98
+ function _sliced_to_array(arr, i) {
99
+ return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
100
+ }
101
+ function _to_consumable_array(arr) {
102
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
103
+ }
104
+ function _type_of(obj) {
105
+ "@swc/helpers - typeof";
106
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
107
+ }
108
+ function _unsupported_iterable_to_array(o, minLen) {
109
+ if (!o) return;
110
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
111
+ var n = Object.prototype.toString.call(o).slice(8, -1);
112
+ if (n === "Object" && o.constructor) n = o.constructor.name;
113
+ if (n === "Map" || n === "Set") return Array.from(n);
114
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
115
+ }
116
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
117
+ import { useEffect, useState } from "react";
118
+ import { tv } from "tailwind-variants";
119
+ import dayjs from "dayjs";
120
+ import ReactDatePicker from "react-datepicker";
121
+ import { Icon, Listbox, Popover, Text, TextField, TimePicker } from "../index.js";
122
+ import { CalendarMinor, CalendarTimeMinor, ChevronLeftMinor, ChevronRightMinor } from "@shopify/polaris-icons";
123
+ import { enUS } from "date-fns/locale";
124
+ import { NOW_TODAY, DAY_FORMAT, DAY_TIME_FORMAT, TIME_FORMAT, MONTHS, RANGE_PRESETS, HOURLY_RANGE_PRESETS, DATE_LOCALE_MAP, isValidDate } from "../utilities/dates.js";
125
+ var calendarStyles = tv({
126
+ base: "Litho-DatePicker__Calendar relative"
127
+ });
128
+ var dayStyles = tv({
129
+ base: "Litho-DatePicker__Calendar__Day inline-block w-10 @sm:w-8 h-8 flex items-center justify-center text-center select-none",
130
+ variants: {
131
+ disabled: {
132
+ false: "cursor-pointer",
133
+ true: "text-lowest"
134
+ },
135
+ isToday: {
136
+ true: "font-semibold",
137
+ false: ""
138
+ },
139
+ isBetween: {
140
+ true: "bg-tab-active-bg hover:bg-tab-active-bg active:bg-tab-active-bg",
141
+ false: ""
142
+ }
143
+ },
144
+ compoundVariants: [
145
+ {
146
+ allowRange: true,
147
+ selected: false,
148
+ disabled: false,
149
+ isStartDate: false,
150
+ isEndDate: false,
151
+ isBetween: false,
152
+ class: "rounded-md"
153
+ },
154
+ {
155
+ allowRange: false,
156
+ class: "rounded-md"
157
+ },
158
+ {
159
+ allowRange: false,
160
+ selected: false,
161
+ disabled: false,
162
+ class: "hover"
163
+ },
164
+ {
165
+ allowRange: true,
166
+ selected: false,
167
+ disabled: false,
168
+ isBetween: false,
169
+ isStartDate: false,
170
+ isEndDate: false,
171
+ showHoverState: true,
172
+ class: "hover"
173
+ },
174
+ {
175
+ allowRange: false,
176
+ selected: true,
177
+ class: "font-semibold bg-form-accent hover:bg-form-accent dark:text-black"
178
+ },
179
+ {
180
+ allowRange: true,
181
+ selected: true,
182
+ isStartDate: true,
183
+ class: "font-semibold bg-form-accent hover:bg-form-accent rounded-l-md dark:text-black"
184
+ },
185
+ {
186
+ allowRange: true,
187
+ isEndDate: true,
188
+ class: "font-semibold bg-form-accent hover:bg-form-accent rounded-r-md dark:text-black"
189
+ }
190
+ ],
191
+ defaultVariants: {
192
+ isToday: false,
193
+ isStartDate: false,
194
+ isEndDate: false,
195
+ allowRange: false,
196
+ isBetween: false,
197
+ selected: false,
198
+ disabled: false
199
+ }
200
+ });
201
+ var buttonStyles = tv({
202
+ base: "Litho-DatePicker__Button",
203
+ variants: {
204
+ disabled: {
205
+ false: "opacity-70 cursor-pointer rounded-md p-1 hover",
206
+ true: "opacity-20 pointer-events-none"
207
+ }
208
+ }
209
+ });
210
+ var presetContainerStyles = tv({
211
+ base: "Litho-DatePicker__PresetContainer overflow-y-auto relative -left-2 max-w-full-plus-4 py-0.5 px-2 @sm:pl-0.5 @sm:pr-4 @sm:left-0 @sm:max-w-auto",
212
+ variants: {
213
+ rows: {
214
+ 4: "max-h-51",
215
+ 5: "max-h-59.5",
216
+ 6: "max-h-68"
217
+ }
218
+ }
219
+ });
220
+ var getDateRange = function(param) {
221
+ var startDate = param.startDate, endDate = param.endDate, dateRange = param.dateRange;
222
+ var start = dayjs(startDate);
223
+ var end = dayjs(endDate);
224
+ return _to_consumable_array(RANGE_PRESETS).concat(_to_consumable_array(HOURLY_RANGE_PRESETS)).find(function(preset) {
225
+ var _preset_value = preset.value, presetStart = _preset_value.start, presetEnd = _preset_value.end;
226
+ return start.isSame(presetStart, "day") && end.isSame(presetEnd, "day") && dateRange === preset.id;
227
+ }) || {
228
+ id: "custom",
229
+ value: {
230
+ start: start,
231
+ end: end
232
+ }
233
+ };
234
+ };
235
+ /**
236
+ * DatePicker component for selecting dates and date ranges.
237
+ *
238
+ * @param {Object} props - Component properties.
239
+ * @param {string} [props.label] - Label for the DatePicker.
240
+ * @param {Object|null} [props.labelAction] - Action button for the label.
241
+ * @param {function} [props.onBlur] - Callback function for when the field loses focus.
242
+ * @param {string} [props.placeholder="Select date..."] - Placeholder text.
243
+ * @param {string} [props.displayFormat] - Date format for displaying the value.
244
+ * @param {string} [props.helpText] - Help text displayed under the field.
245
+ * @param {JSX.Element|null} [props.suffix=null] - Icon or text displayed at the end of the input.
246
+ * @param {boolean} [props.isClearable=false] - Whether the input can be cleared.
247
+ * @param {string|null} [props.tooltip] - Tooltip text for the field.
248
+ * @param {string} [props.locale="en-US"] - Locale used for formatting.
249
+ * @param {Object|string|Date|null} [props.value] - Current value of the DatePicker.
250
+ * @param {boolean} [props.allowRange=false] - Whether date range selection is enabled.
251
+ * @param {JSX.Element|null} [props.activator] - Custom activator for the popover.
252
+ * @param {Date|string|null} [props.disableDatesAfter] - Dates after this value are disabled.
253
+ * @param {Date|string|null} [props.disableDatesBefore] - Dates before this value are disabled.
254
+ * @param {function} [props.onChange] - Callback function called when the date changes.
255
+ * @param {boolean} [props.multiMonth=false] - Whether multiple months are shown.
256
+ * @param {boolean} [props.disabled=false] - Whether the DatePicker is disabled.
257
+ * @param {boolean} [props.showTimePicker=false] - Whether a time picker is displayed.
258
+ * @param {boolean} [props.autoFocus=false] - Whether the input is focused automatically.
259
+ * @param {Date|null} [props.maxDate] - Maximum selectable date.
260
+ * @param {Date|null} [props.minDate] - Minimum selectable date.
261
+ * @param {boolean} [props.inline=false] - Whether the calendar is displayed inline.
262
+ * @param {string} [props.preferredAlignment="left"] - Alignment of the popover.
263
+ * @param {string} [props.preferredPosition="below"] - Position of the popover.
264
+ * @param {boolean} [props.includeHourlyPresets=false] - Whether hourly (last 30 minutes, last hour) presets are included.
265
+ * @param {Array} [props.customPresets=[]] - Custom presets to include.
266
+ * @param {JSX.Element|null} [props.footer] - An optional footer component to display at the bottom of the DatePicker.
267
+ * @returns {JSX.Element} The rendered DatePicker component.
268
+ */ function DatePicker() {
269
+ var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
270
+ var label = props.label, _props_labelAction = props.labelAction, labelAction = _props_labelAction === void 0 ? null : _props_labelAction, onBlur = props.onBlur, _props_placeholder = props.placeholder, placeholder = _props_placeholder === void 0 ? "Select date..." : _props_placeholder, _props_displayFormat = props.displayFormat, displayFormat = _props_displayFormat === void 0 ? props.showTimePicker && !props.allowRange ? DAY_TIME_FORMAT : DAY_FORMAT : _props_displayFormat, helpText = props.helpText, _props_suffix = props.suffix, suffix = _props_suffix === void 0 ? null : _props_suffix, isClearable = props.isClearable, tooltip = props.tooltip, tmp = props.locale, _locale = tmp === void 0 ? "en-US" : tmp, _value = props.value, _props_allowRange = props.allowRange, allowRange = _props_allowRange === void 0 ? false : _props_allowRange, activator = props.activator, disableDatesAfter = props.disableDatesAfter, disableDatesBefore = props.disableDatesBefore, onChange = props.onChange, multiMonth = props.multiMonth, disabled = props.disabled, showTimePicker = props.showTimePicker, autoFocus = props.autoFocus, _maxDate = props.maxDate, _minDate = props.minDate, _props_inline = props.inline, inline = _props_inline === void 0 ? false : _props_inline, _props_closeAfterDateSelection = props.closeAfterDateSelection, closeAfterDateSelection = _props_closeAfterDateSelection === void 0 ? true : _props_closeAfterDateSelection, _props_preferredAlignment = props.preferredAlignment, preferredAlignment = _props_preferredAlignment === void 0 ? "left" : _props_preferredAlignment, _props_preferredPosition = props.preferredPosition, preferredPosition = _props_preferredPosition === void 0 ? "below" : _props_preferredPosition, _props_includeHourlyPresets = props.includeHourlyPresets, includeHourlyPresets = _props_includeHourlyPresets === void 0 ? false : _props_includeHourlyPresets, _props_customPresets = props.customPresets, customPresets = _props_customPresets === void 0 ? [] : _props_customPresets, footer = props.footer;
271
+ var _useState = _sliced_to_array(useState(false), 2), showPopover = _useState[0], setShowPopover = _useState[1];
272
+ var _useState1 = _sliced_to_array(useState(4), 2), rows = _useState1[0], setRows = _useState1[1];
273
+ var startDate = isValidDate(_value === null || _value === void 0 ? void 0 : _value.start) ? _value.start : dayjs().toDate();
274
+ var endDate = isValidDate(_value === null || _value === void 0 ? void 0 : _value.end) ? _value.end : null;
275
+ var value = (typeof _value === "undefined" ? "undefined" : _type_of(_value)) === "object" && (_value === null || _value === void 0 ? void 0 : _value.start) ? _value.start : _value || null;
276
+ var maxDate = _maxDate || disableDatesAfter;
277
+ var minDate = _minDate || disableDatesBefore ? dayjs(disableDatesBefore).subtract(1, "day").toDate() : null;
278
+ var maxDateFormatted = maxDate ? dayjs(maxDate) : null;
279
+ var minDateFormatted = minDate ? dayjs(minDate) : null;
280
+ var dateRange = getDateRange({
281
+ startDate: startDate,
282
+ endDate: endDate,
283
+ dateRange: _value === null || _value === void 0 ? void 0 : _value.dateRange
284
+ });
285
+ var selectedDate = dayjs(value).format(DAY_FORMAT);
286
+ var formattedTime = dayjs(value).format(TIME_FORMAT);
287
+ var openToDate = allowRange ? startDate || endDate || value || dayjs().toDate() : value || dayjs().toDate();
288
+ var locale = DATE_LOCALE_MAP[_locale] || enUS;
289
+ useEffect(function() {
290
+ var _rows = getCalendarRows((openToDate === null || openToDate === void 0 ? void 0 : openToDate.getMonth()) || new Date().getMonth(), (openToDate === null || openToDate === void 0 ? void 0 : openToDate.getFullYear()) || new Date().getFullYear());
291
+ if (_rows !== rows) {
292
+ setRows(_rows);
293
+ }
294
+ }, [
295
+ startDate,
296
+ endDate
297
+ ]);
298
+ var renderDayContents = function(day, date) {
299
+ var dayjsDate = dayjs(date);
300
+ var formattedDate = dayjsDate.format(DAY_FORMAT);
301
+ var isToday = formattedDate === NOW_TODAY;
302
+ var isStartDate = allowRange ? formattedDate === dayjs(startDate).format(DAY_FORMAT) : false;
303
+ var isEndDate = allowRange ? formattedDate === dayjs(endDate).format(DAY_FORMAT) : false;
304
+ var isBetween = allowRange ? dayjsDate.isAfter(dayjs(startDate)) && dayjsDate.isBefore(dayjs(endDate)) : false;
305
+ var disabled = false;
306
+ if (maxDateFormatted && dayjsDate.isAfter(maxDateFormatted)) {
307
+ disabled = true;
308
+ }
309
+ if (minDateFormatted && dayjsDate.isBefore(minDateFormatted)) {
310
+ disabled = true;
311
+ }
312
+ var dayClasses = dayStyles({
313
+ selected: formattedDate === selectedDate,
314
+ isStartDate: isStartDate,
315
+ isEndDate: isEndDate,
316
+ isBetween: isBetween,
317
+ showHoverState: !allowRange || !startDate && !endDate || !!startDate && !!endDate,
318
+ disabled: disabled,
319
+ allowRange: allowRange,
320
+ isToday: isToday
321
+ });
322
+ return /*#__PURE__*/ _jsx("div", {
323
+ className: dayClasses,
324
+ children: day
325
+ });
326
+ };
327
+ var getCalendarRows = function(month, year) {
328
+ var weekStartsOn = (locale === null || locale === void 0 ? void 0 : locale.options.weekStartsOn) || 0;
329
+ var firstDayOfMonth = new Date(year, month, 1);
330
+ var lastDayOfMonth = new Date(year, month + 1, 0);
331
+ var firstDayOfWeek = (firstDayOfMonth.getDay() - weekStartsOn + 7) % 7;
332
+ var lastDayOfWeek = (lastDayOfMonth.getDay() - weekStartsOn + 7) % 7;
333
+ var daysInMonth = lastDayOfMonth.getDate();
334
+ var totalSlots = firstDayOfWeek + daysInMonth + (6 - lastDayOfWeek);
335
+ return Math.ceil(totalSlots / 7);
336
+ };
337
+ var calendarClasses = calendarStyles({
338
+ inline: inline
339
+ });
340
+ var presets = includeHourlyPresets ? _to_consumable_array(HOURLY_RANGE_PRESETS).concat(_to_consumable_array(RANGE_PRESETS)) : RANGE_PRESETS;
341
+ if (customPresets.length > 0) {
342
+ presets = _to_consumable_array(customPresets).concat(_to_consumable_array(presets));
343
+ }
344
+ var datePicker = /*#__PURE__*/ _jsxs("div", {
345
+ className: "flex flex-col @sm:flex-row items-start justify-start",
346
+ children: [
347
+ allowRange && /*#__PURE__*/ _jsx("div", {
348
+ className: presetContainerStyles({
349
+ rows: rows
350
+ }),
351
+ children: /*#__PURE__*/ _jsx(Listbox, {
352
+ displayHorizontallyOnMobile: true,
353
+ options: presets.map(function(preset) {
354
+ return {
355
+ label: preset.label,
356
+ value: preset.id,
357
+ selected: dateRange.id === preset.id,
358
+ showIcon: false,
359
+ onAction: function() {
360
+ onChange(_object_spread_props(_object_spread({}, preset.value), {
361
+ dateRange: preset
362
+ }));
363
+ }
364
+ };
365
+ })
366
+ })
367
+ }),
368
+ /*#__PURE__*/ _jsxs("div", {
369
+ className: "flex flex-col gap-2 py-0.5 w-full @sm:w-auto",
370
+ children: [
371
+ /*#__PURE__*/ _jsx(ReactDatePicker, {
372
+ className: "Litho-DatePicker",
373
+ calendarClassName: calendarClasses,
374
+ dayClassName: function() {
375
+ return "Litho-DatePicker__Day";
376
+ },
377
+ timeClassName: "Litho-DatePicker__Time",
378
+ monthClassName: "Litho-DatePicker__Month",
379
+ selectsRange: allowRange,
380
+ selected: allowRange ? startDate : value,
381
+ startDate: allowRange ? startDate : undefined,
382
+ endDate: allowRange ? endDate : undefined,
383
+ onChange: function(value) {
384
+ if (allowRange) {
385
+ var _value = _sliced_to_array(value, 2), start = _value[0], end = _value[1];
386
+ onChange({
387
+ start: start,
388
+ end: end,
389
+ dateRange: getDateRange(start, end)
390
+ });
391
+ } else {
392
+ onChange({
393
+ date: value,
394
+ dateRange: null
395
+ });
396
+ if (closeAfterDateSelection && !showTimePicker) {
397
+ setShowPopover(false);
398
+ }
399
+ }
400
+ },
401
+ openToDate: openToDate,
402
+ disabled: disabled,
403
+ inline: true,
404
+ monthsShown: multiMonth ? 2 : 1,
405
+ locale: locale,
406
+ renderDayContents: renderDayContents,
407
+ maxDate: maxDate,
408
+ minDate: minDate,
409
+ renderCustomHeader: function(param) {
410
+ var date = param.date, decreaseMonth = param.decreaseMonth, increaseMonth = param.increaseMonth, prevMonthButtonDisabled = param.prevMonthButtonDisabled, nextMonthButtonDisabled = param.nextMonthButtonDisabled;
411
+ var _date = dayjs(date);
412
+ var monthLabel = MONTHS[_date.month()].name;
413
+ var yearLabel = _date.year();
414
+ var showYearLabel = true;
415
+ var _rows = getCalendarRows(_date.month(), _date.year());
416
+ if (_rows !== rows) {
417
+ setRows(_rows);
418
+ }
419
+ return /*#__PURE__*/ _jsxs("div", {
420
+ className: "flex justify-between items-center min-h-8",
421
+ children: [
422
+ /*#__PURE__*/ _jsx("button", {
423
+ onClick: decreaseMonth,
424
+ disabled: prevMonthButtonDisabled,
425
+ className: buttonStyles({
426
+ disabled: prevMonthButtonDisabled
427
+ }),
428
+ children: /*#__PURE__*/ _jsx(Icon, {
429
+ source: ChevronLeftMinor
430
+ })
431
+ }),
432
+ /*#__PURE__*/ _jsx("div", {
433
+ children: /*#__PURE__*/ _jsxs(Text, {
434
+ children: [
435
+ monthLabel,
436
+ " ",
437
+ showYearLabel ? yearLabel : null
438
+ ]
439
+ })
440
+ }),
441
+ /*#__PURE__*/ _jsx("button", {
442
+ onClick: increaseMonth,
443
+ disabled: nextMonthButtonDisabled,
444
+ className: buttonStyles({
445
+ disabled: nextMonthButtonDisabled
446
+ }),
447
+ children: /*#__PURE__*/ _jsx(Icon, {
448
+ source: ChevronRightMinor
449
+ })
450
+ })
451
+ ]
452
+ });
453
+ }
454
+ }),
455
+ showTimePicker && !allowRange && /*#__PURE__*/ _jsx(TimePicker, {
456
+ value: formattedTime,
457
+ onChange: function(time) {
458
+ onChange({
459
+ date: dayjs("".concat(dayjs(value).format(DAY_FORMAT), " ").concat(time)).toDate(),
460
+ dateRange: null
461
+ });
462
+ }
463
+ })
464
+ ]
465
+ })
466
+ ]
467
+ });
468
+ if (inline) {
469
+ return datePicker;
470
+ }
471
+ var startDateFormatted = startDate ? dayjs(startDate).format(displayFormat) : null;
472
+ var endDateFormatted = endDate ? dayjs(endDate).format(displayFormat) : null;
473
+ var displayValue = allowRange ? "".concat(startDateFormatted).concat(endDateFormatted && endDateFormatted !== startDateFormatted ? " to ".concat(endDateFormatted) : "") : value ? dayjs(value).format(displayFormat) : "";
474
+ return /*#__PURE__*/ _jsx(Popover, {
475
+ active: showPopover,
476
+ activatorDisplayType: "block",
477
+ maxWidth: "datePicker",
478
+ activator: activator ? /*#__PURE__*/ _jsx("div", {
479
+ onClick: function() {
480
+ return setShowPopover(!showPopover);
481
+ },
482
+ children: activator
483
+ }) : /*#__PURE__*/ _jsx("div", {
484
+ onClick: function() {
485
+ return setShowPopover(!showPopover);
486
+ },
487
+ children: /*#__PURE__*/ _jsx(TextField, {
488
+ label: label,
489
+ labelAction: labelAction,
490
+ value: displayValue,
491
+ helpText: helpText,
492
+ autoComplete: "off",
493
+ placeholder: placeholder,
494
+ tooltip: tooltip,
495
+ icon: showTimePicker && !allowRange ? CalendarTimeMinor : CalendarMinor,
496
+ suffix: suffix,
497
+ onBlur: onBlur,
498
+ clearButton: isClearable,
499
+ onClearButtonClick: function() {
500
+ if (allowRange) {
501
+ onChange({
502
+ start: null,
503
+ end: null,
504
+ dateRange: null
505
+ });
506
+ } else {
507
+ onChange({
508
+ date: null
509
+ });
510
+ }
511
+ },
512
+ autoFocus: autoFocus,
513
+ disabled: disabled
514
+ })
515
+ }),
516
+ onClose: function() {
517
+ return setShowPopover(false);
518
+ },
519
+ preferredAlignment: preferredAlignment,
520
+ preferredPosition: preferredPosition,
521
+ children: /*#__PURE__*/ _jsxs("div", {
522
+ className: "flex flex-col p-2",
523
+ children: [
524
+ /*#__PURE__*/ _jsx("div", {
525
+ children: datePicker
526
+ }),
527
+ footer && footer
528
+ ]
529
+ })
530
+ });
531
+ }
532
+ export default DatePicker;
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { tv } from "tailwind-variants";
3
+ var styles = tv({
4
+ base: "Litho-Divider h-px",
5
+ variants: {
6
+ color: {
7
+ default: "bg-edge-default",
8
+ subdued: "bg-edge-subdued"
9
+ }
10
+ },
11
+ defaultVariants: {
12
+ color: "default"
13
+ }
14
+ });
15
+ /**
16
+ * Renders a divider element with customizable color variants.
17
+ *
18
+ * @component
19
+ * @param {Object} props - Component properties.
20
+ * @param {'default' | 'subdued'} [props.color='default'] - The color variant to apply to the divider.
21
+ * @returns {JSX.Element} A styled `<div>` element serving as a divider.
22
+ *
23
+ * @example
24
+ * // Renders a default color divider
25
+ * <Divider />
26
+ *
27
+ * @example
28
+ * // Renders a subdued color divider
29
+ * <Divider color="subdued" />
30
+ */ function Divider() {
31
+ var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
32
+ var color = props.color;
33
+ var classes = styles({
34
+ color: color
35
+ });
36
+ return /*#__PURE__*/ _jsx("div", {
37
+ className: classes
38
+ });
39
+ }
40
+ ;
41
+ export default Divider;