@bolio-ui/core 3.0.0-alpha.0 → 3.0.0-alpha.2

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 (249) hide show
  1. package/dist/BolioUIProvider/index.js +3 -3
  2. package/dist/Calendar/Calendar.d.ts +1 -0
  3. package/dist/Calendar/index.js +2 -2
  4. package/dist/Carousel/Carousel.d.ts +21 -0
  5. package/dist/Carousel/index.d.ts +3 -0
  6. package/dist/Carousel/index.js +14 -0
  7. package/dist/Collapse/Collapse.d.ts +3 -0
  8. package/dist/Collapse/index.js +3 -3
  9. package/dist/ColorInput/ColorInput.d.ts +24 -0
  10. package/dist/ColorInput/index.d.ts +3 -0
  11. package/dist/ColorInput/index.js +20 -0
  12. package/dist/ColorPicker/ColorPicker.d.ts +17 -0
  13. package/dist/ColorPicker/color-utils.d.ts +10 -0
  14. package/dist/ColorPicker/index.d.ts +3 -0
  15. package/dist/ColorPicker/index.js +14 -0
  16. package/dist/Command/index.js +4 -4
  17. package/dist/ContextMenu/ContextMenu.d.ts +13 -0
  18. package/dist/ContextMenu/index.d.ts +3 -0
  19. package/dist/ContextMenu/index.js +25 -0
  20. package/dist/CssBaseline/index.js +2 -2
  21. package/dist/DatePicker/index.js +3 -3
  22. package/dist/DateRangePicker/DateRangePicker.d.ts +29 -0
  23. package/dist/DateRangePicker/index.d.ts +3 -0
  24. package/dist/DateRangePicker/index.js +19 -0
  25. package/dist/Drawer/index.js +2 -2
  26. package/dist/Dropzone/Dropzone.d.ts +25 -0
  27. package/dist/Dropzone/DropzoneThumbnail.d.ts +9 -0
  28. package/dist/Dropzone/index.d.ts +3 -0
  29. package/dist/Dropzone/index.js +14 -0
  30. package/dist/ImageZoom/ImageZoom.d.ts +14 -0
  31. package/dist/ImageZoom/index.d.ts +3 -0
  32. package/dist/ImageZoom/index.js +17 -0
  33. package/dist/Menu/index.js +3 -3
  34. package/dist/Modal/index.js +2 -2
  35. package/dist/PinInput/PinInput.d.ts +25 -0
  36. package/dist/PinInput/index.d.ts +3 -0
  37. package/dist/PinInput/index.js +16 -0
  38. package/dist/SegmentedControl/SegmentedControl.d.ts +16 -0
  39. package/dist/SegmentedControl/SegmentedControlContext.d.ts +10 -0
  40. package/dist/SegmentedControl/SegmentedControlItem.d.ts +13 -0
  41. package/dist/SegmentedControl/index.d.ts +10 -0
  42. package/dist/SegmentedControl/index.js +14 -0
  43. package/dist/Select/SelectDropdown.d.ts +2 -0
  44. package/dist/Select/index.js +6 -6
  45. package/dist/Slider/index.js +3 -3
  46. package/dist/Splitter/Splitter.d.ts +14 -0
  47. package/dist/Splitter/SplitterContext.d.ts +6 -0
  48. package/dist/Splitter/SplitterPanel.d.ts +13 -0
  49. package/dist/Splitter/index.d.ts +9 -0
  50. package/dist/Splitter/index.js +14 -0
  51. package/dist/Table/Table.d.ts +11 -1
  52. package/dist/Table/TableBody.d.ts +8 -2
  53. package/dist/Table/TableColumn.d.ts +2 -0
  54. package/dist/Table/TableHead.d.ts +9 -1
  55. package/dist/Table/TableSelectBox.d.ts +9 -0
  56. package/dist/Table/TableTypes.d.ts +8 -0
  57. package/dist/Table/index.d.ts +1 -1
  58. package/dist/Table/index.js +3 -3
  59. package/dist/TagsInput/TagsInput.d.ts +26 -0
  60. package/dist/TagsInput/index.d.ts +3 -0
  61. package/dist/TagsInput/index.js +17 -0
  62. package/dist/Tour/Tour.d.ts +26 -0
  63. package/dist/Tour/index.d.ts +3 -0
  64. package/dist/Tour/index.js +23 -0
  65. package/dist/Tree/Tree.d.ts +17 -0
  66. package/dist/Tree/TreeContext.d.ts +17 -0
  67. package/dist/Tree/TreeNode.d.ts +8 -0
  68. package/dist/Tree/index.d.ts +3 -0
  69. package/dist/Tree/index.js +14 -0
  70. package/dist/chunk-2A4BSQ66.js +130 -0
  71. package/dist/{chunk-HIFS4JIO.js → chunk-2EYJZXS4.js} +7 -7
  72. package/dist/chunk-3S6G7WGK.js +109 -0
  73. package/dist/chunk-4X4ELIMQ.js +231 -0
  74. package/dist/{chunk-UVVBMWR4.js → chunk-AG2NWQYL.js} +18 -4
  75. package/dist/chunk-BHQRX76X.js +275 -0
  76. package/dist/{chunk-YHZFOVVI.js → chunk-DIMJQLWY.js} +27 -37
  77. package/dist/chunk-FFEAKF3A.js +220 -0
  78. package/dist/{chunk-6BCLZSSK.js → chunk-FL6J36B7.js} +5 -4
  79. package/dist/chunk-G4KB56RO.js +217 -0
  80. package/dist/chunk-IJGIEX5J.js +211 -0
  81. package/dist/chunk-K6UULETP.js +244 -0
  82. package/dist/chunk-MDSRXACM.js +212 -0
  83. package/dist/chunk-OKZRHSSG.js +271 -0
  84. package/dist/{chunk-IBC5BABS.js → chunk-P245HSVB.js} +190 -155
  85. package/dist/chunk-REWKR7S3.js +109 -0
  86. package/dist/chunk-STYC6O24.js +232 -0
  87. package/dist/{chunk-FQU5SKDF.js → chunk-WFGUAR7K.js} +58 -24
  88. package/dist/{chunk-6KMHJRCY.js → chunk-WIIDIZYK.js} +4 -1
  89. package/dist/chunk-X4TPC7HS.js +160 -0
  90. package/dist/{chunk-TKICX5R6.js → chunk-ZNDN2VPZ.js} +225 -33
  91. package/dist/css/Button-ButtonIcon.css +3 -2
  92. package/dist/css/ButtonDropdown-ButtonDropdownItem.css +0 -1
  93. package/dist/css/Calendar.css +11 -1
  94. package/dist/css/Carousel.css +127 -0
  95. package/dist/css/Collapse.css +29 -9
  96. package/dist/css/ColorInput.css +95 -0
  97. package/dist/css/ColorPicker.css +183 -0
  98. package/dist/css/ContextMenu.css +17 -0
  99. package/dist/css/DatePicker.css +1 -1
  100. package/dist/css/DateRangePicker.css +113 -0
  101. package/dist/css/Dropzone.css +160 -0
  102. package/dist/css/ImageZoom.css +93 -0
  103. package/dist/css/Input.css +3 -3
  104. package/dist/css/NumberInput.css +4 -4
  105. package/dist/css/PinInput.css +40 -0
  106. package/dist/css/SegmentedControl-SegmentedControlItem.css +65 -0
  107. package/dist/css/SegmentedControl.css +13 -0
  108. package/dist/css/Select-SelectDropdown.css +4 -2
  109. package/dist/css/Select-SelectMultipleValue.css +1 -0
  110. package/dist/css/Select-SelectOption.css +27 -7
  111. package/dist/css/Select.css +2 -1
  112. package/dist/css/Splitter.css +77 -0
  113. package/dist/css/Table-TableBody.css +10 -0
  114. package/dist/css/Table-TableHead.css +41 -0
  115. package/dist/css/Table-TableSelectBox.css +11 -0
  116. package/dist/css/TagsInput.css +99 -0
  117. package/dist/css/Tour.css +81 -0
  118. package/dist/css/Tree.css +88 -0
  119. package/dist/index.d.ts +27 -1
  120. package/dist/index.js +98 -46
  121. package/dist/styles.css +3902 -2520
  122. package/esm/BolioUIProvider/index.js +2 -2
  123. package/esm/Calendar/Calendar.d.ts +1 -0
  124. package/esm/Calendar/index.js +1 -1
  125. package/esm/Carousel/Carousel.d.ts +21 -0
  126. package/esm/Carousel/index.d.ts +3 -0
  127. package/esm/Carousel/index.js +14 -0
  128. package/esm/Collapse/Collapse.d.ts +3 -0
  129. package/esm/Collapse/index.js +2 -2
  130. package/esm/ColorInput/ColorInput.d.ts +24 -0
  131. package/esm/ColorInput/index.d.ts +3 -0
  132. package/esm/ColorInput/index.js +20 -0
  133. package/esm/ColorPicker/ColorPicker.d.ts +17 -0
  134. package/esm/ColorPicker/color-utils.d.ts +10 -0
  135. package/esm/ColorPicker/index.d.ts +3 -0
  136. package/esm/ColorPicker/index.js +14 -0
  137. package/esm/Command/index.js +4 -4
  138. package/esm/ContextMenu/ContextMenu.d.ts +13 -0
  139. package/esm/ContextMenu/index.d.ts +3 -0
  140. package/esm/ContextMenu/index.js +25 -0
  141. package/esm/CssBaseline/index.js +1 -1
  142. package/esm/DatePicker/index.js +2 -2
  143. package/esm/DateRangePicker/DateRangePicker.d.ts +29 -0
  144. package/esm/DateRangePicker/index.d.ts +3 -0
  145. package/esm/DateRangePicker/index.js +19 -0
  146. package/esm/Drawer/index.js +2 -2
  147. package/esm/Dropzone/Dropzone.d.ts +25 -0
  148. package/esm/Dropzone/DropzoneThumbnail.d.ts +9 -0
  149. package/esm/Dropzone/index.d.ts +3 -0
  150. package/esm/Dropzone/index.js +14 -0
  151. package/esm/ImageZoom/ImageZoom.d.ts +14 -0
  152. package/esm/ImageZoom/index.d.ts +3 -0
  153. package/esm/ImageZoom/index.js +17 -0
  154. package/esm/Menu/index.js +2 -2
  155. package/esm/Modal/index.js +2 -2
  156. package/esm/PinInput/PinInput.d.ts +25 -0
  157. package/esm/PinInput/index.d.ts +3 -0
  158. package/esm/PinInput/index.js +16 -0
  159. package/esm/SegmentedControl/SegmentedControl.d.ts +16 -0
  160. package/esm/SegmentedControl/SegmentedControlContext.d.ts +10 -0
  161. package/esm/SegmentedControl/SegmentedControlItem.d.ts +13 -0
  162. package/esm/SegmentedControl/index.d.ts +10 -0
  163. package/esm/SegmentedControl/index.js +14 -0
  164. package/esm/Select/SelectDropdown.d.ts +2 -0
  165. package/esm/Select/index.js +5 -5
  166. package/esm/Slider/index.js +2 -2
  167. package/esm/Splitter/Splitter.d.ts +14 -0
  168. package/esm/Splitter/SplitterContext.d.ts +6 -0
  169. package/esm/Splitter/SplitterPanel.d.ts +13 -0
  170. package/esm/Splitter/index.d.ts +9 -0
  171. package/esm/Splitter/index.js +14 -0
  172. package/esm/Table/Table.d.ts +11 -1
  173. package/esm/Table/TableBody.d.ts +8 -2
  174. package/esm/Table/TableColumn.d.ts +2 -0
  175. package/esm/Table/TableHead.d.ts +9 -1
  176. package/esm/Table/TableSelectBox.d.ts +9 -0
  177. package/esm/Table/TableTypes.d.ts +8 -0
  178. package/esm/Table/index.d.ts +1 -1
  179. package/esm/Table/index.js +2 -2
  180. package/esm/TagsInput/TagsInput.d.ts +26 -0
  181. package/esm/TagsInput/index.d.ts +3 -0
  182. package/esm/TagsInput/index.js +17 -0
  183. package/esm/Tour/Tour.d.ts +26 -0
  184. package/esm/Tour/index.d.ts +3 -0
  185. package/esm/Tour/index.js +23 -0
  186. package/esm/Tree/Tree.d.ts +17 -0
  187. package/esm/Tree/TreeContext.d.ts +17 -0
  188. package/esm/Tree/TreeNode.d.ts +8 -0
  189. package/esm/Tree/index.d.ts +3 -0
  190. package/esm/Tree/index.js +14 -0
  191. package/esm/chunk-2A4BSQ66.js +130 -0
  192. package/esm/{chunk-HIFS4JIO.js → chunk-2EYJZXS4.js} +4 -4
  193. package/esm/chunk-3S6G7WGK.js +109 -0
  194. package/esm/chunk-4X4ELIMQ.js +231 -0
  195. package/esm/{chunk-UVVBMWR4.js → chunk-AG2NWQYL.js} +18 -4
  196. package/esm/chunk-BHQRX76X.js +275 -0
  197. package/esm/{chunk-YHZFOVVI.js → chunk-DIMJQLWY.js} +27 -37
  198. package/esm/chunk-FFEAKF3A.js +220 -0
  199. package/esm/{chunk-6BCLZSSK.js → chunk-FL6J36B7.js} +4 -3
  200. package/esm/chunk-G4KB56RO.js +217 -0
  201. package/esm/chunk-IJGIEX5J.js +211 -0
  202. package/esm/chunk-K6UULETP.js +244 -0
  203. package/esm/chunk-MDSRXACM.js +212 -0
  204. package/esm/chunk-OKZRHSSG.js +271 -0
  205. package/esm/chunk-P245HSVB.js +450 -0
  206. package/esm/chunk-REWKR7S3.js +109 -0
  207. package/esm/chunk-STYC6O24.js +232 -0
  208. package/esm/{chunk-FQU5SKDF.js → chunk-WFGUAR7K.js} +60 -26
  209. package/esm/{chunk-6KMHJRCY.js → chunk-WIIDIZYK.js} +4 -1
  210. package/esm/chunk-X4TPC7HS.js +160 -0
  211. package/esm/chunk-ZNDN2VPZ.js +543 -0
  212. package/esm/css/Button-ButtonIcon.css +3 -2
  213. package/esm/css/ButtonDropdown-ButtonDropdownItem.css +0 -1
  214. package/esm/css/Calendar.css +11 -1
  215. package/esm/css/Carousel.css +127 -0
  216. package/esm/css/Collapse.css +29 -9
  217. package/esm/css/ColorInput.css +95 -0
  218. package/esm/css/ColorPicker.css +183 -0
  219. package/esm/css/ContextMenu.css +17 -0
  220. package/esm/css/DatePicker.css +1 -1
  221. package/esm/css/DateRangePicker.css +113 -0
  222. package/esm/css/Dropzone.css +160 -0
  223. package/esm/css/ImageZoom.css +93 -0
  224. package/esm/css/Input.css +3 -3
  225. package/esm/css/NumberInput.css +4 -4
  226. package/esm/css/PinInput.css +40 -0
  227. package/esm/css/SegmentedControl-SegmentedControlItem.css +65 -0
  228. package/esm/css/SegmentedControl.css +13 -0
  229. package/esm/css/Select-SelectDropdown.css +4 -2
  230. package/esm/css/Select-SelectMultipleValue.css +1 -0
  231. package/esm/css/Select-SelectOption.css +27 -7
  232. package/esm/css/Select.css +2 -1
  233. package/esm/css/Splitter.css +77 -0
  234. package/esm/css/Table-TableBody.css +10 -0
  235. package/esm/css/Table-TableHead.css +41 -0
  236. package/esm/css/Table-TableSelectBox.css +11 -0
  237. package/esm/css/TagsInput.css +99 -0
  238. package/esm/css/Tour.css +81 -0
  239. package/esm/css/Tree.css +88 -0
  240. package/esm/index.d.ts +27 -1
  241. package/esm/index.js +115 -63
  242. package/esm/styles.css +3564 -2182
  243. package/package.json +3 -3
  244. package/esm/chunk-IBC5BABS.js +0 -415
  245. package/esm/chunk-TKICX5R6.js +0 -351
  246. package/dist/{chunk-2PRUFY2Q.js → chunk-4ZGR7UMX.js} +2 -2
  247. package/dist/{chunk-FLK7EAOE.js → chunk-IUZV5Y27.js} +2 -2
  248. package/esm/{chunk-2PRUFY2Q.js → chunk-4ZGR7UMX.js} +3 -3
  249. package/esm/{chunk-FLK7EAOE.js → chunk-IUZV5Y27.js} +3 -3
@@ -0,0 +1,450 @@
1
+ import {
2
+ use_scale_default,
3
+ with_scale_default
4
+ } from "./chunk-MAICNLTY.js";
5
+ import {
6
+ use_theme_default
7
+ } from "./chunk-V5I4ORQQ.js";
8
+ import {
9
+ joinClasses,
10
+ use_classes_default
11
+ } from "./chunk-5KUROAEP.js";
12
+
13
+ // core/Calendar/Calendar.tsx
14
+ import React, { useEffect, useId, useMemo, useRef, useState } from "react";
15
+
16
+ // core/Calendar/date-utils.ts
17
+ var startOfDay = (date) => new Date(date.getFullYear(), date.getMonth(), date.getDate());
18
+ var addDays = (date, amount) => new Date(date.getFullYear(), date.getMonth(), date.getDate() + amount);
19
+ var addMonths = (date, amount) => {
20
+ const target = new Date(date.getFullYear(), date.getMonth() + amount, 1);
21
+ const lastDay = new Date(
22
+ target.getFullYear(),
23
+ target.getMonth() + 1,
24
+ 0
25
+ ).getDate();
26
+ return new Date(
27
+ target.getFullYear(),
28
+ target.getMonth(),
29
+ Math.min(date.getDate(), lastDay)
30
+ );
31
+ };
32
+ var isSameDay = (a, b) => a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
33
+ var clampDate = (date, min, max) => {
34
+ if (min && date < min) return min;
35
+ if (max && date > max) return max;
36
+ return date;
37
+ };
38
+ var pad = (value) => String(value).padStart(2, "0");
39
+ var toISO = (date) => `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
40
+ var fromISO = (text) => {
41
+ const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(text.trim());
42
+ if (!match) return null;
43
+ const [year, month, day] = [+match[1], +match[2], +match[3]];
44
+ const date = new Date(year, month - 1, day);
45
+ const isReal = date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day;
46
+ return isReal ? date : null;
47
+ };
48
+ var getISOWeek = (date) => {
49
+ const thursday = addDays(date, 3 - (date.getDay() + 6) % 7);
50
+ const firstThursday = new Date(thursday.getFullYear(), 0, 4);
51
+ const weekOne = addDays(firstThursday, 3 - (firstThursday.getDay() + 6) % 7);
52
+ return 1 + Math.round((thursday.getTime() - weekOne.getTime()) / 6048e5);
53
+ };
54
+
55
+ // css-module-source:/Users/brunnoandrade/Desktop/BolioUI/bolio-ui/core/Calendar/Calendar.module.css.bolio-css-module-source
56
+ var Calendar_module_css_default = { "calendar": "Calendar-module_calendar__KlHdi", "months": "Calendar-module_months__vypnr", "header": "Calendar-module_header__d6VGN", "navSpacer": "Calendar-module_navSpacer__TcVxJ", "title": "Calendar-module_title__r0GX1", "table": "Calendar-module_table__q-H-S", "th": "Calendar-module_th__N9m4h", "td": "Calendar-module_td__YyI6L", "button": "Calendar-module_button__h3ZK-", "navButton": "Calendar-module_navButton__jmnwu", "dayButton": "Calendar-module_dayButton__-4eeR", "today": "Calendar-module_today__fx9vj", "selected": "Calendar-module_selected__kIUsl", "outside": "Calendar-module_outside__cSs5z", "inRange": "Calendar-module_inRange__0XK-F", "rangeStart": "Calendar-module_rangeStart__T1amH", "rangeEnd": "Calendar-module_rangeEnd__B55oD", "weekNumber": "Calendar-module_weekNumber__J1hkP" };
57
+
58
+ // core/Calendar/Calendar.tsx
59
+ import { jsx, jsxs } from "react/jsx-runtime";
60
+ var CalendarComponent = React.forwardRef(
61
+ ({
62
+ mode = "single",
63
+ value: customValue,
64
+ onChange,
65
+ maxSelected,
66
+ min,
67
+ max,
68
+ shouldDisableDate,
69
+ locale = "en-US",
70
+ weekStartsOn = 0,
71
+ showOutsideDays = false,
72
+ showWeekNumbers = false,
73
+ numberOfMonths = 1,
74
+ month: customMonth,
75
+ defaultMonth,
76
+ onMonthChange,
77
+ autoFocus = false,
78
+ previousLabel = "Previous month",
79
+ nextLabel = "Next month",
80
+ weekLabel = "Week",
81
+ className = "",
82
+ style,
83
+ ...props
84
+ }, ref) => {
85
+ const theme = use_theme_default();
86
+ const { SCALES } = use_scale_default();
87
+ const headingId = useId();
88
+ const minDay = useMemo(() => min ? startOfDay(min) : void 0, [min]);
89
+ const maxDay = useMemo(() => max ? startOfDay(max) : void 0, [max]);
90
+ const [selfValue, setSelfValue] = useState(
91
+ mode === "multiple" ? [] : mode === "range" ? [null, null] : null
92
+ );
93
+ const current = customValue !== void 0 ? customValue : selfValue;
94
+ const isRange = mode === "range";
95
+ const [rangeStart, rangeEnd] = isRange ? current : [];
96
+ const selectedDays = isRange ? [rangeStart, rangeEnd].filter(Boolean) : mode === "multiple" ? current : current ? [current] : [];
97
+ const anchor = selectedDays[0] || null;
98
+ const [hovered, setHovered] = useState(null);
99
+ const [focused, setFocused] = useState(
100
+ () => clampDate(
101
+ startOfDay(anchor || customMonth || defaultMonth || /* @__PURE__ */ new Date()),
102
+ minDay,
103
+ maxDay
104
+ )
105
+ );
106
+ const count = Math.max(1, Math.floor(numberOfMonths));
107
+ const focusedIndex = focused.getFullYear() * 12 + focused.getMonth();
108
+ const [viewStart, setViewStart] = useState(focusedIndex);
109
+ let first = viewStart;
110
+ if (focusedIndex < first) first = focusedIndex;
111
+ else if (focusedIndex > first + count - 1)
112
+ first = focusedIndex - (count - 1);
113
+ if (first !== viewStart) setViewStart(first);
114
+ const gridRef = useRef(null);
115
+ const moveFocus = useRef(autoFocus);
116
+ const time = anchor ? anchor.getTime() : null;
117
+ useEffect(() => {
118
+ if (time === null) return;
119
+ setFocused(clampDate(startOfDay(new Date(time)), minDay, maxDay));
120
+ }, [time, minDay, maxDay]);
121
+ const monthTime = customMonth ? new Date(customMonth.getFullYear(), customMonth.getMonth(), 1).getTime() : null;
122
+ useEffect(() => {
123
+ if (monthTime === null) return;
124
+ const target = new Date(monthTime);
125
+ setViewStart(target.getFullYear() * 12 + target.getMonth());
126
+ setFocused(
127
+ (last) => last.getFullYear() === target.getFullYear() && last.getMonth() === target.getMonth() ? last : clampDate(target, minDay, maxDay)
128
+ );
129
+ }, [monthTime, minDay, maxDay]);
130
+ useEffect(() => {
131
+ var _a, _b;
132
+ if (!moveFocus.current) return;
133
+ moveFocus.current = false;
134
+ (_b = (_a = gridRef.current) == null ? void 0 : _a.querySelector(`[data-date="${toISO(focused)}"]`)) == null ? void 0 : _b.focus();
135
+ }, [focused]);
136
+ const formats = useMemo(
137
+ () => ({
138
+ month: new Intl.DateTimeFormat(locale, {
139
+ month: "long",
140
+ year: "numeric"
141
+ }),
142
+ day: new Intl.DateTimeFormat(locale, {
143
+ weekday: "long",
144
+ year: "numeric",
145
+ month: "long",
146
+ day: "numeric"
147
+ }),
148
+ short: new Intl.DateTimeFormat(locale, { weekday: "short" }),
149
+ long: new Intl.DateTimeFormat(locale, { weekday: "long" })
150
+ }),
151
+ [locale]
152
+ );
153
+ const weekdays = useMemo(
154
+ () => Array.from({ length: 7 }, (_, index) => {
155
+ const date = new Date(2023, 0, 1 + (weekStartsOn + index) % 7);
156
+ return {
157
+ short: formats.short.format(date),
158
+ long: formats.long.format(date)
159
+ };
160
+ }),
161
+ [formats, weekStartsOn]
162
+ );
163
+ const outsideDays = showOutsideDays && count === 1;
164
+ const monthViews = useMemo(
165
+ () => Array.from({ length: count }, (_, step) => {
166
+ const index = first + step;
167
+ const year = Math.floor(index / 12);
168
+ const month = index % 12;
169
+ const offset = (new Date(year, month, 1).getDay() - weekStartsOn + 7) % 7;
170
+ const total = new Date(year, month + 1, 0).getDate();
171
+ const cells = [
172
+ ...Array.from(
173
+ { length: offset },
174
+ (_2, cell) => outsideDays ? new Date(year, month, cell - offset + 1) : null
175
+ ),
176
+ ...Array.from(
177
+ { length: total },
178
+ (_2, cell) => new Date(year, month, cell + 1)
179
+ )
180
+ ];
181
+ while (cells.length % 7)
182
+ cells.push(
183
+ outsideDays ? new Date(year, month, cells.length - offset + 1) : null
184
+ );
185
+ const weeks = Array.from(
186
+ { length: cells.length / 7 },
187
+ (_2, row) => cells.slice(row * 7, row * 7 + 7)
188
+ );
189
+ return { year, month, date: new Date(year, month, 1), weeks };
190
+ }),
191
+ [first, count, weekStartsOn, outsideDays]
192
+ );
193
+ const firstMonth = monthViews[0];
194
+ const lastMonthView = monthViews[count - 1];
195
+ const lastMonth = useRef(first);
196
+ useEffect(() => {
197
+ if (first === lastMonth.current) return;
198
+ lastMonth.current = first;
199
+ if (onMonthChange) onMonthChange(firstMonth.date);
200
+ }, [first]);
201
+ const isDisabled = (date) => Boolean(
202
+ minDay && date < minDay || maxDay && date > maxDay || shouldDisableDate && shouldDisableDate(date)
203
+ );
204
+ const today = /* @__PURE__ */ new Date();
205
+ const previousDisabled = Boolean(
206
+ minDay && new Date(firstMonth.year, firstMonth.month, 0) < minDay
207
+ );
208
+ const nextDisabled = Boolean(
209
+ maxDay && new Date(lastMonthView.year, lastMonthView.month + 1, 1) > maxDay
210
+ );
211
+ const goToMonth = (step) => {
212
+ setViewStart(first + step);
213
+ setFocused(clampDate(addMonths(focused, step), minDay, maxDay));
214
+ };
215
+ const commit = (next) => {
216
+ if (customValue === void 0) setSelfValue(next);
217
+ if (onChange) onChange(next);
218
+ };
219
+ const select = (date) => {
220
+ if (isDisabled(date)) return;
221
+ setFocused(date);
222
+ if (isRange) {
223
+ const start = rangeStart;
224
+ const startsNew = !start || rangeEnd || date < start;
225
+ return commit(startsNew ? [date, null] : [start, date]);
226
+ }
227
+ if (mode === "multiple") {
228
+ const list = current;
229
+ if (list.some((item) => isSameDay(item, date)))
230
+ return commit(list.filter((item) => !isSameDay(item, date)));
231
+ if (maxSelected !== void 0 && list.length >= maxSelected) return;
232
+ return commit([...list, date].sort((a, b) => +a - +b));
233
+ }
234
+ commit(date);
235
+ };
236
+ const isSelected = (date) => selectedDays.some((item) => isSameDay(item, date));
237
+ const previewEnd = isRange ? rangeEnd || hovered : null;
238
+ const [low, high] = rangeStart && previewEnd ? rangeStart <= previewEnd ? [rangeStart, previewEnd] : [previewEnd, rangeStart] : [null, null];
239
+ const isInRange = (date) => Boolean(low && high && date > low && date < high);
240
+ const keyDownHandler = (event, date) => {
241
+ if (event.key === "Enter" || event.key === " ") {
242
+ event.preventDefault();
243
+ return select(date);
244
+ }
245
+ const weekIndex = (date.getDay() - weekStartsOn + 7) % 7;
246
+ const targets = {
247
+ ArrowLeft: addDays(date, -1),
248
+ ArrowRight: addDays(date, 1),
249
+ ArrowUp: addDays(date, -7),
250
+ ArrowDown: addDays(date, 7),
251
+ Home: addDays(date, -weekIndex),
252
+ End: addDays(date, 6 - weekIndex),
253
+ PageUp: addMonths(date, event.shiftKey ? -12 : -1),
254
+ PageDown: addMonths(date, event.shiftKey ? 12 : 1)
255
+ };
256
+ if (!(event.key in targets)) return;
257
+ event.preventDefault();
258
+ moveFocus.current = true;
259
+ setFocused(clampDate(targets[event.key], minDay, maxDay));
260
+ };
261
+ const calendarStyle = {
262
+ "--calendar-font-size": SCALES.font(1),
263
+ "--calendar-text-color": theme.palette.foreground,
264
+ "--calendar-width": SCALES.width(1, "auto"),
265
+ "--calendar-height": SCALES.height(1, "auto"),
266
+ "--calendar-padding-top": SCALES.pt(0),
267
+ "--calendar-padding-right": SCALES.pr(0),
268
+ "--calendar-padding-bottom": SCALES.pb(0),
269
+ "--calendar-padding-left": SCALES.pl(0),
270
+ "--calendar-margin-top": SCALES.mt(0),
271
+ "--calendar-margin-right": SCALES.mr(0),
272
+ "--calendar-margin-bottom": SCALES.mb(0),
273
+ "--calendar-margin-left": SCALES.ml(0),
274
+ "--calendar-weekday-color": theme.palette.accents_5,
275
+ "--calendar-radius": theme.layout.radius,
276
+ "--calendar-hover-bg": theme.palette.accents_2,
277
+ "--calendar-focus-outline": theme.palette.primary,
278
+ "--calendar-disabled-color": theme.palette.accents_3,
279
+ "--calendar-today-border": theme.palette.accents_4,
280
+ "--calendar-selected-color": "#fff",
281
+ "--calendar-selected-bg": theme.palette.primary,
282
+ "--calendar-range-bg": `color-mix(in srgb, ${theme.palette.primary} 18%, transparent)`,
283
+ "--calendar-outside-color": theme.palette.accents_4,
284
+ "--calendar-week-color": theme.palette.accents_4,
285
+ ...style
286
+ };
287
+ return /* @__PURE__ */ jsx(
288
+ "div",
289
+ {
290
+ ref,
291
+ className: use_classes_default(Calendar_module_css_default.calendar, className),
292
+ style: calendarStyle,
293
+ ...props,
294
+ children: /* @__PURE__ */ jsx(
295
+ "div",
296
+ {
297
+ ref: gridRef,
298
+ className: Calendar_module_css_default.months,
299
+ onMouseLeave: () => setHovered(null),
300
+ children: monthViews.map(({ month, date: monthDate, weeks }, step) => /* @__PURE__ */ jsxs("div", { className: Calendar_module_css_default.month, children: [
301
+ /* @__PURE__ */ jsxs("div", { className: Calendar_module_css_default.header, children: [
302
+ step === 0 ? /* @__PURE__ */ jsx(
303
+ "button",
304
+ {
305
+ type: "button",
306
+ className: joinClasses(Calendar_module_css_default.button, Calendar_module_css_default.navButton),
307
+ "aria-label": previousLabel,
308
+ disabled: previousDisabled,
309
+ onClick: () => goToMonth(-1),
310
+ children: "\u2039"
311
+ }
312
+ ) : /* @__PURE__ */ jsx("span", { className: Calendar_module_css_default.navSpacer, "aria-hidden": "true" }),
313
+ /* @__PURE__ */ jsx(
314
+ "div",
315
+ {
316
+ id: `${headingId}-${step}`,
317
+ className: Calendar_module_css_default.title,
318
+ "aria-live": "polite",
319
+ children: formats.month.format(monthDate)
320
+ }
321
+ ),
322
+ step === count - 1 ? /* @__PURE__ */ jsx(
323
+ "button",
324
+ {
325
+ type: "button",
326
+ className: joinClasses(Calendar_module_css_default.button, Calendar_module_css_default.navButton),
327
+ "aria-label": nextLabel,
328
+ disabled: nextDisabled,
329
+ onClick: () => goToMonth(1),
330
+ children: "\u203A"
331
+ }
332
+ ) : /* @__PURE__ */ jsx("span", { className: Calendar_module_css_default.navSpacer, "aria-hidden": "true" })
333
+ ] }),
334
+ /* @__PURE__ */ jsxs(
335
+ "table",
336
+ {
337
+ role: "grid",
338
+ "aria-labelledby": `${headingId}-${step}`,
339
+ className: Calendar_module_css_default.table,
340
+ "aria-multiselectable": mode !== "single" || void 0,
341
+ children: [
342
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { role: "row", children: [
343
+ showWeekNumbers && /* @__PURE__ */ jsx("th", { role: "columnheader", className: Calendar_module_css_default.th }),
344
+ weekdays.map((weekday) => /* @__PURE__ */ jsx(
345
+ "th",
346
+ {
347
+ role: "columnheader",
348
+ scope: "col",
349
+ className: Calendar_module_css_default.th,
350
+ children: /* @__PURE__ */ jsx("abbr", { title: weekday.long, children: weekday.short })
351
+ },
352
+ weekday.long
353
+ ))
354
+ ] }) }),
355
+ /* @__PURE__ */ jsx("tbody", { children: weeks.map((week, index) => {
356
+ const reference = week.find(Boolean);
357
+ const weekNumber = getISOWeek(
358
+ addDays(reference, 3 - week.indexOf(reference))
359
+ );
360
+ return /* @__PURE__ */ jsxs("tr", { role: "row", children: [
361
+ showWeekNumbers && /* @__PURE__ */ jsx(
362
+ "th",
363
+ {
364
+ role: "rowheader",
365
+ scope: "row",
366
+ className: Calendar_module_css_default.weekNumber,
367
+ "aria-label": `${weekLabel} ${weekNumber}`,
368
+ children: weekNumber
369
+ }
370
+ ),
371
+ week.map((date, cell) => {
372
+ if (!date)
373
+ return /* @__PURE__ */ jsx(
374
+ "td",
375
+ {
376
+ role: "gridcell",
377
+ className: Calendar_module_css_default.td,
378
+ "aria-hidden": "true"
379
+ },
380
+ cell
381
+ );
382
+ const selectedDay = isSelected(date);
383
+ const outside = date.getMonth() !== month;
384
+ return /* @__PURE__ */ jsx(
385
+ "td",
386
+ {
387
+ role: "gridcell",
388
+ className: joinClasses(Calendar_module_css_default.td, {
389
+ [Calendar_module_css_default.inRange]: isInRange(date),
390
+ [Calendar_module_css_default.rangeStart]: Boolean(
391
+ low && isSameDay(date, low) && high
392
+ ),
393
+ [Calendar_module_css_default.rangeEnd]: Boolean(
394
+ high && isSameDay(date, high) && low
395
+ )
396
+ }),
397
+ "aria-selected": selectedDay || isInRange(date),
398
+ children: /* @__PURE__ */ jsx(
399
+ "button",
400
+ {
401
+ type: "button",
402
+ "data-date": toISO(date),
403
+ "aria-label": formats.day.format(date),
404
+ "aria-current": isSameDay(date, today) ? "date" : void 0,
405
+ className: joinClasses(
406
+ Calendar_module_css_default.button,
407
+ Calendar_module_css_default.dayButton,
408
+ {
409
+ [Calendar_module_css_default.selected]: selectedDay,
410
+ [Calendar_module_css_default.today]: isSameDay(date, today),
411
+ [Calendar_module_css_default.outside]: outside
412
+ }
413
+ ),
414
+ tabIndex: isSameDay(date, focused) ? 0 : -1,
415
+ disabled: isDisabled(date),
416
+ onClick: () => select(date),
417
+ onMouseEnter: () => isRange && setHovered(date),
418
+ onKeyDown: (event) => keyDownHandler(event, date),
419
+ children: date.getDate()
420
+ }
421
+ )
422
+ },
423
+ cell
424
+ );
425
+ })
426
+ ] }, index);
427
+ }) })
428
+ ]
429
+ }
430
+ )
431
+ ] }, step))
432
+ }
433
+ )
434
+ }
435
+ );
436
+ }
437
+ );
438
+ CalendarComponent.displayName = "BolioUICalendar";
439
+ var Calendar = with_scale_default(CalendarComponent);
440
+ var Calendar_default = Calendar;
441
+
442
+ // core/Calendar/index.ts
443
+ var Calendar_default2 = Calendar_default;
444
+
445
+ export {
446
+ startOfDay,
447
+ toISO,
448
+ fromISO,
449
+ Calendar_default2 as Calendar_default
450
+ };
@@ -0,0 +1,109 @@
1
+ import {
2
+ Image_default
3
+ } from "./chunk-TWIOSRRP.js";
4
+ import {
5
+ use_classes_default
6
+ } from "./chunk-5KUROAEP.js";
7
+
8
+ // core/ImageZoom/ImageZoom.tsx
9
+ import React, { useEffect, useRef, useState } from "react";
10
+
11
+ // css-module-source:/Users/brunnoandrade/Desktop/BolioUI/bolio-ui/core/ImageZoom/ImageZoom.module.css.bolio-css-module-source
12
+ var ImageZoom_module_css_default = { "trigger": "ImageZoom-module_trigger__-42Bz", "dialog": "ImageZoom-module_dialog__TjA9E", "figure": "ImageZoom-module_figure__YIBq1", "zoomed": "ImageZoom-module_zoomed__7gfCP", "caption": "ImageZoom-module_caption__6SFRA", "close": "ImageZoom-module_close__iEiwJ" };
13
+
14
+ // core/ImageZoom/ImageZoom.tsx
15
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
16
+ var ImageZoom = React.forwardRef(
17
+ ({
18
+ src,
19
+ alt,
20
+ zoomSrc,
21
+ caption,
22
+ closeLabel = "Close",
23
+ className = "",
24
+ ...imageProps
25
+ }, ref) => {
26
+ const [open, setOpen] = useState(false);
27
+ const dialog = useRef(null);
28
+ useEffect(() => {
29
+ var _a;
30
+ if (open) (_a = dialog.current) == null ? void 0 : _a.showModal();
31
+ }, [open]);
32
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
33
+ /* @__PURE__ */ jsx(
34
+ "button",
35
+ {
36
+ ref,
37
+ type: "button",
38
+ className: use_classes_default(ImageZoom_module_css_default.trigger, className),
39
+ "aria-haspopup": "dialog",
40
+ onClick: () => setOpen(true),
41
+ children: /* @__PURE__ */ jsx(Image_default, { src, alt, ...imageProps })
42
+ }
43
+ ),
44
+ open && /* @__PURE__ */ jsxs(
45
+ "dialog",
46
+ {
47
+ ref: dialog,
48
+ "aria-label": alt,
49
+ className: ImageZoom_module_css_default.dialog,
50
+ onClose: () => setOpen(false),
51
+ onKeyDown: (event) => {
52
+ var _a;
53
+ if (event.key === "Escape") (_a = dialog.current) == null ? void 0 : _a.close();
54
+ },
55
+ onClick: (event) => {
56
+ var _a;
57
+ if (event.target === event.currentTarget) (_a = dialog.current) == null ? void 0 : _a.close();
58
+ },
59
+ children: [
60
+ /* @__PURE__ */ jsxs("figure", { className: ImageZoom_module_css_default.figure, children: [
61
+ /* @__PURE__ */ jsx("img", { src: zoomSrc || src, alt, className: ImageZoom_module_css_default.zoomed }),
62
+ caption && /* @__PURE__ */ jsx("figcaption", { className: ImageZoom_module_css_default.caption, children: caption })
63
+ ] }),
64
+ /* @__PURE__ */ jsx(
65
+ "button",
66
+ {
67
+ type: "button",
68
+ className: ImageZoom_module_css_default.close,
69
+ "aria-label": closeLabel,
70
+ onClick: () => {
71
+ var _a;
72
+ return (_a = dialog.current) == null ? void 0 : _a.close();
73
+ },
74
+ children: /* @__PURE__ */ jsx(
75
+ "svg",
76
+ {
77
+ viewBox: "0 0 24 24",
78
+ width: "1.5em",
79
+ height: "1.5em",
80
+ "aria-hidden": "true",
81
+ children: /* @__PURE__ */ jsx(
82
+ "path",
83
+ {
84
+ d: "M6 6l12 12M18 6L6 18",
85
+ fill: "none",
86
+ stroke: "currentColor",
87
+ strokeWidth: "2",
88
+ strokeLinecap: "round"
89
+ }
90
+ )
91
+ }
92
+ )
93
+ }
94
+ )
95
+ ]
96
+ }
97
+ )
98
+ ] });
99
+ }
100
+ );
101
+ ImageZoom.displayName = "BolioUIImageZoom";
102
+ var ImageZoom_default = ImageZoom;
103
+
104
+ // core/ImageZoom/index.ts
105
+ var ImageZoom_default2 = ImageZoom_default;
106
+
107
+ export {
108
+ ImageZoom_default2 as ImageZoom_default
109
+ };