@acronis-platform/ui-react 0.61.0 → 1.0.0

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 (204) hide show
  1. package/dist/components/ui/alert/alert.js +115 -57
  2. package/dist/components/ui/alert/alert.js.map +1 -1
  3. package/dist/components/ui/button-group/button-group.js +57 -0
  4. package/dist/components/ui/button-group/button-group.js.map +1 -0
  5. package/dist/components/ui/button-icon-menu/button-icon-menu.js +26 -0
  6. package/dist/components/ui/button-icon-menu/button-icon-menu.js.map +1 -0
  7. package/dist/components/ui/calendar-panel/calendar-panel-utils.js +63 -0
  8. package/dist/components/ui/calendar-panel/calendar-panel-utils.js.map +1 -0
  9. package/dist/components/ui/calendar-panel/calendar-panel.js +260 -0
  10. package/dist/components/ui/calendar-panel/calendar-panel.js.map +1 -0
  11. package/dist/components/ui/chip/chip.js +33 -33
  12. package/dist/components/ui/chip/chip.js.map +1 -1
  13. package/dist/components/ui/date-range-picker/date-range-picker-utils.js +11 -23
  14. package/dist/components/ui/date-range-picker/date-range-picker-utils.js.map +1 -1
  15. package/dist/components/ui/date-range-picker/date-range-picker.js +94 -134
  16. package/dist/components/ui/date-range-picker/date-range-picker.js.map +1 -1
  17. package/dist/components/ui/dropdown-menu/dropdown-menu.js +129 -72
  18. package/dist/components/ui/dropdown-menu/dropdown-menu.js.map +1 -1
  19. package/dist/components/ui/filter-cards/filter-cards.js +25 -0
  20. package/dist/components/ui/filter-cards/filter-cards.js.map +1 -0
  21. package/dist/components/ui/filter-chips/filter-chips.js +44 -0
  22. package/dist/components/ui/filter-chips/filter-chips.js.map +1 -0
  23. package/dist/components/ui/filter-search/filter-search.js +184 -138
  24. package/dist/components/ui/filter-search/filter-search.js.map +1 -1
  25. package/dist/components/ui/fitted-actions/fitted-actions.js +139 -0
  26. package/dist/components/ui/fitted-actions/fitted-actions.js.map +1 -0
  27. package/dist/components/ui/input-date-picker/input-date-picker.js +103 -93
  28. package/dist/components/ui/input-date-picker/input-date-picker.js.map +1 -1
  29. package/dist/components/ui/input-password/input-password.js +76 -66
  30. package/dist/components/ui/input-password/input-password.js.map +1 -1
  31. package/dist/components/ui/input-search/input-search.js +9 -9
  32. package/dist/components/ui/input-search/input-search.js.map +1 -1
  33. package/dist/components/ui/input-select/input-select.js +8 -8
  34. package/dist/components/ui/input-select/input-select.js.map +1 -1
  35. package/dist/components/ui/input-text/input-text.js +77 -66
  36. package/dist/components/ui/input-text/input-text.js.map +1 -1
  37. package/dist/components/ui/input-text-area/input-text-area.js +76 -66
  38. package/dist/components/ui/input-text-area/input-text-area.js.map +1 -1
  39. package/dist/components/ui/link/link.js +50 -35
  40. package/dist/components/ui/link/link.js.map +1 -1
  41. package/dist/components/ui/number-field/number-field.js +1 -1
  42. package/dist/components/ui/number-field/number-field.js.map +1 -1
  43. package/dist/components/ui/popover/popover.js +75 -56
  44. package/dist/components/ui/popover/popover.js.map +1 -1
  45. package/dist/components/ui/resizable/resizable.js +23 -11
  46. package/dist/components/ui/resizable/resizable.js.map +1 -1
  47. package/dist/components/ui/scroll-area/scroll-area.js +46 -30
  48. package/dist/components/ui/scroll-area/scroll-area.js.map +1 -1
  49. package/dist/components/ui/sidebar-secondary/sidebar-secondary.js.map +1 -1
  50. package/dist/components/ui/timer/timer.js +47 -0
  51. package/dist/components/ui/timer/timer.js.map +1 -0
  52. package/dist/components/ui/toast/toast.js +168 -61
  53. package/dist/components/ui/toast/toast.js.map +1 -1
  54. package/dist/components/ui/truncate-text/middle-truncate.js +20 -0
  55. package/dist/components/ui/truncate-text/middle-truncate.js.map +1 -0
  56. package/dist/components/ui/truncate-text/text-width.js +12 -0
  57. package/dist/components/ui/truncate-text/text-width.js.map +1 -0
  58. package/dist/components/ui/truncate-text/truncate-text.js +152 -0
  59. package/dist/components/ui/truncate-text/truncate-text.js.map +1 -0
  60. package/dist/index.js +507 -469
  61. package/dist/index.js.map +1 -1
  62. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/addDays.js +5 -5
  63. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/addDays.js.map +1 -1
  64. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/constants.js +3 -6
  65. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/constants.js.map +1 -1
  66. package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/useDayPicker.js +3 -3
  67. package/dist/react.js +507 -469
  68. package/dist/react.js.map +1 -1
  69. package/dist/src/components/ui/alert/alert.d.ts +34 -3
  70. package/dist/src/components/ui/alert/index.d.ts +2 -2
  71. package/dist/src/components/ui/button/button.d.ts +1 -1
  72. package/dist/src/components/ui/button-group/button-group.d.ts +38 -0
  73. package/dist/src/components/ui/button-group/index.d.ts +1 -0
  74. package/dist/src/components/ui/button-icon/button-icon.d.ts +1 -1
  75. package/dist/src/components/ui/button-icon-menu/button-icon-menu.d.ts +28 -0
  76. package/dist/src/components/ui/button-icon-menu/index.d.ts +1 -0
  77. package/dist/src/components/ui/button-menu/button-menu.d.ts +1 -1
  78. package/dist/src/components/ui/calendar-panel/__tests__/calendar-panel-utils.test.d.ts +1 -0
  79. package/dist/src/components/ui/calendar-panel/calendar-panel-utils.d.ts +55 -0
  80. package/dist/src/components/ui/calendar-panel/calendar-panel.d.ts +112 -0
  81. package/dist/src/components/ui/calendar-panel/index.d.ts +1 -0
  82. package/dist/src/components/ui/chip/chip.d.ts +1 -1
  83. package/dist/src/components/ui/date-range-picker/date-range-picker-utils.d.ts +10 -16
  84. package/dist/src/components/ui/date-range-picker/date-range-picker.d.ts +46 -2
  85. package/dist/src/components/ui/dropdown-menu/dropdown-menu.d.ts +8 -1
  86. package/dist/src/components/ui/dropdown-menu/index.d.ts +1 -1
  87. package/dist/src/components/ui/filter-cards/filter-cards.d.ts +11 -0
  88. package/dist/src/components/ui/filter-cards/index.d.ts +1 -0
  89. package/dist/src/components/ui/filter-chips/filter-chips.d.ts +25 -0
  90. package/dist/src/components/ui/filter-chips/index.d.ts +1 -0
  91. package/dist/src/components/ui/filter-search/filter-search.d.ts +39 -1
  92. package/dist/src/components/ui/fitted-actions/fitted-actions.d.ts +50 -0
  93. package/dist/src/components/ui/fitted-actions/fitted-actions.docs.d.ts +45 -0
  94. package/dist/src/components/ui/fitted-actions/index.d.ts +1 -0
  95. package/dist/src/components/ui/link/index.d.ts +1 -1
  96. package/dist/src/components/ui/link/link.d.ts +22 -4
  97. package/dist/src/components/ui/metric/metric.d.ts +1 -1
  98. package/dist/src/components/ui/popover/popover.d.ts +30 -1
  99. package/dist/src/components/ui/popover/popover.docs.d.ts +27 -2
  100. package/dist/src/components/ui/scroll-area/scroll-area.d.ts +24 -0
  101. package/dist/src/components/ui/tag/tag.d.ts +1 -1
  102. package/dist/src/components/ui/timer/index.d.ts +1 -0
  103. package/dist/src/components/ui/timer/timer.d.ts +28 -0
  104. package/dist/src/components/ui/toast/index.d.ts +1 -1
  105. package/dist/src/components/ui/toast/toast.d.ts +51 -18
  106. package/dist/src/components/ui/toast/toast.docs.d.ts +4 -0
  107. package/dist/src/components/ui/trend-indicator/trend-indicator.d.ts +1 -1
  108. package/dist/src/components/ui/truncate-text/__tests__/middle-truncate.test.d.ts +1 -0
  109. package/dist/src/components/ui/truncate-text/index.d.ts +3 -0
  110. package/dist/src/components/ui/truncate-text/middle-truncate.d.ts +13 -0
  111. package/dist/src/components/ui/truncate-text/text-width.d.ts +11 -0
  112. package/dist/src/components/ui/truncate-text/truncate-text.d.ts +45 -0
  113. package/dist/src/components/ui/truncate-text/truncate-text.docs.d.ts +35 -0
  114. package/dist/src/index.d.ts +8 -0
  115. package/dist/ui-react.css +1 -1
  116. package/package.json +4 -4
  117. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getDefaultOptions.js +0 -8
  118. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getDefaultOptions.js.map +0 -1
  119. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getISODay.js +0 -9
  120. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getISODay.js.map +0 -1
  121. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/Parser.js +0 -23
  122. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/Parser.js.map +0 -1
  123. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/Setter.js +0 -42
  124. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/Setter.js.map +0 -1
  125. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/constants.js +0 -50
  126. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/constants.js.map +0 -1
  127. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.js +0 -50
  128. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.js.map +0 -1
  129. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/AMPMParser.js +0 -50
  130. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/AMPMParser.js.map +0 -1
  131. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/DateParser.js +0 -62
  132. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/DateParser.js.map +0 -1
  133. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.js +0 -52
  134. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.js.map +0 -1
  135. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/DayParser.js +0 -50
  136. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/DayParser.js.map +0 -1
  137. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.js +0 -50
  138. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.js.map +0 -1
  139. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/EraParser.js +0 -34
  140. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/EraParser.js.map +0 -1
  141. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.js +0 -22
  142. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.js.map +0 -1
  143. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.js +0 -23
  144. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.js.map +0 -1
  145. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.js +0 -33
  146. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.js.map +0 -1
  147. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.js +0 -33
  148. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.js.map +0 -1
  149. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.js +0 -34
  150. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.js.map +0 -1
  151. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.js +0 -34
  152. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.js.map +0 -1
  153. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/ISODayParser.js +0 -106
  154. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/ISODayParser.js.map +0 -1
  155. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.js +0 -49
  156. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.js.map +0 -1
  157. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.js +0 -49
  158. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.js.map +0 -1
  159. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.js +0 -50
  160. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.js.map +0 -1
  161. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.js +0 -41
  162. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.js.map +0 -1
  163. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/LocalDayParser.js +0 -81
  164. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/LocalDayParser.js.map +0 -1
  165. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.js +0 -49
  166. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.js.map +0 -1
  167. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.js +0 -70
  168. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.js.map +0 -1
  169. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/MinuteParser.js +0 -33
  170. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/MinuteParser.js.map +0 -1
  171. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/MonthParser.js +0 -78
  172. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/MonthParser.js.map +0 -1
  173. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/QuarterParser.js +0 -76
  174. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/QuarterParser.js.map +0 -1
  175. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/SecondParser.js +0 -33
  176. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/SecondParser.js.map +0 -1
  177. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.js +0 -81
  178. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.js.map +0 -1
  179. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.js +0 -78
  180. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.js.map +0 -1
  181. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.js +0 -76
  182. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.js.map +0 -1
  183. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.js +0 -23
  184. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.js.map +0 -1
  185. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.js +0 -23
  186. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.js.map +0 -1
  187. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/YearParser.js +0 -50
  188. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers/YearParser.js.map +0 -1
  189. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers.js +0 -68
  190. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/parsers.js.map +0 -1
  191. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/utils.js +0 -104
  192. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse/_lib/utils.js.map +0 -1
  193. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse.js +0 -86
  194. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/parse.js.map +0 -1
  195. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/setDay.js +0 -12
  196. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/setDay.js.map +0 -1
  197. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/setISODay.js +0 -11
  198. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/setISODay.js.map +0 -1
  199. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/setISOWeek.js +0 -10
  200. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/setISOWeek.js.map +0 -1
  201. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/setWeek.js +0 -10
  202. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/setWeek.js.map +0 -1
  203. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/transpose.js +0 -18
  204. package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/transpose.js.map +0 -1
@@ -1,151 +1,111 @@
1
- import { jsxs as b, jsx as o } from "react/jsx-runtime";
2
- import * as a from "react";
3
- import { formatDate as s, normalizeRange as P, rangesEqual as g, DISPLAY_FORMAT as _, parseDate as G } from "./date-range-picker-utils.js";
4
- import { Popover as H, PopoverTrigger as J, PopoverContent as K } from "../popover/popover.js";
5
- import { InputDatePicker as Q } from "../input-date-picker/input-date-picker.js";
6
- import { Calendar as U } from "../calendar/calendar.js";
7
- import { Button as C } from "../button/button.js";
8
- import { InputText as W } from "../input-text/input-text.js";
9
- function k({
10
- label: p,
11
- text: d,
12
- onTextChange: i,
13
- onParsedChange: f
14
- }) {
15
- return /* @__PURE__ */ o(
16
- W,
17
- {
18
- "aria-label": p,
19
- value: d,
20
- placeholder: _,
21
- onChange: (h) => {
22
- const l = h.target.value;
23
- if (i(l), l.trim() === "") {
24
- f(void 0);
25
- return;
26
- }
27
- const x = G(l);
28
- x && f(x);
29
- }
30
- }
31
- );
32
- }
33
- const X = a.forwardRef(
1
+ import { jsxs as Q, jsx as r } from "react/jsx-runtime";
2
+ import * as n from "react";
3
+ import { useDocDir as U } from "../../../lib/use-doc-dir.js";
4
+ import { normalizeRange as D, formatDate as P } from "./date-range-picker-utils.js";
5
+ import { Popover as W, PopoverTrigger as X, PopoverContent as Y } from "../popover/popover.js";
6
+ import { InputDatePicker as Z } from "../input-date-picker/input-date-picker.js";
7
+ import { CalendarPanel as _ } from "../calendar-panel/calendar-panel.js";
8
+ const $ = n.forwardRef(
34
9
  ({
35
- value: p,
36
- defaultValue: d,
37
- onValueChange: i,
38
- label: f,
39
- description: h,
40
- error: l,
41
- placeholder: x,
42
- disabled: A,
43
- required: N,
44
- className: F
45
- }, O) => {
46
- const T = p !== void 0, [I, w] = a.useState(
47
- d ?? {}
48
- ), e = T ? p : I, [v, R] = a.useState(!1), [m, c] = a.useState(e), [M, S] = a.useState(s(e.from)), [j, y] = a.useState(s(e.to)), u = (t) => {
49
- S(s(t.from)), y(s(t.to));
50
- }, z = (t) => {
51
- c(e), u(e), R(t);
52
- }, E = () => {
53
- const t = d ?? {};
54
- c(t), u(t);
55
- }, q = () => {
56
- const t = P(m);
57
- T || w(t), i == null || i(t), R(!1);
58
- }, r = P(m);
59
- let D;
60
- r.from ? D = { from: r.from, to: r.to } : r.to && (D = { from: r.to, to: r.to });
61
- const B = (t) => {
62
- const n = { from: t == null ? void 0 : t.from, to: t == null ? void 0 : t.to };
63
- c(n), u(n);
64
- }, L = g(m, e), Y = g(m, d ?? {});
65
- return /* @__PURE__ */ b(H, { open: v, onOpenChange: z, children: [
66
- /* @__PURE__ */ o(
67
- J,
10
+ value: f,
11
+ defaultValue: R,
12
+ onValueChange: s,
13
+ label: h,
14
+ description: S,
15
+ error: k,
16
+ placeholder: u,
17
+ disabled: v,
18
+ required: w,
19
+ className: x,
20
+ disabledDays: y,
21
+ min: A,
22
+ max: b,
23
+ showOutsideDays: C,
24
+ weekStartsOn: O,
25
+ fromYear: j,
26
+ toYear: z,
27
+ locale: a,
28
+ monthLabel: I,
29
+ yearLabel: N,
30
+ formatMonthLabel: T,
31
+ cancelLabel: M,
32
+ applyLabel: q
33
+ }, B) => {
34
+ const c = f !== void 0, [E, F] = n.useState(
35
+ R ?? {}
36
+ ), e = c ? f : E, [l, i] = n.useState(!1), [m, p] = n.useState(e), G = U(), H = (t) => {
37
+ p(e), i(t);
38
+ }, J = () => {
39
+ p(e), i(!1);
40
+ }, K = () => {
41
+ const t = D(m);
42
+ c || F(t), s == null || s(t), i(!1);
43
+ }, o = D(m);
44
+ let d;
45
+ o.from ? d = { from: o.from, to: o.to } : o.to && (d = { from: o.to, to: o.to });
46
+ const L = (t) => {
47
+ p({ from: t == null ? void 0 : t.from, to: t == null ? void 0 : t.to });
48
+ };
49
+ return /* @__PURE__ */ Q(W, { open: l, onOpenChange: H, children: [
50
+ /* @__PURE__ */ r(
51
+ X,
68
52
  {
69
- render: /* @__PURE__ */ o(
70
- Q,
53
+ render: /* @__PURE__ */ r(
54
+ Z,
71
55
  {
72
- ref: O,
56
+ ref: B,
73
57
  pickerType: "dateRange",
74
- label: f,
75
- description: h,
76
- error: l,
77
- placeholder: x,
78
- disabled: A,
79
- required: N,
80
- startDate: s(e.from),
81
- endDate: s(e.to),
82
- open: v,
83
- className: F
58
+ label: h,
59
+ description: S,
60
+ error: k,
61
+ placeholder: u,
62
+ disabled: v,
63
+ required: w,
64
+ startDate: P(e.from, a),
65
+ endDate: P(e.to, a),
66
+ open: l,
67
+ className: x
84
68
  }
85
69
  )
86
70
  }
87
71
  ),
88
- /* @__PURE__ */ b(K, { align: "start", className: "w-auto max-w-none p-0", children: [
89
- /* @__PURE__ */ o(
90
- U,
91
- {
92
- mode: "range",
93
- numberOfMonths: 2,
94
- selected: D,
95
- onSelect: B,
96
- defaultMonth: m.from ?? e.from
97
- }
98
- ),
99
- /* @__PURE__ */ b("div", { className: "flex items-end gap-2 border-t border-border p-3", children: [
100
- /* @__PURE__ */ o(
101
- k,
102
- {
103
- label: "Start date",
104
- text: M,
105
- onTextChange: S,
106
- onParsedChange: (t) => c((n) => ({ ...n, from: t }))
107
- }
108
- ),
109
- /* @__PURE__ */ o("span", { className: "pb-2 text-muted-foreground", children: "–" }),
110
- /* @__PURE__ */ o(
111
- k,
112
- {
113
- label: "End date",
114
- text: j,
115
- onTextChange: y,
116
- onParsedChange: (t) => c((n) => ({ ...n, to: t }))
117
- }
118
- )
119
- ] }),
120
- /* @__PURE__ */ b("div", { className: "flex items-center gap-2 border-t border-border p-3", children: [
121
- /* @__PURE__ */ o(
122
- C,
123
- {
124
- type: "button",
125
- variant: "ghost",
126
- disabled: Y,
127
- onClick: E,
128
- children: "Reset to default"
129
- }
130
- ),
131
- /* @__PURE__ */ o(
132
- C,
72
+ /* @__PURE__ */ r(
73
+ Y,
74
+ {
75
+ align: "start",
76
+ className: "w-auto max-w-none rounded-none border-none bg-transparent p-0 shadow-none",
77
+ children: /* @__PURE__ */ r(
78
+ _,
133
79
  {
134
- type: "button",
135
- variant: "default",
136
- className: "ms-auto",
137
- disabled: L,
138
- onClick: q,
139
- children: "Apply"
80
+ variant: "range",
81
+ selected: d,
82
+ onSelect: L,
83
+ defaultMonth: m.from ?? e.from,
84
+ onCancel: J,
85
+ onApply: K,
86
+ dir: G,
87
+ disabled: y,
88
+ min: A,
89
+ max: b,
90
+ showOutsideDays: C,
91
+ weekStartsOn: O,
92
+ fromYear: j,
93
+ toYear: z,
94
+ locale: a,
95
+ monthLabel: I,
96
+ yearLabel: N,
97
+ formatMonthLabel: T,
98
+ cancelLabel: M,
99
+ applyLabel: q
140
100
  }
141
101
  )
142
- ] })
143
- ] })
102
+ }
103
+ )
144
104
  ] });
145
105
  }
146
106
  );
147
- X.displayName = "DateRangePicker";
107
+ $.displayName = "DateRangePicker";
148
108
  export {
149
- X as DateRangePicker
109
+ $ as DateRangePicker
150
110
  };
151
111
  //# sourceMappingURL=date-range-picker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date-range-picker.js","sources":["../../../../src/components/ui/date-range-picker/date-range-picker.tsx"],"sourcesContent":["import * as React from 'react';\nimport type { DateRange as RdpDateRange } from 'react-day-picker';\n\nimport { Button } from '../button';\nimport { Calendar } from '../calendar';\nimport { InputDatePicker } from '../input-date-picker';\nimport { InputText } from '../input-text';\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover';\nimport {\n DISPLAY_FORMAT,\n formatDate,\n normalizeRange,\n parseDate,\n rangesEqual,\n type DateRange,\n} from './date-range-picker-utils';\n\nexport type { DateRange };\n\n// One of the two editable start/end fields. Kept internal (only ever used twice,\n// here) — it wires an `InputText` to the draft: typing echoes verbatim into the\n// field via `onTextChange` (so a partial mid-type value isn't reformatted), and a\n// successfully parsed date is forwarded via `onParsedChange`.\nfunction DateField({\n label,\n text,\n onTextChange,\n onParsedChange,\n}: {\n label: string;\n text: string;\n onTextChange: (text: string) => void;\n onParsedChange: (date: Date | undefined) => void;\n}) {\n return (\n <InputText\n aria-label={label}\n value={text}\n placeholder={DISPLAY_FORMAT}\n onChange={(event) => {\n const next = event.target.value;\n onTextChange(next);\n\n if (next.trim() === '') {\n onParsedChange(undefined);\n return;\n }\n\n const parsed = parseDate(next);\n if (parsed) {\n onParsedChange(parsed);\n }\n }}\n />\n );\n}\n\n// A range date picker: the `InputDatePicker` trigger (pickerType=\"dateRange\")\n// opens a Popover holding a dual-month range `Calendar`, two editable start/end\n// date fields bound to the in-progress draft, and a Reset / Apply footer. Mirrors\n// the draft/commit/revert idiom of `FilterSearchFilters`: the applied range is\n// snapshotted into a draft on open; editing (calendar or text fields) mutates only\n// the draft; dismissing the popover (outside press / Escape) reverts the draft, and\n// only Apply commits it via `onValueChange` and closes.\n//\n// No dedicated token tier — the trigger brings `--ui-input-date-picker-*`, the\n// Calendar / Popover / Buttons bring their own semantic tokens. Reconcile with\n// `/figma-component DateRangePicker <url> --update` once a mockup lands.\n\nexport interface DateRangePickerProps {\n /** The applied range (controlled). Omit for uncontrolled use with `defaultValue`. */\n value?: DateRange;\n /** The initial applied range (uncontrolled) and the target of \"Reset to default\". */\n defaultValue?: DateRange;\n /** Called with the committed range when Apply is pressed. */\n onValueChange?: (range: DateRange) => void;\n /** Field label for the trigger. */\n label?: React.ReactNode;\n /** Helper text below the trigger. */\n description?: React.ReactNode;\n /** Error message below the trigger (switches the trigger to its error treatment). */\n error?: React.ReactNode;\n /** Hint shown in the trigger when no range is selected. */\n placeholder?: React.ReactNode;\n /** Disables the trigger and prevents opening the popover. */\n disabled?: boolean;\n /** Marks the trigger required. */\n required?: boolean;\n /** Extra classes merged onto the trigger. */\n className?: string;\n}\n\nconst DateRangePicker = React.forwardRef<\n HTMLButtonElement,\n DateRangePickerProps\n>(\n (\n {\n value,\n defaultValue,\n onValueChange,\n label,\n description,\n error,\n placeholder,\n disabled,\n required,\n className,\n },\n ref\n ) => {\n const isControlled = value !== undefined;\n const [internalApplied, setInternalApplied] = React.useState<DateRange>(\n defaultValue ?? {}\n );\n const applied = isControlled ? (value as DateRange) : internalApplied;\n\n const [open, setOpen] = React.useState(false);\n const [draft, setDraft] = React.useState<DateRange>(applied);\n\n const [fromText, setFromText] = React.useState(formatDate(applied.from));\n const [toText, setToText] = React.useState(formatDate(applied.to));\n\n // Sync the editable fields from a range whenever the draft changes for a\n // reason OTHER than the user typing (open / calendar click / reset). We do\n // NOT resync on every draft change: a `[draft]` effect would rewrite the\n // field mid-type (e.g. a partial year \"2\" parses, then gets echoed back\n // zero-padded as \"0002\"), scrambling further keystrokes.\n const syncFieldsFrom = (range: DateRange) => {\n setFromText(formatDate(range.from));\n setToText(formatDate(range.to));\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n // Snapshot the applied range on open; revert the draft on any dismiss\n // (outside press / Escape) so an un-applied edit never leaks out.\n setDraft(applied);\n syncFieldsFrom(applied);\n setOpen(nextOpen);\n };\n\n const handleReset = () => {\n const next = defaultValue ?? {};\n setDraft(next);\n syncFieldsFrom(next);\n };\n\n const handleApply = () => {\n // Commit chronologically ordered so a typed end-before-start range is\n // normalized rather than committed inverted.\n const committed = normalizeRange(draft);\n if (!isControlled) setInternalApplied(committed);\n onValueChange?.(committed);\n setOpen(false);\n };\n\n // Feed the calendar a normalized range so a typed inverted range still\n // highlights the correct band (the editable fields keep the raw typed text).\n // react-day-picker's `DateRange` requires `from`, so a to-only draft (end\n // typed before start) is fed as a single selected day at `to` — otherwise\n // `selected` would be `undefined` and the next calendar click would start a\n // fresh range instead of completing this one, discarding the typed end date.\n const normalizedDraft = normalizeRange(draft);\n let selectedRange: RdpDateRange | undefined;\n if (normalizedDraft.from) {\n selectedRange = { from: normalizedDraft.from, to: normalizedDraft.to };\n } else if (normalizedDraft.to) {\n selectedRange = { from: normalizedDraft.to, to: normalizedDraft.to };\n }\n\n const handleSelect = (range: RdpDateRange | undefined) => {\n const next = { from: range?.from, to: range?.to };\n setDraft(next);\n syncFieldsFrom(next);\n };\n\n const applyDisabled = rangesEqual(draft, applied);\n const resetDisabled = rangesEqual(draft, defaultValue ?? {});\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger\n render={\n <InputDatePicker\n ref={ref}\n pickerType=\"dateRange\"\n label={label}\n description={description}\n error={error}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n startDate={formatDate(applied.from)}\n endDate={formatDate(applied.to)}\n open={open}\n className={className}\n />\n }\n />\n <PopoverContent align=\"start\" className=\"w-auto max-w-none p-0\">\n <Calendar\n mode=\"range\"\n numberOfMonths={2}\n selected={selectedRange}\n onSelect={handleSelect}\n defaultMonth={draft.from ?? applied.from}\n />\n <div className=\"flex items-end gap-2 border-t border-border p-3\">\n <DateField\n label=\"Start date\"\n text={fromText}\n onTextChange={setFromText}\n onParsedChange={(parsed) =>\n setDraft((previous) => ({ ...previous, from: parsed }))\n }\n />\n <span className=\"pb-2 text-muted-foreground\">–</span>\n <DateField\n label=\"End date\"\n text={toText}\n onTextChange={setToText}\n onParsedChange={(parsed) =>\n setDraft((previous) => ({ ...previous, to: parsed }))\n }\n />\n </div>\n <div className=\"flex items-center gap-2 border-t border-border p-3\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n disabled={resetDisabled}\n onClick={handleReset}\n >\n Reset to default\n </Button>\n <Button\n type=\"button\"\n variant=\"default\"\n className=\"ms-auto\"\n disabled={applyDisabled}\n onClick={handleApply}\n >\n Apply\n </Button>\n </div>\n </PopoverContent>\n </Popover>\n );\n }\n);\nDateRangePicker.displayName = 'DateRangePicker';\n\nexport { DateRangePicker };\n"],"names":["DateField","label","text","onTextChange","onParsedChange","jsx","InputText","DISPLAY_FORMAT","event","next","parsed","parseDate","DateRangePicker","React","value","defaultValue","onValueChange","description","error","placeholder","disabled","required","className","ref","isControlled","internalApplied","setInternalApplied","applied","open","setOpen","draft","setDraft","fromText","setFromText","formatDate","toText","setToText","syncFieldsFrom","range","handleOpenChange","nextOpen","handleReset","handleApply","committed","normalizeRange","normalizedDraft","selectedRange","handleSelect","applyDisabled","rangesEqual","resetDisabled","jsxs","Popover","PopoverTrigger","InputDatePicker","PopoverContent","Calendar","previous","Button"],"mappings":"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"}
1
+ {"version":3,"file":"date-range-picker.js","sources":["../../../../src/components/ui/date-range-picker/date-range-picker.tsx"],"sourcesContent":["import * as React from 'react';\nimport type {\n DateRange as RdpDateRange,\n DayPickerLocale,\n Matcher,\n} from 'react-day-picker';\n\nimport { useDocDir } from '@/lib/use-doc-dir';\nimport { CalendarPanel } from '../calendar-panel';\nimport { InputDatePicker } from '../input-date-picker';\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover';\nimport {\n formatDate,\n normalizeRange,\n type DateRange,\n} from './date-range-picker-utils';\n\nexport type { DateRange };\n\n// A range date picker: the `InputDatePicker` trigger (pickerType=\"dateRange\")\n// opens a Popover holding a dual-month range `CalendarPanel`. Mirrors the\n// draft/commit/revert idiom of `FilterSearchFilters`: the applied range is\n// snapshotted into a draft on open; selecting days mutates only the draft;\n// dismissing the popover (outside press / Escape) reverts the draft, `Cancel`\n// does the same explicitly, and only `Apply` commits it via `onValueChange`\n// and closes. The footer (Cancel/Apply) is `CalendarPanel`'s own — this\n// component owns no footer or fields of its own.\n//\n// Everything below `className` in the props is a pass-through to that\n// `CalendarPanel` — the selection constraints and every string it renders on its\n// own — so a consumer can localize and constrain the popup without reaching for\n// `CalendarPanel` directly. Only `disabledDays` is renamed (the panel's\n// `disabled`), because `disabled` here disables the trigger. `locale` is also\n// read directly by the trigger's `formatDate` (below), not just passed through.\n//\n// No dedicated token tier — the trigger brings `--ui-input-date-picker-*` and\n// the popup is themed by the composed `CalendarPanel`. `Popover` contributes\n// only positioning, portaling and dismissal — its own container chrome is\n// neutralized via `className` below so `CalendarPanel`'s own chrome shows\n// through instead.\n\nexport interface DateRangePickerProps {\n /** The applied range (controlled). Omit for uncontrolled use with `defaultValue`. */\n value?: DateRange;\n /** The initial applied range (uncontrolled). */\n defaultValue?: DateRange;\n /** Called with the committed range when Apply is pressed. */\n onValueChange?: (range: DateRange) => void;\n /** Field label for the trigger. */\n label?: React.ReactNode;\n /** Helper text below the trigger. */\n description?: React.ReactNode;\n /** Error message below the trigger (switches the trigger to its error treatment). */\n error?: React.ReactNode;\n /** Hint shown in the trigger when no range is selected. */\n placeholder?: React.ReactNode;\n /** Disables the trigger and prevents opening the popover. */\n disabled?: boolean;\n /** Marks the trigger required. */\n required?: boolean;\n /** Extra classes merged onto the trigger's field wrapper (label + box + message). */\n className?: string;\n /** Days that cannot be selected in the calendar. */\n disabledDays?: Matcher | Matcher[];\n /** Minimum number of nights between the range's start and end (`differenceInCalendarDays(to, from)`) — e.g. `min={7}` requires at least 8 selectable days. */\n min?: number;\n /** Maximum number of nights between the range's start and end (`differenceInCalendarDays(to, from)`) — e.g. `max={31}` admits up to 32 selectable days. */\n max?: number;\n /** Render the leading/trailing days of the adjacent months. */\n showOutsideDays?: boolean;\n /**\n * First day of the week (0 = Sunday). Defaults to `locale`'s own week\n * start, falling back to Monday when no `locale` is given.\n */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /**\n * First year offered by the year dropdown and the earliest month the grid\n * can navigate to. Defaults to 50 years back.\n */\n fromYear?: number;\n /**\n * Last year offered by the year dropdown and the latest month the grid can\n * navigate to. Defaults to 50 years ahead.\n */\n toYear?: number;\n /**\n * Localizes weekday names, the calendar's default day-cell/caption\n * accessible labels, and the trigger's month name (e.g. `import { es }\n * from 'react-day-picker/locale'`). The trigger's day/year order stays\n * fixed (`MMM d, yyyy`) — only the month name translates, not the\n * ordering. Defaults to date-fns `enUS`. Does not translate `monthLabel`/\n * `yearLabel`/`cancelLabel`/`applyLabel`/`formatMonthLabel` — those are\n * separate props.\n */\n locale?: DayPickerLocale;\n /** Accessible name of the calendar's month dropdown. */\n monthLabel?: string;\n /** Accessible name of the calendar's year dropdown. */\n yearLabel?: string;\n /** Formats a month's name for the month dropdown. Defaults to `locale`-aware `date-fns` formatting. */\n formatMonthLabel?: (date: Date) => string;\n /** Popup footer's \"Cancel\" button label. */\n cancelLabel?: string;\n /** Popup footer's \"Apply\" button label. */\n applyLabel?: string;\n}\n\nconst DateRangePicker = React.forwardRef<\n HTMLButtonElement,\n DateRangePickerProps\n>(\n (\n {\n value,\n defaultValue,\n onValueChange,\n label,\n description,\n error,\n placeholder,\n disabled,\n required,\n className,\n disabledDays,\n min,\n max,\n showOutsideDays,\n weekStartsOn,\n fromYear,\n toYear,\n locale,\n monthLabel,\n yearLabel,\n formatMonthLabel,\n cancelLabel,\n applyLabel,\n },\n ref\n ) => {\n const isControlled = value !== undefined;\n const [internalApplied, setInternalApplied] = React.useState<DateRange>(\n defaultValue ?? {}\n );\n const applied = isControlled ? (value as DateRange) : internalApplied;\n\n const [open, setOpen] = React.useState(false);\n const [draft, setDraft] = React.useState<DateRange>(applied);\n\n // `CalendarPanel` needs an explicit `dir` — `react-day-picker`'s own\n // Arrow-Left/Right roaming only mirrors when `dir` reaches it directly,\n // not via CSS/ancestor `dir` inheritance (see calendar-panel.tsx). Read\n // it via `useDocDir()` (`src/lib/use-doc-dir.ts`) rather than adding a\n // public `dir` prop, so an ancestor still sets it and this component\n // doesn't need one of its own — the same hook `app-shell-chat.tsx` and\n // `dialog-welcome.tsx` use to feed `dir` into other things that need it\n // directly (a resize edge's keyboard math, Embla's `direction` option).\n // It reads `document.documentElement`, not a per-ancestor lookup off the\n // trigger, so it isn't affected by the trigger itself being rendered\n // inside another component's portaled content (e.g. a\n // `FilterSearchFilters` popover) — the real DOM ancestor chain there no\n // longer includes an app-level `dir` wrapper that only wraps the React\n // tree, but `document.documentElement` is unaffected either way.\n const dir = useDocDir();\n\n const handleOpenChange = (nextOpen: boolean) => {\n // Snapshot the applied range on open; revert the draft on any dismiss\n // (outside press / Escape) so an un-applied edit never leaks out.\n setDraft(applied);\n setOpen(nextOpen);\n };\n\n const handleCancel = () => {\n setDraft(applied);\n setOpen(false);\n };\n\n const handleApply = () => {\n // Commit chronologically ordered so an inverted selection is normalized\n // rather than committed inverted.\n const committed = normalizeRange(draft);\n if (!isControlled) setInternalApplied(committed);\n onValueChange?.(committed);\n setOpen(false);\n };\n\n // Feed the calendar a normalized range so an inverted draft still\n // highlights the correct band. react-day-picker's `DateRange` requires\n // `from`, so a to-only draft is fed as a single selected day at `to` —\n // otherwise `selected` would be `undefined` and the next calendar click\n // would start a fresh range instead of completing this one.\n const normalizedDraft = normalizeRange(draft);\n let selectedRange: RdpDateRange | undefined;\n if (normalizedDraft.from) {\n selectedRange = { from: normalizedDraft.from, to: normalizedDraft.to };\n } else if (normalizedDraft.to) {\n selectedRange = { from: normalizedDraft.to, to: normalizedDraft.to };\n }\n\n const handleSelect = (range: RdpDateRange | undefined) => {\n setDraft({ from: range?.from, to: range?.to });\n };\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger\n render={\n <InputDatePicker\n ref={ref}\n pickerType=\"dateRange\"\n label={label}\n description={description}\n error={error}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n startDate={formatDate(applied.from, locale)}\n endDate={formatDate(applied.to, locale)}\n open={open}\n className={className}\n />\n }\n />\n <PopoverContent\n align=\"start\"\n className=\"w-auto max-w-none rounded-none border-none bg-transparent p-0 shadow-none\"\n >\n <CalendarPanel\n variant=\"range\"\n selected={selectedRange}\n onSelect={handleSelect}\n defaultMonth={draft.from ?? applied.from}\n onCancel={handleCancel}\n onApply={handleApply}\n dir={dir}\n disabled={disabledDays}\n min={min}\n max={max}\n showOutsideDays={showOutsideDays}\n weekStartsOn={weekStartsOn}\n fromYear={fromYear}\n toYear={toYear}\n locale={locale}\n monthLabel={monthLabel}\n yearLabel={yearLabel}\n formatMonthLabel={formatMonthLabel}\n cancelLabel={cancelLabel}\n applyLabel={applyLabel}\n />\n </PopoverContent>\n </Popover>\n );\n }\n);\nDateRangePicker.displayName = 'DateRangePicker';\n\nexport { DateRangePicker };\n"],"names":["DateRangePicker","React","value","defaultValue","onValueChange","label","description","error","placeholder","disabled","required","className","disabledDays","min","max","showOutsideDays","weekStartsOn","fromYear","toYear","locale","monthLabel","yearLabel","formatMonthLabel","cancelLabel","applyLabel","ref","isControlled","internalApplied","setInternalApplied","applied","open","setOpen","draft","setDraft","dir","useDocDir","handleOpenChange","nextOpen","handleCancel","handleApply","committed","normalizeRange","normalizedDraft","selectedRange","handleSelect","range","jsxs","Popover","jsx","PopoverTrigger","InputDatePicker","formatDate","PopoverContent","CalendarPanel"],"mappings":"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"}
@@ -1,112 +1,169 @@
1
- import { jsx as r, jsxs as g } from "react/jsx-runtime";
1
+ import { jsxs as c, jsx as r } from "react/jsx-runtime";
2
2
  import * as d from "react";
3
- import { Menu as o } from "@base-ui/react/menu";
4
- import { ChevronRightIcon as h } from "@acronis-platform/icons-react/stroke-mono";
5
- import { cn as a } from "../../../lib/utils.js";
6
- import { usePortalContainer as x } from "../../../lib/portal-container.js";
7
- const _ = o.Root, k = o.Trigger, M = d.forwardRef(({ className: n, ...e }, t) => /* @__PURE__ */ r(
8
- o.Group,
3
+ import { Menu as t } from "@base-ui/react/menu";
4
+ import { CheckIcon as N, ChevronRightIcon as M } from "@acronis-platform/icons-react/stroke-mono";
5
+ import { cn as i } from "../../../lib/utils.js";
6
+ import { usePortalContainer as D } from "../../../lib/portal-container.js";
7
+ const B = t.Root, E = t.Trigger, y = d.forwardRef(({ className: o, ...n }, e) => /* @__PURE__ */ r(
8
+ t.Group,
9
9
  {
10
- ref: t,
11
- className: a(
10
+ ref: e,
11
+ className: i(
12
12
  "flex flex-col items-start overflow-clip gap-[var(--ui-button-menu-dropdown-section-list-gap)] px-[var(--ui-button-menu-dropdown-section-container-padding-x)] py-[var(--ui-button-menu-dropdown-section-container-padding-y)] [&:not(:first-child)]:border-t [&:not(:first-child)]:border-[length:var(--ui-button-menu-dropdown-section-container-border-width)] [&:not(:first-child)]:border-[var(--ui-button-menu-dropdown-section-container-border-color)]",
13
- n
13
+ o
14
14
  ),
15
- ...e
15
+ ...n
16
16
  }
17
17
  ));
18
- M.displayName = "DropdownMenuGroup";
19
- const G = o.Portal, j = o.SubmenuRoot, p = "z-50 min-w-[8rem] overflow-y-auto overflow-x-hidden flex flex-col gap-[var(--ui-button-menu-dropdown-container-gap)] bg-[var(--ui-button-menu-dropdown-container-color)] border-solid border-[length:var(--ui-button-menu-dropdown-container-border-width)] border-[var(--ui-button-menu-dropdown-container-border-color)] rounded-[var(--ui-button-menu-dropdown-container-border-radius)] px-[var(--ui-button-menu-dropdown-container-padding-x)] py-[var(--ui-button-menu-dropdown-container-padding-y)] shadow-md outline-none duration-200 data-[open]:animate-in data-[closed]:animate-out data-[open]:fade-in-0 data-[closed]:fade-out-0 data-[open]:zoom-in-95 data-[closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2", c = "relative flex w-full shrink-0 cursor-default select-none items-start gap-[var(--ui-button-menu-dropdown-item-container-gap)] min-h-[var(--ui-button-menu-dropdown-item-container-height)] px-[var(--ui-button-menu-dropdown-item-container-padding-x)] py-[var(--ui-button-menu-dropdown-item-container-padding-y)] text-sm font-semibold leading-6 outline-none transition-colors bg-[var(--ui-button-menu-dropdown-item-container-color-idle)] text-[var(--ui-button-menu-dropdown-item-label-color)] [&_svg]:text-[var(--ui-button-menu-dropdown-item-icon-color)] data-[highlighted]:bg-[var(--ui-button-menu-dropdown-item-container-color-hover)] data-[highlighted]:active:bg-[var(--ui-button-menu-dropdown-item-container-color-active)] [&:focus-visible:not(:hover)]:rounded-[3px] [&:focus-visible:not(:hover)]:ring-[3px] [&:focus-visible:not(:hover)]:ring-inset [&:focus-visible:not(:hover)]:ring-[var(--ui-focus-primary)] data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", N = d.forwardRef(
18
+ y.displayName = "DropdownMenuGroup";
19
+ const F = t.Portal, H = t.SubmenuRoot, l = "z-50 min-w-[8rem] overflow-y-auto overflow-x-hidden flex flex-col gap-[var(--ui-button-menu-dropdown-container-gap)] bg-[var(--ui-button-menu-dropdown-container-color)] border-solid border-[length:var(--ui-button-menu-dropdown-container-border-width)] border-[var(--ui-button-menu-dropdown-container-border-color)] rounded-[var(--ui-button-menu-dropdown-container-border-radius)] px-[var(--ui-button-menu-dropdown-container-padding-x)] py-[var(--ui-button-menu-dropdown-container-padding-y)] shadow-md outline-none duration-200 data-[open]:animate-in data-[closed]:animate-out data-[open]:fade-in-0 data-[closed]:fade-out-0 data-[open]:zoom-in-95 data-[closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2", u = "relative flex w-full shrink-0 cursor-default select-none items-start gap-[var(--ui-button-menu-dropdown-item-container-gap)] min-h-[var(--ui-button-menu-dropdown-item-container-height)] px-[var(--ui-button-menu-dropdown-item-container-padding-x)] py-[var(--ui-button-menu-dropdown-item-container-padding-y)] text-sm font-semibold leading-6 outline-none transition-colors bg-[var(--ui-button-menu-dropdown-item-container-color-idle)] text-[var(--ui-button-menu-dropdown-item-label-color)] [&_svg]:text-[var(--ui-button-menu-dropdown-item-icon-color)] data-[highlighted]:bg-[var(--ui-button-menu-dropdown-item-container-color-hover)] data-[highlighted]:active:bg-[var(--ui-button-menu-dropdown-item-container-color-active)] [&:focus-visible:not(:hover)]:rounded-[3px] [&:focus-visible:not(:hover)]:ring-[3px] [&:focus-visible:not(:hover)]:ring-inset [&:focus-visible:not(:hover)]:ring-[var(--ui-focus-primary)] data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", b = "flex h-6 w-4 shrink-0 items-center justify-center text-[var(--ui-button-menu-dropdown-item-icon-color)]", p = "ps-[calc(var(--ui-button-menu-dropdown-item-container-padding-x)+1rem+var(--ui-button-menu-dropdown-item-container-gap))]", R = d.forwardRef(
20
20
  ({
21
- className: n,
22
- side: e,
23
- align: t,
24
- sideOffset: i = 4,
25
- portal: u = !0,
26
- portalContainer: m,
27
- keepMounted: l,
28
- ...b
29
- }, w) => {
30
- const v = x(), f = m ?? v, s = /* @__PURE__ */ r(
31
- o.Positioner,
21
+ className: o,
22
+ side: n,
23
+ align: e,
24
+ sideOffset: a = 4,
25
+ portal: s = !0,
26
+ portalContainer: w,
27
+ keepMounted: v,
28
+ ...f
29
+ }, g) => {
30
+ const h = D(), x = w ?? h, m = /* @__PURE__ */ r(
31
+ t.Positioner,
32
32
  {
33
- side: e,
34
- align: t,
35
- sideOffset: i,
33
+ side: n,
34
+ align: e,
35
+ sideOffset: a,
36
36
  className: "z-50",
37
37
  children: /* @__PURE__ */ r(
38
- o.Popup,
38
+ t.Popup,
39
39
  {
40
- ref: w,
41
- className: a(p, n),
42
- ...b
40
+ ref: g,
41
+ className: i(l, o),
42
+ ...f
43
43
  }
44
44
  )
45
45
  }
46
46
  );
47
- return u ? /* @__PURE__ */ r(o.Portal, { container: f, keepMounted: l, children: s }) : s;
47
+ return s ? /* @__PURE__ */ r(t.Portal, { container: x, keepMounted: v, children: m }) : m;
48
48
  }
49
49
  );
50
- N.displayName = "DropdownMenuContent";
51
- const D = d.forwardRef(({ className: n, sideOffset: e = 4, ...t }, i) => /* @__PURE__ */ r(o.Positioner, { sideOffset: e, className: "z-50", children: /* @__PURE__ */ r(
52
- o.Popup,
50
+ R.displayName = "DropdownMenuContent";
51
+ const C = d.forwardRef(({ className: o, sideOffset: n = 4, ...e }, a) => /* @__PURE__ */ r(t.Positioner, { sideOffset: n, className: "z-50", children: /* @__PURE__ */ r(
52
+ t.Popup,
53
53
  {
54
- ref: i,
55
- className: a(p, n),
56
- ...t
54
+ ref: a,
55
+ className: i(l, o),
56
+ ...e
57
57
  }
58
58
  ) }));
59
- D.displayName = "DropdownMenuSubContent";
60
- const y = d.forwardRef(({ className: n, inset: e, ...t }, i) => /* @__PURE__ */ r(
61
- o.Item,
59
+ C.displayName = "DropdownMenuSubContent";
60
+ const I = d.forwardRef(({ className: o, inset: n, ...e }, a) => /* @__PURE__ */ r(
61
+ t.Item,
62
62
  {
63
- ref: i,
64
- className: a(c, e && "ps-8", n),
65
- ...t
63
+ ref: a,
64
+ className: i(u, n && p, o),
65
+ ...e
66
66
  }
67
67
  ));
68
- y.displayName = "DropdownMenuItem";
69
- const C = d.forwardRef(({ className: n, inset: e, children: t, ...i }, u) => /* @__PURE__ */ g(
70
- o.SubmenuTrigger,
68
+ I.displayName = "DropdownMenuItem";
69
+ const S = d.forwardRef(({ className: o, inset: n, children: e, ...a }, s) => /* @__PURE__ */ c(
70
+ t.SubmenuTrigger,
71
71
  {
72
- ref: u,
73
- className: a(
74
- c,
72
+ ref: s,
73
+ className: i(
74
+ u,
75
75
  "data-[popup-open]:bg-[var(--ui-button-menu-dropdown-item-container-color-active)]",
76
- e && "ps-8",
77
- n
76
+ n && p,
77
+ o
78
78
  ),
79
- ...i,
79
+ ...a,
80
80
  children: [
81
- t,
82
- /* @__PURE__ */ r(h, { className: "ms-auto self-center text-[var(--ui-button-menu-dropdown-extras-cascade-icon-color)] rtl:rotate-180" })
81
+ e,
82
+ /* @__PURE__ */ r(M, { className: "ms-auto self-center text-[var(--ui-button-menu-dropdown-extras-cascade-icon-color)] rtl:rotate-180" })
83
83
  ]
84
84
  }
85
85
  ));
86
- C.displayName = "DropdownMenuSubTrigger";
87
- function R({
88
- className: n,
89
- ...e
86
+ S.displayName = "DropdownMenuSubTrigger";
87
+ function k({
88
+ className: o,
89
+ ...n
90
90
  }) {
91
91
  return /* @__PURE__ */ r(
92
92
  "span",
93
93
  {
94
- className: a("ms-auto shrink-0 text-sm font-normal leading-6 text-[var(--ui-button-menu-dropdown-extras-shortcut-label-color)]", n),
95
- ...e
94
+ className: i("ms-auto shrink-0 text-sm font-normal leading-6 text-[var(--ui-button-menu-dropdown-extras-shortcut-label-color)]", o),
95
+ ...n
96
96
  }
97
97
  );
98
98
  }
99
- R.displayName = "DropdownMenuShortcut";
99
+ k.displayName = "DropdownMenuShortcut";
100
+ const z = d.forwardRef(({ className: o, children: n, ...e }, a) => /* @__PURE__ */ c(
101
+ t.CheckboxItem,
102
+ {
103
+ ref: a,
104
+ className: i(u, o),
105
+ ...e,
106
+ children: [
107
+ /* @__PURE__ */ r("span", { className: b, children: /* @__PURE__ */ r(t.CheckboxItemIndicator, { className: "flex", children: /* @__PURE__ */ r(N, { className: "size-4" }) }) }),
108
+ n
109
+ ]
110
+ }
111
+ ));
112
+ z.displayName = "DropdownMenuCheckboxItem";
113
+ const J = t.RadioGroup, P = d.forwardRef(({ className: o, children: n, ...e }, a) => /* @__PURE__ */ c(
114
+ t.RadioItem,
115
+ {
116
+ ref: a,
117
+ className: i(u, o),
118
+ ...e,
119
+ children: [
120
+ /* @__PURE__ */ r("span", { className: b, children: /* @__PURE__ */ r(t.RadioItemIndicator, { className: "block size-2 rounded-full bg-current" }) }),
121
+ n
122
+ ]
123
+ }
124
+ ));
125
+ P.displayName = "DropdownMenuRadioItem";
126
+ const G = d.forwardRef(({ className: o, inset: n, ...e }, a) => /* @__PURE__ */ r(
127
+ "div",
128
+ {
129
+ ref: a,
130
+ className: i(
131
+ "px-[var(--ui-button-menu-dropdown-item-container-padding-x)] py-[var(--ui-button-menu-dropdown-item-container-padding-y)] text-sm font-semibold leading-6 text-[var(--ui-button-menu-dropdown-item-label-color)]",
132
+ n && p,
133
+ o
134
+ ),
135
+ ...e
136
+ }
137
+ ));
138
+ G.displayName = "DropdownMenuLabel";
139
+ const T = d.forwardRef(({ className: o, ...n }, e) => /* @__PURE__ */ r(
140
+ "div",
141
+ {
142
+ ref: e,
143
+ role: "separator",
144
+ className: i(
145
+ "my-[var(--ui-button-menu-dropdown-section-list-gap)] h-[var(--ui-button-menu-dropdown-section-container-border-width)] bg-[var(--ui-button-menu-dropdown-section-container-border-color)]",
146
+ o
147
+ ),
148
+ ...n
149
+ }
150
+ ));
151
+ T.displayName = "DropdownMenuSeparator";
100
152
  export {
101
- _ as DropdownMenu,
102
- N as DropdownMenuContent,
103
- M as DropdownMenuGroup,
104
- y as DropdownMenuItem,
105
- G as DropdownMenuPortal,
106
- R as DropdownMenuShortcut,
107
- j as DropdownMenuSub,
108
- D as DropdownMenuSubContent,
109
- C as DropdownMenuSubTrigger,
110
- k as DropdownMenuTrigger
153
+ B as DropdownMenu,
154
+ z as DropdownMenuCheckboxItem,
155
+ R as DropdownMenuContent,
156
+ y as DropdownMenuGroup,
157
+ I as DropdownMenuItem,
158
+ G as DropdownMenuLabel,
159
+ F as DropdownMenuPortal,
160
+ J as DropdownMenuRadioGroup,
161
+ P as DropdownMenuRadioItem,
162
+ T as DropdownMenuSeparator,
163
+ k as DropdownMenuShortcut,
164
+ H as DropdownMenuSub,
165
+ C as DropdownMenuSubContent,
166
+ S as DropdownMenuSubTrigger,
167
+ E as DropdownMenuTrigger
111
168
  };
112
169
  //# sourceMappingURL=dropdown-menu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown-menu.js","sources":["../../../../src/components/ui/dropdown-menu/dropdown-menu.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Menu as MenuPrimitive } from '@base-ui/react/menu';\nimport { ChevronRightIcon } from '@acronis-platform/icons-react/stroke-mono';\n\nimport { cn } from '@/lib/utils';\nimport { usePortalContainer } from '@/lib/portal-container';\n\n// A menu of actions anchored to a trigger, built on the Base UI Menu primitive\n// (positioning, focus management, typeahead, outside-press / Esc dismissal,\n// ARIA). Themed from the `--ui-button-menu-dropdown-*` token tier generated by\n// @acronis-platform/tokens-pd (ButtonMenu/default.css). Enter/exit animations\n// use `tw-animate-css` keyed to data-[open]/[closed]/[side].\n\nconst DropdownMenu = MenuPrimitive.Root;\nconst DropdownMenuTrigger = MenuPrimitive.Trigger;\nconst DropdownMenuGroup = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof MenuPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <MenuPrimitive.Group\n ref={ref}\n className={cn(\n 'flex flex-col items-start overflow-clip gap-[var(--ui-button-menu-dropdown-section-list-gap)] px-[var(--ui-button-menu-dropdown-section-container-padding-x)] py-[var(--ui-button-menu-dropdown-section-container-padding-y)] [&:not(:first-child)]:border-t [&:not(:first-child)]:border-[length:var(--ui-button-menu-dropdown-section-container-border-width)] [&:not(:first-child)]:border-[var(--ui-button-menu-dropdown-section-container-border-color)]',\n className\n )}\n {...props}\n />\n));\nDropdownMenuGroup.displayName = 'DropdownMenuGroup';\nconst DropdownMenuPortal = MenuPrimitive.Portal;\nconst DropdownMenuSub = MenuPrimitive.SubmenuRoot;\n\nconst popupClassName =\n 'z-50 min-w-[8rem] overflow-y-auto overflow-x-hidden flex flex-col gap-[var(--ui-button-menu-dropdown-container-gap)] bg-[var(--ui-button-menu-dropdown-container-color)] border-solid border-[length:var(--ui-button-menu-dropdown-container-border-width)] border-[var(--ui-button-menu-dropdown-container-border-color)] rounded-[var(--ui-button-menu-dropdown-container-border-radius)] px-[var(--ui-button-menu-dropdown-container-padding-x)] py-[var(--ui-button-menu-dropdown-container-padding-y)] shadow-md outline-none duration-200 data-[open]:animate-in data-[closed]:animate-out data-[open]:fade-in-0 data-[closed]:fade-out-0 data-[open]:zoom-in-95 data-[closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2';\n\nconst itemClassName =\n 'relative flex w-full shrink-0 cursor-default select-none items-start gap-[var(--ui-button-menu-dropdown-item-container-gap)] min-h-[var(--ui-button-menu-dropdown-item-container-height)] px-[var(--ui-button-menu-dropdown-item-container-padding-x)] py-[var(--ui-button-menu-dropdown-item-container-padding-y)] text-sm font-semibold leading-6 outline-none transition-colors bg-[var(--ui-button-menu-dropdown-item-container-color-idle)] text-[var(--ui-button-menu-dropdown-item-label-color)] [&_svg]:text-[var(--ui-button-menu-dropdown-item-icon-color)] data-[highlighted]:bg-[var(--ui-button-menu-dropdown-item-container-color-hover)] data-[highlighted]:active:bg-[var(--ui-button-menu-dropdown-item-container-color-active)] [&:focus-visible:not(:hover)]:rounded-[3px] [&:focus-visible:not(:hover)]:ring-[3px] [&:focus-visible:not(:hover)]:ring-inset [&:focus-visible:not(:hover)]:ring-[var(--ui-focus-primary)] data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0';\n\nexport interface DropdownMenuContentProps\n extends React.ComponentPropsWithoutRef<typeof MenuPrimitive.Popup> {\n side?: MenuPrimitive.Positioner.Props['side'];\n align?: MenuPrimitive.Positioner.Props['align'];\n sideOffset?: number;\n /** Render inside a portal (default `true`). */\n portal?: boolean;\n /** Portal container — pass a shadow-root mount for isolated-style previews. */\n portalContainer?: MenuPrimitive.Portal.Props['container'];\n keepMounted?: MenuPrimitive.Portal.Props['keepMounted'];\n}\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.Popup>,\n DropdownMenuContentProps\n>(\n (\n {\n className,\n side,\n align,\n sideOffset = 4,\n portal = true,\n portalContainer,\n keepMounted,\n ...props\n },\n ref\n ) => {\n const ctxContainer = usePortalContainer();\n const resolvedContainer = portalContainer ?? ctxContainer;\n\n const positioner = (\n <MenuPrimitive.Positioner\n side={side}\n align={align}\n sideOffset={sideOffset}\n className=\"z-50\"\n >\n <MenuPrimitive.Popup\n ref={ref}\n className={cn(popupClassName, className)}\n {...props}\n />\n </MenuPrimitive.Positioner>\n );\n return portal ? (\n <MenuPrimitive.Portal container={resolvedContainer} keepMounted={keepMounted}>\n {positioner}\n </MenuPrimitive.Portal>\n ) : (\n positioner\n );\n }\n);\nDropdownMenuContent.displayName = 'DropdownMenuContent';\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.Popup>,\n React.ComponentPropsWithoutRef<typeof MenuPrimitive.Popup> & {\n sideOffset?: number;\n }\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <MenuPrimitive.Positioner sideOffset={sideOffset} className=\"z-50\">\n <MenuPrimitive.Popup\n ref={ref}\n className={cn(popupClassName, className)}\n {...props}\n />\n </MenuPrimitive.Positioner>\n));\nDropdownMenuSubContent.displayName = 'DropdownMenuSubContent';\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof MenuPrimitive.Item> & { inset?: boolean }\n>(({ className, inset, ...props }, ref) => (\n <MenuPrimitive.Item\n ref={ref}\n className={cn(itemClassName, inset && 'ps-8', className)}\n {...props}\n />\n));\nDropdownMenuItem.displayName = 'DropdownMenuItem';\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.SubmenuTrigger>,\n React.ComponentPropsWithoutRef<typeof MenuPrimitive.SubmenuTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <MenuPrimitive.SubmenuTrigger\n ref={ref}\n className={cn(\n itemClassName,\n 'data-[popup-open]:bg-[var(--ui-button-menu-dropdown-item-container-color-active)]',\n inset && 'ps-8',\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ms-auto self-center text-[var(--ui-button-menu-dropdown-extras-cascade-icon-color)] rtl:rotate-180\" />\n </MenuPrimitive.SubmenuTrigger>\n));\nDropdownMenuSubTrigger.displayName = 'DropdownMenuSubTrigger';\n\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) {\n return (\n <span\n className={cn('ms-auto shrink-0 text-sm font-normal leading-6 text-[var(--ui-button-menu-dropdown-extras-shortcut-label-color)]', className)}\n {...props}\n />\n );\n}\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut';\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuPortal,\n};\n"],"names":["DropdownMenu","MenuPrimitive","DropdownMenuTrigger","DropdownMenuGroup","React","className","props","ref","jsx","cn","DropdownMenuPortal","DropdownMenuSub","popupClassName","itemClassName","DropdownMenuContent","side","align","sideOffset","portal","portalContainer","keepMounted","ctxContainer","usePortalContainer","resolvedContainer","positioner","DropdownMenuSubContent","DropdownMenuItem","inset","DropdownMenuSubTrigger","children","jsxs","ChevronRightIcon","DropdownMenuShortcut"],"mappings":"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"}
1
+ {"version":3,"file":"dropdown-menu.js","sources":["../../../../src/components/ui/dropdown-menu/dropdown-menu.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Menu as MenuPrimitive } from '@base-ui/react/menu';\nimport { CheckIcon, ChevronRightIcon } from '@acronis-platform/icons-react/stroke-mono';\n\nimport { cn } from '@/lib/utils';\nimport { usePortalContainer } from '@/lib/portal-container';\n\n// A menu of actions anchored to a trigger, built on the Base UI Menu primitive\n// (positioning, focus management, typeahead, outside-press / Esc dismissal,\n// ARIA). Themed from the `--ui-button-menu-dropdown-*` token tier generated by\n// @acronis-platform/tokens-pd (ButtonMenu/default.css). Enter/exit animations\n// use `tw-animate-css` keyed to data-[open]/[closed]/[side].\n\nconst DropdownMenu = MenuPrimitive.Root;\nconst DropdownMenuTrigger = MenuPrimitive.Trigger;\nconst DropdownMenuGroup = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof MenuPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <MenuPrimitive.Group\n ref={ref}\n className={cn(\n 'flex flex-col items-start overflow-clip gap-[var(--ui-button-menu-dropdown-section-list-gap)] px-[var(--ui-button-menu-dropdown-section-container-padding-x)] py-[var(--ui-button-menu-dropdown-section-container-padding-y)] [&:not(:first-child)]:border-t [&:not(:first-child)]:border-[length:var(--ui-button-menu-dropdown-section-container-border-width)] [&:not(:first-child)]:border-[var(--ui-button-menu-dropdown-section-container-border-color)]',\n className\n )}\n {...props}\n />\n));\nDropdownMenuGroup.displayName = 'DropdownMenuGroup';\nconst DropdownMenuPortal = MenuPrimitive.Portal;\nconst DropdownMenuSub = MenuPrimitive.SubmenuRoot;\n\nconst popupClassName =\n 'z-50 min-w-[8rem] overflow-y-auto overflow-x-hidden flex flex-col gap-[var(--ui-button-menu-dropdown-container-gap)] bg-[var(--ui-button-menu-dropdown-container-color)] border-solid border-[length:var(--ui-button-menu-dropdown-container-border-width)] border-[var(--ui-button-menu-dropdown-container-border-color)] rounded-[var(--ui-button-menu-dropdown-container-border-radius)] px-[var(--ui-button-menu-dropdown-container-padding-x)] py-[var(--ui-button-menu-dropdown-container-padding-y)] shadow-md outline-none duration-200 data-[open]:animate-in data-[closed]:animate-out data-[open]:fade-in-0 data-[closed]:fade-out-0 data-[open]:zoom-in-95 data-[closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2';\n\nconst itemClassName =\n 'relative flex w-full shrink-0 cursor-default select-none items-start gap-[var(--ui-button-menu-dropdown-item-container-gap)] min-h-[var(--ui-button-menu-dropdown-item-container-height)] px-[var(--ui-button-menu-dropdown-item-container-padding-x)] py-[var(--ui-button-menu-dropdown-item-container-padding-y)] text-sm font-semibold leading-6 outline-none transition-colors bg-[var(--ui-button-menu-dropdown-item-container-color-idle)] text-[var(--ui-button-menu-dropdown-item-label-color)] [&_svg]:text-[var(--ui-button-menu-dropdown-item-icon-color)] data-[highlighted]:bg-[var(--ui-button-menu-dropdown-item-container-color-hover)] data-[highlighted]:active:bg-[var(--ui-button-menu-dropdown-item-container-color-active)] [&:focus-visible:not(:hover)]:rounded-[3px] [&:focus-visible:not(:hover)]:ring-[3px] [&:focus-visible:not(:hover)]:ring-inset [&:focus-visible:not(:hover)]:ring-[var(--ui-focus-primary)] data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0';\n\n// A checkbox/radio indicator lives in the same in-flow leading slot a menu-item\n// icon would occupy, so its label lands on the item gap grid (padding-x + 16px\n// glyph + gap) instead of a hardcoded indent. `h-6` matches the item's\n// line-height so the glyph centers on the first line of a wrapping label.\nconst indicatorSlotClassName =\n 'flex h-6 w-4 shrink-0 items-center justify-center text-[var(--ui-button-menu-dropdown-item-icon-color)]';\n\n// Indent for plain items/labels that must line up with the labels of sibling\n// checkbox/radio items.\nconst indicatorInsetClassName =\n 'ps-[calc(var(--ui-button-menu-dropdown-item-container-padding-x)+1rem+var(--ui-button-menu-dropdown-item-container-gap))]';\n\nexport interface DropdownMenuContentProps\n extends React.ComponentPropsWithoutRef<typeof MenuPrimitive.Popup> {\n side?: MenuPrimitive.Positioner.Props['side'];\n align?: MenuPrimitive.Positioner.Props['align'];\n sideOffset?: number;\n /** Render inside a portal (default `true`). */\n portal?: boolean;\n /** Portal container — pass a shadow-root mount for isolated-style previews. */\n portalContainer?: MenuPrimitive.Portal.Props['container'];\n keepMounted?: MenuPrimitive.Portal.Props['keepMounted'];\n}\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.Popup>,\n DropdownMenuContentProps\n>(\n (\n {\n className,\n side,\n align,\n sideOffset = 4,\n portal = true,\n portalContainer,\n keepMounted,\n ...props\n },\n ref\n ) => {\n const ctxContainer = usePortalContainer();\n const resolvedContainer = portalContainer ?? ctxContainer;\n\n const positioner = (\n <MenuPrimitive.Positioner\n side={side}\n align={align}\n sideOffset={sideOffset}\n className=\"z-50\"\n >\n <MenuPrimitive.Popup\n ref={ref}\n className={cn(popupClassName, className)}\n {...props}\n />\n </MenuPrimitive.Positioner>\n );\n return portal ? (\n <MenuPrimitive.Portal container={resolvedContainer} keepMounted={keepMounted}>\n {positioner}\n </MenuPrimitive.Portal>\n ) : (\n positioner\n );\n }\n);\nDropdownMenuContent.displayName = 'DropdownMenuContent';\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.Popup>,\n React.ComponentPropsWithoutRef<typeof MenuPrimitive.Popup> & {\n sideOffset?: number;\n }\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <MenuPrimitive.Positioner sideOffset={sideOffset} className=\"z-50\">\n <MenuPrimitive.Popup\n ref={ref}\n className={cn(popupClassName, className)}\n {...props}\n />\n </MenuPrimitive.Positioner>\n));\nDropdownMenuSubContent.displayName = 'DropdownMenuSubContent';\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof MenuPrimitive.Item> & { inset?: boolean }\n>(({ className, inset, ...props }, ref) => (\n <MenuPrimitive.Item\n ref={ref}\n className={cn(itemClassName, inset && indicatorInsetClassName, className)}\n {...props}\n />\n));\nDropdownMenuItem.displayName = 'DropdownMenuItem';\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.SubmenuTrigger>,\n React.ComponentPropsWithoutRef<typeof MenuPrimitive.SubmenuTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <MenuPrimitive.SubmenuTrigger\n ref={ref}\n className={cn(\n itemClassName,\n 'data-[popup-open]:bg-[var(--ui-button-menu-dropdown-item-container-color-active)]',\n inset && indicatorInsetClassName,\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ms-auto self-center text-[var(--ui-button-menu-dropdown-extras-cascade-icon-color)] rtl:rotate-180\" />\n </MenuPrimitive.SubmenuTrigger>\n));\nDropdownMenuSubTrigger.displayName = 'DropdownMenuSubTrigger';\n\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) {\n return (\n <span\n className={cn('ms-auto shrink-0 text-sm font-normal leading-6 text-[var(--ui-button-menu-dropdown-extras-shortcut-label-color)]', className)}\n {...props}\n />\n );\n}\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut';\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof MenuPrimitive.CheckboxItem>\n>(({ className, children, ...props }, ref) => (\n <MenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(itemClassName, className)}\n {...props}\n >\n <span className={indicatorSlotClassName}>\n <MenuPrimitive.CheckboxItemIndicator className=\"flex\">\n <CheckIcon className=\"size-4\" />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </MenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = 'DropdownMenuCheckboxItem';\n\nconst DropdownMenuRadioGroup = MenuPrimitive.RadioGroup;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof MenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof MenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <MenuPrimitive.RadioItem\n ref={ref}\n className={cn(itemClassName, className)}\n {...props}\n >\n <span className={indicatorSlotClassName}>\n {/* The dot is the indicator element itself — Base UI renders it as a\n `<span>`, and an inline wrapper would collapse a sized child to 0. */}\n <MenuPrimitive.RadioItemIndicator className=\"block size-2 rounded-full bg-current\" />\n </span>\n {children}\n </MenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = 'DropdownMenuRadioItem';\n\nconst DropdownMenuLabel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & { inset?: boolean }\n>(({ className, inset, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'px-[var(--ui-button-menu-dropdown-item-container-padding-x)] py-[var(--ui-button-menu-dropdown-item-container-padding-y)] text-sm font-semibold leading-6 text-[var(--ui-button-menu-dropdown-item-label-color)]',\n inset && indicatorInsetClassName,\n className\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = 'DropdownMenuLabel';\n\nconst DropdownMenuSeparator = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"separator\"\n className={cn(\n 'my-[var(--ui-button-menu-dropdown-section-list-gap)] h-[var(--ui-button-menu-dropdown-section-container-border-width)] bg-[var(--ui-button-menu-dropdown-section-container-border-color)]',\n className\n )}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = 'DropdownMenuSeparator';\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuPortal,\n};\n"],"names":["DropdownMenu","MenuPrimitive","DropdownMenuTrigger","DropdownMenuGroup","React","className","props","ref","jsx","cn","DropdownMenuPortal","DropdownMenuSub","popupClassName","itemClassName","indicatorSlotClassName","indicatorInsetClassName","DropdownMenuContent","side","align","sideOffset","portal","portalContainer","keepMounted","ctxContainer","usePortalContainer","resolvedContainer","positioner","DropdownMenuSubContent","DropdownMenuItem","inset","DropdownMenuSubTrigger","children","jsxs","ChevronRightIcon","DropdownMenuShortcut","DropdownMenuCheckboxItem","CheckIcon","DropdownMenuRadioGroup","DropdownMenuRadioItem","DropdownMenuLabel","DropdownMenuSeparator"],"mappings":"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"}