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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) 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/Menu/index.js +3 -3
  31. package/dist/Modal/index.js +2 -2
  32. package/dist/PinInput/PinInput.d.ts +25 -0
  33. package/dist/PinInput/index.d.ts +3 -0
  34. package/dist/PinInput/index.js +16 -0
  35. package/dist/SegmentedControl/SegmentedControl.d.ts +16 -0
  36. package/dist/SegmentedControl/SegmentedControlContext.d.ts +10 -0
  37. package/dist/SegmentedControl/SegmentedControlItem.d.ts +13 -0
  38. package/dist/SegmentedControl/index.d.ts +10 -0
  39. package/dist/SegmentedControl/index.js +14 -0
  40. package/dist/Select/SelectDropdown.d.ts +2 -0
  41. package/dist/Select/index.js +6 -6
  42. package/dist/Slider/index.js +3 -3
  43. package/dist/Table/index.js +1 -1
  44. package/dist/TagsInput/TagsInput.d.ts +26 -0
  45. package/dist/TagsInput/index.d.ts +3 -0
  46. package/dist/TagsInput/index.js +17 -0
  47. package/dist/Tree/Tree.d.ts +17 -0
  48. package/dist/Tree/TreeContext.d.ts +17 -0
  49. package/dist/Tree/TreeNode.d.ts +8 -0
  50. package/dist/Tree/index.d.ts +3 -0
  51. package/dist/Tree/index.js +14 -0
  52. package/dist/chunk-2A4BSQ66.js +130 -0
  53. package/dist/{chunk-HIFS4JIO.js → chunk-2EYJZXS4.js} +7 -7
  54. package/dist/chunk-4X4ELIMQ.js +231 -0
  55. package/dist/{chunk-UVVBMWR4.js → chunk-AG2NWQYL.js} +18 -4
  56. package/dist/chunk-AVO2SK2I.js +109 -0
  57. package/dist/{chunk-YHZFOVVI.js → chunk-DIMJQLWY.js} +27 -37
  58. package/dist/chunk-G4KB56RO.js +217 -0
  59. package/dist/chunk-GYFW5NLU.js +257 -0
  60. package/dist/chunk-IJGIEX5J.js +211 -0
  61. package/dist/chunk-K6UULETP.js +244 -0
  62. package/dist/chunk-MDSRXACM.js +212 -0
  63. package/dist/chunk-OKZRHSSG.js +271 -0
  64. package/dist/{chunk-IBC5BABS.js → chunk-P245HSVB.js} +190 -155
  65. package/dist/{chunk-6KMHJRCY.js → chunk-TDJGMSGT.js} +1 -0
  66. package/dist/{chunk-FQU5SKDF.js → chunk-WFGUAR7K.js} +58 -24
  67. package/dist/chunk-X4TPC7HS.js +160 -0
  68. package/dist/{chunk-6BCLZSSK.js → chunk-XLPOECCE.js} +2 -2
  69. package/dist/css/Button-ButtonIcon.css +3 -2
  70. package/dist/css/ButtonGroup.css +1 -0
  71. package/dist/css/Calendar.css +12 -1
  72. package/dist/css/Carousel.css +128 -0
  73. package/dist/css/Collapse.css +29 -9
  74. package/dist/css/ColorInput.css +97 -0
  75. package/dist/css/ColorPicker.css +186 -0
  76. package/dist/css/Combobox.css +2 -0
  77. package/dist/css/ContextMenu.css +17 -0
  78. package/dist/css/DatePicker.css +4 -1
  79. package/dist/css/DateRangePicker.css +110 -0
  80. package/dist/css/Dropzone.css +163 -0
  81. package/dist/css/Fieldset-FieldsetGroup.css +1 -0
  82. package/dist/css/Input.css +4 -3
  83. package/dist/css/Menu-MenuList.css +1 -0
  84. package/dist/css/NumberInput.css +5 -4
  85. package/dist/css/PinInput.css +41 -0
  86. package/dist/css/Radio.css +1 -0
  87. package/dist/css/SegmentedControl-SegmentedControlItem.css +65 -0
  88. package/dist/css/SegmentedControl.css +14 -0
  89. package/dist/css/Select-SelectDropdown.css +5 -2
  90. package/dist/css/Select-SelectMultipleValue.css +1 -0
  91. package/dist/css/Select-SelectOption.css +28 -7
  92. package/dist/css/Select.css +3 -1
  93. package/dist/css/TagsInput.css +101 -0
  94. package/dist/css/Textarea.css +1 -0
  95. package/dist/css/Toggle.css +1 -0
  96. package/dist/css/Tree.css +88 -0
  97. package/dist/css/use-toasts-toast-item.css +1 -0
  98. package/dist/index.d.ts +20 -0
  99. package/dist/index.js +80 -40
  100. package/dist/styles.css +3494 -2400
  101. package/esm/BolioUIProvider/index.js +2 -2
  102. package/esm/Calendar/Calendar.d.ts +1 -0
  103. package/esm/Calendar/index.js +1 -1
  104. package/esm/Carousel/Carousel.d.ts +21 -0
  105. package/esm/Carousel/index.d.ts +3 -0
  106. package/esm/Carousel/index.js +14 -0
  107. package/esm/Collapse/Collapse.d.ts +3 -0
  108. package/esm/Collapse/index.js +2 -2
  109. package/esm/ColorInput/ColorInput.d.ts +24 -0
  110. package/esm/ColorInput/index.d.ts +3 -0
  111. package/esm/ColorInput/index.js +20 -0
  112. package/esm/ColorPicker/ColorPicker.d.ts +17 -0
  113. package/esm/ColorPicker/color-utils.d.ts +10 -0
  114. package/esm/ColorPicker/index.d.ts +3 -0
  115. package/esm/ColorPicker/index.js +14 -0
  116. package/esm/Command/index.js +4 -4
  117. package/esm/ContextMenu/ContextMenu.d.ts +13 -0
  118. package/esm/ContextMenu/index.d.ts +3 -0
  119. package/esm/ContextMenu/index.js +25 -0
  120. package/esm/CssBaseline/index.js +1 -1
  121. package/esm/DatePicker/index.js +2 -2
  122. package/esm/DateRangePicker/DateRangePicker.d.ts +29 -0
  123. package/esm/DateRangePicker/index.d.ts +3 -0
  124. package/esm/DateRangePicker/index.js +19 -0
  125. package/esm/Drawer/index.js +2 -2
  126. package/esm/Dropzone/Dropzone.d.ts +25 -0
  127. package/esm/Dropzone/DropzoneThumbnail.d.ts +9 -0
  128. package/esm/Dropzone/index.d.ts +3 -0
  129. package/esm/Dropzone/index.js +14 -0
  130. package/esm/Menu/index.js +2 -2
  131. package/esm/Modal/index.js +2 -2
  132. package/esm/PinInput/PinInput.d.ts +25 -0
  133. package/esm/PinInput/index.d.ts +3 -0
  134. package/esm/PinInput/index.js +16 -0
  135. package/esm/SegmentedControl/SegmentedControl.d.ts +16 -0
  136. package/esm/SegmentedControl/SegmentedControlContext.d.ts +10 -0
  137. package/esm/SegmentedControl/SegmentedControlItem.d.ts +13 -0
  138. package/esm/SegmentedControl/index.d.ts +10 -0
  139. package/esm/SegmentedControl/index.js +14 -0
  140. package/esm/Select/SelectDropdown.d.ts +2 -0
  141. package/esm/Select/index.js +5 -5
  142. package/esm/Slider/index.js +2 -2
  143. package/esm/Table/index.js +1 -1
  144. package/esm/TagsInput/TagsInput.d.ts +26 -0
  145. package/esm/TagsInput/index.d.ts +3 -0
  146. package/esm/TagsInput/index.js +17 -0
  147. package/esm/Tree/Tree.d.ts +17 -0
  148. package/esm/Tree/TreeContext.d.ts +17 -0
  149. package/esm/Tree/TreeNode.d.ts +8 -0
  150. package/esm/Tree/index.d.ts +3 -0
  151. package/esm/Tree/index.js +14 -0
  152. package/esm/chunk-2A4BSQ66.js +130 -0
  153. package/esm/{chunk-HIFS4JIO.js → chunk-2EYJZXS4.js} +4 -4
  154. package/esm/chunk-4X4ELIMQ.js +231 -0
  155. package/esm/{chunk-UVVBMWR4.js → chunk-AG2NWQYL.js} +18 -4
  156. package/esm/chunk-AVO2SK2I.js +109 -0
  157. package/esm/{chunk-YHZFOVVI.js → chunk-DIMJQLWY.js} +27 -37
  158. package/esm/chunk-G4KB56RO.js +217 -0
  159. package/esm/chunk-GYFW5NLU.js +257 -0
  160. package/esm/chunk-IJGIEX5J.js +211 -0
  161. package/esm/chunk-K6UULETP.js +244 -0
  162. package/esm/chunk-MDSRXACM.js +212 -0
  163. package/esm/chunk-OKZRHSSG.js +271 -0
  164. package/esm/chunk-P245HSVB.js +450 -0
  165. package/esm/{chunk-6KMHJRCY.js → chunk-TDJGMSGT.js} +1 -0
  166. package/esm/{chunk-FQU5SKDF.js → chunk-WFGUAR7K.js} +60 -26
  167. package/esm/chunk-X4TPC7HS.js +160 -0
  168. package/esm/{chunk-6BCLZSSK.js → chunk-XLPOECCE.js} +1 -1
  169. package/esm/css/Button-ButtonIcon.css +3 -2
  170. package/esm/css/ButtonGroup.css +1 -0
  171. package/esm/css/Calendar.css +12 -1
  172. package/esm/css/Carousel.css +128 -0
  173. package/esm/css/Collapse.css +29 -9
  174. package/esm/css/ColorInput.css +97 -0
  175. package/esm/css/ColorPicker.css +186 -0
  176. package/esm/css/Combobox.css +2 -0
  177. package/esm/css/ContextMenu.css +17 -0
  178. package/esm/css/DatePicker.css +4 -1
  179. package/esm/css/DateRangePicker.css +110 -0
  180. package/esm/css/Dropzone.css +163 -0
  181. package/esm/css/Fieldset-FieldsetGroup.css +1 -0
  182. package/esm/css/Input.css +4 -3
  183. package/esm/css/Menu-MenuList.css +1 -0
  184. package/esm/css/NumberInput.css +5 -4
  185. package/esm/css/PinInput.css +41 -0
  186. package/esm/css/Radio.css +1 -0
  187. package/esm/css/SegmentedControl-SegmentedControlItem.css +65 -0
  188. package/esm/css/SegmentedControl.css +14 -0
  189. package/esm/css/Select-SelectDropdown.css +5 -2
  190. package/esm/css/Select-SelectMultipleValue.css +1 -0
  191. package/esm/css/Select-SelectOption.css +28 -7
  192. package/esm/css/Select.css +3 -1
  193. package/esm/css/TagsInput.css +101 -0
  194. package/esm/css/Textarea.css +1 -0
  195. package/esm/css/Toggle.css +1 -0
  196. package/esm/css/Tree.css +88 -0
  197. package/esm/css/use-toasts-toast-item.css +1 -0
  198. package/esm/index.d.ts +20 -0
  199. package/esm/index.js +93 -53
  200. package/esm/styles.css +3470 -2376
  201. package/package.json +3 -3
  202. package/esm/chunk-IBC5BABS.js +0 -415
  203. package/dist/{chunk-2PRUFY2Q.js → chunk-4ZGR7UMX.js} +2 -2
  204. package/dist/{chunk-FLK7EAOE.js → chunk-IUZV5Y27.js} +2 -2
  205. package/esm/{chunk-2PRUFY2Q.js → chunk-4ZGR7UMX.js} +3 -3
  206. package/esm/{chunk-FLK7EAOE.js → chunk-IUZV5Y27.js} +3 -3
@@ -53,7 +53,7 @@ var getISOWeek = (date) => {
53
53
  };
54
54
 
55
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", "header": "Calendar-module_header__d6VGN", "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" };
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
57
 
58
58
  // core/Calendar/Calendar.tsx
59
59
  var _jsxruntime = require('react/jsx-runtime');
@@ -70,6 +70,7 @@ var CalendarComponent = _react2.default.forwardRef(
70
70
  weekStartsOn = 0,
71
71
  showOutsideDays = false,
72
72
  showWeekNumbers = false,
73
+ numberOfMonths = 1,
73
74
  month: customMonth,
74
75
  defaultMonth,
75
76
  onMonthChange,
@@ -102,6 +103,14 @@ var CalendarComponent = _react2.default.forwardRef(
102
103
  maxDay
103
104
  )
104
105
  );
106
+ const count = Math.max(1, Math.floor(numberOfMonths));
107
+ const focusedIndex = focused.getFullYear() * 12 + focused.getMonth();
108
+ const [viewStart, setViewStart] = _react.useState.call(void 0, 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);
105
114
  const gridRef = _react.useRef.call(void 0, null);
106
115
  const moveFocus = _react.useRef.call(void 0, autoFocus);
107
116
  const time = anchor ? anchor.getTime() : null;
@@ -113,6 +122,7 @@ var CalendarComponent = _react2.default.forwardRef(
113
122
  _react.useEffect.call(void 0, () => {
114
123
  if (monthTime === null) return;
115
124
  const target = new Date(monthTime);
125
+ setViewStart(target.getFullYear() * 12 + target.getMonth());
116
126
  setFocused(
117
127
  (last) => last.getFullYear() === target.getFullYear() && last.getMonth() === target.getMonth() ? last : clampDate(target, minDay, maxDay)
118
128
  );
@@ -150,47 +160,58 @@ var CalendarComponent = _react2.default.forwardRef(
150
160
  }),
151
161
  [formats, weekStartsOn]
152
162
  );
153
- const year = focused.getFullYear();
154
- const month = focused.getMonth();
155
- const weeks = _react.useMemo.call(void 0, () => {
156
- const offset = (new Date(year, month, 1).getDay() - weekStartsOn + 7) % 7;
157
- const total = new Date(year, month + 1, 0).getDate();
158
- const cells = [
159
- ...Array.from(
160
- { length: offset },
161
- (_, index) => showOutsideDays ? new Date(year, month, index - offset + 1) : null
162
- ),
163
- ...Array.from(
164
- { length: total },
165
- (_, index) => new Date(year, month, index + 1)
166
- )
167
- ];
168
- while (cells.length % 7)
169
- cells.push(
170
- showOutsideDays ? new Date(year, month, cells.length - offset + 1) : null
163
+ const outsideDays = showOutsideDays && count === 1;
164
+ const monthViews = _react.useMemo.call(void 0,
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)
171
188
  );
172
- return Array.from(
173
- { length: cells.length / 7 },
174
- (_, index) => cells.slice(index * 7, index * 7 + 7)
175
- );
176
- }, [year, month, weekStartsOn, showOutsideDays]);
177
- const lastMonth = _react.useRef.call(void 0, `${year}-${month}`);
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 = _react.useRef.call(void 0, first);
178
196
  _react.useEffect.call(void 0, () => {
179
- const key = `${year}-${month}`;
180
- if (key === lastMonth.current) return;
181
- lastMonth.current = key;
182
- if (onMonthChange) onMonthChange(new Date(year, month, 1));
183
- }, [year, month]);
197
+ if (first === lastMonth.current) return;
198
+ lastMonth.current = first;
199
+ if (onMonthChange) onMonthChange(firstMonth.date);
200
+ }, [first]);
184
201
  const isDisabled = (date) => Boolean(
185
202
  minDay && date < minDay || maxDay && date > maxDay || shouldDisableDate && shouldDisableDate(date)
186
203
  );
187
204
  const today = /* @__PURE__ */ new Date();
188
205
  const previousDisabled = Boolean(
189
- minDay && new Date(year, month, 0) < minDay
206
+ minDay && new Date(firstMonth.year, firstMonth.month, 0) < minDay
190
207
  );
191
208
  const nextDisabled = Boolean(
192
- maxDay && new Date(year, month + 1, 1) > maxDay
209
+ maxDay && new Date(lastMonthView.year, lastMonthView.month + 1, 1) > maxDay
193
210
  );
211
+ const goToMonth = (step) => {
212
+ setViewStart(first + step);
213
+ setFocused(clampDate(addMonths(focused, step), minDay, maxDay));
214
+ };
194
215
  const commit = (next) => {
195
216
  if (customValue === void 0) setSelfValue(next);
196
217
  if (onChange) onChange(next);
@@ -263,139 +284,153 @@ var CalendarComponent = _react2.default.forwardRef(
263
284
  "--calendar-week-color": theme.palette.accents_4,
264
285
  ...style
265
286
  };
266
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
287
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
267
288
  "div",
268
289
  {
269
290
  ref,
270
291
  className: _chunk5KUROAEPjs.use_classes_default.call(void 0, Calendar_module_css_default.calendar, className),
271
292
  style: calendarStyle,
272
293
  ...props,
273
- children: [
274
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: Calendar_module_css_default.header, children: [
275
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
276
- "button",
277
- {
278
- type: "button",
279
- className: _chunk5KUROAEPjs.joinClasses.call(void 0, Calendar_module_css_default.button, Calendar_module_css_default.navButton),
280
- "aria-label": previousLabel,
281
- disabled: previousDisabled,
282
- onClick: () => setFocused(clampDate(addMonths(focused, -1), minDay, maxDay)),
283
- children: "\u2039"
284
- }
285
- ),
286
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { id: headingId, className: Calendar_module_css_default.title, "aria-live": "polite", children: formats.month.format(focused) }),
287
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
288
- "button",
289
- {
290
- type: "button",
291
- className: _chunk5KUROAEPjs.joinClasses.call(void 0, Calendar_module_css_default.button, Calendar_module_css_default.navButton),
292
- "aria-label": nextLabel,
293
- disabled: nextDisabled,
294
- onClick: () => setFocused(clampDate(addMonths(focused, 1), minDay, maxDay)),
295
- children: "\u203A"
296
- }
297
- )
298
- ] }),
299
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
300
- "table",
301
- {
302
- ref: gridRef,
303
- role: "grid",
304
- "aria-labelledby": headingId,
305
- className: Calendar_module_css_default.table,
306
- "aria-multiselectable": mode !== "single" || void 0,
307
- onMouseLeave: () => setHovered(null),
308
- children: [
309
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "thead", { children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "tr", { role: "row", children: [
310
- showWeekNumbers && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "th", { role: "columnheader", className: Calendar_module_css_default.th }),
311
- weekdays.map((weekday) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
312
- "th",
313
- {
314
- role: "columnheader",
315
- scope: "col",
316
- className: Calendar_module_css_default.th,
317
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "abbr", { title: weekday.long, children: weekday.short })
318
- },
319
- weekday.long
320
- ))
321
- ] }) }),
322
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "tbody", { children: weeks.map((week, index) => {
323
- const reference = week.find(Boolean);
324
- const weekNumber = getISOWeek(
325
- addDays(reference, 3 - week.indexOf(reference))
326
- );
327
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "tr", { role: "row", children: [
328
- showWeekNumbers && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
329
- "th",
330
- {
331
- role: "rowheader",
332
- scope: "row",
333
- className: Calendar_module_css_default.weekNumber,
334
- "aria-label": `${weekLabel} ${weekNumber}`,
335
- children: weekNumber
336
- }
337
- ),
338
- week.map((date, cell) => {
339
- if (!date)
340
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
341
- "td",
342
- {
343
- role: "gridcell",
344
- className: Calendar_module_css_default.td,
345
- "aria-hidden": "true"
346
- },
347
- cell
348
- );
349
- const selectedDay = isSelected(date);
350
- const outside = date.getMonth() !== month;
351
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
352
- "td",
294
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
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__ */ _jsxruntime.jsxs.call(void 0, "div", { className: Calendar_module_css_default.month, children: [
301
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: Calendar_module_css_default.header, children: [
302
+ step === 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
303
+ "button",
304
+ {
305
+ type: "button",
306
+ className: _chunk5KUROAEPjs.joinClasses.call(void 0, 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__ */ _jsxruntime.jsx.call(void 0, "span", { className: Calendar_module_css_default.navSpacer, "aria-hidden": "true" }),
313
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
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__ */ _jsxruntime.jsx.call(void 0,
323
+ "button",
324
+ {
325
+ type: "button",
326
+ className: _chunk5KUROAEPjs.joinClasses.call(void 0, 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__ */ _jsxruntime.jsx.call(void 0, "span", { className: Calendar_module_css_default.navSpacer, "aria-hidden": "true" })
333
+ ] }),
334
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
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__ */ _jsxruntime.jsx.call(void 0, "thead", { children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "tr", { role: "row", children: [
343
+ showWeekNumbers && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "th", { role: "columnheader", className: Calendar_module_css_default.th }),
344
+ weekdays.map((weekday) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
345
+ "th",
353
346
  {
354
- role: "gridcell",
355
- className: _chunk5KUROAEPjs.joinClasses.call(void 0, Calendar_module_css_default.td, {
356
- [Calendar_module_css_default.inRange]: isInRange(date),
357
- [Calendar_module_css_default.rangeStart]: Boolean(
358
- low && isSameDay(date, low) && high
359
- ),
360
- [Calendar_module_css_default.rangeEnd]: Boolean(
361
- high && isSameDay(date, high) && low
362
- )
363
- }),
364
- "aria-selected": selectedDay || isInRange(date),
365
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
366
- "button",
347
+ role: "columnheader",
348
+ scope: "col",
349
+ className: Calendar_module_css_default.th,
350
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "abbr", { title: weekday.long, children: weekday.short })
351
+ },
352
+ weekday.long
353
+ ))
354
+ ] }) }),
355
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "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__ */ _jsxruntime.jsxs.call(void 0, "tr", { role: "row", children: [
361
+ showWeekNumbers && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
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__ */ _jsxruntime.jsx.call(void 0,
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__ */ _jsxruntime.jsx.call(void 0,
385
+ "td",
367
386
  {
368
- type: "button",
369
- "data-date": toISO(date),
370
- "aria-label": formats.day.format(date),
371
- "aria-current": isSameDay(date, today) ? "date" : void 0,
372
- className: _chunk5KUROAEPjs.joinClasses.call(void 0,
373
- Calendar_module_css_default.button,
374
- Calendar_module_css_default.dayButton,
387
+ role: "gridcell",
388
+ className: _chunk5KUROAEPjs.joinClasses.call(void 0, 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__ */ _jsxruntime.jsx.call(void 0,
399
+ "button",
375
400
  {
376
- [Calendar_module_css_default.selected]: selectedDay,
377
- [Calendar_module_css_default.today]: isSameDay(date, today),
378
- [Calendar_module_css_default.outside]: outside
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: _chunk5KUROAEPjs.joinClasses.call(void 0,
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()
379
420
  }
380
- ),
381
- tabIndex: isSameDay(date, focused) ? 0 : -1,
382
- disabled: isDisabled(date),
383
- onClick: () => select(date),
384
- onMouseEnter: () => isRange && setHovered(date),
385
- onKeyDown: (event) => keyDownHandler(event, date),
386
- children: date.getDate()
387
- }
388
- )
389
- },
390
- cell
391
- );
392
- })
393
- ] }, index);
394
- }) })
395
- ]
396
- }
397
- )
398
- ]
421
+ )
422
+ },
423
+ cell
424
+ );
425
+ })
426
+ ] }, index);
427
+ }) })
428
+ ]
429
+ }
430
+ )
431
+ ] }, step))
432
+ }
433
+ )
399
434
  }
400
435
  );
401
436
  }
@@ -25,6 +25,7 @@ var CssBaseline = ({
25
25
  html {
26
26
  font-size: 16px;
27
27
  --bolioui-icons-background: ${theme.palette.background};
28
+ box-sizing: border-box;
28
29
  }
29
30
 
30
31
  body {
@@ -6,10 +6,10 @@ var _chunkHKOESPKZjs = require('./chunk-HKOESPKZ.js');
6
6
  var _chunkAXYDJGTNjs = require('./chunk-AXYDJGTN.js');
7
7
 
8
8
 
9
- var _chunkZRORQ2WHjs = require('./chunk-ZRORQ2WH.js');
9
+ var _chunk33BUV2RXjs = require('./chunk-33BUV2RX.js');
10
10
 
11
11
 
12
- var _chunk33BUV2RXjs = require('./chunk-33BUV2RX.js');
12
+ var _chunkZRORQ2WHjs = require('./chunk-ZRORQ2WH.js');
13
13
 
14
14
 
15
15
 
@@ -127,7 +127,7 @@ var CollapseContext = _react2.default.createContext(defaultContext);
127
127
  var useCollapseContext = () => _react2.default.useContext(CollapseContext);
128
128
 
129
129
  // css-module-source:/Users/brunnoandrade/Desktop/BolioUI/bolio-ui/core/Collapse/Collapse.module.css.bolio-css-module-source
130
- var Collapse_module_css_default = { "view": "Collapse-module_view__wymqp", "title": "Collapse-module_title__ceZ1h", "subtitle": "Collapse-module_subtitle__wv5KS", "content": "Collapse-module_content__xZkpG" };
130
+ var Collapse_module_css_default = { "view": "Collapse-module_view__wymqp", "title": "Collapse-module_title__ceZ1h", "trigger": "Collapse-module_trigger__0Q0YR", "label": "Collapse-module_label__tdCh3", "subtitle": "Collapse-module_subtitle__wv5KS", "content": "Collapse-module_content__xZkpG" };
131
131
 
132
132
  // core/Collapse/Collapse.tsx
133
133
 
@@ -137,6 +137,9 @@ var CollapseComponent = _react2.default.forwardRef(
137
137
  title,
138
138
  subtitle,
139
139
  initialVisible = false,
140
+ visible: controlledVisible,
141
+ onVisibleChange,
142
+ disabled = false,
140
143
  shadow = false,
141
144
  className = "",
142
145
  index,
@@ -146,7 +149,12 @@ var CollapseComponent = _react2.default.forwardRef(
146
149
  const theme = _chunkV5I4ORQQjs.use_theme_default.call(void 0, );
147
150
  const { SCALES } = _chunkMAICNLTYjs.use_scale_default.call(void 0, );
148
151
  const { values, updateValues } = useCollapseContext();
149
- const [visible, setVisible, visibleRef] = _chunk33BUV2RXjs.use_current_state_default.call(void 0, initialVisible);
152
+ const [selfVisible, setVisible, visibleRef] = _chunk33BUV2RXjs.use_current_state_default.call(void 0, initialVisible);
153
+ const isControlled = controlledVisible !== void 0;
154
+ const visible = isControlled ? controlledVisible : selfVisible;
155
+ const baseId = _react.useId.call(void 0, );
156
+ const triggerId = `${baseId}-trigger`;
157
+ const panelId = `${baseId}-panel`;
150
158
  if (!title) {
151
159
  _chunkAXYDJGTNjs.log_warning_default.call(void 0, '"title" is required.', "Collapse");
152
160
  }
@@ -156,15 +164,12 @@ var CollapseComponent = _react2.default.forwardRef(
156
164
  setVisible(isActive);
157
165
  }, [index, setVisible, values]);
158
166
  const clickHandler = () => {
159
- const next = !visibleRef.current;
160
- setVisible(next);
167
+ if (disabled) return;
168
+ const next = !(isControlled ? controlledVisible : visibleRef.current);
169
+ if (!isControlled) setVisible(next);
170
+ if (onVisibleChange) onVisibleChange(next);
161
171
  if (updateValues) updateValues(index, next);
162
172
  };
163
- const keyDownHandler = (event) => {
164
- if (event.key !== "Enter" && event.key !== " ") return;
165
- event.preventDefault();
166
- clickHandler();
167
- };
168
173
  const collapseStyle = shadow ? {
169
174
  boxShadow: theme.expressiveness.shadowSmall,
170
175
  border: "none",
@@ -195,27 +200,29 @@ var CollapseComponent = _react2.default.forwardRef(
195
200
  "div",
196
201
  {
197
202
  className: Collapse_module_css_default.view,
198
- role: "button",
199
- tabIndex: 0,
200
- "aria-expanded": visible,
201
203
  onClick: clickHandler,
202
- onKeyDown: keyDownHandler,
203
204
  style: {
204
- "--collapse-focus-color": theme.palette.primary
205
+ "--collapse-focus-color": theme.palette.primary,
206
+ cursor: disabled ? "not-allowed" : void 0
205
207
  },
206
208
  children: [
207
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
208
- "div",
209
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: Collapse_module_css_default.title, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
210
+ "button",
209
211
  {
210
- className: Collapse_module_css_default.title,
212
+ type: "button",
213
+ id: triggerId,
214
+ className: Collapse_module_css_default.trigger,
215
+ "data-collapse-trigger": "",
216
+ "aria-expanded": visible,
217
+ "aria-controls": panelId,
218
+ disabled,
211
219
  style: { color: theme.palette.foreground },
212
220
  children: [
213
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { children: title }),
214
- " ",
221
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: Collapse_module_css_default.label, children: title }),
215
222
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CollapseIcon_default, { active: visible })
216
223
  ]
217
224
  }
218
- ),
225
+ ) }),
219
226
  subtitle && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
220
227
  "div",
221
228
  {
@@ -230,9 +237,10 @@ var CollapseComponent = _react2.default.forwardRef(
230
237
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, expand_default, { isExpanded: visible, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
231
238
  "div",
232
239
  {
240
+ id: panelId,
233
241
  className: Collapse_module_css_default.content,
234
242
  style: {
235
- padding: `${SCALES.pt(1.2)} ${SCALES.pr(0)} ${SCALES.pb(1.2)} ${SCALES.pl(0)}`
243
+ padding: `${SCALES.pt(0.6)} ${SCALES.pr(0)} ${SCALES.pb(0)} ${SCALES.pl(0)}`
236
244
  },
237
245
  children
238
246
  }
@@ -259,6 +267,7 @@ function CollapseGroupComponent({
259
267
  accordion = true,
260
268
  className = "",
261
269
  style,
270
+ onKeyDown,
262
271
  ...props
263
272
  }) {
264
273
  const { SCALES } = _chunkMAICNLTYjs.use_scale_default.call(void 0, );
@@ -290,6 +299,22 @@ function CollapseGroupComponent({
290
299
  () => _chunkUX2B3G6Ujs.setChildrenIndex.call(void 0, children, [Collapse_default]),
291
300
  [children]
292
301
  );
302
+ const keyDownHandler = (event) => {
303
+ if (onKeyDown) onKeyDown(event);
304
+ const { key } = event;
305
+ if (!["ArrowDown", "ArrowUp", "Home", "End"].includes(key)) return;
306
+ const triggers = Array.from(
307
+ event.currentTarget.querySelectorAll(
308
+ "[data-collapse-trigger]"
309
+ )
310
+ ).filter((trigger) => !trigger.disabled);
311
+ const current = triggers.indexOf(event.target);
312
+ if (current < 0) return;
313
+ event.preventDefault();
314
+ const last = triggers.length - 1;
315
+ const next = key === "Home" ? 0 : key === "End" ? last : key === "ArrowDown" ? (current + 1) % triggers.length : (current + last) % triggers.length;
316
+ triggers[next].focus();
317
+ };
293
318
  const groupStyle = {
294
319
  width: SCALES.width(1, "auto"),
295
320
  height: SCALES.height(1, "auto"),
@@ -297,7 +322,16 @@ function CollapseGroupComponent({
297
322
  margin: `${SCALES.mt(0)} ${SCALES.mr(0)} ${SCALES.mb(0)} ${SCALES.ml(0)}`,
298
323
  ...style
299
324
  };
300
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CollapseContext.Provider, { value: initialValue, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: classes, ...props, style: groupStyle, children: hasIndexChildren }) });
325
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CollapseContext.Provider, { value: initialValue, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
326
+ "div",
327
+ {
328
+ className: classes,
329
+ ...props,
330
+ onKeyDown: keyDownHandler,
331
+ style: groupStyle,
332
+ children: hasIndexChildren
333
+ }
334
+ ) });
301
335
  }
302
336
  CollapseGroupComponent.displayName = "BolioUICollapseGroup";
303
337
  var CollapseGroup = _chunkMAICNLTYjs.with_scale_default.call(void 0, CollapseGroupComponent);