@matteoaliano/forest-ui 0.2.8 → 0.2.9

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.
package/dist/index.js CHANGED
@@ -23,8 +23,8 @@ var utils = require('@mui/material/utils');
23
23
  var MuiDivider = require('@mui/material/Divider');
24
24
  var MuiList = require('@mui/material/List');
25
25
  var MuiListItem = require('@mui/material/ListItem');
26
- var MuiListItemButton = require('@mui/material/ListItemButton');
27
- var MuiListItemIcon = require('@mui/material/ListItemIcon');
26
+ var MuiListItemButton2 = require('@mui/material/ListItemButton');
27
+ var ListItemIcon2 = require('@mui/material/ListItemIcon');
28
28
  var MuiListItemText = require('@mui/material/ListItemText');
29
29
  var MuiListItemAvatar = require('@mui/material/ListItemAvatar');
30
30
  var MuiListSubheader = require('@mui/material/ListSubheader');
@@ -61,6 +61,9 @@ var MuiLinearProgress = require('@mui/material/LinearProgress');
61
61
  var MuiCircularProgress = require('@mui/material/CircularProgress');
62
62
  var MuiSkeleton = require('@mui/material/Skeleton');
63
63
  var MuiSnackbar = require('@mui/material/Snackbar');
64
+ var MuiDrawer = require('@mui/material/Drawer');
65
+ var Box = require('@mui/material/Box');
66
+ var IconButton = require('@mui/material/IconButton');
64
67
 
65
68
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
66
69
 
@@ -83,8 +86,8 @@ var MuiChip__default = /*#__PURE__*/_interopDefault(MuiChip);
83
86
  var MuiDivider__default = /*#__PURE__*/_interopDefault(MuiDivider);
84
87
  var MuiList__default = /*#__PURE__*/_interopDefault(MuiList);
85
88
  var MuiListItem__default = /*#__PURE__*/_interopDefault(MuiListItem);
86
- var MuiListItemButton__default = /*#__PURE__*/_interopDefault(MuiListItemButton);
87
- var MuiListItemIcon__default = /*#__PURE__*/_interopDefault(MuiListItemIcon);
89
+ var MuiListItemButton2__default = /*#__PURE__*/_interopDefault(MuiListItemButton2);
90
+ var ListItemIcon2__default = /*#__PURE__*/_interopDefault(ListItemIcon2);
88
91
  var MuiListItemText__default = /*#__PURE__*/_interopDefault(MuiListItemText);
89
92
  var MuiListItemAvatar__default = /*#__PURE__*/_interopDefault(MuiListItemAvatar);
90
93
  var MuiListSubheader__default = /*#__PURE__*/_interopDefault(MuiListSubheader);
@@ -120,6 +123,9 @@ var MuiLinearProgress__default = /*#__PURE__*/_interopDefault(MuiLinearProgress)
120
123
  var MuiCircularProgress__default = /*#__PURE__*/_interopDefault(MuiCircularProgress);
121
124
  var MuiSkeleton__default = /*#__PURE__*/_interopDefault(MuiSkeleton);
122
125
  var MuiSnackbar__default = /*#__PURE__*/_interopDefault(MuiSnackbar);
126
+ var MuiDrawer__default = /*#__PURE__*/_interopDefault(MuiDrawer);
127
+ var Box__default = /*#__PURE__*/_interopDefault(Box);
128
+ var IconButton__default = /*#__PURE__*/_interopDefault(IconButton);
123
129
 
124
130
  // src/provider/ForestProvider.tsx
125
131
 
@@ -213,6 +219,54 @@ var colors = {
213
219
  800: "#1849a9",
214
220
  900: "#194185",
215
221
  950: "#102a56"
222
+ },
223
+ teal: {
224
+ 100: "#ccfbef",
225
+ 200: "#99f6e0",
226
+ 600: "#0e9384",
227
+ 700: "#107569"
228
+ },
229
+ orange: {
230
+ 100: "#fdead7",
231
+ 200: "#f9dbaf",
232
+ 600: "#e04f16",
233
+ 700: "#b93815"
234
+ },
235
+ purple: {
236
+ 100: "#ebe9fe",
237
+ 200: "#d9d6fe",
238
+ 600: "#6938ef",
239
+ 700: "#5925dc"
240
+ },
241
+ pink: {
242
+ 100: "#fce7f6",
243
+ 200: "#fcceee",
244
+ 600: "#dd2590",
245
+ 700: "#c11574"
246
+ },
247
+ fuchsia: {
248
+ 100: "#fbe8ff",
249
+ 200: "#f6d0fe",
250
+ 600: "#ba24d5",
251
+ 700: "#9f1ab1"
252
+ },
253
+ orangeDark: {
254
+ 100: "#ffe6d5",
255
+ 200: "#ffd6ae",
256
+ 600: "#e62e05",
257
+ 700: "#bc1b06"
258
+ },
259
+ green: {
260
+ 100: "#d3f8df",
261
+ 200: "#aaf0c4",
262
+ 600: "#099250",
263
+ 700: "#087443"
264
+ },
265
+ indigo: {
266
+ 100: "#e0eaff",
267
+ 200: "#c7d7fe",
268
+ 600: "#444ce7",
269
+ 700: "#3538cd"
216
270
  }
217
271
  };
218
272
  var spacing = {
@@ -350,7 +404,7 @@ var bg = {
350
404
  secondarySolid: colors.gray[600],
351
405
  tertiary: colors.gray[100],
352
406
  quaternary: colors.gray[200],
353
- active: colors.gray[50],
407
+ active: colors.gray[200],
354
408
  disabled: colors.gray[100],
355
409
  disabledSubtle: colors.gray[50],
356
410
  overlay: colors.gray[950],
@@ -497,7 +551,7 @@ var iconColors = {
497
551
  };
498
552
  var navColors = {
499
553
  itemIconFg: colors.gray[500],
500
- itemIconFgActive: colors.gray[500],
554
+ itemIconFgActive: colors.gray[700],
501
555
  itemButtonIconFg: colors.gray[500],
502
556
  itemButtonIconFgActive: colors.gray[700]
503
557
  };
@@ -526,7 +580,39 @@ var chartColors = {
526
580
  series2Fg: colors.brand[600],
527
581
  series2FgHover: colors.brand[700],
528
582
  series2Bg: colors.brand[100],
529
- series2BgHover: colors.brand[200]
583
+ series2BgHover: colors.brand[200],
584
+ series3Fg: colors.teal[600],
585
+ series3FgHover: colors.teal[700],
586
+ series3Bg: colors.teal[100],
587
+ series3BgHover: colors.teal[200],
588
+ series4Fg: colors.orange[600],
589
+ series4FgHover: colors.orange[700],
590
+ series4Bg: colors.orange[100],
591
+ series4BgHover: colors.orange[200],
592
+ series5Fg: colors.purple[600],
593
+ series5FgHover: colors.purple[700],
594
+ series5Bg: colors.purple[100],
595
+ series5BgHover: colors.purple[200],
596
+ series6Fg: colors.pink[600],
597
+ series6FgHover: colors.pink[700],
598
+ series6Bg: colors.pink[100],
599
+ series6BgHover: colors.pink[200],
600
+ series7Fg: colors.fuchsia[600],
601
+ series7FgHover: colors.fuchsia[700],
602
+ series7Bg: colors.fuchsia[100],
603
+ series7BgHover: colors.fuchsia[200],
604
+ series8Fg: colors.orangeDark[600],
605
+ series8FgHover: colors.orangeDark[700],
606
+ series8Bg: colors.orangeDark[100],
607
+ series8BgHover: colors.orangeDark[200],
608
+ series9Fg: colors.green[600],
609
+ series9FgHover: colors.green[700],
610
+ series9Bg: colors.green[100],
611
+ series9BgHover: colors.green[200],
612
+ series10Fg: colors.indigo[600],
613
+ series10FgHover: colors.indigo[700],
614
+ series10Bg: colors.indigo[100],
615
+ series10BgHover: colors.indigo[200]
530
616
  };
531
617
  var alpha = {
532
618
  white: {
@@ -557,6 +643,7 @@ var alpha = {
557
643
 
558
644
  // src/theme/palette.ts
559
645
  function buildPalette(tokens) {
646
+ var _a;
560
647
  const { colors: colors3, text: text3, bg: bg3, fg: fg3, border: border3 } = tokens;
561
648
  return {
562
649
  primary: {
@@ -611,7 +698,8 @@ function buildPalette(tokens) {
611
698
  selected: bg3.brandPrimary,
612
699
  disabled: fg3.disabled,
613
700
  disabledBackground: bg3.disabled
614
- }
701
+ },
702
+ chart: (_a = tokens.chartColors) != null ? _a : chartColors
615
703
  };
616
704
  }
617
705
  var palette = buildPalette({
@@ -619,7 +707,8 @@ var palette = buildPalette({
619
707
  text,
620
708
  bg,
621
709
  fg,
622
- border
710
+ border,
711
+ chartColors
623
712
  });
624
713
 
625
714
  // src/theme/typography.ts
@@ -1140,6 +1229,15 @@ function buildComponents(tokens) {
1140
1229
  }
1141
1230
  }
1142
1231
  },
1232
+ // ─── Drawer (used by Sidebar) ─────────────────────────────────
1233
+ MuiDrawer: {
1234
+ styleOverrides: {
1235
+ paper: {
1236
+ backgroundColor: bg3.primary,
1237
+ borderRight: `1px solid ${border3.secondary}`
1238
+ }
1239
+ }
1240
+ },
1143
1241
  // ─── Card ───────────────────────────────────────────────────────
1144
1242
  MuiCard: {
1145
1243
  defaultProps: {
@@ -1992,7 +2090,15 @@ var colors2 = {
1992
2090
  /** Success — forest defaults (standard UX green) */
1993
2091
  success: colors.success,
1994
2092
  /** Blue (info) — forest defaults (standard UX) */
1995
- blue: colors.blue
2093
+ blue: colors.blue,
2094
+ teal: colors.teal,
2095
+ orange: colors.orange,
2096
+ purple: colors.purple,
2097
+ pink: colors.pink,
2098
+ fuchsia: colors.fuchsia,
2099
+ orangeDark: colors.orangeDark,
2100
+ green: colors.green,
2101
+ indigo: colors.indigo
1996
2102
  };
1997
2103
  var radius2 = {
1998
2104
  ...radius,
@@ -2220,7 +2326,39 @@ var chartColors2 = {
2220
2326
  series2Fg: red[600],
2221
2327
  series2FgHover: red[700],
2222
2328
  series2Bg: red[100],
2223
- series2BgHover: red[200]
2329
+ series2BgHover: red[200],
2330
+ series3Fg: colors2.teal[600],
2331
+ series3FgHover: colors2.teal[700],
2332
+ series3Bg: colors2.teal[100],
2333
+ series3BgHover: colors2.teal[200],
2334
+ series4Fg: colors2.orange[600],
2335
+ series4FgHover: colors2.orange[700],
2336
+ series4Bg: colors2.orange[100],
2337
+ series4BgHover: colors2.orange[200],
2338
+ series5Fg: colors2.purple[600],
2339
+ series5FgHover: colors2.purple[700],
2340
+ series5Bg: colors2.purple[100],
2341
+ series5BgHover: colors2.purple[200],
2342
+ series6Fg: colors2.pink[600],
2343
+ series6FgHover: colors2.pink[700],
2344
+ series6Bg: colors2.pink[100],
2345
+ series6BgHover: colors2.pink[200],
2346
+ series7Fg: colors2.fuchsia[600],
2347
+ series7FgHover: colors2.fuchsia[700],
2348
+ series7Bg: colors2.fuchsia[100],
2349
+ series7BgHover: colors2.fuchsia[200],
2350
+ series8Fg: colors2.orangeDark[600],
2351
+ series8FgHover: colors2.orangeDark[700],
2352
+ series8Bg: colors2.orangeDark[100],
2353
+ series8BgHover: colors2.orangeDark[200],
2354
+ series9Fg: colors2.green[600],
2355
+ series9FgHover: colors2.green[700],
2356
+ series9Bg: colors2.green[100],
2357
+ series9BgHover: colors2.green[200],
2358
+ series10Fg: colors2.indigo[600],
2359
+ series10FgHover: colors2.indigo[700],
2360
+ series10Bg: colors2.indigo[100],
2361
+ series10BgHover: colors2.indigo[200]
2224
2362
  };
2225
2363
  var focusRings2 = {
2226
2364
  brand: "0px 0px 0px 4px #f040403d",
@@ -2387,10 +2525,10 @@ function ListItem(props) {
2387
2525
  return /* @__PURE__ */ jsxRuntime.jsx(MuiListItem__default.default, { ...props });
2388
2526
  }
2389
2527
  function ListItemButton(props) {
2390
- return /* @__PURE__ */ jsxRuntime.jsx(MuiListItemButton__default.default, { ...props });
2528
+ return /* @__PURE__ */ jsxRuntime.jsx(MuiListItemButton2__default.default, { ...props });
2391
2529
  }
2392
2530
  function ListItemIcon(props) {
2393
- return /* @__PURE__ */ jsxRuntime.jsx(MuiListItemIcon__default.default, { ...props });
2531
+ return /* @__PURE__ */ jsxRuntime.jsx(ListItemIcon2__default.default, { ...props });
2394
2532
  }
2395
2533
  function ListItemText(props) {
2396
2534
  return /* @__PURE__ */ jsxRuntime.jsx(MuiListItemText__default.default, { ...props });
@@ -2500,6 +2638,165 @@ function Skeleton(props) {
2500
2638
  function Snackbar(props) {
2501
2639
  return /* @__PURE__ */ jsxRuntime.jsx(MuiSnackbar__default.default, { ...props });
2502
2640
  }
2641
+ var ChevronLeftOutlined_default = utils.createSvgIcon(/* @__PURE__ */ jsxRuntime.jsx("path", {
2642
+ d: "M15.41 7.41 14 6l-6 6 6 6 1.41-1.41L10.83 12z"
2643
+ }), "ChevronLeftOutlined");
2644
+ var ChevronRightOutlined_default = utils.createSvgIcon(/* @__PURE__ */ jsxRuntime.jsx("path", {
2645
+ d: "M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"
2646
+ }), "ChevronRightOutlined");
2647
+ var SidebarContext = react.createContext({
2648
+ open: true,
2649
+ collapsedWidth: 48,
2650
+ expandedWidth: 240
2651
+ });
2652
+ function useSidebar() {
2653
+ return react.useContext(SidebarContext);
2654
+ }
2655
+ function SidebarNav({
2656
+ open,
2657
+ onOpenChange,
2658
+ expandedWidth = 240,
2659
+ collapsedWidth = 48,
2660
+ behavior = "permanent",
2661
+ showToggle,
2662
+ children,
2663
+ header,
2664
+ footer,
2665
+ sx,
2666
+ ...rest
2667
+ }) {
2668
+ const isHover = behavior === "hover";
2669
+ const drawerWidth = open ? expandedWidth : collapsedWidth;
2670
+ const layoutWidth = isHover ? collapsedWidth : drawerWidth;
2671
+ const shouldShowToggle = showToggle != null ? showToggle : !isHover;
2672
+ const hoverHandlers = isHover ? {
2673
+ onMouseEnter: () => onOpenChange(true),
2674
+ onMouseLeave: () => onOpenChange(false)
2675
+ } : {};
2676
+ return /* @__PURE__ */ jsxRuntime.jsx(SidebarContext.Provider, { value: { open, collapsedWidth, expandedWidth }, children: /* @__PURE__ */ jsxRuntime.jsxs(Box__default.default, { sx: { position: "relative", width: layoutWidth, flexShrink: 0 }, children: [
2677
+ /* @__PURE__ */ jsxRuntime.jsx(
2678
+ MuiDrawer__default.default,
2679
+ {
2680
+ variant: "permanent",
2681
+ ...rest,
2682
+ ...hoverHandlers,
2683
+ sx: {
2684
+ width: drawerWidth,
2685
+ flexShrink: 0,
2686
+ "& .MuiDrawer-paper": {
2687
+ width: drawerWidth,
2688
+ transition: "width 200ms ease-in-out",
2689
+ overflowX: "hidden",
2690
+ boxSizing: "border-box",
2691
+ ...isHover && { zIndex: (theme) => theme.zIndex.drawer + 2 }
2692
+ },
2693
+ ...sx
2694
+ },
2695
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
2696
+ Box__default.default,
2697
+ {
2698
+ sx: {
2699
+ display: "flex",
2700
+ flexDirection: "column",
2701
+ height: "100%",
2702
+ overflow: "hidden"
2703
+ },
2704
+ children: [
2705
+ header && /* @__PURE__ */ jsxRuntime.jsx(Box__default.default, { sx: { flexShrink: 0 }, children: header }),
2706
+ /* @__PURE__ */ jsxRuntime.jsx(Box__default.default, { sx: { flexGrow: 1, overflowY: "auto", overflowX: "hidden" }, children }),
2707
+ footer && /* @__PURE__ */ jsxRuntime.jsx(Box__default.default, { sx: { flexShrink: 0 }, children: footer })
2708
+ ]
2709
+ }
2710
+ )
2711
+ }
2712
+ ),
2713
+ shouldShowToggle && /* @__PURE__ */ jsxRuntime.jsx(
2714
+ IconButton__default.default,
2715
+ {
2716
+ size: "small",
2717
+ onClick: () => onOpenChange(!open),
2718
+ sx: {
2719
+ position: "absolute",
2720
+ top: "50%",
2721
+ right: 0,
2722
+ transform: "translate(50%, -50%)",
2723
+ zIndex: (theme) => theme.zIndex.drawer + 1,
2724
+ width: 28,
2725
+ height: 28,
2726
+ border: 1,
2727
+ borderColor: "divider",
2728
+ backgroundColor: "background.paper",
2729
+ boxShadow: 1,
2730
+ "&:hover": {
2731
+ backgroundColor: "action.hover"
2732
+ },
2733
+ "& .MuiSvgIcon-root": {
2734
+ fontSize: 18
2735
+ }
2736
+ },
2737
+ children: open ? /* @__PURE__ */ jsxRuntime.jsx(ChevronLeftOutlined_default, {}) : /* @__PURE__ */ jsxRuntime.jsx(ChevronRightOutlined_default, {})
2738
+ }
2739
+ )
2740
+ ] }) });
2741
+ }
2742
+ var itemSx = {
2743
+ borderRadius: 1,
2744
+ backgroundColor: bg.primary,
2745
+ color: text.secondary,
2746
+ "& .MuiListItemIcon-root": {
2747
+ color: navColors.itemIconFg
2748
+ },
2749
+ "&:hover": {
2750
+ backgroundColor: bg.primaryHover
2751
+ },
2752
+ "&.Mui-selected": {
2753
+ backgroundColor: bg.active,
2754
+ color: text.primary,
2755
+ "& .MuiListItemIcon-root": {
2756
+ color: navColors.itemIconFgActive
2757
+ },
2758
+ "& .MuiListItemText-primary": {
2759
+ fontWeight: 600
2760
+ },
2761
+ "&:hover": {
2762
+ backgroundColor: bg.primaryHover
2763
+ }
2764
+ }
2765
+ };
2766
+ function SidebarItem({
2767
+ icon,
2768
+ label,
2769
+ endAdornment,
2770
+ sx,
2771
+ ...rest
2772
+ }) {
2773
+ const { open } = useSidebar();
2774
+ if (!open) {
2775
+ return /* @__PURE__ */ jsxRuntime.jsx(MuiTooltip__default.default, { title: label, placement: "right", arrow: true, children: /* @__PURE__ */ jsxRuntime.jsx(
2776
+ MuiListItemButton2__default.default,
2777
+ {
2778
+ ...rest,
2779
+ sx: {
2780
+ ...itemSx,
2781
+ display: "flex",
2782
+ justifyContent: "center",
2783
+ alignItems: "center",
2784
+ width: 40,
2785
+ height: 40,
2786
+ padding: 0,
2787
+ margin: "0 auto",
2788
+ ...sx
2789
+ },
2790
+ children: /* @__PURE__ */ jsxRuntime.jsx(ListItemIcon2__default.default, { sx: { minWidth: "unset", margin: 0, "& .MuiSvgIcon-root": { fontSize: 20 } }, children: icon })
2791
+ }
2792
+ ) });
2793
+ }
2794
+ return /* @__PURE__ */ jsxRuntime.jsxs(MuiListItemButton2__default.default, { ...rest, sx: { ...itemSx, height: 40, ...sx }, children: [
2795
+ /* @__PURE__ */ jsxRuntime.jsx(ListItemIcon2__default.default, { sx: { "& .MuiSvgIcon-root": { fontSize: 20 } }, children: icon }),
2796
+ /* @__PURE__ */ jsxRuntime.jsx(MuiListItemText__default.default, { primary: label }),
2797
+ endAdornment
2798
+ ] });
2799
+ }
2503
2800
 
2504
2801
  exports.Accordion = Accordion;
2505
2802
  exports.AccordionActions = AccordionActions;
@@ -2543,6 +2840,8 @@ exports.Paper = Paper;
2543
2840
  exports.Radio = Radio;
2544
2841
  exports.RadioGroup = RadioGroup;
2545
2842
  exports.Select = Select;
2843
+ exports.SidebarItem = SidebarItem;
2844
+ exports.SidebarNav = SidebarNav;
2546
2845
  exports.Skeleton = Skeleton;
2547
2846
  exports.Snackbar = Snackbar;
2548
2847
  exports.Switch = Switch;
@@ -2591,6 +2890,7 @@ exports.spacing = spacing;
2591
2890
  exports.text = text;
2592
2891
  exports.toggleColors = toggleColors;
2593
2892
  exports.tokenShadows = shadows;
2893
+ exports.useSidebar = useSidebar;
2594
2894
  exports.widths = widths;
2595
2895
  //# sourceMappingURL=index.js.map
2596
2896
  //# sourceMappingURL=index.js.map