@wheelhouse/ui 0.2.1 → 0.2.3

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 (199) hide show
  1. package/dist/blocks/columns/columns-types.d.ts +40 -0
  2. package/dist/blocks/columns/columns-types.d.ts.map +1 -0
  3. package/dist/blocks/columns/columns-types.js +10 -0
  4. package/dist/blocks/columns/columns-utils.d.ts +13 -0
  5. package/dist/blocks/columns/columns-utils.d.ts.map +1 -0
  6. package/dist/blocks/columns/columns-utils.js +85 -0
  7. package/dist/blocks/columns/columns.d.ts +3 -0
  8. package/dist/blocks/columns/columns.d.ts.map +1 -0
  9. package/dist/blocks/columns/columns.js +79 -0
  10. package/dist/blocks/columns/columns.stories.d.ts +12 -0
  11. package/dist/blocks/columns/columns.stories.d.ts.map +1 -0
  12. package/dist/blocks/columns/columns.stories.js +67 -0
  13. package/dist/blocks/columns/index.d.ts +6 -0
  14. package/dist/blocks/columns/index.d.ts.map +1 -0
  15. package/dist/blocks/columns/index.js +3 -0
  16. package/dist/blocks/date-selector/date-selector-context.d.ts.map +1 -0
  17. package/dist/blocks/date-selector/date-selector-default-i18n.d.ts +10 -0
  18. package/dist/blocks/date-selector/date-selector-default-i18n.d.ts.map +1 -0
  19. package/dist/blocks/date-selector/date-selector-default-i18n.js +29 -0
  20. package/dist/blocks/date-selector/date-selector-i18n-resources.d.ts +11 -0
  21. package/dist/blocks/date-selector/date-selector-i18n-resources.d.ts.map +1 -0
  22. package/dist/blocks/date-selector/date-selector-i18n-resources.js +248 -0
  23. package/dist/blocks/date-selector/date-selector-i18n.shared.d.ts +12 -0
  24. package/dist/blocks/date-selector/date-selector-i18n.shared.d.ts.map +1 -0
  25. package/dist/blocks/date-selector/date-selector-i18n.shared.js +84 -0
  26. package/dist/{components → blocks}/date-selector/date-selector-parts.d.ts +9 -0
  27. package/dist/blocks/date-selector/date-selector-parts.d.ts.map +1 -0
  28. package/dist/{components → blocks}/date-selector/date-selector-parts.js +21 -6
  29. package/dist/{components → blocks}/date-selector/date-selector-types.d.ts +70 -0
  30. package/dist/blocks/date-selector/date-selector-types.d.ts.map +1 -0
  31. package/dist/{components → blocks}/date-selector/date-selector-types.js +22 -0
  32. package/dist/blocks/date-selector/date-selector-value.d.ts +81 -0
  33. package/dist/blocks/date-selector/date-selector-value.d.ts.map +1 -0
  34. package/dist/blocks/date-selector/date-selector-value.js +423 -0
  35. package/dist/{components → blocks}/date-selector/date-selector.d.ts +1 -1
  36. package/dist/blocks/date-selector/date-selector.d.ts.map +1 -0
  37. package/dist/blocks/date-selector/date-selector.js +191 -0
  38. package/dist/{components → blocks}/date-selector/date-selector.stories.d.ts +14 -0
  39. package/dist/blocks/date-selector/date-selector.stories.d.ts.map +1 -0
  40. package/dist/blocks/date-selector/date-selector.stories.js +299 -0
  41. package/dist/blocks/date-selector/index.d.ts +11 -0
  42. package/dist/blocks/date-selector/index.d.ts.map +1 -0
  43. package/dist/blocks/date-selector/index.js +8 -0
  44. package/dist/{components → blocks}/date-selector/use-date-selector.d.ts +4 -3
  45. package/dist/blocks/date-selector/use-date-selector.d.ts.map +1 -0
  46. package/dist/{components → blocks}/date-selector/use-date-selector.js +14 -8
  47. package/dist/blocks/index.d.ts +2 -0
  48. package/dist/blocks/index.d.ts.map +1 -1
  49. package/dist/blocks/index.js +2 -0
  50. package/dist/blocks/navigation/index.d.ts +4 -1
  51. package/dist/blocks/navigation/index.d.ts.map +1 -1
  52. package/dist/blocks/navigation/index.js +2 -1
  53. package/dist/blocks/navigation/navigation-types.d.ts +60 -0
  54. package/dist/blocks/navigation/navigation-types.d.ts.map +1 -0
  55. package/dist/blocks/navigation/navigation-types.js +1 -0
  56. package/dist/blocks/navigation/navigation.d.ts +9 -0
  57. package/dist/blocks/navigation/navigation.d.ts.map +1 -0
  58. package/dist/blocks/navigation/navigation.demo.d.ts +4 -0
  59. package/dist/blocks/navigation/navigation.demo.d.ts.map +1 -0
  60. package/dist/blocks/navigation/navigation.demo.js +46 -0
  61. package/dist/blocks/navigation/navigation.js +98 -0
  62. package/dist/blocks/navigation/navigation.stories.d.ts +14 -0
  63. package/dist/blocks/navigation/navigation.stories.d.ts.map +1 -0
  64. package/dist/blocks/navigation/navigation.stories.js +16 -0
  65. package/dist/components/accordion/accordion.stories.js +1 -1
  66. package/dist/components/alert/alert.stories.js +1 -1
  67. package/dist/components/alert-dialog/alert-dialog.stories.js +1 -1
  68. package/dist/components/aspect-ratio/aspect-ratio.stories.js +1 -1
  69. package/dist/components/avatar/avatar.stories.js +1 -1
  70. package/dist/components/badge/badge.d.ts +1 -1
  71. package/dist/components/badge/badge.stories.js +1 -1
  72. package/dist/components/breadcrumb/breadcrumb.stories.js +1 -1
  73. package/dist/components/button/button.d.ts +2 -2
  74. package/dist/components/button/button.stories.js +1 -1
  75. package/dist/components/button-group/button-group.d.ts +10 -4
  76. package/dist/components/button-group/button-group.d.ts.map +1 -1
  77. package/dist/components/button-group/button-group.js +15 -3
  78. package/dist/components/button-group/button-group.stories.js +1 -1
  79. package/dist/components/button-group/index.d.ts +2 -2
  80. package/dist/components/button-group/index.d.ts.map +1 -1
  81. package/dist/components/button-group/index.js +1 -1
  82. package/dist/components/calendar/calendar.stories.js +1 -1
  83. package/dist/components/card/card.stories.js +1 -1
  84. package/dist/components/checkbox/checkbox.stories.js +1 -1
  85. package/dist/components/collapsible/collapsible.stories.js +1 -1
  86. package/dist/components/combobox/combobox.stories.js +1 -1
  87. package/dist/components/command/command.stories.js +1 -1
  88. package/dist/components/context-menu/context-menu.stories.js +1 -1
  89. package/dist/components/dialog/dialog.stories.js +1 -1
  90. package/dist/components/direction/direction.stories.js +1 -1
  91. package/dist/components/drawer/drawer.stories.js +1 -1
  92. package/dist/components/dropdown-menu/dropdown-menu.d.ts +9 -2
  93. package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -1
  94. package/dist/components/dropdown-menu/dropdown-menu.js +4 -1
  95. package/dist/components/dropdown-menu/dropdown-menu.stories.js +1 -1
  96. package/dist/components/dropdown-menu/index.d.ts +2 -2
  97. package/dist/components/dropdown-menu/index.d.ts.map +1 -1
  98. package/dist/components/dropdown-menu/index.js +1 -1
  99. package/dist/components/empty/empty.stories.js +1 -1
  100. package/dist/components/field/field.stories.js +1 -1
  101. package/dist/components/filters/filter-date-metric-value.d.ts +32 -0
  102. package/dist/components/filters/filter-date-metric-value.d.ts.map +1 -0
  103. package/dist/components/filters/filter-date-metric-value.js +331 -0
  104. package/dist/components/filters/filters-defaults.d.ts +4 -0
  105. package/dist/components/filters/filters-defaults.d.ts.map +1 -1
  106. package/dist/components/filters/filters-defaults.js +59 -1
  107. package/dist/components/filters/filters-i18n-resources.d.ts +277 -0
  108. package/dist/components/filters/filters-i18n-resources.d.ts.map +1 -0
  109. package/dist/components/filters/filters-i18n-resources.js +276 -0
  110. package/dist/components/filters/filters-i18n.shared.d.ts +16 -0
  111. package/dist/components/filters/filters-i18n.shared.d.ts.map +1 -0
  112. package/dist/components/filters/filters-i18n.shared.js +111 -0
  113. package/dist/components/filters/filters-types.d.ts +33 -1
  114. package/dist/components/filters/filters-types.d.ts.map +1 -1
  115. package/dist/components/filters/filters-utils.d.ts +28 -1
  116. package/dist/components/filters/filters-utils.d.ts.map +1 -1
  117. package/dist/components/filters/filters-utils.js +102 -0
  118. package/dist/components/filters/filters.d.ts +21 -3
  119. package/dist/components/filters/filters.d.ts.map +1 -1
  120. package/dist/components/filters/filters.js +493 -290
  121. package/dist/components/filters/filters.stories.d.ts +107 -2
  122. package/dist/components/filters/filters.stories.d.ts.map +1 -1
  123. package/dist/components/filters/filters.stories.js +364 -29
  124. package/dist/components/filters/index.d.ts +3 -1
  125. package/dist/components/filters/index.d.ts.map +1 -1
  126. package/dist/components/filters/index.js +3 -1
  127. package/dist/components/frame/frame.d.ts +1 -1
  128. package/dist/components/frame/frame.stories.js +1 -1
  129. package/dist/components/hover-card/hover-card.stories.js +1 -1
  130. package/dist/components/index.d.ts +0 -1
  131. package/dist/components/index.d.ts.map +1 -1
  132. package/dist/components/index.js +0 -1
  133. package/dist/components/input/input.stories.js +1 -1
  134. package/dist/components/input-group/input-group.d.ts +2 -2
  135. package/dist/components/input-group/input-group.stories.js +1 -1
  136. package/dist/components/item/item.d.ts +2 -2
  137. package/dist/components/item/item.stories.js +1 -1
  138. package/dist/components/kbd/kbd.stories.js +1 -1
  139. package/dist/components/label/label.stories.js +1 -1
  140. package/dist/components/menubar/menubar.stories.js +1 -1
  141. package/dist/components/native-select/native-select.stories.js +1 -1
  142. package/dist/components/navigation-menu/navigation-menu.stories.js +1 -1
  143. package/dist/components/pagination/pagination.stories.js +1 -1
  144. package/dist/components/popover/popover.stories.js +1 -1
  145. package/dist/components/progress/progress.stories.js +1 -1
  146. package/dist/components/radio-group/radio-group.stories.js +1 -1
  147. package/dist/components/resizable/resizable.stories.js +1 -1
  148. package/dist/components/scroll-area/scroll-area.stories.js +1 -1
  149. package/dist/components/select/select.stories.js +1 -1
  150. package/dist/components/separator/separator.stories.js +1 -1
  151. package/dist/components/sheet/sheet.stories.js +1 -1
  152. package/dist/components/slider/slider.stories.js +1 -1
  153. package/dist/components/sonner/sonner.stories.js +1 -1
  154. package/dist/components/sortable/sortable.stories.js +1 -1
  155. package/dist/components/spinner/spinner.stories.js +1 -1
  156. package/dist/components/status-indicator/status-indicator.stories.js +1 -1
  157. package/dist/components/switch/switch.stories.js +1 -1
  158. package/dist/components/tabs/tabs.d.ts +1 -1
  159. package/dist/components/tabs/tabs.stories.js +1 -1
  160. package/dist/components/text/text.d.ts +1 -1
  161. package/dist/components/text/text.stories.js +1 -1
  162. package/dist/components/textarea/textarea.stories.js +1 -1
  163. package/dist/components/toggle/toggle.stories.js +1 -1
  164. package/dist/components/toggle-group/toggle-group.stories.js +1 -1
  165. package/dist/components/tooltip/tooltip.stories.js +1 -1
  166. package/dist/index.d.ts +1 -1
  167. package/dist/index.d.ts.map +1 -1
  168. package/dist/index.js +1 -1
  169. package/dist/tsconfig.tsbuildinfo +1 -1
  170. package/llms.txt +8 -10
  171. package/package.json +6 -2
  172. package/dist/blocks/navigation/pattern-1/index.d.ts +0 -3
  173. package/dist/blocks/navigation/pattern-1/index.d.ts.map +0 -1
  174. package/dist/blocks/navigation/pattern-1/index.js +0 -1
  175. package/dist/blocks/navigation/pattern-1/pattern-1.config.d.ts +0 -47
  176. package/dist/blocks/navigation/pattern-1/pattern-1.config.d.ts.map +0 -1
  177. package/dist/blocks/navigation/pattern-1/pattern-1.config.js +0 -55
  178. package/dist/blocks/navigation/pattern-1/pattern-1.d.ts +0 -7
  179. package/dist/blocks/navigation/pattern-1/pattern-1.d.ts.map +0 -1
  180. package/dist/blocks/navigation/pattern-1/pattern-1.js +0 -50
  181. package/dist/blocks/navigation/pattern-1/pattern-1.stories.d.ts +0 -16
  182. package/dist/blocks/navigation/pattern-1/pattern-1.stories.d.ts.map +0 -1
  183. package/dist/blocks/navigation/pattern-1/pattern-1.stories.js +0 -20
  184. package/dist/components/date-selector/date-selector-context.d.ts.map +0 -1
  185. package/dist/components/date-selector/date-selector-parts.d.ts.map +0 -1
  186. package/dist/components/date-selector/date-selector-types.d.ts.map +0 -1
  187. package/dist/components/date-selector/date-selector-value.d.ts +0 -47
  188. package/dist/components/date-selector/date-selector-value.d.ts.map +0 -1
  189. package/dist/components/date-selector/date-selector-value.js +0 -183
  190. package/dist/components/date-selector/date-selector.d.ts.map +0 -1
  191. package/dist/components/date-selector/date-selector.js +0 -144
  192. package/dist/components/date-selector/date-selector.stories.d.ts.map +0 -1
  193. package/dist/components/date-selector/date-selector.stories.js +0 -144
  194. package/dist/components/date-selector/index.d.ts +0 -7
  195. package/dist/components/date-selector/index.d.ts.map +0 -1
  196. package/dist/components/date-selector/index.js +0 -5
  197. package/dist/components/date-selector/use-date-selector.d.ts.map +0 -1
  198. /package/dist/{components → blocks}/date-selector/date-selector-context.d.ts +0 -0
  199. /package/dist/{components → blocks}/date-selector/date-selector-context.js +0 -0
@@ -1,144 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- /**
4
- * Rich date / period filter: day through year granularity, filter operators (is / before / after / between), optional free-text input,
5
- * and shared state via {@link useDateSelector}. Built on `Calendar`, tabs, and `ScrollArea`.
6
- *
7
- * Implementation is split across `date-selector-types`, `date-selector-value`, `use-date-selector`, `date-selector-context`,
8
- * and `date-selector-parts` for maintainability.
9
- */
10
- import { useCallback, useMemo, useState } from 'react';
11
- import { parse } from 'date-fns';
12
- import { cn } from '../../lib/utils';
13
- import { Button } from '../button';
14
- import { Input } from '../input';
15
- import { ScrollArea } from '../scroll-area';
16
- import { Tabs, TabsList, TabsTrigger } from '../tabs';
17
- import { X } from 'lucide-react';
18
- import { DateSelectorContext } from './date-selector-context';
19
- import { DateSelectorDayPicker, DateSelectorFilterToggle, DateSelectorPeriodGrid, DateSelectorPeriodTabs, DateSelectorYearList } from './date-selector-parts';
20
- import { DATE_SELECTOR_ROLLING_DAY_OPTIONS, DEFAULT_DATE_SELECTOR_I18N } from './date-selector-types';
21
- import { formatDateValue } from './date-selector-value';
22
- import { useDateSelector } from './use-date-selector';
23
- /**
24
- * Composite filter control for dates and calendar periods. Root element sets `data-slot="date-selector"`.
25
- */
26
- export function DateSelector({ value, onChange, allowRange = true, periodTypes, defaultPeriodType = 'day', defaultFilterType = 'is', presetMode, showInput = true, showOperators = true, showTwoMonths = false, label, className, yearRange = 5, baseYear, minYear = 2024, maxYear = 2028, yearOptions, i18n: i18nOverride, inputHint, dayDateFormat = 'MM/dd/yyyy', dayDateFormats, weekStartsOn, showRollingPresets = false, rollingDayOptions = DATE_SELECTOR_ROLLING_DAY_OPTIONS, }) {
27
- const mergedI18n = useMemo(() => ({ ...DEFAULT_DATE_SELECTOR_I18N, ...i18nOverride }), [i18nOverride]);
28
- const selector = useDateSelector({
29
- value,
30
- onChange,
31
- defaultPeriodType,
32
- defaultFilterType,
33
- presetMode,
34
- allowRange,
35
- yearRange,
36
- baseYear,
37
- minYear,
38
- maxYear,
39
- yearOptions,
40
- periodTypes,
41
- });
42
- const { periodType, filterType, selectedDate, selectedEndDate, calendarMonth, selectedYear, selectedMonth, selectedQuarter, rangeStart, rangeEnd, hoverDate, years, currentValue, setPeriodType, setFilterType, setCalendarMonth, setHoverDate, clearSelection, handleDayClick, handlePeriodSelect, handleYearSelect, isInRange, isYearInRange, selectionMode, rollingDays, applyRollingPreset, enterCustomRange, syncInternalFromParsedValue, } = selector;
43
- const defaultRollingDay = useMemo(() => {
44
- if (rollingDays !== undefined && rollingDayOptions.includes(rollingDays))
45
- return rollingDays;
46
- return rollingDayOptions[0];
47
- }, [rollingDays, rollingDayOptions]);
48
- const hideOperatorsForRolling = showRollingPresets && periodType === 'day' && (selectionMode === 'rolling-next' || selectionMode === 'rolling-last');
49
- const showDayCalendar = periodType === 'day' && selectionMode === 'custom';
50
- const displayValue = formatDateValue(currentValue, mergedI18n, dayDateFormat);
51
- const [draftInput, setDraftInput] = useState('');
52
- const [isInputFocused, setIsInputFocused] = useState(false);
53
- const summaryInputValue = inputHint ? (isInputFocused ? draftInput : displayValue) : displayValue;
54
- const dateFormats = useMemo(() => {
55
- if (dayDateFormats && dayDateFormats.length > 0) {
56
- const formats = [...dayDateFormats];
57
- if (!formats.includes(dayDateFormat)) {
58
- formats.unshift(dayDateFormat);
59
- }
60
- return formats;
61
- }
62
- const defaultFormats = [dayDateFormat, 'dd/MM/yyyy', 'yyyy-MM-dd', 'MM-dd-yyyy', 'dd-MM-yyyy'];
63
- return Array.from(new Set(defaultFormats));
64
- }, [dayDateFormat, dayDateFormats]);
65
- const parseInputValue = useCallback((text) => {
66
- if (!text.trim())
67
- return null;
68
- const trimmed = text.trim();
69
- const yearMatch = trimmed.match(/^\d{4}$/);
70
- if (yearMatch) {
71
- const year = parseInt(yearMatch[0]);
72
- if (year >= 1900 && year <= 2100) {
73
- return {
74
- period: 'year',
75
- operator: presetMode ?? filterType,
76
- year,
77
- };
78
- }
79
- }
80
- const quarterMatch = trimmed.match(/^Q([1-4])(?:\s+(\d{4}))?$/i);
81
- if (quarterMatch) {
82
- const quarter = parseInt(quarterMatch[1]) - 1;
83
- const year = quarterMatch[2] ? parseInt(quarterMatch[2]) : new Date().getFullYear();
84
- if (year >= 1900 && year <= 2100) {
85
- return {
86
- period: 'quarter',
87
- operator: presetMode ?? filterType,
88
- year,
89
- quarter,
90
- };
91
- }
92
- }
93
- for (const dateFormat of dateFormats) {
94
- try {
95
- const parsed = parse(trimmed, dateFormat, new Date());
96
- if (!isNaN(parsed.getTime())) {
97
- return {
98
- period: 'day',
99
- operator: presetMode ?? filterType,
100
- startDate: parsed,
101
- };
102
- }
103
- }
104
- catch {
105
- // Continue to next format
106
- }
107
- }
108
- return null;
109
- }, [filterType, presetMode, dateFormats]);
110
- const handleInputChange = useCallback((e) => {
111
- const newValue = e.target.value;
112
- setDraftInput(newValue);
113
- const parsed = parseInputValue(newValue);
114
- if (parsed) {
115
- onChange?.(parsed);
116
- if (value === undefined) {
117
- syncInternalFromParsedValue(parsed);
118
- }
119
- }
120
- }, [onChange, parseInputValue, syncInternalFromParsedValue, value]);
121
- const handleInputBlur = useCallback(() => {
122
- setIsInputFocused(false);
123
- if (!parseInputValue(draftInput)) {
124
- setDraftInput(displayValue);
125
- }
126
- }, [draftInput, displayValue, parseInputValue]);
127
- const summaryInput = showInput ? (_jsxs("div", { className: "relative", "data-slot": "date-selector-summary-input", children: [_jsx(Input, { type: "text", value: summaryInputValue, readOnly: !inputHint, placeholder: isInputFocused && inputHint ? inputHint : mergedI18n.placeholder, onFocus: () => {
128
- setIsInputFocused(true);
129
- setDraftInput(displayValue);
130
- }, onBlur: handleInputBlur, onChange: handleInputChange }), summaryInputValue && (_jsx("button", { type: "button", onClick: clearSelection, className: cn('absolute end-2.5 top-1/2 size-4 -translate-y-1/2 cursor-pointer rounded-xs', 'opacity-70 transition-opacity hover:opacity-100', 'ring-offset-background focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-none'), children: _jsx(X, { className: "size-4" }) }))] })) : null;
131
- return (_jsx(DateSelectorContext.Provider, { value: { i18n: mergedI18n, variant: 'outline', size: 'default' }, children: _jsxs("div", { "data-slot": "date-selector", className: cn('w-full max-w-[20rem] space-y-4', className), children: [label && (_jsx("h3", { className: "text-sm font-medium", "data-slot": "data-selector-label", children: label })), showRollingPresets && (_jsxs("div", { className: "space-y-2", "data-slot": "date-selector-rolling", children: [_jsx(Tabs, { className: "w-full", value: selectionMode === 'rolling-next' ? 'rolling-next' : selectionMode === 'rolling-last' ? 'rolling-last' : 'custom', onValueChange: (newValue) => {
132
- if (!newValue)
133
- return;
134
- if (newValue === 'rolling-next')
135
- applyRollingPreset('rolling-next', defaultRollingDay);
136
- else if (newValue === 'rolling-last')
137
- applyRollingPreset('rolling-last', defaultRollingDay);
138
- else if (newValue === 'custom')
139
- enterCustomRange();
140
- }, children: _jsxs(TabsList, { className: "flex h-9 w-full min-w-0 gap-1 bg-muted/80 p-[3px]", children: [_jsx(TabsTrigger, { value: "rolling-next", "aria-label": mergedI18n.rollingWindowTabs.next, className: "min-w-0 flex-1 px-2 py-1 text-center font-normal", children: mergedI18n.rollingWindowTabs.next }), _jsx(TabsTrigger, { value: "rolling-last", "aria-label": mergedI18n.rollingWindowTabs.last, className: "min-w-0 flex-1 px-2 py-1 text-center font-normal", children: mergedI18n.rollingWindowTabs.last }), _jsx(TabsTrigger, { value: "custom", "aria-label": mergedI18n.rollingWindowTabs.custom, className: "min-w-0 flex-1 px-2 py-1 text-center font-normal", children: mergedI18n.rollingWindowTabs.custom })] }) }), showInput && summaryInput, (selectionMode === 'rolling-next' || selectionMode === 'rolling-last') && (_jsx("div", { className: "grid grid-cols-3 gap-2", "data-slot": "date-selector-rolling-value", children: rollingDayOptions.map((d) => {
141
- const chipLabel = mergedI18n.rollingDaysChip.replace('{{count}}', String(d));
142
- return (_jsx(Button, { type: "button", size: "sm", className: "w-full min-w-0", variant: rollingDays === d ? 'default' : 'outline', onClick: () => applyRollingPreset(selectionMode === 'rolling-last' ? 'rolling-last' : 'rolling-next', d), children: chipLabel }, d));
143
- }) }))] })), showOperators && !hideOperatorsForRolling && (_jsx(DateSelectorFilterToggle, { value: filterType, onChange: setFilterType, showBetween: allowRange, presetMode: presetMode })), showInput && !showRollingPresets && summaryInput, (!showRollingPresets || selectionMode === 'custom') && (_jsx(DateSelectorPeriodTabs, { value: periodType, onChange: setPeriodType, periodTypes: periodTypes })), periodType === 'day' && showDayCalendar && (_jsx("div", { className: "w-full pb-1", children: _jsx(DateSelectorDayPicker, { currentMonth: calendarMonth, selectedDate: selectedDate, selectedEndDate: selectedEndDate, onDayClick: handleDayClick, isRange: filterType === 'between' && allowRange, onDayHover: setHoverDate, hoverDate: hoverDate, showTwoMonths: showTwoMonths, weekStartsOn: weekStartsOn, onMonthChange: setCalendarMonth }) })), periodType !== 'day' && (_jsx("div", { className: "-mr-3 w-full", children: _jsxs(ScrollArea, { className: "h-[200px] w-full pe-3", children: [periodType === 'month' && (_jsx(DateSelectorPeriodGrid, { years: years, items: mergedI18n.monthsShort, selectedYear: selectedYear, selectedValue: selectedMonth, rangeStart: rangeStart, rangeEnd: rangeEnd, isInRange: isInRange, onSelect: handlePeriodSelect, columns: 3 })), periodType === 'quarter' && (_jsx(DateSelectorPeriodGrid, { className: "space-y-3", years: years, items: mergedI18n.quarters, selectedYear: selectedYear, selectedValue: selectedQuarter, rangeStart: rangeStart, rangeEnd: rangeEnd, isInRange: isInRange, onSelect: handlePeriodSelect, columns: 4 })), periodType === 'year' && (_jsx(DateSelectorYearList, { years: years, selectedYear: selectedYear, rangeStart: rangeStart, rangeEnd: rangeEnd, isYearInRange: isYearInRange, onSelect: handleYearSelect }))] }, periodType) }))] }) }));
144
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"date-selector.stories.d.ts","sourceRoot":"","sources":["../../../src/components/date-selector/date-selector.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,KAAK,EAAE,sBAAsB,EAA0B,iBAAiB,EAAqB,MAAM,GAAG,CAAC;AAG9G,QAAA,MAAM,mBAAmB;;;;;;;CAOgD,CAAC;AAE1E,KAAK,iBAAiB,GAAG,MAAM,OAAO,mBAAmB,CAAC;AAE1D,4FAA4F;AAC5F,KAAK,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,YAAY,GAAG,cAAc,CAAC,GAAG;IAClI,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,UAAU,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC;IAC9C,YAAY,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;CAC3E,CAAC;AAYF,gGAAgG;AAChG,iBAAS,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,2CAIzD;AAED,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAoD+C,iBAAiB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoB9B,CAAC;AAE/C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC,eAAO,MAAM,OAAO,EAAE,KAerB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAM3B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAMzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC"}
@@ -1,144 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useState } from 'react';
3
- import { DateSelector } from '.';
4
- const PERIOD_TYPE_PRESETS = {
5
- all: undefined,
6
- day: ['day'],
7
- 'day-month': ['day', 'month'],
8
- month: ['month'],
9
- quarter: ['quarter'],
10
- year: ['year'],
11
- };
12
- function storyArgsToProps(args) {
13
- const { periodTypesPreset = 'all', presetMode, weekStartsOn, ...rest } = args;
14
- return {
15
- ...rest,
16
- periodTypes: PERIOD_TYPE_PRESETS[periodTypesPreset],
17
- presetMode: presetMode === 'unset' ? undefined : presetMode,
18
- weekStartsOn: weekStartsOn === 'unset' ? undefined : weekStartsOn,
19
- };
20
- }
21
- /** Storybook-only shell: maps story args to {@link DateSelector} and wires controlled state. */
22
- function DateSelectorStorybook(args) {
23
- const [value, setValue] = useState();
24
- const props = storyArgsToProps(args);
25
- return _jsx(DateSelector, { ...props, value: value, onChange: setValue });
26
- }
27
- const meta = {
28
- title: 'UI/DateSelector',
29
- component: DateSelectorStorybook,
30
- tags: ['autodocs'],
31
- parameters: {
32
- layout: 'padded',
33
- docs: {
34
- story: {
35
- height: '720px',
36
- },
37
- },
38
- },
39
- args: {
40
- label: '',
41
- showInput: true,
42
- showOperators: true,
43
- showTwoMonths: false,
44
- allowRange: true,
45
- showRollingPresets: false,
46
- defaultPeriodType: 'day',
47
- defaultFilterType: 'is',
48
- presetMode: 'unset',
49
- periodTypesPreset: 'all',
50
- minYear: 2024,
51
- maxYear: 2028,
52
- yearRange: 10,
53
- weekStartsOn: 'unset',
54
- inputHint: '',
55
- dayDateFormat: 'MM/dd/yyyy',
56
- },
57
- argTypes: {
58
- label: { control: 'text' },
59
- showInput: { control: 'boolean' },
60
- showOperators: { control: 'boolean' },
61
- showTwoMonths: { control: 'boolean' },
62
- allowRange: { control: 'boolean' },
63
- showRollingPresets: { control: 'boolean' },
64
- defaultPeriodType: {
65
- control: 'select',
66
- options: ['day', 'month', 'quarter', 'year'],
67
- },
68
- defaultFilterType: {
69
- control: 'select',
70
- options: ['is', 'before', 'after', 'between'],
71
- },
72
- presetMode: {
73
- control: 'select',
74
- options: ['unset', 'is', 'before', 'after', 'between'],
75
- description: 'Use “unset” to clear (same as leaving `presetMode` undefined).',
76
- },
77
- periodTypesPreset: {
78
- control: 'select',
79
- options: Object.keys(PERIOD_TYPE_PRESETS),
80
- description: 'Maps to the `periodTypes` prop (which tabs are enabled).',
81
- },
82
- minYear: { control: 'number' },
83
- maxYear: { control: 'number' },
84
- yearRange: { control: 'number' },
85
- baseYear: { control: 'number' },
86
- weekStartsOn: {
87
- control: 'select',
88
- options: ['unset', 0, 1, 2, 3, 4, 5, 6],
89
- description: 'Use “unset” for the default (Sunday in most locales).',
90
- },
91
- inputHint: { control: 'text' },
92
- dayDateFormat: { control: 'text' },
93
- className: { control: false },
94
- i18n: { control: false },
95
- yearOptions: { control: false },
96
- dayDateFormats: { control: false },
97
- rollingDayOptions: { control: false },
98
- },
99
- };
100
- export default meta;
101
- export const Default = {};
102
- export const DayOnly = {
103
- args: {
104
- label: 'Date',
105
- periodTypesPreset: 'day',
106
- defaultPeriodType: 'day',
107
- },
108
- render: function DayOnlyStory(args) {
109
- const [value, setValue] = useState({
110
- period: 'day',
111
- operator: 'is',
112
- startDate: new Date(2026, 3, 13),
113
- });
114
- const props = storyArgsToProps(args);
115
- return _jsx(DateSelector, { ...props, value: value, onChange: setValue });
116
- },
117
- };
118
- export const PresetBetween = {
119
- args: {
120
- label: 'In range',
121
- presetMode: 'between',
122
- defaultFilterType: 'between',
123
- },
124
- };
125
- export const NoInput = {
126
- args: {
127
- label: 'Pick in calendar',
128
- showInput: false,
129
- },
130
- };
131
- export const NoOperators = {
132
- args: {
133
- label: 'Period only (operator fixed to is)',
134
- showOperators: false,
135
- defaultFilterType: 'is',
136
- },
137
- };
138
- export const RollingPresets = {
139
- args: {
140
- label: 'Rolling window',
141
- showRollingPresets: true,
142
- defaultFilterType: 'between',
143
- },
144
- };
@@ -1,7 +0,0 @@
1
- export { computeRollingDateRange, formatDateValue } from './date-selector-value';
2
- export { DATE_SELECTOR_ROLLING_DAY_OPTIONS, DEFAULT_DATE_SELECTOR_I18N } from './date-selector-types';
3
- export { DateSelector } from './date-selector';
4
- export { useDateSelector } from './use-date-selector';
5
- export { useDateSelectorContext } from './date-selector-context';
6
- export type { DateSelectorContextValue, DateSelectorFilterType, DateSelectorI18nConfig, DateSelectorPeriodType, DateSelectorProps, DateSelectorRollingDays, DateSelectorSelectionMode, DateSelectorValue, UseDateSelectorOptions, } from './date-selector-types';
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/date-selector/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,iCAAiC,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACtG,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EACR,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,GACzB,MAAM,uBAAuB,CAAC"}
@@ -1,5 +0,0 @@
1
- export { computeRollingDateRange, formatDateValue } from './date-selector-value';
2
- export { DATE_SELECTOR_ROLLING_DAY_OPTIONS, DEFAULT_DATE_SELECTOR_I18N } from './date-selector-types';
3
- export { DateSelector } from './date-selector';
4
- export { useDateSelector } from './use-date-selector';
5
- export { useDateSelectorContext } from './date-selector-context';
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-date-selector.d.ts","sourceRoot":"","sources":["../../../src/components/date-selector/use-date-selector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAkC,MAAM,OAAO,CAAC;AAG5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAUhK;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,iBAAyB,EACzB,iBAAwB,EACxB,UAAU,EACV,UAAiB,EACjB,SAAc,EACd,QAAQ,EACR,OAAO,EACP,OAAO,EACP,WAAW,EACX,WAAW,GACd,EAAE,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;0BA4PV,sBAAsB;0BAmBtB,sBAAsB;8BAjMpB,cAAc,CAAC,IAAI,GAAG,SAAS,CAAC;iCAUhC,cAAc,CAAC,IAAI,GAAG,SAAS,CAAC;+BA/BC,cAAc,CAAC,IAAI,CAAC;2BAUxB,cAAc,CAAC,IAAI,GAAG,SAAS,CAAC;;0BA4EhE,IAAI;+BA+BH,MAAM,eAAe,MAAM;6BA0C3B,MAAM;sBA2EN,MAAM,eAAe,MAAM;0BAW3B,MAAM;+BAjLN,cAAc,GAAG,cAAc,QAAQ,uBAAuB;;0CA9E5D,iBAAiB;EA2SjC"}