@adam-milo/ui 1.0.129 → 1.0.131

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 (318) hide show
  1. package/dist/index.cjs +1 -1
  2. package/dist/index.js +1 -1
  3. package/dist/index10.cjs +1 -1
  4. package/dist/index10.js +2 -2
  5. package/dist/index100.cjs +1 -1
  6. package/dist/index100.js +1 -1
  7. package/dist/index101.cjs +1 -1
  8. package/dist/index101.js +1 -1
  9. package/dist/index102.cjs +1 -1
  10. package/dist/index102.js +1 -1
  11. package/dist/index103.cjs +1 -1
  12. package/dist/index103.js +1 -1
  13. package/dist/index104.cjs +1 -1
  14. package/dist/index104.js +1 -1
  15. package/dist/index105.cjs +1 -1
  16. package/dist/index105.js +1 -1
  17. package/dist/index106.cjs +1 -1
  18. package/dist/index106.js +1 -1
  19. package/dist/index107.cjs +1 -1
  20. package/dist/index107.js +1 -1
  21. package/dist/index108.cjs +1 -0
  22. package/dist/index108.js +1 -0
  23. package/dist/index109.cjs +1 -0
  24. package/dist/index109.js +1 -0
  25. package/dist/index11.cjs +1 -1
  26. package/dist/index11.js +1 -1
  27. package/dist/index110.cjs +1 -0
  28. package/dist/index110.js +1 -0
  29. package/dist/index111.cjs +1 -0
  30. package/dist/index111.js +1 -0
  31. package/dist/index112.cjs +1 -0
  32. package/dist/index112.js +1 -0
  33. package/dist/index113.cjs +1 -0
  34. package/dist/index113.js +1 -0
  35. package/dist/index114.cjs +1 -0
  36. package/dist/index114.js +1 -0
  37. package/dist/index115.cjs +1 -0
  38. package/dist/index115.js +1 -0
  39. package/dist/index116.cjs +1 -0
  40. package/dist/index116.js +1 -0
  41. package/dist/index117.cjs +1 -0
  42. package/dist/index117.js +1 -0
  43. package/dist/index118.cjs +1 -0
  44. package/dist/index118.js +1 -0
  45. package/dist/index119.cjs +1 -0
  46. package/dist/index119.js +1 -0
  47. package/dist/index12.cjs +1 -1
  48. package/dist/index12.js +1 -1
  49. package/dist/index120.cjs +1 -0
  50. package/dist/index120.js +1 -0
  51. package/dist/index121.cjs +1 -0
  52. package/dist/index121.js +1 -0
  53. package/dist/index122.cjs +1 -0
  54. package/dist/index122.js +1 -0
  55. package/dist/index123.cjs +1 -0
  56. package/dist/index123.js +1 -0
  57. package/dist/index124.cjs +1 -0
  58. package/dist/index124.js +1 -0
  59. package/dist/index125.cjs +1 -0
  60. package/dist/index125.js +1 -0
  61. package/dist/index126.cjs +1 -0
  62. package/dist/index126.js +1 -0
  63. package/dist/index13.cjs +1 -1
  64. package/dist/index13.js +1 -1
  65. package/dist/index14.cjs +1 -1
  66. package/dist/index14.js +1 -1
  67. package/dist/index15.cjs +1 -1
  68. package/dist/index15.js +1 -1
  69. package/dist/index16.cjs +1 -1
  70. package/dist/index16.js +1 -1
  71. package/dist/index17.cjs +1 -1
  72. package/dist/index17.js +1 -1
  73. package/dist/index18.cjs +1 -1
  74. package/dist/index18.js +8 -3
  75. package/dist/index19.cjs +1 -1
  76. package/dist/index19.js +3 -6
  77. package/dist/index20.cjs +1 -1
  78. package/dist/index20.js +6 -2
  79. package/dist/index21.cjs +1 -1
  80. package/dist/index21.js +2 -2
  81. package/dist/index22.cjs +1 -1
  82. package/dist/index22.js +2 -2
  83. package/dist/index23.cjs +1 -1
  84. package/dist/index23.js +2 -2
  85. package/dist/index24.cjs +1 -1
  86. package/dist/index24.js +2 -2
  87. package/dist/index25.cjs +1 -1
  88. package/dist/index25.js +2 -2
  89. package/dist/index26.cjs +1 -1
  90. package/dist/index26.js +2 -2
  91. package/dist/index27.cjs +1 -1
  92. package/dist/index27.js +2 -2
  93. package/dist/index28.cjs +1 -1
  94. package/dist/index28.js +2 -2
  95. package/dist/index29.cjs +1 -1
  96. package/dist/index29.js +2 -2
  97. package/dist/index3.cjs +1 -1
  98. package/dist/index3.js +1 -1
  99. package/dist/index30.cjs +1 -1
  100. package/dist/index30.js +2 -2
  101. package/dist/index31.cjs +1 -1
  102. package/dist/index31.js +2 -4
  103. package/dist/index32.cjs +1 -1
  104. package/dist/index32.js +4 -2
  105. package/dist/index33.cjs +1 -1
  106. package/dist/index33.js +2 -2
  107. package/dist/index34.cjs +1 -1
  108. package/dist/index34.js +2 -4
  109. package/dist/index35.cjs +1 -1
  110. package/dist/index35.js +4 -8
  111. package/dist/index36.cjs +1 -1
  112. package/dist/index36.js +8 -2
  113. package/dist/index37.cjs +1 -1
  114. package/dist/index37.js +2 -4
  115. package/dist/index38.cjs +1 -1
  116. package/dist/index38.js +4 -8
  117. package/dist/index39.cjs +1 -1
  118. package/dist/index39.js +8 -8
  119. package/dist/index4.cjs +1 -1
  120. package/dist/index4.js +1 -1
  121. package/dist/index40.cjs +1 -1
  122. package/dist/index40.js +8 -9
  123. package/dist/index41.cjs +1 -1
  124. package/dist/index41.js +11 -2
  125. package/dist/index42.cjs +1 -1
  126. package/dist/index42.js +2 -5
  127. package/dist/index43.cjs +1 -1
  128. package/dist/index43.js +5 -2
  129. package/dist/index44.cjs +1 -1
  130. package/dist/index44.js +2 -10
  131. package/dist/index45.cjs +1 -1
  132. package/dist/index45.js +2 -9
  133. package/dist/index46.cjs +1 -1
  134. package/dist/index46.js +3 -2
  135. package/dist/index47.cjs +1 -1
  136. package/dist/index47.js +3 -2
  137. package/dist/index48.cjs +1 -1
  138. package/dist/index48.js +24 -2
  139. package/dist/index49.cjs +1 -1
  140. package/dist/index49.js +10 -4
  141. package/dist/index5.cjs +1 -1
  142. package/dist/index5.js +1 -1
  143. package/dist/index50.cjs +1 -1
  144. package/dist/index50.js +13 -2
  145. package/dist/index51.cjs +1 -1
  146. package/dist/index51.js +38 -3
  147. package/dist/index52.cjs +1 -1
  148. package/dist/index52.js +10 -2
  149. package/dist/index53.cjs +1 -1
  150. package/dist/index53.js +1 -2
  151. package/dist/index54.cjs +1 -1
  152. package/dist/index54.js +9 -2
  153. package/dist/index55.cjs +1 -1
  154. package/dist/index55.js +2 -2
  155. package/dist/index56.cjs +1 -1
  156. package/dist/index56.js +2 -10
  157. package/dist/index57.cjs +1 -1
  158. package/dist/index57.js +2 -11
  159. package/dist/index58.cjs +1 -1
  160. package/dist/index58.js +4 -1
  161. package/dist/index59.cjs +1 -1
  162. package/dist/index59.js +2 -1
  163. package/dist/index6.cjs +1 -1
  164. package/dist/index6.js +1 -1
  165. package/dist/index60.cjs +1 -1
  166. package/dist/index60.js +3 -1
  167. package/dist/index61.cjs +1 -1
  168. package/dist/index61.js +2 -1
  169. package/dist/index62.cjs +1 -1
  170. package/dist/index62.js +2 -1
  171. package/dist/index63.cjs +1 -1
  172. package/dist/index63.js +2 -1
  173. package/dist/index64.cjs +1 -1
  174. package/dist/index64.js +2 -1
  175. package/dist/index65.cjs +1 -1
  176. package/dist/index65.js +10 -9
  177. package/dist/index66.cjs +1 -1
  178. package/dist/index66.js +11 -1
  179. package/dist/index67.cjs +1 -1
  180. package/dist/index67.js +1 -1
  181. package/dist/index68.cjs +1 -1
  182. package/dist/index68.js +1 -1
  183. package/dist/index69.cjs +1 -1
  184. package/dist/index69.js +1 -1
  185. package/dist/index7.cjs +1 -1
  186. package/dist/index7.js +1 -1
  187. package/dist/index70.cjs +1 -1
  188. package/dist/index70.js +1 -2
  189. package/dist/index71.cjs +1 -1
  190. package/dist/index71.js +1 -1
  191. package/dist/index72.cjs +1 -1
  192. package/dist/index72.js +1 -1
  193. package/dist/index73.cjs +1 -1
  194. package/dist/index73.js +1 -1
  195. package/dist/index74.cjs +1 -1
  196. package/dist/index74.js +9 -1
  197. package/dist/index75.cjs +1 -1
  198. package/dist/index75.js +1 -7
  199. package/dist/index76.cjs +1 -1
  200. package/dist/index76.js +1 -1
  201. package/dist/index77.cjs +1 -1
  202. package/dist/index77.js +1 -1
  203. package/dist/index78.cjs +1 -1
  204. package/dist/index78.js +1 -1
  205. package/dist/index79.cjs +1 -1
  206. package/dist/index79.js +2 -1
  207. package/dist/index8.cjs +1 -1
  208. package/dist/index8.js +1 -1
  209. package/dist/index80.cjs +1 -1
  210. package/dist/index80.js +1 -1
  211. package/dist/index81.cjs +1 -1
  212. package/dist/index81.js +1 -1
  213. package/dist/index82.cjs +1 -1
  214. package/dist/index82.js +1 -1
  215. package/dist/index83.cjs +1 -1
  216. package/dist/index83.js +1 -1
  217. package/dist/index84.cjs +1 -1
  218. package/dist/index84.js +1 -1
  219. package/dist/index85.cjs +1 -1
  220. package/dist/index85.js +7 -1
  221. package/dist/index86.cjs +1 -1
  222. package/dist/index86.js +1 -1
  223. package/dist/index87.cjs +1 -1
  224. package/dist/index87.js +1 -1
  225. package/dist/index88.cjs +1 -1
  226. package/dist/index88.js +1 -1
  227. package/dist/index89.cjs +1 -1
  228. package/dist/index89.js +1 -1
  229. package/dist/index9.cjs +1 -1
  230. package/dist/index9.js +1 -1
  231. package/dist/index90.cjs +1 -1
  232. package/dist/index90.js +1 -1
  233. package/dist/index91.cjs +1 -1
  234. package/dist/index91.js +1 -1
  235. package/dist/index92.cjs +1 -1
  236. package/dist/index92.js +1 -1
  237. package/dist/index93.cjs +1 -1
  238. package/dist/index93.js +1 -1
  239. package/dist/index94.cjs +1 -1
  240. package/dist/index94.js +1 -1
  241. package/dist/index95.cjs +1 -1
  242. package/dist/index95.js +1 -1
  243. package/dist/index96.cjs +1 -1
  244. package/dist/index96.js +1 -1
  245. package/dist/index97.cjs +1 -1
  246. package/dist/index97.js +1 -1
  247. package/dist/index98.cjs +1 -1
  248. package/dist/index98.js +1 -1
  249. package/dist/index99.cjs +1 -1
  250. package/dist/index99.js +1 -1
  251. package/dist/src/components/data-display/check-filter/CheckFilter.component.d.ts +8 -0
  252. package/dist/src/components/data-display/check-filter/CheckFilter.component.d.ts.map +1 -0
  253. package/dist/src/components/data-display/check-filter/CheckFilter.styles.d.ts +6 -0
  254. package/dist/src/components/data-display/check-filter/CheckFilter.styles.d.ts.map +1 -0
  255. package/dist/src/components/data-display/check-filter/CheckFilter.types.d.ts +68 -0
  256. package/dist/src/components/data-display/check-filter/CheckFilter.types.d.ts.map +1 -0
  257. package/dist/src/components/data-display/datatable/DataTable.component.d.ts.map +1 -1
  258. package/dist/src/components/data-display/datatable/DataTable.styles.d.ts +2 -0
  259. package/dist/src/components/data-display/datatable/DataTable.styles.d.ts.map +1 -1
  260. package/dist/src/components/data-display/datatable/DataTable.types.d.ts +50 -1
  261. package/dist/src/components/data-display/datatable/DataTable.types.d.ts.map +1 -1
  262. package/dist/src/components/data-display/date-filter/DateFilter.component.d.ts +9 -0
  263. package/dist/src/components/data-display/date-filter/DateFilter.component.d.ts.map +1 -0
  264. package/dist/src/components/data-display/date-filter/DateFilter.styles.d.ts +96 -0
  265. package/dist/src/components/data-display/date-filter/DateFilter.styles.d.ts.map +1 -0
  266. package/dist/src/components/data-display/date-filter/DateFilter.types.d.ts +102 -0
  267. package/dist/src/components/data-display/date-filter/DateFilter.types.d.ts.map +1 -0
  268. package/dist/src/components/data-display/date-filter/dateUtils.d.ts +100 -0
  269. package/dist/src/components/data-display/date-filter/dateUtils.d.ts.map +1 -0
  270. package/dist/src/components/data-display/filter/Filter.component.d.ts +21 -0
  271. package/dist/src/components/data-display/filter/Filter.component.d.ts.map +1 -0
  272. package/dist/src/components/data-display/filter/Filter.styles.d.ts +27 -0
  273. package/dist/src/components/data-display/filter/Filter.styles.d.ts.map +1 -0
  274. package/dist/src/components/data-display/filter/Filter.types.d.ts +141 -0
  275. package/dist/src/components/data-display/filter/Filter.types.d.ts.map +1 -0
  276. package/dist/src/components/data-display/filter-button/FilterButton.component.d.ts +5 -0
  277. package/dist/src/components/data-display/filter-button/FilterButton.component.d.ts.map +1 -0
  278. package/dist/src/components/data-display/filter-button/FilterButton.styles.d.ts +10 -0
  279. package/dist/src/components/data-display/filter-button/FilterButton.styles.d.ts.map +1 -0
  280. package/dist/src/components/data-display/filter-button/FilterButton.types.d.ts +18 -0
  281. package/dist/src/components/data-display/filter-button/FilterButton.types.d.ts.map +1 -0
  282. package/dist/src/components/data-display/numeric-filter/NumericFilter.component.d.ts +8 -0
  283. package/dist/src/components/data-display/numeric-filter/NumericFilter.component.d.ts.map +1 -0
  284. package/dist/src/components/data-display/numeric-filter/NumericFilter.styles.d.ts +14 -0
  285. package/dist/src/components/data-display/numeric-filter/NumericFilter.styles.d.ts.map +1 -0
  286. package/dist/src/components/data-display/numeric-filter/NumericFilter.types.d.ts +53 -0
  287. package/dist/src/components/data-display/numeric-filter/NumericFilter.types.d.ts.map +1 -0
  288. package/dist/src/components/data-display/range-filter/RangeFilter.component.d.ts +8 -0
  289. package/dist/src/components/data-display/range-filter/RangeFilter.component.d.ts.map +1 -0
  290. package/dist/src/components/data-display/range-filter/RangeFilter.styles.d.ts +18 -0
  291. package/dist/src/components/data-display/range-filter/RangeFilter.styles.d.ts.map +1 -0
  292. package/dist/src/components/data-display/range-filter/RangeFilter.types.d.ts +44 -0
  293. package/dist/src/components/data-display/range-filter/RangeFilter.types.d.ts.map +1 -0
  294. package/dist/src/components/data-display/sort-button/SortButton.component.d.ts +5 -0
  295. package/dist/src/components/data-display/sort-button/SortButton.component.d.ts.map +1 -0
  296. package/dist/src/components/data-display/sort-button/SortButton.styles.d.ts +5 -0
  297. package/dist/src/components/data-display/sort-button/SortButton.styles.d.ts.map +1 -0
  298. package/dist/src/components/data-display/sort-button/SortButton.types.d.ts +27 -0
  299. package/dist/src/components/data-display/sort-button/SortButton.types.d.ts.map +1 -0
  300. package/dist/src/components/forms/numeric-input/NumericInput.component.d.ts.map +1 -1
  301. package/dist/src/components/forms/numeric-input/NumericInput.types.d.ts +14 -0
  302. package/dist/src/components/forms/numeric-input/NumericInput.types.d.ts.map +1 -1
  303. package/dist/src/components/forms/slider/Slider.component.d.ts +5 -0
  304. package/dist/src/components/forms/slider/Slider.component.d.ts.map +1 -0
  305. package/dist/src/components/forms/slider/Slider.styles.d.ts +21 -0
  306. package/dist/src/components/forms/slider/Slider.styles.d.ts.map +1 -0
  307. package/dist/src/components/forms/slider/Slider.types.d.ts +72 -0
  308. package/dist/src/components/forms/slider/Slider.types.d.ts.map +1 -0
  309. package/dist/src/components/overlays/popover/Popover.component.d.ts +27 -0
  310. package/dist/src/components/overlays/popover/Popover.component.d.ts.map +1 -0
  311. package/dist/src/components/overlays/popover/Popover.styles.d.ts +2 -0
  312. package/dist/src/components/overlays/popover/Popover.styles.d.ts.map +1 -0
  313. package/dist/src/components/overlays/popover/Popover.types.d.ts +18 -0
  314. package/dist/src/components/overlays/popover/Popover.types.d.ts.map +1 -0
  315. package/dist/src/index.d.ts +18 -0
  316. package/dist/src/index.d.ts.map +1 -1
  317. package/dist/styles.css +1 -1
  318. package/package.json +4 -2
@@ -0,0 +1,96 @@
1
+ /**
2
+ * `DateFilter` styles — composed from the same design tokens as the rest of
3
+ * the filter family. The popover is wider than the default filter min
4
+ * (`--size-2xs`) because two months sit side-by-side, so we override the
5
+ * `FilterContent` width to `--size-lg`. Everything else (typography,
6
+ * border-radius, spacing) comes straight from `var(--…)` tokens.
7
+ *
8
+ * Figma reference: `1 — SaaS / 45054:20258`.
9
+ *
10
+ * The cell sizes (40 × 40 day cells, 32 px month/year selectors, 40 px
11
+ * chevron buttons) come from the Figma frame. We express them via the
12
+ * `--spacing-*` token scale (`--spacing-10` = 2.5 rem = 40 px) rather than
13
+ * raw px to stay consistent with the rest of the system — the only literal
14
+ * px values left are 1-px borders.
15
+ */
16
+ /** Popover content override — wider than the default to fit two months. */
17
+ export declare const contentStyles: string;
18
+ export declare const presetsRowStyles: string;
19
+ export declare const presetButtonStyles: string;
20
+ /**
21
+ * Active preset chip. The text color uses `--color-button-blue-pressed`
22
+ * (a darker brand-blue variant) so it clears WCAG AA contrast against the
23
+ * 8 %-tint background — the regular `--color-button-blue` fails 4.5 : 1
24
+ * here (~2.9 : 1).
25
+ */
26
+ export declare const presetButtonActiveStyles: string;
27
+ export declare const calendarsRowStyles: string;
28
+ export declare const calendarColumnStyles: string;
29
+ export declare const calendarColumnLeftStyles: string;
30
+ export declare const calendarColumnRightStyles: string;
31
+ /** Vertical divider between the two month columns. */
32
+ export declare const calendarDividerStyles: string;
33
+ export declare const calendarHeaderStyles: string;
34
+ export declare const chevronButtonStyles: string;
35
+ export declare const headerSelectsGroupStyles: string;
36
+ /**
37
+ * Month / year picker buttons — Figma shows them as compact "search-bar"
38
+ * style boxes (1-px border, 8-px radius, white background). Use the
39
+ * design system's existing input chrome so focus rings, hover, and
40
+ * disabled states stay consistent with `Input`.
41
+ */
42
+ export declare const headerSelectStyles: string;
43
+ export declare const headerSelectValueStyles: string;
44
+ export declare const headerSelectIconStyles: string;
45
+ export declare const weekdayRowStyles: string;
46
+ export declare const weekdayCellStyles: string;
47
+ export declare const monthGridStyles: string;
48
+ export declare const weekRowStyles: string;
49
+ /**
50
+ * `gridcell` wrapper around each day button. Per WAI-ARIA, the cell role
51
+ * belongs to a non-button container; placing `role="gridcell"` directly on
52
+ * the `<button>` overrides its native role and AT announces "gridcell"
53
+ * instead of "button". Wrapping keeps both semantics intact.
54
+ */
55
+ export declare const dayCellWrapperStyles: string;
56
+ /**
57
+ * Footer parse-error message. Screen-reader-only — the input itself flips
58
+ * `aria-invalid`, so the error text is announced via `aria-describedby`
59
+ * but never duplicated visually (the input's red border is the visual cue).
60
+ */
61
+ export declare const footerInputErrorMessageStyles: string;
62
+ /**
63
+ * A single day cell. Variants live in `dayCellVariants` below — the
64
+ * component composes them by combining the relevant flags (selected,
65
+ * in-range, today, outside, disabled).
66
+ */
67
+ export declare const dayCellBaseStyles: string;
68
+ /**
69
+ * Dates from the previous / next month — light grey AND unclickable. The
70
+ * component sets `disabled` on the underlying `<button>`, so we override
71
+ * the default hover (which would otherwise still light up the cell) and
72
+ * the focus ring so these cells feel inert.
73
+ */
74
+ export declare const dayCellOutsideStyles: string;
75
+ /** Mid-range cells (between `from` and `to`, exclusive). */
76
+ export declare const dayCellInRangeStyles: string;
77
+ /**
78
+ * Range endpoints (`from` or `to`). Uses `--color-button-blue-pressed`
79
+ * (darker brand-blue) so white glyphs at the 20 px / 400-weight day-cell
80
+ * size clear WCAG AA — the regular `--color-button-blue` only reaches
81
+ * ~3.2 : 1 against white, below the 4.5 : 1 threshold for normal text.
82
+ */
83
+ export declare const dayCellSelectedStyles: string;
84
+ /**
85
+ * "Today" emphasis when not selected — a subtle ring so users can locate
86
+ * today without it visually competing with the active range.
87
+ */
88
+ export declare const dayCellTodayStyles: string;
89
+ export declare const footerOverrideStyles: string;
90
+ export declare const footerInputsGroupStyles: string;
91
+ export declare const footerInputLabelStyles: string;
92
+ export declare const footerInputWrapperStyles: string;
93
+ export declare const footerInputStyles: string;
94
+ export declare const footerInputErrorStyles: string;
95
+ export declare const footerActionsStyles: string;
96
+ //# sourceMappingURL=DateFilter.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateFilter.styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/date-filter/DateFilter.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,2EAA2E;AAC3E,eAAO,MAAM,aAAa,QAOf,CAAC;AAMZ,eAAO,MAAM,gBAAgB,QAIlB,CAAC;AAEZ,eAAO,MAAM,kBAAkB,QAYpB,CAAC;AAEZ;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,QAI1B,CAAC;AAMZ,eAAO,MAAM,kBAAkB,QAGpB,CAAC;AAEZ,eAAO,MAAM,oBAAoB,QAKtB,CAAC;AAEZ,eAAO,MAAM,wBAAwB,QAAsC,CAAC;AAC5E,eAAO,MAAM,yBAAyB,QAAsC,CAAC;AAE7E,sDAAsD;AACtD,eAAO,MAAM,qBAAqB,QAGvB,CAAC;AAMZ,eAAO,MAAM,oBAAoB,QAGtB,CAAC;AAEZ,eAAO,MAAM,mBAAmB,QAWrB,CAAC;AAEZ,eAAO,MAAM,wBAAwB,QAG1B,CAAC;AAEZ;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,QAcpB,CAAC;AAEZ,eAAO,MAAM,uBAAuB,QAAyB,CAAC;AAE9D,eAAO,MAAM,sBAAsB,QAKxB,CAAC;AAMZ,eAAO,MAAM,gBAAgB,QAGlB,CAAC;AAEZ,eAAO,MAAM,iBAAiB,QAGnB,CAAC;AAEZ,eAAO,MAAM,eAAe,QAA4D,CAAC;AAEzF,eAAO,MAAM,aAAa,QAAyD,CAAC;AAEpF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,QAAwD,CAAC;AAE1F;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,QAI/B,CAAC;AAEZ;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QAWnB,CAAC;AAEZ;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,QAItB,CAAC;AAEZ,4DAA4D;AAC5D,eAAO,MAAM,oBAAoB,QAItB,CAAC;AAEZ;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,QAGvB,CAAC;AAEZ;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAkE,CAAC;AAQlG,eAAO,MAAM,oBAAoB,QAOtB,CAAC;AAEZ,eAAO,MAAM,uBAAuB,QAGzB,CAAC;AAEZ,eAAO,MAAM,sBAAsB,QAGxB,CAAC;AAEZ,eAAO,MAAM,wBAAwB,QAA+B,CAAC;AAErE,eAAO,MAAM,iBAAiB,QAanB,CAAC;AAEZ,eAAO,MAAM,sBAAsB,QAIxB,CAAC;AAEZ,eAAO,MAAM,mBAAmB,QAAkE,CAAC"}
@@ -0,0 +1,102 @@
1
+ import { ReactNode } from 'react';
2
+ import { DateRangePreset } from './dateUtils';
3
+
4
+ /**
5
+ * Value shape used by `DateFilter`. Each bound may be `null` independently
6
+ * — `{ from: Date, to: null }` is a valid mid-selection state, but only
7
+ * fully-bounded ranges should be committed via `onApply` (the calendar
8
+ * UI enforces this by requiring two clicks).
9
+ *
10
+ * Both `null` ↔ "no filter applied".
11
+ */
12
+ export interface DateFilterValue {
13
+ from: Date | null;
14
+ to: Date | null;
15
+ }
16
+ /** Labels for the four header shortcut buttons (i18n hook). */
17
+ export interface DateFilterPresetLabels {
18
+ today: ReactNode;
19
+ lastWeek: ReactNode;
20
+ lastMonth: ReactNode;
21
+ lastYear: ReactNode;
22
+ }
23
+ /** Labels for the footer From/To fields (i18n hook). */
24
+ export interface DateFilterFooterLabels {
25
+ from: ReactNode;
26
+ to: ReactNode;
27
+ }
28
+ export type { DateRangePreset } from './dateUtils';
29
+ export interface DateFilterProps {
30
+ /** Controlled committed value. */
31
+ value?: DateFilterValue;
32
+ /** Initial committed value (uncontrolled). */
33
+ defaultValue?: DateFilterValue;
34
+ /** Fires on Apply. */
35
+ onApply?: (value: DateFilterValue) => void;
36
+ /**
37
+ * Initial month shown on the LEFT calendar (the RIGHT is always
38
+ * `leftMonth + 1`). Defaults to `today` (or `from`/`to` if set). The
39
+ * `Date`'s day-of-month is ignored — only year + month matter.
40
+ */
41
+ defaultViewMonth?: Date;
42
+ /**
43
+ * Override "today" for deterministic rendering (tests, Storybook, SSR).
44
+ * Defaults to `new Date()`. The shortcut presets and the highlighted
45
+ * "today" cell both honor this.
46
+ */
47
+ today?: Date;
48
+ /** Optional title shown above the calendar grid. */
49
+ title?: ReactNode;
50
+ /**
51
+ * Override the four shortcut button labels — handy for translation.
52
+ * Pass `null` to hide a specific preset entirely.
53
+ */
54
+ presetLabels?: Partial<DateFilterPresetLabels>;
55
+ /**
56
+ * Hide the shortcut button row entirely. Defaults to `false` (shown).
57
+ */
58
+ hidePresets?: boolean;
59
+ /**
60
+ * Set of presets to include (in order). Defaults to all four. Pass an
61
+ * empty array to render an empty shortcut row, or `[]` + `hidePresets`
62
+ * to skip the row.
63
+ */
64
+ presets?: DateRangePreset[];
65
+ /** Footer From/To label overrides. */
66
+ footerLabels?: Partial<DateFilterFooterLabels>;
67
+ /**
68
+ * Hide the editable From/To inputs in the footer. Defaults to `false`.
69
+ * When hidden, only the Reset + Apply buttons remain in the footer.
70
+ */
71
+ hideFooterInputs?: boolean;
72
+ /** Format function for the From/To input display string. Defaults to "1 June 2026". */
73
+ formatValue?: (date: Date) => string;
74
+ /**
75
+ * Parse the user's typed string back into a `Date`. Should return
76
+ * `null` for unparseable text. Defaults to a lenient parser that
77
+ * accepts `"1 June 2026"`, `"1 Jun 2026"`, `"1/6/2026"`, and
78
+ * `"2026-06-01"`.
79
+ */
80
+ parseValue?: (input: string) => Date | null;
81
+ /** Accessible label for the trigger button. */
82
+ 'aria-label'?: string;
83
+ /** Controlled popover open state. */
84
+ open?: boolean;
85
+ defaultOpen?: boolean;
86
+ onOpenChange?: (open: boolean) => void;
87
+ /** Disable the trigger entirely. */
88
+ disabled?: boolean;
89
+ /** Suppress the Reset button. Defaults to `false`. */
90
+ hideReset?: boolean;
91
+ /**
92
+ * Half-window (in years) around the currently viewed year that the
93
+ * month/year dropdowns expose for quick navigation. The dropdown lists
94
+ * `[viewYear - yearRange, viewYear + yearRange]` inclusive — e.g. the
95
+ * default `10` gives a 21-year window, which is tight for birthdays.
96
+ * Bump it for date-of-birth pickers (e.g. `100`).
97
+ */
98
+ yearRange?: number;
99
+ 'data-cy'?: string;
100
+ 'data-testid'?: string;
101
+ }
102
+ //# sourceMappingURL=DateFilter.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateFilter.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/date-filter/DateFilter.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC;CACjB;AAED,+DAA+D;AAC/D,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wDAAwD;AACxD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,SAAS,CAAC;CACf;AAED,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,sBAAsB;IACtB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAE3C;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,IAAI,CAAC;IAExB;;;;OAIG;IACH,KAAK,CAAC,EAAE,IAAI,CAAC;IAEb,oDAAoD;IACpD,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAE/C;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAE5B,sCAAsC;IACtC,YAAY,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAE/C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,uFAAuF;IACvF,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IAErC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAE5C,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,qCAAqC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvC,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,sDAAsD;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Date utilities for the `DateFilter`.
3
+ *
4
+ * Everything here is *local-time* arithmetic — the filter is a UI for picking
5
+ * calendar days (no time-of-day), so we normalize to midnight and never call
6
+ * `toISOString()` or other UTC-coerced APIs. Two `Date` objects represent
7
+ * the same calendar day iff `.getFullYear() / .getMonth() / .getDate()`
8
+ * match.
9
+ *
10
+ * The functions are kept side-effect free and return *new* `Date` instances —
11
+ * never mutate the input.
12
+ */
13
+ /** Sunday-based weekday short names — matches the Figma reference order. */
14
+ export declare const WEEKDAY_SHORT: readonly ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
15
+ export declare const MONTHS_SHORT: readonly string[];
16
+ export declare const MONTHS_LONG: readonly string[];
17
+ /** Strip the time component, returning midnight of the same local day. */
18
+ export declare function startOfDay(date: Date): Date;
19
+ /** First day of the month containing `date` (00:00 local). */
20
+ export declare function startOfMonth(date: Date): Date;
21
+ /** Last day of the month containing `date` (00:00 local). */
22
+ export declare function endOfMonth(date: Date): Date;
23
+ /**
24
+ * Add `n` months while preserving the day-of-month, clamping to the last
25
+ * day of the target month when the source day doesn't exist there (e.g.
26
+ * Jan 31 + 1 month → Feb 28/29 rather than spilling into March).
27
+ */
28
+ export declare function addMonths(date: Date, n: number): Date;
29
+ /**
30
+ * Add `n` years, preserving month + day-of-month. Feb 29 in a leap year
31
+ * clamps to Feb 28 when the target year isn't a leap year.
32
+ */
33
+ export declare function addYears(date: Date, n: number): Date;
34
+ /** Add `n` days, preserving the time-of-day (typically 00:00 from `startOfDay`). */
35
+ export declare function addDays(date: Date, n: number): Date;
36
+ /** Same calendar day in local time. */
37
+ export declare function isSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean;
38
+ /** Same calendar month + year in local time. */
39
+ export declare function isSameMonth(a: Date | null | undefined, b: Date | null | undefined): boolean;
40
+ /** -1 if `a` is earlier, 1 if later, 0 if same day. */
41
+ export declare function compareDay(a: Date, b: Date): number;
42
+ /** Inclusive `from <= date <= to`. Either bound may be `null`. */
43
+ export declare function isInRange(date: Date, from: Date | null, to: Date | null): boolean;
44
+ /**
45
+ * Build the Sunday-aligned 7-col grid of `Date` cells for the month
46
+ * containing `viewMonth`. Each cell is a real `Date`; cells that fall
47
+ * outside the focused month are tagged so the renderer can grey them
48
+ * out *and* make them unclickable.
49
+ *
50
+ * Row count is the **minimum** needed to cover every in-month day. A
51
+ * Sunday-starting February (28 days) needs 4 rows, most months need 5,
52
+ * and only the worst case (a 31-day month that begins on Saturday) needs
53
+ * 6. We intentionally do NOT pad to a fixed 6 rows — the design (and
54
+ * Figma reference) crops trailing all-next-month rows.
55
+ */
56
+ export declare function buildMonthGrid(viewMonth: Date): {
57
+ date: Date;
58
+ outside: boolean;
59
+ }[];
60
+ /**
61
+ * Format a `Date` as `"1 June 2026"`. This is the literal format shown in
62
+ * the Figma footer; using `toLocaleDateString` here would silently change
63
+ * the wording when the host's locale differs.
64
+ */
65
+ export declare function formatDateLong(date: Date): string;
66
+ /**
67
+ * Parse the inverse of `formatDateLong`. Accepts a few user-friendly
68
+ * variants — `"1 June 2026"`, `"1 Jun 2026"`, `"1/6/2026"`,
69
+ * `"2026-06-01"` — and returns `null` if it can't make sense of the input.
70
+ *
71
+ * Returning `null` (rather than throwing) keeps callers' onChange paths
72
+ * simple: keep the existing draft and ignore unparseable text.
73
+ */
74
+ export declare function parseDateInput(input: string): Date | null;
75
+ /**
76
+ * Value-equality for two `DateFilterValue`s. Plain JSON comparison would
77
+ * stringify `Date` objects via `toISOString`, which is *almost* right, but
78
+ * we want `null === null` to be `true` without serializing — and we want
79
+ * to defend against accidental TZ drift, so we explicitly compare local
80
+ * calendar days.
81
+ */
82
+ export declare function dateRangeEquals(a: {
83
+ from: Date | null;
84
+ to: Date | null;
85
+ }, b: {
86
+ from: Date | null;
87
+ to: Date | null;
88
+ }): boolean;
89
+ /**
90
+ * Range presets used by the header shortcut buttons. Each preset returns
91
+ * a `[from, to]` pair anchored on `today` (defaults to *now*). The product
92
+ * convention is "last N days inclusive" — e.g. "Last Week" = the last 7
93
+ * days, where today is the 7th — so the trigger pill reads as "X – today".
94
+ */
95
+ export type DateRangePreset = 'today' | 'last-week' | 'last-month' | 'last-year';
96
+ export declare function getPresetRange(preset: DateRangePreset, today?: Date): {
97
+ from: Date;
98
+ to: Date;
99
+ };
100
+ //# sourceMappingURL=dateUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateUtils.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/date-filter/dateUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAgCH,4EAA4E;AAC5E,eAAO,MAAM,aAAa,qDAAsD,CAAC;AAEjF,eAAO,MAAM,YAAY,mBAAkC,CAAC;AAC5D,eAAO,MAAM,WAAW,mBAAiC,CAAC;AAE1D,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAE3C;AAED,8DAA8D;AAC9D,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAE7C;AAED,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAMrD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAKpD;AAED,oFAAoF;AACpF,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAInD;AAED,uCAAuC;AACvC,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAOzF;AAED,gDAAgD;AAChD,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAG3F;AAED,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAInD;AAED,kEAAkE;AAClE,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAIjF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,IAAI,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,EAAE,CAelF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEjD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CA+CzD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,CAAC,EAAE;IAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,EAAE,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,EACzC,CAAC,EAAE;IAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,EAAE,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,GACxC,OAAO,CAOT;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,WAAW,CAAC;AAEjF,wBAAgB,cAAc,CAC5B,MAAM,EAAE,eAAe,EACvB,KAAK,GAAE,IAAiB,GACvB;IACD,IAAI,EAAE,IAAI,CAAC;IACX,EAAE,EAAE,IAAI,CAAC;CACV,CAgBA"}
@@ -0,0 +1,21 @@
1
+ import { FilterApplyProps, FilterBodyProps, FilterContentProps, FilterContextValue, FilterFooterProps, FilterProps, FilterResetProps, FilterTitleProps, FilterTriggerProps } from './Filter.types';
2
+
3
+ export type { FilterApplyProps, FilterBodyProps, FilterContentProps, FilterContextValue, FilterFooterProps, FilterProps, FilterResetProps, FilterTitleProps, FilterTriggerProps, } from './Filter.types';
4
+ /**
5
+ * Access the surrounding `Filter` context. The `T` generic must match the
6
+ * shape passed to the `Filter` provider — TypeScript can't infer this through
7
+ * context, so consumers cast at the call site.
8
+ *
9
+ * @example
10
+ * const { draftValue, setDraftValue, isActive } = useFilter<string[]>();
11
+ */
12
+ export declare function useFilter<T = unknown>(): FilterContextValue<T>;
13
+ export declare function Filter<T>({ value: controlledValue, defaultValue, emptyValue, onApply, open: controlledOpen, defaultOpen, onOpenChange, isActive: customIsActive, compareValues, normalizeValue, children, }: FilterProps<T>): import("react/jsx-runtime").JSX.Element;
14
+ export declare const FilterTrigger: import('react').ForwardRefExoticComponent<FilterTriggerProps & import('react').RefAttributes<HTMLButtonElement>>;
15
+ export declare const FilterContent: import('react').ForwardRefExoticComponent<FilterContentProps & import('react').RefAttributes<HTMLDivElement>>;
16
+ export declare const FilterTitle: import('react').ForwardRefExoticComponent<FilterTitleProps & import('react').RefAttributes<HTMLDivElement>>;
17
+ export declare const FilterBody: import('react').ForwardRefExoticComponent<FilterBodyProps & import('react').RefAttributes<HTMLDivElement>>;
18
+ export declare const FilterFooter: import('react').ForwardRefExoticComponent<FilterFooterProps & import('react').RefAttributes<HTMLDivElement>>;
19
+ export declare const FilterApply: import('react').ForwardRefExoticComponent<FilterApplyProps & import('react').RefAttributes<HTMLButtonElement>>;
20
+ export declare const FilterReset: import('react').ForwardRefExoticComponent<FilterResetProps & import('react').RefAttributes<HTMLButtonElement>>;
21
+ //# sourceMappingURL=Filter.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Filter.component.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/filter/Filter.component.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AASxB,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAQxB;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,GAAG,OAAO,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAM9D;AAkBD,wBAAgB,MAAM,CAAC,CAAC,EAAE,EACxB,KAAK,EAAE,eAAe,EACtB,YAAY,EACZ,UAAU,EACV,OAAO,EACP,IAAI,EAAE,cAAc,EACpB,WAAmB,EACnB,YAAY,EACZ,QAAQ,EAAE,cAAc,EACxB,aAAa,EACb,cAAc,EACd,QAAQ,GACT,EAAE,WAAW,CAAC,CAAC,CAAC,2CA8FhB;AAMD,eAAO,MAAM,aAAa,kHAgBzB,CAAC;AAOF,eAAO,MAAM,aAAa,+GAYzB,CAAC;AAOF,eAAO,MAAM,WAAW,6GAUvB,CAAC;AAGF,eAAO,MAAM,UAAU,4GAUtB,CAAC;AAGF,eAAO,MAAM,YAAY,8GAUxB,CAAC;AAOF,eAAO,MAAM,WAAW,gHAuCvB,CAAC;AAGF,eAAO,MAAM,WAAW,gHAkEvB,CAAC"}
@@ -0,0 +1,27 @@
1
+ export declare const contentStyles: string;
2
+ export declare const titleStyles: string;
3
+ export declare const bodyStyles: string;
4
+ export declare const footerStyles: string;
5
+ /**
6
+ * `FilterReset` button — Figma-exact 40 × 40 square with a 16 × 16 glyph
7
+ * centered inside 12 px padding on every side.
8
+ *
9
+ * Why these tokens:
10
+ * - **Outer:** `--spacing-10` (2.5 rem = 40 px) matches the Figma frame.
11
+ * - **Padding:** `--spacing-3` (0.75 rem = 12 px) matches Figma's 12 px gap
12
+ * from the frame edge to the glyph on every side.
13
+ * - **Glyph:** 16 × 16 supplied by `Icon size="md"` at the call site.
14
+ * - **Radius:** `rounded-12` matches the IconButton convention (also a
15
+ * token-derived value, not a magic px).
16
+ * - **Hover:** `--color-bg-secondary` (#f3f3f5) — quiet light-gray fill,
17
+ * matching the option-row hover so the popover feels cohesive.
18
+ * - **Focus:** `btn-focus-text` — the design system's standard text-color
19
+ * focus ring effect.
20
+ *
21
+ * The component renders a plain `<button>` (not `IconButton`) and uses
22
+ * `<Icon color="system-text">` so the muted stroke color comes from a
23
+ * **token, via the Icon's own color API** — no `!important`, no inline-
24
+ * style override fight.
25
+ */
26
+ export declare const resetButtonStyles: string;
27
+ //# sourceMappingURL=Filter.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Filter.styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/filter/Filter.styles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,QAWf,CAAC;AAEZ,eAAO,MAAM,WAAW,QAAgE,CAAC;AAEzF,eAAO,MAAM,UAAU,QAWZ,CAAC;AAEZ,eAAO,MAAM,YAAY,QAOd,CAAC;AAEZ;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,iBAAiB,QAYnB,CAAC"}
@@ -0,0 +1,141 @@
1
+ import { ButtonHTMLAttributes, HTMLAttributes, ReactNode } from 'react';
2
+ import { PopoverContentProps } from '../../overlays/popover/Popover.types';
3
+
4
+ /**
5
+ * Context shared by every `Filter` sub-component. The `T` generic carries the
6
+ * filter's value shape (e.g. `string[]` for a checkbox filter, `[number, number]`
7
+ * for a range filter). Consumer code reads it via `useFilter<T>()`.
8
+ */
9
+ export interface FilterContextValue<T = unknown> {
10
+ /** Value the popover is currently editing (uncommitted). */
11
+ draftValue: T;
12
+ /** Update the in-progress draft. */
13
+ setDraftValue: (value: T) => void;
14
+ /** Value currently applied to the data outside the popover. */
15
+ committedValue: T;
16
+ /** The "empty" sentinel value used by `reset()` and `isActive`. */
17
+ emptyValue: T;
18
+ /** Whether the committed value differs from `emptyValue`. */
19
+ isActive: boolean;
20
+ /** Whether the popover is open. */
21
+ open: boolean;
22
+ /** Programmatically open/close the popover. */
23
+ setOpen: (open: boolean) => void;
24
+ /** Commit the current draft and close the popover. */
25
+ apply: () => void;
26
+ /**
27
+ * Clear the filter entirely — commits `emptyValue`, fires `onApply`, and
28
+ * closes the popover. Behaves as if the user manually cleared all
29
+ * inputs and clicked Apply. The draft is also cleared so the next open
30
+ * starts fresh.
31
+ */
32
+ reset: () => void;
33
+ /** Close without committing. Draft is discarded on next open. */
34
+ cancel: () => void;
35
+ /**
36
+ * Value equality used internally by sub-components (e.g. `FilterApply`
37
+ * checks whether `draftValue` equals `committedValue`). Honors the
38
+ * `compareValues` prop on `Filter`, falling back to JSON equality.
39
+ */
40
+ areEqual: (a: T, b: T) => boolean;
41
+ }
42
+ export interface FilterProps<T> {
43
+ /** Controlled committed value. */
44
+ value?: T;
45
+ /** Initial committed value in uncontrolled mode. */
46
+ defaultValue?: T;
47
+ /** Sentinel representing "no filter applied" (e.g. `[]`, `null`, `''`). */
48
+ emptyValue: T;
49
+ /** Called when the user clicks `FilterApply`. */
50
+ onApply?: (value: T) => void;
51
+ /** Controlled open state of the popover. */
52
+ open?: boolean;
53
+ /** Initial open state for uncontrolled mode. */
54
+ defaultOpen?: boolean;
55
+ /** Called when the popover open state changes. */
56
+ onOpenChange?: (open: boolean) => void;
57
+ /**
58
+ * Optional custom check for whether a value should be considered "active".
59
+ * Defaults to a JSON-equality check against `emptyValue`.
60
+ */
61
+ isActive?: (value: T) => boolean;
62
+ /**
63
+ * Compare draft vs committed (and committed vs empty) for equality. Used by
64
+ * `FilterApply` to decide when the draft is "unchanged" and by `isActive`'s
65
+ * default implementation. Defaults to a JSON-equality check, which is fine
66
+ * for primitives / plain objects but breaks for `Date` and other non-JSON
67
+ * shapes — pass a custom predicate in those cases.
68
+ */
69
+ compareValues?: (a: T, b: T) => boolean;
70
+ /**
71
+ * Optional last-mile transform applied to the draft just before it's
72
+ * committed via `apply()`. Runs for both the controlled and uncontrolled
73
+ * paths and for the value passed to `onApply`, so the consumer never sees
74
+ * a semantically broken draft state that the UI tolerated during editing.
75
+ *
76
+ * Use cases:
77
+ * - RangeFilter swapping `{min: 80, max: 20}` → `{min: 20, max: 80}`
78
+ * when the user typed an inverted pair (the slider sorts visually but
79
+ * the underlying draft preserved the typed order).
80
+ *
81
+ * Reset is unaffected — it always commits `emptyValue` verbatim.
82
+ */
83
+ normalizeValue?: (value: T) => T;
84
+ children: ReactNode;
85
+ }
86
+ export interface FilterTriggerProps extends ButtonHTMLAttributes<HTMLButtonElement> {
87
+ /**
88
+ * Render the trigger as the child element (passing trigger handlers down).
89
+ * Use when wrapping a custom button or anchor.
90
+ */
91
+ asChild?: boolean;
92
+ /**
93
+ * Override the auto-derived `active` state on the default `FilterButton`.
94
+ * Ignored when `asChild` is true.
95
+ */
96
+ active?: boolean;
97
+ }
98
+ export interface FilterContentProps extends Omit<PopoverContentProps, 'data-cy' | 'data-testid'> {
99
+ 'data-cy'?: string;
100
+ 'data-testid'?: string;
101
+ }
102
+ export interface FilterTitleProps extends HTMLAttributes<HTMLDivElement> {
103
+ 'data-cy'?: string;
104
+ 'data-testid'?: string;
105
+ }
106
+ export interface FilterBodyProps extends HTMLAttributes<HTMLDivElement> {
107
+ 'data-cy'?: string;
108
+ 'data-testid'?: string;
109
+ }
110
+ export interface FilterFooterProps extends HTMLAttributes<HTMLDivElement> {
111
+ 'data-cy'?: string;
112
+ 'data-testid'?: string;
113
+ }
114
+ export interface FilterApplyProps extends ButtonHTMLAttributes<HTMLButtonElement> {
115
+ /** Override the default "Apply" text. */
116
+ children?: ReactNode;
117
+ /**
118
+ * Disable Apply when the draft equals the committed value. Defaults to
119
+ * `true` — the typical UX is that the orange Apply button only "lights up"
120
+ * once the user has actually changed something. Set to `false` to allow
121
+ * re-applying the same value (e.g. to trigger a refetch).
122
+ */
123
+ disabledWhenUnchanged?: boolean;
124
+ }
125
+ export interface FilterResetProps extends ButtonHTMLAttributes<HTMLButtonElement> {
126
+ /** Custom label for the (default) text variant. Defaults to "Reset". */
127
+ children?: ReactNode;
128
+ /**
129
+ * Auto-hide the reset control when the filter has no committed value
130
+ * (`isActive === false`). Defaults to `true`, matching the spec —
131
+ * "Reset is visible only when an applied value exists". Set to `false` to
132
+ * always render the button (e.g. for layout stability).
133
+ */
134
+ autoHide?: boolean;
135
+ /**
136
+ * Accessible label used when no text `children` are supplied (icon-only
137
+ * mode). Defaults to "Reset filter".
138
+ */
139
+ 'aria-label'?: string;
140
+ }
141
+ //# sourceMappingURL=Filter.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Filter.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/filter/Filter.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { FilterButtonProps } from './FilterButton.types';
2
+
3
+ export type { FilterButtonProps } from './FilterButton.types';
4
+ export declare const FilterButton: import('react').ForwardRefExoticComponent<FilterButtonProps & import('react').RefAttributes<HTMLButtonElement>>;
5
+ //# sourceMappingURL=FilterButton.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterButton.component.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/filter-button/FilterButton.component.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,eAAO,MAAM,YAAY,iHAiDxB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare const baseStyles: string;
2
+ /**
3
+ * When the filter has a value applied: the icon stays teal even at rest and
4
+ * the hover background switches to the neutral `--color-paper-blue` so the
5
+ * orange "active" dot remains visually dominant (matches the Figma
6
+ * "Active + H" spec).
7
+ */
8
+ export declare const activeStyles: string;
9
+ export declare const dotStyles: string;
10
+ //# sourceMappingURL=FilterButton.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterButton.styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/filter-button/FilterButton.styles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,QAYZ,CAAC;AAEZ;;;;;GAKG;AACH,eAAO,MAAM,YAAY,QAGd,CAAC;AAEZ,eAAO,MAAM,SAAS,QAKX,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { ButtonHTMLAttributes } from 'react';
2
+
3
+ export interface FilterButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
4
+ /**
5
+ * Whether the filter has any value applied. Renders the orange-dot
6
+ * indicator and keeps the icon in its "active" (teal) color even when
7
+ * not hovered. Equivalent to the Figma "Active" / "Active + H" states.
8
+ */
9
+ active?: boolean;
10
+ /**
11
+ * Accessible label describing the filter (e.g. "Filter by status").
12
+ * Required when the button has no visible text content.
13
+ */
14
+ 'aria-label'?: string;
15
+ 'data-testid'?: string;
16
+ 'data-cy'?: string;
17
+ }
18
+ //# sourceMappingURL=FilterButton.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterButton.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/filter-button/FilterButton.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAElD,MAAM,WAAW,iBAAkB,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAChF;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,8 @@
1
+ import { NumericFilterProps } from './NumericFilter.types';
2
+
3
+ export type { NumericFilterProps, NumericFilterValue } from './NumericFilter.types';
4
+ export declare function NumericFilter({ value, defaultValue, onApply, min, max, step, title, inputPlaceholder, open, defaultOpen, onOpenChange, disabled, hideReset, allowMin, 'aria-label': ariaLabel, 'data-cy': dataCy, 'data-testid': dataTestId, }: NumericFilterProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare namespace NumericFilter {
6
+ var displayName: string;
7
+ }
8
+ //# sourceMappingURL=NumericFilter.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumericFilter.component.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/numeric-filter/NumericFilter.component.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,kBAAkB,EAAsB,MAAM,uBAAuB,CAAC;AAGpF,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AA0GpF,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,YAAY,EACZ,OAAO,EACP,GAAO,EACP,GAAS,EACT,IAAQ,EACR,KAAK,EACL,gBAAgB,EAChB,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,SAAiB,EACjB,QAAgB,EAChB,YAAY,EAAE,SAAS,EACvB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,UAAU,GAC1B,EAAE,kBAAkB,2CAiDpB;yBAnEe,aAAa"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Same-row layout: slider on the left (flex-1), numeric input on the right
3
+ * (fixed token-aligned width). Vertical alignment is centered so the rail
4
+ * sits at the input's mid-line.
5
+ *
6
+ * Figma reference (1 — SaaS / 45041:18776):
7
+ * gap-3 (12px) between slider and input
8
+ * small input ~58px — we use --spacing-16 (64px) as the closest design
9
+ * token; this also leaves room for 3-digit values without clipping.
10
+ */
11
+ export declare const rowStyles: string;
12
+ export declare const sliderColumnStyles: string;
13
+ export declare const inputColumnStyles: string;
14
+ //# sourceMappingURL=NumericFilter.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumericFilter.styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/numeric-filter/NumericFilter.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,QAAgE,CAAC;AAEvF,eAAO,MAAM,kBAAkB,QAA+B,CAAC;AAE/D,eAAO,MAAM,iBAAiB,QAA+C,CAAC"}