@react-fabric/core 1.0.0-beta.47 → 1.0.0-beta.49

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 (38) hide show
  1. package/css/components/_divider.css +11 -5
  2. package/css/theme/_utilities.css +3 -7
  3. package/css/theme/index.css +1 -0
  4. package/dist/cjs/components/callout/Callout.js +1 -0
  5. package/dist/cjs/components/collapsable/Collapsable.js +2 -2
  6. package/dist/cjs/components/divider/Divider.js +7 -6
  7. package/dist/cjs/components/icon/Icon.js +3 -2
  8. package/dist/cjs/components/menu/Menu.js +7 -3
  9. package/dist/cjs/components/navigator/Navigator.js +15 -9
  10. package/dist/cjs/core/responsive/Responsive.js +3 -2
  11. package/dist/cjs/types/icons.js +2 -1
  12. package/dist/esm/components/callout/Callout.js +1 -0
  13. package/dist/esm/components/collapsable/Collapsable.js +2 -2
  14. package/dist/esm/components/divider/Divider.js +7 -6
  15. package/dist/esm/components/icon/Icon.js +3 -2
  16. package/dist/esm/components/menu/Menu.js +7 -3
  17. package/dist/esm/components/navigator/Navigator.js +15 -9
  18. package/dist/esm/core/responsive/Responsive.js +3 -2
  19. package/dist/esm/types/icons.js +2 -1
  20. package/dist/types/components/callout/Callout.d.ts +1 -1
  21. package/dist/types/components/card/FlipContent.d.ts +7 -0
  22. package/dist/types/components/divider/Divider.d.ts +5 -5
  23. package/dist/types/components/icon/Icon.d.ts +2 -1
  24. package/dist/types/components/menu/types.d.ts +1 -0
  25. package/dist/types/components/navigator/Navigator.d.ts +4 -1
  26. package/dist/types/core/responsive/Responsive.d.ts +5 -1
  27. package/dist/types/types/icons.d.ts +2 -1
  28. package/package.json +5 -5
  29. package/src/components/callout/Callout.tsx +2 -1
  30. package/src/components/card/FlipContent.tsx +69 -0
  31. package/src/components/collapsable/Collapsable.tsx +2 -2
  32. package/src/components/divider/Divider.tsx +10 -8
  33. package/src/components/icon/Icon.tsx +3 -0
  34. package/src/components/menu/Menu.tsx +7 -2
  35. package/src/components/menu/types.ts +1 -0
  36. package/src/components/navigator/Navigator.tsx +21 -6
  37. package/src/core/responsive/Responsive.tsx +6 -0
  38. package/src/types/icons.ts +4 -2
@@ -22,11 +22,17 @@
22
22
  */
23
23
 
24
24
  @layer components {
25
- .fabric-divider--vertical {
26
- margin-inline: 0.25rem;
27
- }
25
+ .fabric-divider {
26
+ hr {
27
+ margin: 0;
28
+ }
29
+
30
+ .fabric-divider-label--vertical {
31
+ padding-inline: 0.25rem;
32
+ }
28
33
 
29
- .fabric-divider--horizontal {
30
- margin-block: 0.25rem;
34
+ .fabric-divider-label--horizontal {
35
+ padding-block: 0.25rem;
36
+ }
31
37
  }
32
38
  }
@@ -40,7 +40,7 @@
40
40
  @variant dark (&:where([data-color-scheme="dark"], [data-color-scheme="dark"] *));
41
41
 
42
42
  @utility area-* {
43
- grid-area: --value([*]);
43
+ grid-area: --value([ *]);
44
44
  }
45
45
 
46
46
  @utility area-content {
@@ -89,12 +89,8 @@
89
89
  flex: 1 1 100%;
90
90
  }
91
91
 
92
- @utility rounded {
93
- border-radius: var(--rounding);
94
- }
95
-
96
- @utility rounded-capped {
97
- border-radius: var(--rounding-cap);
92
+ @utility font-smallcaps {
93
+ font-variant: small-caps;
98
94
  }
99
95
 
100
96
  @utility scroll-hide {
@@ -39,6 +39,7 @@
39
39
  --breakpoint-xs: 320px;
40
40
  --aspect-portrait: 3 / 4;
41
41
  --aspect-screen: 4 / 3;
42
+ --radius: var(--rounding);
42
43
  --radius-capped: var(--rounding-cap);
43
44
  --shadow-paper: 0 1px 3px 0 var(--fabric-shadow);
44
45
  }
@@ -11,6 +11,7 @@ var _excluded = ["children", "color", "legend", "title", "icon", "border", "onCl
11
11
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12
12
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13
13
  var colors = {
14
+ none: "bg-base text-tint-900 border-tint-100",
14
15
  tint: "bg-tint-50/50 text-tint-800 border-tint-300",
15
16
  primary: "bg-primary-50/50 text-primary-800 border-primary-300",
16
17
  accent: "bg-accent-50/50 text-accent-800 border-accent-300",
@@ -62,7 +62,7 @@ var Collapsable = function Collapsable(_ref) {
62
62
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
63
63
  role: "none",
64
64
  ref: headRef,
65
- className: classNames("fabric-collapsableHead", "flex gap-1 flex-nowrap py-2 font-medium cursor-pointer items-center select-none hover:opacity-70", headerClassName, stickyHeader && "bg-base sticky top-0 px-2 py-1 z-10", iconAlign === "end" ? "flex-row-reverse" : "flex-row"),
65
+ className: classNames("fabric-collapsableHead", "flex gap-1 flex-nowrap py-2 font-medium cursor-pointer items-center select-none hover:opacity-70", headerClassName, stickyHeader && "bg-base sticky top-0 py-1 z-10", iconAlign === "end" ? "flex-row-reverse" : "flex-row"),
66
66
  onClick: function onClick() {
67
67
  return !disabled && setOpenState(!openState);
68
68
  },
@@ -71,7 +71,7 @@ var Collapsable = function Collapsable(_ref) {
71
71
  icon: openState ? iconOpen : iconClosed,
72
72
  rtlFlip: true
73
73
  }), /*#__PURE__*/jsxRuntime.jsx("div", {
74
- className: "flex-1 px-2",
74
+ className: "flex-1",
75
75
  children: head
76
76
  })]
77
77
  }), openState && /*#__PURE__*/jsxRuntime.jsx("div", {
@@ -34,9 +34,9 @@ var Divider = function Divider(_ref) {
34
34
  _ref$color = _ref.color,
35
35
  color = _ref$color === void 0 ? "tint-300" : _ref$color,
36
36
  vertical = _ref.vertical,
37
- labelClassName = _ref.labelClassName;
38
- _ref.fill;
39
- var _ref$align = _ref.align,
37
+ labelClassName = _ref.labelClassName,
38
+ style = _ref.style,
39
+ _ref$align = _ref.align,
40
40
  align = _ref$align === void 0 ? "start" : _ref$align,
41
41
  className = _ref.className;
42
42
  var Rule = react.useCallback(function (_ref2) {
@@ -45,17 +45,18 @@ var Divider = function Divider(_ref) {
45
45
  return /*#__PURE__*/jsxRuntime.jsx("hr", {
46
46
  style: {
47
47
  flex: flex,
48
- borderColor: getColor.getColor(color)
48
+ borderColor: getColor.getColor(color),
49
+ borderStyle: style
49
50
  },
50
51
  className: classNames(className, vertical && "vertical", !flex && "self-stretch", vertical ? "fabric-divider--vertical" : "fabric-divider--horizontal")
51
52
  });
52
53
  }, [color, vertical]);
53
54
  return children ? /*#__PURE__*/jsxRuntime.jsxs("div", {
54
- className: classNames("flex flex-nowrap items-center", vertical && "flex-col", className),
55
+ className: classNames("flex flex-nowrap items-center fabric-divider", vertical && "flex-col", className),
55
56
  children: [/*#__PURE__*/jsxRuntime.jsx(Rule, {
56
57
  flex: align === "start" ? "0 0 1rem" : "1 1 1em"
57
58
  }), /*#__PURE__*/jsxRuntime.jsx("div", {
58
- className: classNames("px-2 whitespace-nowrap", vertical ? "fabric-divider--vertical" : "fabric-divider--horizontal", labelClassName, "rounded-full text-[0.75em]", vertical && "origin-center -rotate-90 z-1"),
59
+ className: classNames("px-2 whitespace-nowrap", vertical ? "fabric-divider-label--vertical" : "fabric-divider-label--horizontal", labelClassName, "rounded-full text-[0.75em]", vertical && "origin-center -rotate-90 z-1"),
59
60
  children: children
60
61
  }), /*#__PURE__*/jsxRuntime.jsx(Rule, {
61
62
  flex: align === "end" ? "0 0 1rem" : "1 1 1em"
@@ -8,7 +8,7 @@ var react = require('react');
8
8
  var jsxRuntime = require('react/jsx-runtime');
9
9
  var getColor = require('../../utils/getColor.js');
10
10
 
11
- var _excluded = ["ref", "icon", "bg", "color", "size", "rtlFlip", "animate", "rounded", "viewBox", "className", "onClick"];
11
+ var _excluded = ["ref", "icon", "bg", "color", "size", "rtlFlip", "animate", "rounded", "disabled", "viewBox", "className", "onClick"];
12
12
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
13
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
14
  var SvgTextSize = ["", ".875em", ".525em", ".35em", ".25em"];
@@ -33,6 +33,7 @@ var Icon = function Icon(_ref) {
33
33
  rtlFlip = _ref.rtlFlip,
34
34
  animate = _ref.animate,
35
35
  rounded = _ref.rounded,
36
+ disabled = _ref.disabled,
36
37
  _ref$viewBox = _ref.viewBox,
37
38
  viewBox = _ref$viewBox === void 0 ? "0 0 24 24" : _ref$viewBox,
38
39
  className = _ref.className,
@@ -94,7 +95,7 @@ var Icon = function Icon(_ref) {
94
95
  ref: ref
95
96
  }, rest), {}, {
96
97
  role: "presentation",
97
- className: classNames("fabric-icon", "select-none overflow-hidden box-content leading-none not-italic text-center", !rounded && "rounded", rounded && "rounded-full", animate && "animate-".concat(animate), className),
98
+ className: classNames("fabric-icon", "select-none overflow-hidden box-content leading-none not-italic text-center", !rounded && "rounded", rounded && "rounded-full", animate && "animate-".concat(animate), !!onClick && disabled && "opacity-30 pointer-events-none", className),
98
99
  onClick: onClick,
99
100
  "data-flip": rtlFlip,
100
101
  style: styles,
@@ -14,7 +14,7 @@ var nodeCheck = require('../../utils/nodeCheck.js');
14
14
  var MenuItem = require('./MenuItem.js');
15
15
  var jsxRuntime = require('react/jsx-runtime');
16
16
 
17
- var _excluded = ["children", "minimal", "menuClassName", "onClick", "ref"];
17
+ var _excluded = ["children", "minimal", "menuClassName", "onClick", "trigger", "ref"];
18
18
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
19
19
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
20
20
  // FIXME: refactor menu implementation to differentiate between static and floating menus, implement context wrapper for each menu level
@@ -25,6 +25,8 @@ var MenuComponent = function MenuComponent(_ref) {
25
25
  minimal = _ref.minimal,
26
26
  menuClassName = _ref.menuClassName,
27
27
  onClick = _ref.onClick,
28
+ _ref$trigger = _ref.trigger,
29
+ trigger = _ref$trigger === void 0 ? "hover" : _ref$trigger,
28
30
  ref = _ref.ref,
29
31
  rest = _objectWithoutProperties(_ref, _excluded);
30
32
  var _useState = react$1.useState(false),
@@ -46,6 +48,7 @@ var MenuComponent = function MenuComponent(_ref) {
46
48
  open: !isNested || isOpen,
47
49
  onOpenChange: function onOpenChange(open, event, reason) {
48
50
  isNested && setIsOpen(open);
51
+ if (reason === "outside-press" && trigger === "click") tree === null || tree === void 0 || tree.events.emit("close");
49
52
  },
50
53
  placement: isNested ? "right-start" : "bottom-start",
51
54
  middleware: [react.offset({
@@ -58,6 +61,7 @@ var MenuComponent = function MenuComponent(_ref) {
58
61
  refs = _useFloating.refs,
59
62
  context = _useFloating.context;
60
63
  var hover = react.useHover(context, {
64
+ enabled: trigger === "hover",
61
65
  delay: {
62
66
  open: 75
63
67
  },
@@ -67,8 +71,8 @@ var MenuComponent = function MenuComponent(_ref) {
67
71
  });
68
72
  var click = react.useClick(context, {
69
73
  event: "mousedown",
70
- toggle: !isNested,
71
- ignoreMouse: isNested
74
+ toggle: trigger === "click" || !isNested,
75
+ ignoreMouse: trigger === "hover" && !isNested
72
76
  });
73
77
  var role = react.useRole(context, {
74
78
  role: "menu"
@@ -7,9 +7,10 @@ var react = require('react');
7
7
  var HotKey = require('../../hotkeys/HotKey.js');
8
8
  var icons = require('../../types/icons.js');
9
9
  var Icon = require('../icon/Icon.js');
10
+ var utilities = require('@react-fabric/utilities');
10
11
  var jsxRuntime = require('react/jsx-runtime');
11
12
 
12
- var _excluded = ["className", "onNavigate", "color", "children"];
13
+ var _excluded = ["className", "onNavigate", "color", "children", "length", "current", "disableKeyHandlers"];
13
14
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
15
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
16
  var Navigator = function Navigator(_ref) {
@@ -17,21 +18,24 @@ var Navigator = function Navigator(_ref) {
17
18
  onNavigate = _ref.onNavigate,
18
19
  color = _ref.color,
19
20
  children = _ref.children,
21
+ length = _ref.length,
22
+ current = _ref.current,
23
+ disableKeyHandlers = _ref.disableKeyHandlers,
20
24
  aria = _objectWithoutProperties(_ref, _excluded);
21
25
  var navPrev = react.useCallback(function () {
22
- return onNavigate(-1);
23
- }, [onNavigate]);
26
+ return (utilities.isEmpty(current) || current !== 0) && onNavigate(-1);
27
+ }, [onNavigate, current]);
24
28
  var navNext = react.useCallback(function () {
25
- return onNavigate(+1);
26
- }, [onNavigate]);
29
+ return (utilities.isEmpty(current) || current + 1 < (length !== null && length !== void 0 ? length : 0)) && onNavigate(+1);
30
+ }, [onNavigate, current, length]);
27
31
  return /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread(_objectSpread({
28
32
  "data-ref": "navigator",
29
33
  className: classNames(className, "inline-flex items-center leading-none")
30
34
  }, aria), {}, {
31
- children: [/*#__PURE__*/jsxRuntime.jsx(HotKey.HotKey, {
35
+ children: [!disableKeyHandlers && /*#__PURE__*/jsxRuntime.jsx(HotKey.HotKey, {
32
36
  keyCombo: "left",
33
37
  handler: navPrev
34
- }), /*#__PURE__*/jsxRuntime.jsx(HotKey.HotKey, {
38
+ }), !disableKeyHandlers && /*#__PURE__*/jsxRuntime.jsx(HotKey.HotKey, {
35
39
  keyCombo: "right",
36
40
  handler: navNext
37
41
  }), /*#__PURE__*/jsxRuntime.jsx(Icon.Icon, {
@@ -41,8 +45,9 @@ var Navigator = function Navigator(_ref) {
41
45
  "aria-label": "previous",
42
46
  "data-ref": "previous",
43
47
  icon: icons.CoreIcons.chevronLeft,
48
+ disabled: !utilities.isEmpty(current) && current === 0,
44
49
  onClick: function onClick(e) {
45
- return [e.stopPropagation(), onNavigate(-1)];
50
+ return [e.stopPropagation(), navPrev()];
46
51
  }
47
52
  }), children, /*#__PURE__*/jsxRuntime.jsx(Icon.Icon, {
48
53
  rtlFlip: true,
@@ -51,8 +56,9 @@ var Navigator = function Navigator(_ref) {
51
56
  "aria-label": "next",
52
57
  "data-ref": "next",
53
58
  icon: icons.CoreIcons.chevronRight,
59
+ disabled: !utilities.isEmpty(current) && current + 1 === length,
54
60
  onClick: function onClick(e) {
55
- return [e.stopPropagation(), onNavigate(1)];
61
+ return [e.stopPropagation(), navNext()];
56
62
  }
57
63
  })]
58
64
  }));
@@ -7,7 +7,7 @@ var jsxRuntime = require('react/jsx-runtime');
7
7
 
8
8
  var _excluded = ["children", "fullWidth", "className", "gutter"],
9
9
  _excluded2 = ["children", "gutter", "noWrap", "orient", "align", "justify", "className"],
10
- _excluded3 = ["children", "flex", "align", "className", "stretchContent"];
10
+ _excluded3 = ["children", "flex", "align", "truncate", "className", "stretchContent"];
11
11
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12
12
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13
13
  /**
@@ -48,11 +48,12 @@ var Col = function Col(_ref3) {
48
48
  var children = _ref3.children,
49
49
  flex = _ref3.flex,
50
50
  align = _ref3.align,
51
+ truncate = _ref3.truncate,
51
52
  className = _ref3.className,
52
53
  stretchContent = _ref3.stretchContent,
53
54
  aria = _objectWithoutProperties(_ref3, _excluded3);
54
55
  return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread(_objectSpread({
55
- className: classNames("fabric-col", className, stretchContent && "stretchContent", flex === "fill" && "flex-1", flex === "full" && "flex-full", flex === "auto" && "flex-auto", flex === "initial" && "flex-initial", flex === "content" && "flex-none", align && "self-".concat(align))
56
+ className: classNames("fabric-col", className, stretchContent && "stretchContent", flex === "fill" && "flex-1", flex === "full" && "flex-full", flex === "auto" && "flex-auto", flex === "initial" && "flex-initial", flex === "content" && "flex-none", align && "self-".concat(align), truncate && "truncate")
56
57
  }, aria), {}, {
57
58
  children: children
58
59
  }));
@@ -66,9 +66,10 @@ exports.CoreIcons = void 0;
66
66
  _CoreIcons.sortAsc = "M19 7H22L18 3L14 7H17V21H19M2 17H12V19H2M6 5V7H2V5M2 11H9V13H2V11Z";
67
67
  _CoreIcons.refresh = "M19.547 14.667c-0.736 2.083-2.245 3.67-4.094 4.553s-4.031 1.061-6.114 0.325-3.67-2.245-4.553-4.094-1.061-4.031-0.325-6.114 2.245-3.67 4.094-4.553 4.031-1.061 6.114-0.325c1.188 0.42 2.209 1.088 2.987 1.882l2.824 2.659h-3.48c-0.552 0-1 0.448-1 1s0.448 1 1 1h5.997c0.004 0 0.009 0 0.013 0 0.137-0.001 0.267-0.030 0.386-0.082 0.119-0.051 0.229-0.126 0.324-0.225 0.012-0.012 0.023-0.025 0.034-0.038 0.076-0.087 0.134-0.184 0.175-0.287s0.065-0.213 0.069-0.328c0.002-0.014 0.002-0.028 0.002-0.042v-5.998c0-0.552-0.448-1-1-1s-1 0.448-1 1v3.685l-2.916-2.745c-0.993-1.012-2.274-1.846-3.748-2.366-2.604-0.921-5.336-0.698-7.644 0.405s-4.197 3.088-5.117 5.692-0.696 5.335 0.406 7.643 3.088 4.197 5.692 5.117 5.335 0.697 7.643-0.406 4.197-3.088 5.117-5.692c0.184-0.521-0.089-1.092-0.61-1.276s-1.092 0.089-1.276 0.61z";
68
68
  _CoreIcons.search = "M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z";
69
+ _CoreIcons.ellipsis = "M14 12c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414zM14 5c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414zM14 19c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414z";
69
70
  _CoreIcons.filter = "M6,13H18V11H6M3,6V8H21V6M10,18H14V16H10V18Z";
70
71
  _CoreIcons.funnel = "M19.845 4l-6.609 7.814c-0.147 0.173-0.236 0.399-0.236 0.646v6.922l-2-1v-5.922c0.001-0.227-0.077-0.457-0.236-0.646l-6.609-7.814zM22 2h-20c-0.552 0-1 0.448-1 1 0 0.247 0.089 0.473 0.236 0.646l7.764 9.18v6.174c0 0.389 0.222 0.727 0.553 0.894l4 2c0.494 0.247 1.095 0.047 1.342-0.447 0.072-0.146 0.106-0.301 0.105-0.447v-8.174l7.764-9.18c0.357-0.422 0.304-1.053-0.118-1.409-0.189-0.16-0.419-0.238-0.646-0.237z";
71
- _CoreIcons.ellipsis = "M14 12c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414zM14 5c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414zM14 19c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414z";
72
+ _CoreIcons.funnelFull = "M14,12V19.88C14.04,20.18 13.94,20.5 13.71,20.71C13.32,21.1 12.69,21.1 12.3,20.71L10.29,18.7C10.06,18.47 9.96,18.16 10,17.87V12H9.97L4.21,4.62C3.87,4.19 3.95,3.56 4.38,3.22C4.57,3.08 4.78,3 5,3V3H19V3C19.22,3 19.43,3.08 19.62,3.22C20.05,3.56 20.13,4.19 19.79,4.62L14.03,12H14Z";
72
73
  _CoreIcons.funnelPlus = "M15 17H18V14H20V17H23V19H20V22H18V19H15V17M13 19.88C13.04 20.18 12.94 20.5 12.72 20.71C12.32 21.1 11.69 21.1 11.3 20.71L7.29 16.7C7.06 16.47 6.96 16.16 7 15.87V10.75L2.21 4.62C1.87 4.19 1.95 3.56 2.38 3.22C2.57 3.08 2.78 3 3 3V3H17V3C17.22 3 17.43 3.08 17.62 3.22C18.05 3.56 18.13 4.19 17.79 4.62L13 10.75V19.88M5.04 5L9 10.07V15.58L11 17.58V10.05L14.96 5H5.04Z";
73
74
  _CoreIcons.funnelRemove = "M14.73,20.83L17.58,18L14.73,15.17L16.15,13.76L19,16.57L21.8,13.76L23.22,15.17L20.41,18L23.22,20.83L21.8,22.24L19,19.4L16.15,22.24L14.73,20.83M13,19.88C13.04,20.18 12.94,20.5 12.71,20.71C12.32,21.1 11.69,21.1 11.3,20.71L7.29,16.7C7.06,16.47 6.96,16.16 7,15.87V10.75L2.21,4.62C1.87,4.19 1.95,3.56 2.38,3.22C2.57,3.08 2.78,3 3,3V3H17V3C17.22,3 17.43,3.08 17.62,3.22C18.05,3.56 18.13,4.19 17.79,4.62L13,10.75V19.88M5.04,5L9,10.06V15.58L11,17.58V10.05L14.96,5H5.04Z";
74
75
  _CoreIcons.funnelMinus = "M15 17H23V19H15V17M13 19.88C13.04 20.18 12.94 20.5 12.72 20.71C12.32 21.1 11.69 21.1 11.3 20.71L7.29 16.7C7.06 16.47 6.96 16.16 7 15.87V10.75L2.21 4.62C1.87 4.19 1.95 3.56 2.38 3.22C2.57 3.08 2.78 3 3 3V3H17V3C17.22 3 17.43 3.08 17.62 3.22C18.05 3.56 18.13 4.19 17.79 4.62L13 10.75V19.88M5.04 5L9 10.07V15.58L11 17.58V10.05L14.96 5H5.04Z";
@@ -11,6 +11,7 @@ var _excluded = ["children", "color", "legend", "title", "icon", "border", "onCl
11
11
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12
12
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13
13
  var colors = {
14
+ none: "bg-base text-tint-900 border-tint-100",
14
15
  tint: "bg-tint-50/50 text-tint-800 border-tint-300",
15
16
  primary: "bg-primary-50/50 text-primary-800 border-primary-300",
16
17
  accent: "bg-accent-50/50 text-accent-800 border-accent-300",
@@ -62,7 +62,7 @@ var Collapsable = function Collapsable(_ref) {
62
62
  children: [/*#__PURE__*/jsxs("div", {
63
63
  role: "none",
64
64
  ref: headRef,
65
- className: classNames("fabric-collapsableHead", "flex gap-1 flex-nowrap py-2 font-medium cursor-pointer items-center select-none hover:opacity-70", headerClassName, stickyHeader && "bg-base sticky top-0 px-2 py-1 z-10", iconAlign === "end" ? "flex-row-reverse" : "flex-row"),
65
+ className: classNames("fabric-collapsableHead", "flex gap-1 flex-nowrap py-2 font-medium cursor-pointer items-center select-none hover:opacity-70", headerClassName, stickyHeader && "bg-base sticky top-0 py-1 z-10", iconAlign === "end" ? "flex-row-reverse" : "flex-row"),
66
66
  onClick: function onClick() {
67
67
  return !disabled && setOpenState(!openState);
68
68
  },
@@ -71,7 +71,7 @@ var Collapsable = function Collapsable(_ref) {
71
71
  icon: openState ? iconOpen : iconClosed,
72
72
  rtlFlip: true
73
73
  }), /*#__PURE__*/jsx("div", {
74
- className: "flex-1 px-2",
74
+ className: "flex-1",
75
75
  children: head
76
76
  })]
77
77
  }), openState && /*#__PURE__*/jsx("div", {
@@ -34,9 +34,9 @@ var Divider = function Divider(_ref) {
34
34
  _ref$color = _ref.color,
35
35
  color = _ref$color === void 0 ? "tint-300" : _ref$color,
36
36
  vertical = _ref.vertical,
37
- labelClassName = _ref.labelClassName;
38
- _ref.fill;
39
- var _ref$align = _ref.align,
37
+ labelClassName = _ref.labelClassName,
38
+ style = _ref.style,
39
+ _ref$align = _ref.align,
40
40
  align = _ref$align === void 0 ? "start" : _ref$align,
41
41
  className = _ref.className;
42
42
  var Rule = useCallback(function (_ref2) {
@@ -45,17 +45,18 @@ var Divider = function Divider(_ref) {
45
45
  return /*#__PURE__*/jsx("hr", {
46
46
  style: {
47
47
  flex: flex,
48
- borderColor: getColor(color)
48
+ borderColor: getColor(color),
49
+ borderStyle: style
49
50
  },
50
51
  className: classNames(className, vertical && "vertical", !flex && "self-stretch", vertical ? "fabric-divider--vertical" : "fabric-divider--horizontal")
51
52
  });
52
53
  }, [color, vertical]);
53
54
  return children ? /*#__PURE__*/jsxs("div", {
54
- className: classNames("flex flex-nowrap items-center", vertical && "flex-col", className),
55
+ className: classNames("flex flex-nowrap items-center fabric-divider", vertical && "flex-col", className),
55
56
  children: [/*#__PURE__*/jsx(Rule, {
56
57
  flex: align === "start" ? "0 0 1rem" : "1 1 1em"
57
58
  }), /*#__PURE__*/jsx("div", {
58
- className: classNames("px-2 whitespace-nowrap", vertical ? "fabric-divider--vertical" : "fabric-divider--horizontal", labelClassName, "rounded-full text-[0.75em]", vertical && "origin-center -rotate-90 z-1"),
59
+ className: classNames("px-2 whitespace-nowrap", vertical ? "fabric-divider-label--vertical" : "fabric-divider-label--horizontal", labelClassName, "rounded-full text-[0.75em]", vertical && "origin-center -rotate-90 z-1"),
59
60
  children: children
60
61
  }), /*#__PURE__*/jsx(Rule, {
61
62
  flex: align === "end" ? "0 0 1rem" : "1 1 1em"
@@ -8,7 +8,7 @@ import { useMemo } from 'react';
8
8
  import { jsx } from 'react/jsx-runtime';
9
9
  import { getColor } from '../../utils/getColor.js';
10
10
 
11
- var _excluded = ["ref", "icon", "bg", "color", "size", "rtlFlip", "animate", "rounded", "viewBox", "className", "onClick"];
11
+ var _excluded = ["ref", "icon", "bg", "color", "size", "rtlFlip", "animate", "rounded", "disabled", "viewBox", "className", "onClick"];
12
12
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
13
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
14
  var SvgTextSize = ["", ".875em", ".525em", ".35em", ".25em"];
@@ -33,6 +33,7 @@ var Icon = function Icon(_ref) {
33
33
  rtlFlip = _ref.rtlFlip,
34
34
  animate = _ref.animate,
35
35
  rounded = _ref.rounded,
36
+ disabled = _ref.disabled,
36
37
  _ref$viewBox = _ref.viewBox,
37
38
  viewBox = _ref$viewBox === void 0 ? "0 0 24 24" : _ref$viewBox,
38
39
  className = _ref.className,
@@ -94,7 +95,7 @@ var Icon = function Icon(_ref) {
94
95
  ref: ref
95
96
  }, rest), {}, {
96
97
  role: "presentation",
97
- className: classNames("fabric-icon", "select-none overflow-hidden box-content leading-none not-italic text-center", !rounded && "rounded", rounded && "rounded-full", animate && "animate-".concat(animate), className),
98
+ className: classNames("fabric-icon", "select-none overflow-hidden box-content leading-none not-italic text-center", !rounded && "rounded", rounded && "rounded-full", animate && "animate-".concat(animate), !!onClick && disabled && "opacity-30 pointer-events-none", className),
98
99
  onClick: onClick,
99
100
  "data-flip": rtlFlip,
100
101
  style: styles,
@@ -14,7 +14,7 @@ import { nodeCheck } from '../../utils/nodeCheck.js';
14
14
  import { MenuItem } from './MenuItem.js';
15
15
  import { jsx, jsxs } from 'react/jsx-runtime';
16
16
 
17
- var _excluded = ["children", "minimal", "menuClassName", "onClick", "ref"];
17
+ var _excluded = ["children", "minimal", "menuClassName", "onClick", "trigger", "ref"];
18
18
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
19
19
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
20
20
  // FIXME: refactor menu implementation to differentiate between static and floating menus, implement context wrapper for each menu level
@@ -25,6 +25,8 @@ var MenuComponent = function MenuComponent(_ref) {
25
25
  minimal = _ref.minimal,
26
26
  menuClassName = _ref.menuClassName,
27
27
  onClick = _ref.onClick,
28
+ _ref$trigger = _ref.trigger,
29
+ trigger = _ref$trigger === void 0 ? "hover" : _ref$trigger,
28
30
  ref = _ref.ref,
29
31
  rest = _objectWithoutProperties(_ref, _excluded);
30
32
  var _useState = useState(false),
@@ -46,6 +48,7 @@ var MenuComponent = function MenuComponent(_ref) {
46
48
  open: !isNested || isOpen,
47
49
  onOpenChange: function onOpenChange(open, event, reason) {
48
50
  isNested && setIsOpen(open);
51
+ if (reason === "outside-press" && trigger === "click") tree === null || tree === void 0 || tree.events.emit("close");
49
52
  },
50
53
  placement: isNested ? "right-start" : "bottom-start",
51
54
  middleware: [offset({
@@ -58,6 +61,7 @@ var MenuComponent = function MenuComponent(_ref) {
58
61
  refs = _useFloating.refs,
59
62
  context = _useFloating.context;
60
63
  var hover = useHover(context, {
64
+ enabled: trigger === "hover",
61
65
  delay: {
62
66
  open: 75
63
67
  },
@@ -67,8 +71,8 @@ var MenuComponent = function MenuComponent(_ref) {
67
71
  });
68
72
  var click = useClick(context, {
69
73
  event: "mousedown",
70
- toggle: !isNested,
71
- ignoreMouse: isNested
74
+ toggle: trigger === "click" || !isNested,
75
+ ignoreMouse: trigger === "hover" && !isNested
72
76
  });
73
77
  var role = useRole(context, {
74
78
  role: "menu"
@@ -7,9 +7,10 @@ import { useCallback } from 'react';
7
7
  import { HotKey } from '../../hotkeys/HotKey.js';
8
8
  import { CoreIcons } from '../../types/icons.js';
9
9
  import { Icon } from '../icon/Icon.js';
10
+ import { isEmpty } from '@react-fabric/utilities';
10
11
  import { jsxs, jsx } from 'react/jsx-runtime';
11
12
 
12
- var _excluded = ["className", "onNavigate", "color", "children"];
13
+ var _excluded = ["className", "onNavigate", "color", "children", "length", "current", "disableKeyHandlers"];
13
14
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
15
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
16
  var Navigator = function Navigator(_ref) {
@@ -17,21 +18,24 @@ var Navigator = function Navigator(_ref) {
17
18
  onNavigate = _ref.onNavigate,
18
19
  color = _ref.color,
19
20
  children = _ref.children,
21
+ length = _ref.length,
22
+ current = _ref.current,
23
+ disableKeyHandlers = _ref.disableKeyHandlers,
20
24
  aria = _objectWithoutProperties(_ref, _excluded);
21
25
  var navPrev = useCallback(function () {
22
- return onNavigate(-1);
23
- }, [onNavigate]);
26
+ return (isEmpty(current) || current !== 0) && onNavigate(-1);
27
+ }, [onNavigate, current]);
24
28
  var navNext = useCallback(function () {
25
- return onNavigate(+1);
26
- }, [onNavigate]);
29
+ return (isEmpty(current) || current + 1 < (length !== null && length !== void 0 ? length : 0)) && onNavigate(+1);
30
+ }, [onNavigate, current, length]);
27
31
  return /*#__PURE__*/jsxs("div", _objectSpread(_objectSpread({
28
32
  "data-ref": "navigator",
29
33
  className: classNames(className, "inline-flex items-center leading-none")
30
34
  }, aria), {}, {
31
- children: [/*#__PURE__*/jsx(HotKey, {
35
+ children: [!disableKeyHandlers && /*#__PURE__*/jsx(HotKey, {
32
36
  keyCombo: "left",
33
37
  handler: navPrev
34
- }), /*#__PURE__*/jsx(HotKey, {
38
+ }), !disableKeyHandlers && /*#__PURE__*/jsx(HotKey, {
35
39
  keyCombo: "right",
36
40
  handler: navNext
37
41
  }), /*#__PURE__*/jsx(Icon, {
@@ -41,8 +45,9 @@ var Navigator = function Navigator(_ref) {
41
45
  "aria-label": "previous",
42
46
  "data-ref": "previous",
43
47
  icon: CoreIcons.chevronLeft,
48
+ disabled: !isEmpty(current) && current === 0,
44
49
  onClick: function onClick(e) {
45
- return [e.stopPropagation(), onNavigate(-1)];
50
+ return [e.stopPropagation(), navPrev()];
46
51
  }
47
52
  }), children, /*#__PURE__*/jsx(Icon, {
48
53
  rtlFlip: true,
@@ -51,8 +56,9 @@ var Navigator = function Navigator(_ref) {
51
56
  "aria-label": "next",
52
57
  "data-ref": "next",
53
58
  icon: CoreIcons.chevronRight,
59
+ disabled: !isEmpty(current) && current + 1 === length,
54
60
  onClick: function onClick(e) {
55
- return [e.stopPropagation(), onNavigate(1)];
61
+ return [e.stopPropagation(), navNext()];
56
62
  }
57
63
  })]
58
64
  }));
@@ -7,7 +7,7 @@ import { jsx } from 'react/jsx-runtime';
7
7
 
8
8
  var _excluded = ["children", "fullWidth", "className", "gutter"],
9
9
  _excluded2 = ["children", "gutter", "noWrap", "orient", "align", "justify", "className"],
10
- _excluded3 = ["children", "flex", "align", "className", "stretchContent"];
10
+ _excluded3 = ["children", "flex", "align", "truncate", "className", "stretchContent"];
11
11
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12
12
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13
13
  /**
@@ -48,11 +48,12 @@ var Col = function Col(_ref3) {
48
48
  var children = _ref3.children,
49
49
  flex = _ref3.flex,
50
50
  align = _ref3.align,
51
+ truncate = _ref3.truncate,
51
52
  className = _ref3.className,
52
53
  stretchContent = _ref3.stretchContent,
53
54
  aria = _objectWithoutProperties(_ref3, _excluded3);
54
55
  return /*#__PURE__*/jsx("div", _objectSpread(_objectSpread({
55
- className: classNames("fabric-col", className, stretchContent && "stretchContent", flex === "fill" && "flex-1", flex === "full" && "flex-full", flex === "auto" && "flex-auto", flex === "initial" && "flex-initial", flex === "content" && "flex-none", align && "self-".concat(align))
56
+ className: classNames("fabric-col", className, stretchContent && "stretchContent", flex === "fill" && "flex-1", flex === "full" && "flex-full", flex === "auto" && "flex-auto", flex === "initial" && "flex-initial", flex === "content" && "flex-none", align && "self-".concat(align), truncate && "truncate")
56
57
  }, aria), {}, {
57
58
  children: children
58
59
  }));
@@ -66,9 +66,10 @@ var CoreIcons;
66
66
  _CoreIcons.sortAsc = "M19 7H22L18 3L14 7H17V21H19M2 17H12V19H2M6 5V7H2V5M2 11H9V13H2V11Z";
67
67
  _CoreIcons.refresh = "M19.547 14.667c-0.736 2.083-2.245 3.67-4.094 4.553s-4.031 1.061-6.114 0.325-3.67-2.245-4.553-4.094-1.061-4.031-0.325-6.114 2.245-3.67 4.094-4.553 4.031-1.061 6.114-0.325c1.188 0.42 2.209 1.088 2.987 1.882l2.824 2.659h-3.48c-0.552 0-1 0.448-1 1s0.448 1 1 1h5.997c0.004 0 0.009 0 0.013 0 0.137-0.001 0.267-0.030 0.386-0.082 0.119-0.051 0.229-0.126 0.324-0.225 0.012-0.012 0.023-0.025 0.034-0.038 0.076-0.087 0.134-0.184 0.175-0.287s0.065-0.213 0.069-0.328c0.002-0.014 0.002-0.028 0.002-0.042v-5.998c0-0.552-0.448-1-1-1s-1 0.448-1 1v3.685l-2.916-2.745c-0.993-1.012-2.274-1.846-3.748-2.366-2.604-0.921-5.336-0.698-7.644 0.405s-4.197 3.088-5.117 5.692-0.696 5.335 0.406 7.643 3.088 4.197 5.692 5.117 5.335 0.697 7.643-0.406 4.197-3.088 5.117-5.692c0.184-0.521-0.089-1.092-0.61-1.276s-1.092 0.089-1.276 0.61z";
68
68
  _CoreIcons.search = "M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z";
69
+ _CoreIcons.ellipsis = "M14 12c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414zM14 5c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414zM14 19c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414z";
69
70
  _CoreIcons.filter = "M6,13H18V11H6M3,6V8H21V6M10,18H14V16H10V18Z";
70
71
  _CoreIcons.funnel = "M19.845 4l-6.609 7.814c-0.147 0.173-0.236 0.399-0.236 0.646v6.922l-2-1v-5.922c0.001-0.227-0.077-0.457-0.236-0.646l-6.609-7.814zM22 2h-20c-0.552 0-1 0.448-1 1 0 0.247 0.089 0.473 0.236 0.646l7.764 9.18v6.174c0 0.389 0.222 0.727 0.553 0.894l4 2c0.494 0.247 1.095 0.047 1.342-0.447 0.072-0.146 0.106-0.301 0.105-0.447v-8.174l7.764-9.18c0.357-0.422 0.304-1.053-0.118-1.409-0.189-0.16-0.419-0.238-0.646-0.237z";
71
- _CoreIcons.ellipsis = "M14 12c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414zM14 5c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414zM14 19c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414z";
72
+ _CoreIcons.funnelFull = "M14,12V19.88C14.04,20.18 13.94,20.5 13.71,20.71C13.32,21.1 12.69,21.1 12.3,20.71L10.29,18.7C10.06,18.47 9.96,18.16 10,17.87V12H9.97L4.21,4.62C3.87,4.19 3.95,3.56 4.38,3.22C4.57,3.08 4.78,3 5,3V3H19V3C19.22,3 19.43,3.08 19.62,3.22C20.05,3.56 20.13,4.19 19.79,4.62L14.03,12H14Z";
72
73
  _CoreIcons.funnelPlus = "M15 17H18V14H20V17H23V19H20V22H18V19H15V17M13 19.88C13.04 20.18 12.94 20.5 12.72 20.71C12.32 21.1 11.69 21.1 11.3 20.71L7.29 16.7C7.06 16.47 6.96 16.16 7 15.87V10.75L2.21 4.62C1.87 4.19 1.95 3.56 2.38 3.22C2.57 3.08 2.78 3 3 3V3H17V3C17.22 3 17.43 3.08 17.62 3.22C18.05 3.56 18.13 4.19 17.79 4.62L13 10.75V19.88M5.04 5L9 10.07V15.58L11 17.58V10.05L14.96 5H5.04Z";
73
74
  _CoreIcons.funnelRemove = "M14.73,20.83L17.58,18L14.73,15.17L16.15,13.76L19,16.57L21.8,13.76L23.22,15.17L20.41,18L23.22,20.83L21.8,22.24L19,19.4L16.15,22.24L14.73,20.83M13,19.88C13.04,20.18 12.94,20.5 12.71,20.71C12.32,21.1 11.69,21.1 11.3,20.71L7.29,16.7C7.06,16.47 6.96,16.16 7,15.87V10.75L2.21,4.62C1.87,4.19 1.95,3.56 2.38,3.22C2.57,3.08 2.78,3 3,3V3H17V3C17.22,3 17.43,3.08 17.62,3.22C18.05,3.56 18.13,4.19 17.79,4.62L13,10.75V19.88M5.04,5L9,10.06V15.58L11,17.58V10.05L14.96,5H5.04Z";
74
75
  _CoreIcons.funnelMinus = "M15 17H23V19H15V17M13 19.88C13.04 20.18 12.94 20.5 12.72 20.71C12.32 21.1 11.69 21.1 11.3 20.71L7.29 16.7C7.06 16.47 6.96 16.16 7 15.87V10.75L2.21 4.62C1.87 4.19 1.95 3.56 2.38 3.22C2.57 3.08 2.78 3 3 3V3H17V3C17.22 3 17.43 3.08 17.62 3.22C18.05 3.56 18.13 4.19 17.79 4.62L13 10.75V19.88M5.04 5L9 10.07V15.58L11 17.58V10.05L14.96 5H5.04Z";
@@ -4,7 +4,7 @@ export interface CalloutProps extends AriaProps, ChildrenProp, CssProp, TestProp
4
4
  /**
5
5
  * callout color
6
6
  */
7
- color?: ColorState;
7
+ color?: ColorState | "none";
8
8
  /**
9
9
  * legend title
10
10
  */
@@ -0,0 +1,7 @@
1
+ import { type ChildrenProp, type RefProp } from "../../types";
2
+ export interface FlipContentRef {
3
+ flipCard: () => void;
4
+ }
5
+ export interface Props extends ChildrenProp, RefProp<FlipContentRef> {
6
+ }
7
+ export declare const FlipContent: ({ ref, children }: Props) => import("react/jsx-runtime").JSX.Element;
@@ -1,9 +1,5 @@
1
1
  import { type ChildProp, type ColorType, type CssProp, type PaletteType } from "../../types";
2
2
  export interface DividerProps extends CssProp, Partial<ChildProp> {
3
- /**
4
- * apply text bg
5
- */
6
- fill?: boolean;
7
3
  /**
8
4
  * vertical rule
9
5
  */
@@ -20,5 +16,9 @@ export interface DividerProps extends CssProp, Partial<ChildProp> {
20
16
  * text alignment
21
17
  */
22
18
  align?: "start" | "end" | "center";
19
+ /**
20
+ * divider style
21
+ */
22
+ style?: "solid" | "dashed" | "dotted";
23
23
  }
24
- export declare const Divider: ({ children, color, vertical, labelClassName, fill, align, className, }: DividerProps) => import("react/jsx-runtime").JSX.Element;
24
+ export declare const Divider: ({ children, color, vertical, labelClassName, style, align, className, }: DividerProps) => import("react/jsx-runtime").JSX.Element;
@@ -33,6 +33,7 @@ export interface IconProps extends CssProp, AriaProps, RefProp, TestProps {
33
33
  * apply animation
34
34
  */
35
35
  animate?: "spin" | "pulse" | "bounce";
36
+ disabled?: boolean;
36
37
  /**
37
38
  * click handler
38
39
  */
@@ -41,4 +42,4 @@ export interface IconProps extends CssProp, AriaProps, RefProp, TestProps {
41
42
  /**
42
43
  * An icon is a display component for svg icon path / image
43
44
  */
44
- export declare const Icon: ({ ref, icon, bg, color, size, rtlFlip, animate, rounded, viewBox, className, onClick, ...rest }: IconProps) => import("react/jsx-runtime").JSX.Element;
45
+ export declare const Icon: ({ ref, icon, bg, color, size, rtlFlip, animate, rounded, disabled, viewBox, className, onClick, ...rest }: IconProps) => import("react/jsx-runtime").JSX.Element;
@@ -51,6 +51,7 @@ export interface MenuRootProps extends CssProp {
51
51
  export interface MenuInnerProps extends MenuItemProps {
52
52
  label: string;
53
53
  minimal?: never;
54
+ trigger?: "hover" | "click";
54
55
  /**
55
56
  * floating menu className
56
57
  */
@@ -1,5 +1,8 @@
1
1
  import { type AriaProps, type ChildProp, type ColorType, type CssProp, type PaletteType, type TestProps } from "../../types";
2
2
  export interface NavigatorProps extends CssProp, AriaProps, TestProps, Partial<ChildProp> {
3
+ length?: number;
4
+ current?: number;
5
+ disableKeyHandlers?: boolean;
3
6
  /**
4
7
  * navigator button color
5
8
  */
@@ -9,4 +12,4 @@ export interface NavigatorProps extends CssProp, AriaProps, TestProps, Partial<C
9
12
  */
10
13
  onNavigate: (dir: -1 | 1) => void;
11
14
  }
12
- export declare const Navigator: ({ className, onNavigate, color, children, ...aria }: NavigatorProps) => import("react/jsx-runtime").JSX.Element;
15
+ export declare const Navigator: ({ className, onNavigate, color, children, length, current, disableKeyHandlers, ...aria }: NavigatorProps) => import("react/jsx-runtime").JSX.Element;
@@ -44,10 +44,14 @@ export interface ColProps extends AriaProps, CssProp, TestProps, Partial<Childre
44
44
  * stretch inner content
45
45
  */
46
46
  stretchContent?: boolean;
47
+ /**
48
+ * truncate text
49
+ */
50
+ truncate?: boolean;
47
51
  }
48
52
  /**
49
53
  * Responsive layout container
50
54
  */
51
55
  export declare const Container: ({ children, fullWidth, className, gutter, ...aria }: ContainerProps) => import("react/jsx-runtime").JSX.Element;
52
56
  export declare const Row: ({ children, gutter, noWrap, orient, align, justify, className, ...aria }: RowProps) => import("react/jsx-runtime").JSX.Element;
53
- export declare const Col: ({ children, flex, align, className, stretchContent, ...aria }: ColProps) => import("react/jsx-runtime").JSX.Element;
57
+ export declare const Col: ({ children, flex, align, truncate, className, stretchContent, ...aria }: ColProps) => import("react/jsx-runtime").JSX.Element;
@@ -48,9 +48,10 @@ export declare namespace CoreIcons {
48
48
  const sortAsc = "M19 7H22L18 3L14 7H17V21H19M2 17H12V19H2M6 5V7H2V5M2 11H9V13H2V11Z";
49
49
  const refresh = "M19.547 14.667c-0.736 2.083-2.245 3.67-4.094 4.553s-4.031 1.061-6.114 0.325-3.67-2.245-4.553-4.094-1.061-4.031-0.325-6.114 2.245-3.67 4.094-4.553 4.031-1.061 6.114-0.325c1.188 0.42 2.209 1.088 2.987 1.882l2.824 2.659h-3.48c-0.552 0-1 0.448-1 1s0.448 1 1 1h5.997c0.004 0 0.009 0 0.013 0 0.137-0.001 0.267-0.030 0.386-0.082 0.119-0.051 0.229-0.126 0.324-0.225 0.012-0.012 0.023-0.025 0.034-0.038 0.076-0.087 0.134-0.184 0.175-0.287s0.065-0.213 0.069-0.328c0.002-0.014 0.002-0.028 0.002-0.042v-5.998c0-0.552-0.448-1-1-1s-1 0.448-1 1v3.685l-2.916-2.745c-0.993-1.012-2.274-1.846-3.748-2.366-2.604-0.921-5.336-0.698-7.644 0.405s-4.197 3.088-5.117 5.692-0.696 5.335 0.406 7.643 3.088 4.197 5.692 5.117 5.335 0.697 7.643-0.406 4.197-3.088 5.117-5.692c0.184-0.521-0.089-1.092-0.61-1.276s-1.092 0.089-1.276 0.61z";
50
50
  const search = "M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z";
51
+ const ellipsis = "M14 12c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414zM14 5c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414zM14 19c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414z";
51
52
  const filter = "M6,13H18V11H6M3,6V8H21V6M10,18H14V16H10V18Z";
52
53
  const funnel = "M19.845 4l-6.609 7.814c-0.147 0.173-0.236 0.399-0.236 0.646v6.922l-2-1v-5.922c0.001-0.227-0.077-0.457-0.236-0.646l-6.609-7.814zM22 2h-20c-0.552 0-1 0.448-1 1 0 0.247 0.089 0.473 0.236 0.646l7.764 9.18v6.174c0 0.389 0.222 0.727 0.553 0.894l4 2c0.494 0.247 1.095 0.047 1.342-0.447 0.072-0.146 0.106-0.301 0.105-0.447v-8.174l7.764-9.18c0.357-0.422 0.304-1.053-0.118-1.409-0.189-0.16-0.419-0.238-0.646-0.237z";
53
- const ellipsis = "M14 12c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414zM14 5c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414zM14 19c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414z";
54
+ const funnelFull = "M14,12V19.88C14.04,20.18 13.94,20.5 13.71,20.71C13.32,21.1 12.69,21.1 12.3,20.71L10.29,18.7C10.06,18.47 9.96,18.16 10,17.87V12H9.97L4.21,4.62C3.87,4.19 3.95,3.56 4.38,3.22C4.57,3.08 4.78,3 5,3V3H19V3C19.22,3 19.43,3.08 19.62,3.22C20.05,3.56 20.13,4.19 19.79,4.62L14.03,12H14Z";
54
55
  const funnelPlus = "M15 17H18V14H20V17H23V19H20V22H18V19H15V17M13 19.88C13.04 20.18 12.94 20.5 12.72 20.71C12.32 21.1 11.69 21.1 11.3 20.71L7.29 16.7C7.06 16.47 6.96 16.16 7 15.87V10.75L2.21 4.62C1.87 4.19 1.95 3.56 2.38 3.22C2.57 3.08 2.78 3 3 3V3H17V3C17.22 3 17.43 3.08 17.62 3.22C18.05 3.56 18.13 4.19 17.79 4.62L13 10.75V19.88M5.04 5L9 10.07V15.58L11 17.58V10.05L14.96 5H5.04Z";
55
56
  const funnelRemove = "M14.73,20.83L17.58,18L14.73,15.17L16.15,13.76L19,16.57L21.8,13.76L23.22,15.17L20.41,18L23.22,20.83L21.8,22.24L19,19.4L16.15,22.24L14.73,20.83M13,19.88C13.04,20.18 12.94,20.5 12.71,20.71C12.32,21.1 11.69,21.1 11.3,20.71L7.29,16.7C7.06,16.47 6.96,16.16 7,15.87V10.75L2.21,4.62C1.87,4.19 1.95,3.56 2.38,3.22C2.57,3.08 2.78,3 3,3V3H17V3C17.22,3 17.43,3.08 17.62,3.22C18.05,3.56 18.13,4.19 17.79,4.62L13,10.75V19.88M5.04,5L9,10.06V15.58L11,17.58V10.05L14.96,5H5.04Z";
56
57
  const funnelMinus = "M15 17H23V19H15V17M13 19.88C13.04 20.18 12.94 20.5 12.72 20.71C12.32 21.1 11.69 21.1 11.3 20.71L7.29 16.7C7.06 16.47 6.96 16.16 7 15.87V10.75L2.21 4.62C1.87 4.19 1.95 3.56 2.38 3.22C2.57 3.08 2.78 3 3 3V3H17V3C17.22 3 17.43 3.08 17.62 3.22C18.05 3.56 18.13 4.19 17.79 4.62L13 10.75V19.88M5.04 5L9 10.07V15.58L11 17.58V10.05L14.96 5H5.04Z";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-fabric/core",
3
- "version": "1.0.0-beta.47",
3
+ "version": "1.0.0-beta.49",
4
4
  "description": "RUF: Core package",
5
5
  "author": "Adarsh Pastakia <adarshpastakia@outlook.com>",
6
6
  "license": "MIT",
@@ -35,10 +35,10 @@
35
35
  "watch": "npm-run-all -p watch:rollup watch:dts"
36
36
  },
37
37
  "dependencies": {
38
- "@floating-ui/react": "^0.26.24",
39
- "@react-fabric/utilities": "^1.0.0-beta.47",
38
+ "@floating-ui/react": "^0.27.9",
39
+ "@react-fabric/utilities": "^1.0.0-beta.49",
40
40
  "@tailwindcss/postcss": "~4.0.14",
41
- "boring-avatars": "^1.10.2",
41
+ "boring-avatars": "^1.11.2",
42
42
  "classnames": "^2.5.1",
43
43
  "color": "^4.2.3",
44
44
  "resize-observer-polyfill": "^1.5.1",
@@ -54,5 +54,5 @@
54
54
  "node": ">=18.12.0",
55
55
  "npm": ">=8.19.0"
56
56
  },
57
- "gitHead": "832a1bce055337127ba17c505731f419248cc15e"
57
+ "gitHead": "29b3ed65e9f9687d738dd7c6facdb9fedafb4219"
58
58
  }
@@ -40,7 +40,7 @@ export interface CalloutProps
40
40
  /**
41
41
  * callout color
42
42
  */
43
- color?: ColorState;
43
+ color?: ColorState | "none";
44
44
  /**
45
45
  * legend title
46
46
  */
@@ -64,6 +64,7 @@ export interface CalloutProps
64
64
  }
65
65
 
66
66
  const colors = {
67
+ none: "bg-base text-tint-900 border-tint-100",
67
68
  tint: "bg-tint-50/50 text-tint-800 border-tint-300",
68
69
  primary: "bg-primary-50/50 text-primary-800 border-primary-300",
69
70
  accent: "bg-accent-50/50 text-accent-800 border-accent-300",
@@ -0,0 +1,69 @@
1
+ /*
2
+ * React Fabric
3
+ * @version: 1.0.0
4
+ *
5
+ *
6
+ * The MIT License (MIT)
7
+ * Copyright (c) 2025 Adarsh Pastakia
8
+ *
9
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
10
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
11
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
12
+ * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
13
+ * subject to the following conditions:
14
+ *
15
+ * The above copyright notice and this permission notice shall be included in all copies or substantial
16
+ * portions of the Software.
17
+ *
18
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
19
+ * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ */
23
+
24
+ import classNames from "classnames";
25
+ import {
26
+ Children,
27
+ cloneElement,
28
+ isValidElement,
29
+ useImperativeHandle,
30
+ useState,
31
+ } from "react";
32
+ import { type ChildrenProp, type CssProp, type RefProp } from "../../types";
33
+
34
+ export interface FlipContentRef {
35
+ flipCard: () => void;
36
+ }
37
+
38
+ export interface Props extends ChildrenProp, RefProp<FlipContentRef> {
39
+ //
40
+ }
41
+
42
+ export const FlipContent = ({ ref, children }: Props) => {
43
+ const [showBack, setShowBack] = useState(false);
44
+
45
+ useImperativeHandle(
46
+ ref,
47
+ () => ({
48
+ flipCard: () => setShowBack(!showBack),
49
+ }),
50
+ [showBack],
51
+ );
52
+
53
+ return (
54
+ <div className="relative flex-1" data-card-flip={showBack}>
55
+ {Children.map(
56
+ children,
57
+ (child, idx) =>
58
+ isValidElement<CssProp>(child) &&
59
+ cloneElement(child, {
60
+ className: classNames(
61
+ child.props?.className ?? "",
62
+ idx === 0 ? "bg-base relative" : "bg-base absolute inset-0",
63
+ ),
64
+ "data-card-flip-face": idx === 0 ? "front" : "back",
65
+ } as AnyObject),
66
+ )}
67
+ </div>
68
+ );
69
+ };
@@ -142,13 +142,13 @@ export const Collapsable = ({
142
142
  "fabric-collapsableHead",
143
143
  "flex gap-1 flex-nowrap py-2 font-medium cursor-pointer items-center select-none hover:opacity-70",
144
144
  headerClassName,
145
- stickyHeader && "bg-base sticky top-0 px-2 py-1 z-10",
145
+ stickyHeader && "bg-base sticky top-0 py-1 z-10",
146
146
  iconAlign === "end" ? "flex-row-reverse" : "flex-row",
147
147
  )}
148
148
  onClick={() => !disabled && setOpenState(!openState)}
149
149
  >
150
150
  <Icon size="1.125em" icon={openState ? iconOpen : iconClosed} rtlFlip />
151
- <div className="flex-1 px-2">{head}</div>
151
+ <div className="flex-1">{head}</div>
152
152
  </div>
153
153
  {openState && (
154
154
  <div
@@ -32,10 +32,6 @@ import {
32
32
  import { getColor } from "../../utils";
33
33
 
34
34
  export interface DividerProps extends CssProp, Partial<ChildProp> {
35
- /**
36
- * apply text bg
37
- */
38
- fill?: boolean;
39
35
  /**
40
36
  * vertical rule
41
37
  */
@@ -52,6 +48,10 @@ export interface DividerProps extends CssProp, Partial<ChildProp> {
52
48
  * text alignment
53
49
  */
54
50
  align?: "start" | "end" | "center";
51
+ /**
52
+ * divider style
53
+ */
54
+ style?: "solid" | "dashed" | "dotted";
55
55
  }
56
56
 
57
57
  export const Divider = ({
@@ -59,7 +59,7 @@ export const Divider = ({
59
59
  color = "tint-300",
60
60
  vertical,
61
61
  labelClassName,
62
- fill,
62
+ style,
63
63
  align = "start",
64
64
  className,
65
65
  }: DividerProps) => {
@@ -67,7 +67,7 @@ export const Divider = ({
67
67
  ({ flex, className }: KeyValue) => {
68
68
  return (
69
69
  <hr
70
- style={{ flex, borderColor: getColor(color) }}
70
+ style={{ flex, borderColor: getColor(color), borderStyle: style }}
71
71
  className={classNames(
72
72
  className,
73
73
  vertical && "vertical",
@@ -85,7 +85,7 @@ export const Divider = ({
85
85
  return children ? (
86
86
  <div
87
87
  className={classNames(
88
- "flex flex-nowrap items-center",
88
+ "flex flex-nowrap items-center fabric-divider",
89
89
  vertical && "flex-col",
90
90
  className,
91
91
  )}
@@ -94,7 +94,9 @@ export const Divider = ({
94
94
  <div
95
95
  className={classNames(
96
96
  "px-2 whitespace-nowrap",
97
- vertical ? "fabric-divider--vertical" : "fabric-divider--horizontal",
97
+ vertical
98
+ ? "fabric-divider-label--vertical"
99
+ : "fabric-divider-label--horizontal",
98
100
  labelClassName,
99
101
  "rounded-full text-[0.75em]",
100
102
  vertical && "origin-center -rotate-90 z-1",
@@ -68,6 +68,7 @@ export interface IconProps extends CssProp, AriaProps, RefProp, TestProps {
68
68
  * apply animation
69
69
  */
70
70
  animate?: "spin" | "pulse" | "bounce";
71
+ disabled?: boolean;
71
72
  /**
72
73
  * click handler
73
74
  */
@@ -95,6 +96,7 @@ export const Icon = ({
95
96
  rtlFlip,
96
97
  animate,
97
98
  rounded,
99
+ disabled,
98
100
  viewBox = "0 0 24 24",
99
101
  className,
100
102
  onClick,
@@ -162,6 +164,7 @@ export const Icon = ({
162
164
  !rounded && "rounded",
163
165
  rounded && "rounded-full",
164
166
  animate && `animate-${animate}`,
167
+ !!onClick && disabled && "opacity-30 pointer-events-none",
165
168
  className,
166
169
  )}
167
170
  onClick={onClick}
@@ -69,6 +69,8 @@ const MenuComponent = ({
69
69
  menuClassName,
70
70
  onClick,
71
71
  // @ts-expect-error ignore
72
+ trigger = "hover",
73
+ // @ts-expect-error ignore
72
74
  ref,
73
75
  ...rest
74
76
  }: Partial<MenuProps>) => {
@@ -89,6 +91,8 @@ const MenuComponent = ({
89
91
  open: !isNested || isOpen,
90
92
  onOpenChange(open, event, reason) {
91
93
  isNested && setIsOpen(open);
94
+ if (reason === "outside-press" && trigger === "click")
95
+ tree?.events.emit("close");
92
96
  },
93
97
  placement: isNested ? "right-start" : "bottom-start",
94
98
  middleware: [
@@ -100,13 +104,14 @@ const MenuComponent = ({
100
104
  });
101
105
 
102
106
  const hover = useHover(context, {
107
+ enabled: trigger === "hover",
103
108
  delay: { open: 75 },
104
109
  handleClose: safePolygon({ blockPointerEvents: true }),
105
110
  });
106
111
  const click = useClick(context, {
107
112
  event: "mousedown",
108
- toggle: !isNested,
109
- ignoreMouse: isNested,
113
+ toggle: trigger === "click" || !isNested,
114
+ ignoreMouse: trigger === "hover" && !isNested,
110
115
  });
111
116
  const role = useRole(context, { role: "menu" });
112
117
  const dismiss = useDismiss(context, { bubbles: true });
@@ -90,6 +90,7 @@ export interface MenuRootProps extends CssProp {
90
90
  export interface MenuInnerProps extends MenuItemProps {
91
91
  label: string;
92
92
  minimal?: never;
93
+ trigger?: "hover" | "click";
93
94
  /**
94
95
  * floating menu className
95
96
  */
@@ -34,12 +34,16 @@ import {
34
34
  } from "../../types";
35
35
  import { CoreIcons } from "../../types/icons";
36
36
  import { Icon } from "../icon/Icon";
37
+ import { isEmpty } from "@react-fabric/utilities";
37
38
 
38
39
  export interface NavigatorProps
39
40
  extends CssProp,
40
41
  AriaProps,
41
42
  TestProps,
42
43
  Partial<ChildProp> {
44
+ length?: number;
45
+ current?: number;
46
+ disableKeyHandlers?: boolean;
43
47
  /**
44
48
  * navigator button color
45
49
  */
@@ -55,18 +59,27 @@ export const Navigator = ({
55
59
  onNavigate,
56
60
  color,
57
61
  children,
62
+ length,
63
+ current,
64
+ disableKeyHandlers,
58
65
  ...aria
59
66
  }: NavigatorProps) => {
60
- const navPrev = useCallback(() => onNavigate(-1), [onNavigate]);
61
- const navNext = useCallback(() => onNavigate(+1), [onNavigate]);
67
+ const navPrev = useCallback(
68
+ () => (isEmpty(current) || current !== 0) && onNavigate(-1),
69
+ [onNavigate, current],
70
+ );
71
+ const navNext = useCallback(
72
+ () => (isEmpty(current) || current + 1 < (length ?? 0)) && onNavigate(+1),
73
+ [onNavigate, current, length],
74
+ );
62
75
  return (
63
76
  <div
64
77
  data-ref="navigator"
65
78
  className={classNames(className, "inline-flex items-center leading-none")}
66
79
  {...aria}
67
80
  >
68
- <HotKey keyCombo="left" handler={navPrev} />
69
- <HotKey keyCombo="right" handler={navNext} />
81
+ {!disableKeyHandlers && <HotKey keyCombo="left" handler={navPrev} />}
82
+ {!disableKeyHandlers && <HotKey keyCombo="right" handler={navNext} />}
70
83
  <Icon
71
84
  rtlFlip
72
85
  color={color}
@@ -74,7 +87,8 @@ export const Navigator = ({
74
87
  aria-label="previous"
75
88
  data-ref="previous"
76
89
  icon={CoreIcons.chevronLeft}
77
- onClick={(e) => [e.stopPropagation(), onNavigate(-1)]}
90
+ disabled={!isEmpty(current) && current === 0}
91
+ onClick={(e) => [e.stopPropagation(), navPrev()]}
78
92
  />
79
93
  {children}
80
94
  <Icon
@@ -84,7 +98,8 @@ export const Navigator = ({
84
98
  aria-label="next"
85
99
  data-ref="next"
86
100
  icon={CoreIcons.chevronRight}
87
- onClick={(e) => [e.stopPropagation(), onNavigate(1)]}
101
+ disabled={!isEmpty(current) && current + 1 === length}
102
+ onClick={(e) => [e.stopPropagation(), navNext()]}
88
103
  />
89
104
  </div>
90
105
  );
@@ -85,6 +85,10 @@ export interface ColProps
85
85
  * stretch inner content
86
86
  */
87
87
  stretchContent?: boolean;
88
+ /**
89
+ * truncate text
90
+ */
91
+ truncate?: boolean;
88
92
  }
89
93
 
90
94
  /**
@@ -148,6 +152,7 @@ export const Col = ({
148
152
  children,
149
153
  flex,
150
154
  align,
155
+ truncate,
151
156
  className,
152
157
  stretchContent,
153
158
  ...aria
@@ -164,6 +169,7 @@ export const Col = ({
164
169
  flex === "initial" && "flex-initial",
165
170
  flex === "content" && "flex-none",
166
171
  align && `self-${align}`,
172
+ truncate && "truncate",
167
173
  )}
168
174
  {...aria}
169
175
  >
@@ -124,11 +124,13 @@ export module CoreIcons {
124
124
  "M19.547 14.667c-0.736 2.083-2.245 3.67-4.094 4.553s-4.031 1.061-6.114 0.325-3.67-2.245-4.553-4.094-1.061-4.031-0.325-6.114 2.245-3.67 4.094-4.553 4.031-1.061 6.114-0.325c1.188 0.42 2.209 1.088 2.987 1.882l2.824 2.659h-3.48c-0.552 0-1 0.448-1 1s0.448 1 1 1h5.997c0.004 0 0.009 0 0.013 0 0.137-0.001 0.267-0.030 0.386-0.082 0.119-0.051 0.229-0.126 0.324-0.225 0.012-0.012 0.023-0.025 0.034-0.038 0.076-0.087 0.134-0.184 0.175-0.287s0.065-0.213 0.069-0.328c0.002-0.014 0.002-0.028 0.002-0.042v-5.998c0-0.552-0.448-1-1-1s-1 0.448-1 1v3.685l-2.916-2.745c-0.993-1.012-2.274-1.846-3.748-2.366-2.604-0.921-5.336-0.698-7.644 0.405s-4.197 3.088-5.117 5.692-0.696 5.335 0.406 7.643 3.088 4.197 5.692 5.117 5.335 0.697 7.643-0.406 4.197-3.088 5.117-5.692c0.184-0.521-0.089-1.092-0.61-1.276s-1.092 0.089-1.276 0.61z";
125
125
  export const search =
126
126
  "M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z";
127
+ export const ellipsis =
128
+ "M14 12c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414zM14 5c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414zM14 19c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414z";
127
129
  export const filter = "M6,13H18V11H6M3,6V8H21V6M10,18H14V16H10V18Z";
128
130
  export const funnel =
129
131
  "M19.845 4l-6.609 7.814c-0.147 0.173-0.236 0.399-0.236 0.646v6.922l-2-1v-5.922c0.001-0.227-0.077-0.457-0.236-0.646l-6.609-7.814zM22 2h-20c-0.552 0-1 0.448-1 1 0 0.247 0.089 0.473 0.236 0.646l7.764 9.18v6.174c0 0.389 0.222 0.727 0.553 0.894l4 2c0.494 0.247 1.095 0.047 1.342-0.447 0.072-0.146 0.106-0.301 0.105-0.447v-8.174l7.764-9.18c0.357-0.422 0.304-1.053-0.118-1.409-0.189-0.16-0.419-0.238-0.646-0.237z";
130
- export const ellipsis =
131
- "M14 12c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414zM14 5c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414zM14 19c0-0.552-0.225-1.053-0.586-1.414s-0.862-0.586-1.414-0.586-1.053 0.225-1.414 0.586-0.586 0.862-0.586 1.414 0.225 1.053 0.586 1.414 0.862 0.586 1.414 0.586 1.053-0.225 1.414-0.586 0.586-0.862 0.586-1.414z";
132
+ export const funnelFull =
133
+ "M14,12V19.88C14.04,20.18 13.94,20.5 13.71,20.71C13.32,21.1 12.69,21.1 12.3,20.71L10.29,18.7C10.06,18.47 9.96,18.16 10,17.87V12H9.97L4.21,4.62C3.87,4.19 3.95,3.56 4.38,3.22C4.57,3.08 4.78,3 5,3V3H19V3C19.22,3 19.43,3.08 19.62,3.22C20.05,3.56 20.13,4.19 19.79,4.62L14.03,12H14Z";
132
134
  export const funnelPlus =
133
135
  "M15 17H18V14H20V17H23V19H20V22H18V19H15V17M13 19.88C13.04 20.18 12.94 20.5 12.72 20.71C12.32 21.1 11.69 21.1 11.3 20.71L7.29 16.7C7.06 16.47 6.96 16.16 7 15.87V10.75L2.21 4.62C1.87 4.19 1.95 3.56 2.38 3.22C2.57 3.08 2.78 3 3 3V3H17V3C17.22 3 17.43 3.08 17.62 3.22C18.05 3.56 18.13 4.19 17.79 4.62L13 10.75V19.88M5.04 5L9 10.07V15.58L11 17.58V10.05L14.96 5H5.04Z";
134
136
  export const funnelRemove =