@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,109 @@
1
+ import {
2
+ Menu_default
3
+ } from "./chunk-FL6J36B7.js";
4
+ import {
5
+ with_scale_default
6
+ } from "./chunk-MAICNLTY.js";
7
+ import {
8
+ use_classes_default
9
+ } from "./chunk-5KUROAEP.js";
10
+
11
+ // core/ContextMenu/ContextMenu.tsx
12
+ import React, { useEffect, useRef, useState } from "react";
13
+
14
+ // css-module-source:/Users/brunnoandrade/Desktop/BolioUI/bolio-ui/core/ContextMenu/ContextMenu.module.css.bolio-css-module-source
15
+ var ContextMenu_module_css_default = { "area": "ContextMenu-module_area__IAOF5", "trigger": "ContextMenu-module_trigger__OY2LR" };
16
+
17
+ // core/ContextMenu/ContextMenu.tsx
18
+ import { jsx, jsxs } from "react/jsx-runtime";
19
+ var ContextMenuComponent = React.forwardRef(
20
+ ({
21
+ content,
22
+ disabled = false,
23
+ onVisibleChange,
24
+ className = "",
25
+ children,
26
+ onContextMenu,
27
+ ...props
28
+ }, ref) => {
29
+ const [point, setPoint] = useState(null);
30
+ const area = useRef(null);
31
+ const setRefs = (element) => {
32
+ area.current = element;
33
+ if (typeof ref === "function") ref(element);
34
+ else if (ref) ref.current = element;
35
+ };
36
+ const change = (visible, next = null) => {
37
+ setPoint(visible ? next : null);
38
+ if (onVisibleChange) onVisibleChange(visible);
39
+ };
40
+ const contextMenuHandler = (event) => {
41
+ if (onContextMenu) onContextMenu(event);
42
+ if (disabled || event.defaultPrevented) return;
43
+ event.preventDefault();
44
+ change(true, { x: event.clientX, y: event.clientY });
45
+ };
46
+ const open = point !== null;
47
+ useEffect(() => {
48
+ if (!open) return;
49
+ const close = () => {
50
+ setPoint(null);
51
+ if (onVisibleChange) onVisibleChange(false);
52
+ };
53
+ window.addEventListener("scroll", close, { capture: true, once: true });
54
+ return () => window.removeEventListener("scroll", close, true);
55
+ }, [open, onVisibleChange]);
56
+ return /* @__PURE__ */ jsxs(
57
+ "div",
58
+ {
59
+ ref: setRefs,
60
+ className: use_classes_default(ContextMenu_module_css_default.area, className),
61
+ ...props,
62
+ onContextMenu: contextMenuHandler,
63
+ children: [
64
+ children,
65
+ point && // a new point opens a new menu, so it is placed there
66
+ /* @__PURE__ */ jsx(
67
+ Menu_default,
68
+ {
69
+ visible: true,
70
+ onVisibleChange: (visible) => change(visible),
71
+ style: {
72
+ position: "fixed",
73
+ left: point.x,
74
+ top: point.y,
75
+ width: 0,
76
+ height: 0
77
+ },
78
+ trigger: /* @__PURE__ */ jsx(
79
+ "button",
80
+ {
81
+ type: "button",
82
+ tabIndex: -1,
83
+ "aria-hidden": "true",
84
+ className: ContextMenu_module_css_default.trigger,
85
+ onFocus: () => {
86
+ var _a;
87
+ return (_a = area.current) == null ? void 0 : _a.focus();
88
+ }
89
+ }
90
+ ),
91
+ children: content
92
+ },
93
+ `${point.x}:${point.y}`
94
+ )
95
+ ]
96
+ }
97
+ );
98
+ }
99
+ );
100
+ ContextMenuComponent.displayName = "BolioUIContextMenu";
101
+ var ContextMenu = with_scale_default(ContextMenuComponent);
102
+ var ContextMenu_default = ContextMenu;
103
+
104
+ // core/ContextMenu/index.ts
105
+ var ContextMenu_default2 = ContextMenu_default;
106
+
107
+ export {
108
+ ContextMenu_default2 as ContextMenu_default
109
+ };
@@ -0,0 +1,231 @@
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
+ use_classes_default
10
+ } from "./chunk-5KUROAEP.js";
11
+
12
+ // core/Dropzone/Dropzone.tsx
13
+ import React2, { useState as useState2 } from "react";
14
+
15
+ // core/Dropzone/DropzoneThumbnail.tsx
16
+ import { useEffect, useState } from "react";
17
+
18
+ // css-module-source:/Users/brunnoandrade/Desktop/BolioUI/bolio-ui/core/Dropzone/Dropzone.module.css.bolio-css-module-source
19
+ var Dropzone_module_css_default = { "dropzone": "Dropzone-module_dropzone__-6nFN", "input": "Dropzone-module_input__-FpKo", "content": "Dropzone-module_content__Uafwo", "dragging": "Dropzone-module_dragging__z9VG8", "disabled": "Dropzone-module_disabled__rvXlc", "thumbnails": "Dropzone-module_thumbnails__x67bm", "thumbnail": "Dropzone-module_thumbnail__-ke6R", "tile": "Dropzone-module_tile__o-TLL", "preview": "Dropzone-module_preview__pQ3gz", "fileIcon": "Dropzone-module_fileIcon__hnpZV", "format": "Dropzone-module_format__oEMEw", "remove": "Dropzone-module_remove__pjfHy", "name": "Dropzone-module_name__OAPKM" };
20
+
21
+ // core/Dropzone/DropzoneThumbnail.tsx
22
+ import { jsx, jsxs } from "react/jsx-runtime";
23
+ var formatOf = (file) => {
24
+ const extension = file.name.includes(".") ? file.name.split(".").pop() : file.type.split("/")[1];
25
+ return (extension || "file").slice(0, 4).toUpperCase();
26
+ };
27
+ function DropzoneThumbnail({ file, removeLabel, disabled, onRemove }) {
28
+ const previewable = file.type.startsWith("image/");
29
+ const [url, setUrl] = useState();
30
+ useEffect(() => {
31
+ if (!previewable) return;
32
+ const objectUrl = URL.createObjectURL(file);
33
+ setUrl(objectUrl);
34
+ return () => URL.revokeObjectURL(objectUrl);
35
+ }, [file, previewable]);
36
+ return /* @__PURE__ */ jsxs("li", { className: Dropzone_module_css_default.thumbnail, children: [
37
+ /* @__PURE__ */ jsxs("div", { className: Dropzone_module_css_default.tile, children: [
38
+ previewable ? (
39
+ // the name below the tile describes the file
40
+ url && /* @__PURE__ */ jsx("img", { src: url, alt: "", className: Dropzone_module_css_default.preview })
41
+ ) : /* @__PURE__ */ jsxs(
42
+ "svg",
43
+ {
44
+ viewBox: "0 0 24 24",
45
+ width: "2.5em",
46
+ height: "2.5em",
47
+ fill: "none",
48
+ stroke: "currentColor",
49
+ strokeWidth: "1.5",
50
+ strokeLinecap: "round",
51
+ strokeLinejoin: "round",
52
+ className: Dropzone_module_css_default.fileIcon,
53
+ "aria-hidden": "true",
54
+ children: [
55
+ /* @__PURE__ */ jsx("path", { d: "M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z" }),
56
+ /* @__PURE__ */ jsx("path", { d: "M14 3v5h5" })
57
+ ]
58
+ }
59
+ ),
60
+ /* @__PURE__ */ jsx("span", { className: Dropzone_module_css_default.format, children: formatOf(file) }),
61
+ /* @__PURE__ */ jsx(
62
+ "button",
63
+ {
64
+ type: "button",
65
+ className: Dropzone_module_css_default.remove,
66
+ "aria-label": removeLabel,
67
+ disabled,
68
+ onClick: onRemove,
69
+ children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", "aria-hidden": "true", children: /* @__PURE__ */ jsx(
70
+ "path",
71
+ {
72
+ d: "M6 6l12 12M18 6L6 18",
73
+ fill: "none",
74
+ stroke: "currentColor",
75
+ strokeWidth: "2",
76
+ strokeLinecap: "round"
77
+ }
78
+ ) })
79
+ }
80
+ )
81
+ ] }),
82
+ /* @__PURE__ */ jsx("span", { className: Dropzone_module_css_default.name, title: file.name, children: file.name })
83
+ ] });
84
+ }
85
+ var DropzoneThumbnail_default = DropzoneThumbnail;
86
+
87
+ // core/Dropzone/Dropzone.tsx
88
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
89
+ var matchesAccept = (file, accept) => {
90
+ if (!accept) return true;
91
+ const name = file.name.toLowerCase();
92
+ return accept.split(",").map((token) => token.trim().toLowerCase()).filter(Boolean).some(
93
+ (token) => token.startsWith(".") ? name.endsWith(token) : token.endsWith("/*") ? file.type.toLowerCase().startsWith(token.slice(0, -1)) : file.type.toLowerCase() === token
94
+ );
95
+ };
96
+ var DropzoneComponent = React2.forwardRef(
97
+ ({
98
+ accept,
99
+ multiple = false,
100
+ maxSize,
101
+ maxFiles,
102
+ onDrop,
103
+ thumbnails = false,
104
+ value,
105
+ onChange,
106
+ removeLabel = (file) => `Remove ${file.name}`,
107
+ disabled = false,
108
+ className = "",
109
+ children = "Drag files here or click to choose them",
110
+ style,
111
+ ...props
112
+ }, ref) => {
113
+ const theme = use_theme_default();
114
+ const { SCALES } = use_scale_default();
115
+ const [dragging, setDragging] = useState2(false);
116
+ const [selfFiles, setSelfFiles] = useState2([]);
117
+ const files = value !== void 0 ? value : selfFiles;
118
+ const updateFiles = (next) => {
119
+ if (value === void 0) setSelfFiles(next);
120
+ if (onChange) onChange(next);
121
+ };
122
+ const receive = (list) => {
123
+ if (disabled || !list) return;
124
+ const kept = thumbnails && multiple ? files : [];
125
+ const limit = multiple ? (maxFiles != null ? maxFiles : Infinity) - kept.length : 1;
126
+ const accepted = [];
127
+ const rejected = [];
128
+ Array.from(list).forEach((file) => {
129
+ if (!matchesAccept(file, accept))
130
+ rejected.push({ file, reason: "file-type" });
131
+ else if (maxSize !== void 0 && file.size > maxSize)
132
+ rejected.push({ file, reason: "file-too-large" });
133
+ else if (accepted.length >= limit)
134
+ rejected.push({ file, reason: "too-many-files" });
135
+ else accepted.push(file);
136
+ });
137
+ if (thumbnails && accepted.length)
138
+ updateFiles(multiple ? [...kept, ...accepted] : accepted);
139
+ if (onDrop) onDrop(accepted, rejected);
140
+ };
141
+ const dragHandler = (event) => {
142
+ if (disabled) return;
143
+ event.preventDefault();
144
+ if (event.type === "dragleave" && event.currentTarget.contains(event.relatedTarget))
145
+ return;
146
+ setDragging(event.type !== "dragleave");
147
+ };
148
+ const dropHandler = (event) => {
149
+ if (disabled) return;
150
+ event.preventDefault();
151
+ setDragging(false);
152
+ receive(event.dataTransfer.files);
153
+ };
154
+ const changeHandler = (event) => {
155
+ receive(event.target.files);
156
+ event.target.value = "";
157
+ };
158
+ const dropzoneStyle = {
159
+ width: SCALES.width(1, "100%"),
160
+ height: SCALES.height(1, "auto"),
161
+ margin: `${SCALES.mt(0)} ${SCALES.mr(0)} ${SCALES.mb(0)} ${SCALES.ml(0)}`,
162
+ fontSize: SCALES.font(0.875),
163
+ "--dropzone-color": theme.palette.accents_6,
164
+ "--dropzone-bg": theme.palette.background,
165
+ "--dropzone-border": theme.palette.accents_3,
166
+ "--dropzone-hover-border": theme.palette.accents_5,
167
+ "--dropzone-active": theme.palette.primary,
168
+ "--dropzone-radius": theme.layout.radius,
169
+ "--dropzone-tile-bg": theme.palette.accents_1,
170
+ "--dropzone-tile-color": theme.palette.accents_4,
171
+ "--dropzone-name-color": theme.palette.accents_6,
172
+ "--dropzone-badge-bg": theme.palette.foreground,
173
+ "--dropzone-badge-color": theme.palette.background,
174
+ "--dropzone-remove-bg": theme.palette.background,
175
+ "--dropzone-remove-color": theme.palette.accents_6,
176
+ "--dropzone-remove-hover-color": theme.palette.foreground,
177
+ ...style
178
+ };
179
+ return /* @__PURE__ */ jsxs2("div", { className, style: dropzoneStyle, children: [
180
+ /* @__PURE__ */ jsxs2(
181
+ "label",
182
+ {
183
+ className: use_classes_default(Dropzone_module_css_default.dropzone, {
184
+ [Dropzone_module_css_default.dragging]: dragging,
185
+ [Dropzone_module_css_default.disabled]: disabled
186
+ }),
187
+ onDragEnter: dragHandler,
188
+ onDragOver: dragHandler,
189
+ onDragLeave: dragHandler,
190
+ onDrop: dropHandler,
191
+ children: [
192
+ /* @__PURE__ */ jsx2(
193
+ "input",
194
+ {
195
+ ref,
196
+ type: "file",
197
+ className: Dropzone_module_css_default.input,
198
+ accept,
199
+ multiple,
200
+ disabled,
201
+ onChange: changeHandler,
202
+ ...props
203
+ }
204
+ ),
205
+ /* @__PURE__ */ jsx2("span", { className: Dropzone_module_css_default.content, children })
206
+ ]
207
+ }
208
+ ),
209
+ thumbnails && files.length > 0 && /* @__PURE__ */ jsx2("ul", { className: Dropzone_module_css_default.thumbnails, children: files.map((file, index) => /* @__PURE__ */ jsx2(
210
+ DropzoneThumbnail_default,
211
+ {
212
+ file,
213
+ removeLabel: removeLabel(file),
214
+ disabled,
215
+ onRemove: () => updateFiles(files.filter((_, i) => i !== index))
216
+ },
217
+ `${file.name}-${file.size}-${file.lastModified}-${index}`
218
+ )) })
219
+ ] });
220
+ }
221
+ );
222
+ DropzoneComponent.displayName = "BolioUIDropzone";
223
+ var Dropzone = with_scale_default(DropzoneComponent);
224
+ var Dropzone_default = Dropzone;
225
+
226
+ // core/Dropzone/index.ts
227
+ var Dropzone_default2 = Dropzone_default;
228
+
229
+ export {
230
+ Dropzone_default2 as Dropzone_default
231
+ };
@@ -53,12 +53,16 @@ var defaultRect = {
53
53
  top: -1e3,
54
54
  left: -1e3,
55
55
  right: -1e3,
56
- width: 0
56
+ width: 0,
57
+ elementTop: -1e3
57
58
  };
59
+ var GAP = 2;
58
60
  var Dropdown = React.memo(
59
61
  ({ children, parent, visible, disableMatchWidth, getPopupContainer }) => {
60
62
  const el = use_portal_default("dropdown", getPopupContainer);
61
63
  const [rect, setRect] = useState(defaultRect);
64
+ const [menu, setMenu] = useState(null);
65
+ const [flipHeight, setFlipHeight] = useState(null);
62
66
  if (parent && process.env.NODE_ENV !== "production") {
63
67
  if (getPopupContainer && getPopupContainer()) {
64
68
  const el2 = getPopupContainer();
@@ -76,9 +80,10 @@ var Dropdown = React.memo(
76
80
  top,
77
81
  left,
78
82
  right,
79
- width: nativeWidth
83
+ width: nativeWidth,
84
+ elementTop
80
85
  } = getRefRect(parent, getPopupContainer);
81
- setRect({ top, left, right, width: nativeWidth });
86
+ setRect({ top, left, right, width: nativeWidth, elementTop });
82
87
  };
83
88
  use_resize_default(updateRect);
84
89
  use_click_anywhere_default(() => {
@@ -106,10 +111,18 @@ var Dropdown = React.memo(
106
111
  const mouseDownHandler = (event) => {
107
112
  event.preventDefault();
108
113
  };
114
+ useEffect2(() => {
115
+ const trigger = parent == null ? void 0 : parent.current;
116
+ if (!visible || !trigger || !menu) return setFlipHeight(null);
117
+ const { top, bottom } = trigger.getBoundingClientRect();
118
+ const height = menu.offsetHeight;
119
+ const below = window.innerHeight - bottom;
120
+ setFlipHeight(height + GAP > below && top > below ? height : null);
121
+ }, [visible, parent, menu, rect]);
109
122
  if (!parent || !el) return null;
110
123
  const dropdownStyle = {
111
124
  position: "absolute",
112
- top: rect.top + 2,
125
+ top: flipHeight === null ? rect.top + GAP : rect.elementTop - flipHeight - GAP,
113
126
  left: rect.left,
114
127
  zIndex: 1100,
115
128
  ...disableMatchWidth ? { minWidth: rect.width } : { width: rect.width }
@@ -118,6 +131,7 @@ var Dropdown = React.memo(
118
131
  /* @__PURE__ */ jsx(css_transition_default, { visible, children: /* @__PURE__ */ jsx(
119
132
  "div",
120
133
  {
134
+ ref: setMenu,
121
135
  className: "",
122
136
  onClick: clickHandler,
123
137
  onMouseDown: mouseDownHandler,
@@ -0,0 +1,275 @@
1
+ import {
2
+ getColors
3
+ } from "./chunk-KBZEYKCZ.js";
4
+ import {
5
+ Calendar_default,
6
+ fromISO,
7
+ startOfDay,
8
+ toISO
9
+ } from "./chunk-P245HSVB.js";
10
+ import {
11
+ use_click_away_default
12
+ } from "./chunk-DGXZP4VJ.js";
13
+ import {
14
+ use_scale_default,
15
+ with_scale_default
16
+ } from "./chunk-MAICNLTY.js";
17
+ import {
18
+ use_theme_default
19
+ } from "./chunk-V5I4ORQQ.js";
20
+ import {
21
+ joinClasses,
22
+ use_classes_default
23
+ } from "./chunk-5KUROAEP.js";
24
+
25
+ // core/DateRangePicker/DateRangePicker.tsx
26
+ import React, { useEffect, useRef, useState } from "react";
27
+
28
+ // css-module-source:/Users/brunnoandrade/Desktop/BolioUI/bolio-ui/core/DateRangePicker/DateRangePicker.module.css.bolio-css-module-source
29
+ var DateRangePicker_module_css_default = { "daterange": "DateRangePicker-module_daterange__id9HF", "field": "DateRangePicker-module_field__4UZhH", "input": "DateRangePicker-module_input__h9sDj", "separator": "DateRangePicker-module_separator__StR3E", "toggle": "DateRangePicker-module_toggle__gNukh", "popup": "DateRangePicker-module_popup__hKExw", "alignEnd": "DateRangePicker-module_alignEnd__DgOia" };
30
+
31
+ // core/DateRangePicker/DateRangePicker.tsx
32
+ import { jsx, jsxs } from "react/jsx-runtime";
33
+ var TWO_MONTHS_EM = 46;
34
+ var ONE_MONTH_EM = 22;
35
+ var emptyRange = [null, null];
36
+ var format = (date) => date ? toISO(date) : "";
37
+ var DateRangePickerComponent = React.forwardRef(
38
+ ({
39
+ value: customValue,
40
+ initialValue = emptyRange,
41
+ onChange,
42
+ min,
43
+ max,
44
+ locale,
45
+ weekStartsOn,
46
+ startPlaceholder = "YYYY-MM-DD",
47
+ endPlaceholder = "YYYY-MM-DD",
48
+ startLabel = "Start date",
49
+ endLabel = "End date",
50
+ calendarLabel = "Choose dates",
51
+ disabled = false,
52
+ type = "default",
53
+ rounded = false,
54
+ filled = false,
55
+ light = false,
56
+ ghost = false,
57
+ subtle = false,
58
+ className = "",
59
+ style,
60
+ ...props
61
+ }, ref) => {
62
+ const theme = use_theme_default();
63
+ const { SCALES } = use_scale_default();
64
+ const colors = getColors(theme.palette, type, disabled, {
65
+ filled,
66
+ light,
67
+ ghost,
68
+ subtle
69
+ });
70
+ const isControlled = customValue !== void 0;
71
+ const [selfValue, setSelfValue] = useState(initialValue);
72
+ const range = isControlled ? customValue : selfValue;
73
+ const [start, end] = range;
74
+ const startText = format(start);
75
+ const endText = format(end);
76
+ const [texts, setTexts] = useState({ start: startText, end: endText });
77
+ const [open, setOpen] = useState(false);
78
+ const [fit, setFit] = useState({ months: 2, alignEnd: false });
79
+ useEffect(() => {
80
+ setTexts({ start: startText, end: endText });
81
+ }, [startText, endText]);
82
+ const rootRef = useRef(null);
83
+ const endRef = useRef(null);
84
+ const buttonRef = useRef(null);
85
+ use_click_away_default(rootRef, () => setOpen(false));
86
+ const isInBounds = (date) => !(min && date < startOfDay(min) || max && date > startOfDay(max));
87
+ const commit = (next) => {
88
+ if (!isControlled) setSelfValue(next);
89
+ if (onChange) onChange(next);
90
+ };
91
+ const inputHandler = (edge) => (event) => {
92
+ const next = event.target.value;
93
+ setTexts((last) => ({ ...last, [edge]: next }));
94
+ const other = edge === "start" ? end : start;
95
+ if (next === "") {
96
+ return commit(edge === "start" ? [null, other] : [other, null]);
97
+ }
98
+ const date = fromISO(next);
99
+ if (!date || !isInBounds(date)) return;
100
+ if (other && (edge === "start" ? date > other : date < other)) return;
101
+ commit(edge === "start" ? [date, other] : [other, date]);
102
+ };
103
+ const blurHandler = () => setTexts({ start: startText, end: endText });
104
+ const toggle = () => {
105
+ const root = rootRef.current;
106
+ if (!open && root) {
107
+ const em = parseFloat(getComputedStyle(root).fontSize) || 16;
108
+ const room = document.documentElement.clientWidth - root.getBoundingClientRect().left;
109
+ setFit({
110
+ months: room >= TWO_MONTHS_EM * em ? 2 : 1,
111
+ alignEnd: room < ONE_MONTH_EM * em
112
+ });
113
+ }
114
+ setOpen((last) => !last);
115
+ };
116
+ const pick = (next) => {
117
+ var _a;
118
+ commit(next);
119
+ if (!next[1]) return;
120
+ setOpen(false);
121
+ (_a = endRef.current) == null ? void 0 : _a.focus();
122
+ };
123
+ const keyDownHandler = (event) => {
124
+ var _a;
125
+ if (event.key !== "Escape") return;
126
+ event.stopPropagation();
127
+ setOpen(false);
128
+ (_a = buttonRef.current) == null ? void 0 : _a.focus();
129
+ };
130
+ const rangeStyle = {
131
+ "--daterange-font-size": SCALES.font(0.875),
132
+ "--daterange-input-height": SCALES.height(2.25),
133
+ "--daterange-width": SCALES.width(1, "initial"),
134
+ "--daterange-height": SCALES.height(1, "auto"),
135
+ "--daterange-padding-top": SCALES.pt(0),
136
+ "--daterange-padding-right": SCALES.pr(0),
137
+ "--daterange-padding-bottom": SCALES.pb(0),
138
+ "--daterange-padding-left": SCALES.pl(0),
139
+ "--daterange-margin-top": SCALES.mt(0),
140
+ "--daterange-margin-right": SCALES.mr(0),
141
+ "--daterange-margin-bottom": SCALES.mb(0),
142
+ "--daterange-margin-left": SCALES.ml(0),
143
+ "--daterange-bg": theme.palette.background,
144
+ "--daterange-border-color": theme.palette.border,
145
+ "--daterange-radius": rounded ? "25px" : theme.layout.radius,
146
+ "--daterange-popup-radius": theme.layout.radius,
147
+ "--daterange-field-color": colors.color,
148
+ "--daterange-field-bg": colors.bgColor,
149
+ "--daterange-field-border": colors.borderColor,
150
+ "--daterange-field-hover-bg": colors.hoverBgColor,
151
+ "--daterange-field-hover-border": colors.hoverBorder,
152
+ "--daterange-focus-border-color": colors.focusBorder,
153
+ "--daterange-placeholder-color": colors.placeholderColor,
154
+ "--daterange-separator-color": colors.iconColor,
155
+ "--daterange-toggle-color": colors.iconColor,
156
+ "--daterange-toggle-hover-color": colors.color,
157
+ "--daterange-shadow": theme.expressiveness.shadowMedium,
158
+ ...style
159
+ };
160
+ const inputProps = {
161
+ type: "text",
162
+ autoComplete: "off",
163
+ inputMode: "numeric",
164
+ disabled,
165
+ onBlur: blurHandler,
166
+ className: DateRangePicker_module_css_default.input
167
+ };
168
+ return /* @__PURE__ */ jsxs(
169
+ "div",
170
+ {
171
+ ref: (node) => {
172
+ rootRef.current = node;
173
+ if (typeof ref === "function") ref(node);
174
+ else if (ref) ref.current = node;
175
+ },
176
+ className: use_classes_default(DateRangePicker_module_css_default.daterange, className),
177
+ style: rangeStyle,
178
+ role: "group",
179
+ ...props,
180
+ children: [
181
+ /* @__PURE__ */ jsxs("div", { className: DateRangePicker_module_css_default.field, children: [
182
+ /* @__PURE__ */ jsx(
183
+ "input",
184
+ {
185
+ ...inputProps,
186
+ value: texts.start,
187
+ placeholder: startPlaceholder,
188
+ "aria-label": startLabel,
189
+ onChange: inputHandler("start")
190
+ }
191
+ ),
192
+ /* @__PURE__ */ jsx("span", { className: DateRangePicker_module_css_default.separator, "aria-hidden": "true", children: "\u2013" }),
193
+ /* @__PURE__ */ jsx(
194
+ "input",
195
+ {
196
+ ...inputProps,
197
+ ref: endRef,
198
+ value: texts.end,
199
+ placeholder: endPlaceholder,
200
+ "aria-label": endLabel,
201
+ onChange: inputHandler("end")
202
+ }
203
+ ),
204
+ /* @__PURE__ */ jsx(
205
+ "button",
206
+ {
207
+ ref: buttonRef,
208
+ type: "button",
209
+ className: DateRangePicker_module_css_default.toggle,
210
+ "aria-label": calendarLabel,
211
+ "aria-haspopup": "dialog",
212
+ "aria-expanded": open,
213
+ disabled,
214
+ onClick: toggle,
215
+ children: /* @__PURE__ */ jsxs(
216
+ "svg",
217
+ {
218
+ viewBox: "0 0 24 24",
219
+ width: "1.25em",
220
+ height: "1.25em",
221
+ fill: "none",
222
+ stroke: "currentColor",
223
+ strokeWidth: "2",
224
+ strokeLinecap: "round",
225
+ strokeLinejoin: "round",
226
+ "aria-hidden": "true",
227
+ children: [
228
+ /* @__PURE__ */ jsx("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2" }),
229
+ /* @__PURE__ */ jsx("path", { d: "M16 2v4M8 2v4M3 10h18" })
230
+ ]
231
+ }
232
+ )
233
+ }
234
+ )
235
+ ] }),
236
+ open && /* @__PURE__ */ jsx(
237
+ "div",
238
+ {
239
+ role: "dialog",
240
+ "aria-label": calendarLabel,
241
+ className: joinClasses(DateRangePicker_module_css_default.popup, {
242
+ [DateRangePicker_module_css_default.alignEnd]: fit.alignEnd
243
+ }),
244
+ onKeyDown: keyDownHandler,
245
+ children: /* @__PURE__ */ jsx(
246
+ Calendar_default,
247
+ {
248
+ mode: "range",
249
+ numberOfMonths: fit.months,
250
+ autoFocus: true,
251
+ value: range,
252
+ min,
253
+ max,
254
+ locale,
255
+ weekStartsOn,
256
+ onChange: pick
257
+ }
258
+ )
259
+ }
260
+ )
261
+ ]
262
+ }
263
+ );
264
+ }
265
+ );
266
+ DateRangePickerComponent.displayName = "BolioUIDateRangePicker";
267
+ var DateRangePicker = with_scale_default(DateRangePickerComponent);
268
+ var DateRangePicker_default = DateRangePicker;
269
+
270
+ // core/DateRangePicker/index.ts
271
+ var DateRangePicker_default2 = DateRangePicker_default;
272
+
273
+ export {
274
+ DateRangePicker_default2 as DateRangePicker_default
275
+ };