analytica-frontend-lib 1.0.39 → 1.0.41

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.mjs CHANGED
@@ -776,48 +776,34 @@ import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
776
776
  var SIZE_CLASSES4 = {
777
777
  small: {
778
778
  radio: "w-5 h-5",
779
- // 20px x 20px
780
779
  textSize: "sm",
781
780
  spacing: "gap-1.5",
782
- // 6px
783
781
  borderWidth: "border-2",
784
- dotSize: "w-1.5 h-1.5",
785
- // 6px inner dot
782
+ dotSize: "w-2 h-2",
786
783
  labelHeight: "h-5"
787
784
  },
788
785
  medium: {
789
786
  radio: "w-6 h-6",
790
- // 24px x 24px
791
787
  textSize: "md",
792
788
  spacing: "gap-2",
793
- // 8px
794
789
  borderWidth: "border-2",
795
- dotSize: "w-2 h-2",
796
- // 8px inner dot
790
+ dotSize: "w-2.5 h-2.5",
797
791
  labelHeight: "h-6"
798
792
  },
799
793
  large: {
800
794
  radio: "w-7 h-7",
801
- // 28px x 28px
802
795
  textSize: "lg",
803
796
  spacing: "gap-2",
804
- // 8px
805
797
  borderWidth: "border-2",
806
- // 2px border (consistent with others)
807
- dotSize: "w-2.5 h-2.5",
808
- // 10px inner dot
798
+ dotSize: "w-3 h-3",
809
799
  labelHeight: "h-7"
810
800
  },
811
801
  extraLarge: {
812
802
  radio: "w-8 h-8",
813
- // 32px x 32px (larger than large)
814
803
  textSize: "xl",
815
804
  spacing: "gap-3",
816
- // 12px
817
805
  borderWidth: "border-2",
818
- // 2px border (consistent with others)
819
- dotSize: "w-3 h-3",
820
- // 12px inner dot
806
+ dotSize: "w-3.5 h-3.5",
821
807
  labelHeight: "h-8"
822
808
  }
823
809
  };
@@ -829,39 +815,27 @@ var STATE_CLASSES2 = {
829
815
  },
830
816
  hovered: {
831
817
  unchecked: "border-border-500 bg-background",
832
- // #8C8D8D hover state for unchecked
833
818
  checked: "border-info-700 bg-background"
834
- // Adjust checked border for hover
835
819
  },
836
820
  focused: {
837
821
  unchecked: "border-border-400 bg-background",
838
- // #A5A3A3 for unchecked radio
839
822
  checked: "border-primary-950 bg-background"
840
- // #124393 for checked radio
841
823
  },
842
824
  invalid: {
843
825
  unchecked: "border-border-400 bg-background",
844
- // #A5A3A3 for unchecked radio
845
826
  checked: "border-primary-950 bg-background"
846
- // #124393 for checked radio
847
827
  },
848
828
  disabled: {
849
829
  unchecked: "border-border-400 bg-background cursor-not-allowed",
850
- // #A5A3A3 for unchecked radio
851
830
  checked: "border-primary-950 bg-background cursor-not-allowed"
852
- // #124393 for checked radio
853
831
  }
854
832
  };
855
833
  var DOT_CLASSES = {
856
834
  default: "bg-primary-950",
857
835
  hovered: "bg-info-700",
858
- // #1C61B2 hover state for checked dot
859
836
  focused: "bg-primary-950",
860
- // #124393 for focused checked dot
861
837
  invalid: "bg-primary-950",
862
- // #124393 for invalid checked dot
863
838
  disabled: "bg-primary-950"
864
- // #124393 for disabled checked dot
865
839
  };
866
840
  var Radio = forwardRef6(
867
841
  ({
@@ -947,7 +921,7 @@ var Radio = forwardRef6(
947
921
  label && /* @__PURE__ */ jsx11(
948
922
  "div",
949
923
  {
950
- className: `flex flex-row items-center ${sizeClasses.labelHeight}`,
924
+ className: `flex flex-row items-center ${sizeClasses.labelHeight} flex-1 min-w-0`,
951
925
  children: /* @__PURE__ */ jsx11(
952
926
  Text_default,
953
927
  {
@@ -955,7 +929,7 @@ var Radio = forwardRef6(
955
929
  htmlFor: inputId,
956
930
  size: sizeClasses.textSize,
957
931
  weight: "normal",
958
- className: `${getCursorClass()} select-none leading-normal flex items-center font-roboto ${labelClassName}`,
932
+ className: `${getCursorClass()} select-none leading-normal flex items-center font-roboto truncate ${labelClassName}`,
959
933
  color: getTextColor(),
960
934
  children: label
961
935
  }
@@ -970,7 +944,7 @@ var Radio = forwardRef6(
970
944
  {
971
945
  size: "sm",
972
946
  weight: "normal",
973
- className: "mt-1.5",
947
+ className: "mt-1.5 truncate",
974
948
  color: "text-error-600",
975
949
  children: errorMessage
976
950
  }
@@ -980,7 +954,7 @@ var Radio = forwardRef6(
980
954
  {
981
955
  size: "sm",
982
956
  weight: "normal",
983
- className: "mt-1.5",
957
+ className: "mt-1.5 truncate",
984
958
  color: "text-text-500",
985
959
  children: helperText
986
960
  }
@@ -1467,7 +1441,6 @@ var SIZE_CLASSES7 = {
1467
1441
  // 4px height (h-1 = 4px in Tailwind)
1468
1442
  bar: "h-1",
1469
1443
  // 4px height for the fill bar
1470
- labelSize: "xs",
1471
1444
  spacing: "gap-2",
1472
1445
  // 8px gap between label and progress bar
1473
1446
  layout: "flex-col",
@@ -1480,8 +1453,6 @@ var SIZE_CLASSES7 = {
1480
1453
  // 8px height (h-2 = 8px in Tailwind)
1481
1454
  bar: "h-2",
1482
1455
  // 8px height for the fill bar
1483
- labelSize: "xs",
1484
- // 12px font size (xs in Tailwind)
1485
1456
  spacing: "gap-2",
1486
1457
  // 8px gap between progress bar and label
1487
1458
  layout: "flex-row items-center",
@@ -1523,25 +1494,25 @@ var ProgressBar = ({
1523
1494
  return /* @__PURE__ */ jsxs13(
1524
1495
  "div",
1525
1496
  {
1526
- className: `flex ${sizeClasses.layout} ${sizeClasses.spacing} ${className}`,
1497
+ className: `flex ${sizeClasses.layout} ${size === "medium" ? "gap-2" : sizeClasses.spacing} ${className}`,
1527
1498
  children: [
1528
1499
  size === "small" && (label || showPercentage) && /* @__PURE__ */ jsxs13("div", { className: "flex flex-row items-center justify-between w-full", children: [
1529
1500
  label && /* @__PURE__ */ jsx18(
1530
1501
  Text_default,
1531
1502
  {
1532
1503
  as: "div",
1533
- size: sizeClasses.labelSize,
1504
+ size: "xs",
1534
1505
  weight: "medium",
1535
- className: `text-text-950 ${labelClassName}`,
1506
+ className: `text-text-950 leading-none tracking-normal text-center ${labelClassName}`,
1536
1507
  children: label
1537
1508
  }
1538
1509
  ),
1539
1510
  showPercentage && /* @__PURE__ */ jsxs13(
1540
1511
  Text_default,
1541
1512
  {
1542
- size: sizeClasses.labelSize,
1513
+ size: "xs",
1543
1514
  weight: "medium",
1544
- className: `text-text-700 text-center ${percentageClassName}`,
1515
+ className: `text-text-950 leading-none tracking-normal text-center ${percentageClassName}`,
1545
1516
  children: [
1546
1517
  Math.round(percentage),
1547
1518
  "%"
@@ -1576,9 +1547,9 @@ var ProgressBar = ({
1576
1547
  size === "medium" && showPercentage && /* @__PURE__ */ jsxs13(
1577
1548
  Text_default,
1578
1549
  {
1579
- size: sizeClasses.labelSize,
1550
+ size: "xs",
1580
1551
  weight: "medium",
1581
- className: `text-text-950 text-center flex-none w-[70px] ${percentageClassName}`,
1552
+ className: `text-text-950 leading-none tracking-normal text-center flex-none ${percentageClassName}`,
1582
1553
  children: [
1583
1554
  Math.round(percentage),
1584
1555
  "%"
@@ -1589,9 +1560,9 @@ var ProgressBar = ({
1589
1560
  Text_default,
1590
1561
  {
1591
1562
  as: "div",
1592
- size: sizeClasses.labelSize,
1563
+ size: "xs",
1593
1564
  weight: "medium",
1594
- className: `text-text-950 flex-none ${labelClassName}`,
1565
+ className: `text-text-950 leading-none tracking-normal text-center flex-none ${labelClassName}`,
1595
1566
  children: label
1596
1567
  }
1597
1568
  )
@@ -1983,7 +1954,7 @@ var MenuContent = forwardRef9(
1983
1954
  }
1984
1955
  );
1985
1956
  MenuContent.displayName = "MenuContent";
1986
- var MenuItem = forwardRef9(
1957
+ var DropdownMenuItem = forwardRef9(
1987
1958
  ({
1988
1959
  className,
1989
1960
  size = "small",
@@ -2046,8 +2017,8 @@ var MenuItem = forwardRef9(
2046
2017
  );
2047
2018
  }
2048
2019
  );
2049
- MenuItem.displayName = "MenuItem";
2050
- var MenuSeparator = forwardRef9(({ className, store: _store, ...props }, ref) => /* @__PURE__ */ jsx20(
2020
+ DropdownMenuItem.displayName = "DropdownMenuItem";
2021
+ var DropdownMenuSeparator = forwardRef9(({ className, store: _store, ...props }, ref) => /* @__PURE__ */ jsx20(
2051
2022
  "div",
2052
2023
  {
2053
2024
  ref,
@@ -2055,7 +2026,7 @@ var MenuSeparator = forwardRef9(({ className, store: _store, ...props }, ref) =>
2055
2026
  ...props
2056
2027
  }
2057
2028
  ));
2058
- MenuSeparator.displayName = "MenuSeparator";
2029
+ DropdownMenuSeparator.displayName = "DropdownMenuSeparator";
2059
2030
  var ProfileMenuTrigger = forwardRef9(({ className, onClick, store: externalStore, ...props }, ref) => {
2060
2031
  const store = useDropdownStore(externalStore);
2061
2032
  const open = useStore(store, (s) => s.open);
@@ -2431,6 +2402,178 @@ var SelectItem = forwardRef10(
2431
2402
  );
2432
2403
  SelectItem.displayName = "SelectItem";
2433
2404
  var Select_default = Select;
2405
+
2406
+ // src/components/Menu/Menu.tsx
2407
+ import { create as create4, useStore as useStore3 } from "zustand";
2408
+ import {
2409
+ useEffect as useEffect3,
2410
+ useRef as useRef3,
2411
+ forwardRef as forwardRef11,
2412
+ isValidElement as isValidElement3,
2413
+ Children as Children3,
2414
+ cloneElement as cloneElement3,
2415
+ useState as useState6
2416
+ } from "react";
2417
+ import { CaretLeft, CaretRight } from "phosphor-react";
2418
+ import { jsx as jsx22, jsxs as jsxs17 } from "react/jsx-runtime";
2419
+ var createMenuStore = () => create4((set) => ({
2420
+ value: "",
2421
+ setValue: (value) => set({ value })
2422
+ }));
2423
+ var useMenuStore = (externalStore) => {
2424
+ if (!externalStore) throw new Error("MenuItem must be inside Menu");
2425
+ return externalStore;
2426
+ };
2427
+ var VARIANT_CLASSES5 = {
2428
+ menu: "bg-background shadow-soft-shadow-1",
2429
+ menu2: "overflow-x-auto scroll-smooth",
2430
+ breadcrumb: ""
2431
+ };
2432
+ var Menu = forwardRef11(
2433
+ ({
2434
+ className,
2435
+ children,
2436
+ defaultValue,
2437
+ value: propValue,
2438
+ variant = "menu",
2439
+ onValueChange,
2440
+ ...props
2441
+ }, ref) => {
2442
+ const storeRef = useRef3(null);
2443
+ storeRef.current ??= createMenuStore();
2444
+ const store = storeRef.current;
2445
+ const { setValue, value } = useStore3(store, (s) => s);
2446
+ useEffect3(() => {
2447
+ setValue(propValue ?? defaultValue);
2448
+ }, [defaultValue, propValue, setValue]);
2449
+ useEffect3(() => {
2450
+ onValueChange?.(value);
2451
+ }, [value, onValueChange]);
2452
+ const baseClasses = "w-full flex flex-row items-center gap-2 py-2 px-6";
2453
+ const variantClasses = VARIANT_CLASSES5[variant];
2454
+ return /* @__PURE__ */ jsx22(
2455
+ "ul",
2456
+ {
2457
+ ref,
2458
+ className: `
2459
+ ${baseClasses}
2460
+ ${variantClasses}
2461
+ ${className ?? ""}
2462
+ `,
2463
+ style: variant === "menu2" ? { scrollbarWidth: "none", msOverflowStyle: "none" } : void 0,
2464
+ ...props,
2465
+ children: injectStore3(children, store)
2466
+ }
2467
+ );
2468
+ }
2469
+ );
2470
+ Menu.displayName = "Menu";
2471
+ var MenuItem = forwardRef11(
2472
+ ({
2473
+ className,
2474
+ children,
2475
+ value,
2476
+ disabled = false,
2477
+ store: externalStore,
2478
+ variant = "menu",
2479
+ ...props
2480
+ }, ref) => {
2481
+ const store = useMenuStore(externalStore);
2482
+ const { value: selectedValue, setValue } = useStore3(store, (s) => s);
2483
+ const handleClick = (e) => {
2484
+ if (!disabled) setValue(value);
2485
+ props.onClick?.(e);
2486
+ };
2487
+ const commonProps = {
2488
+ role: "menuitem",
2489
+ "aria-disabled": disabled,
2490
+ ref,
2491
+ onClick: handleClick,
2492
+ onKeyDown: (e) => {
2493
+ if (["Enter", " "].includes(e.key)) handleClick(e);
2494
+ },
2495
+ tabIndex: disabled ? -1 : 0,
2496
+ ...props
2497
+ };
2498
+ const variants = {
2499
+ menu: /* @__PURE__ */ jsx22(
2500
+ "li",
2501
+ {
2502
+ "data-variant": "menu",
2503
+ className: `
2504
+ w-full flex flex-col gap-0.5 items-center py-1 px-2 rounded-sm font-medium text-xs
2505
+ [&>svg]:size-6 cursor-pointer hover:bg-primary-600 hover:text-text
2506
+ focus:outline-none focus:border-2-indicator-info focus:border-2
2507
+ ${selectedValue === value ? "bg-primary-50 text-primary-950" : "text-text-950"}
2508
+ ${className ?? ""}
2509
+ `,
2510
+ ...commonProps,
2511
+ children
2512
+ }
2513
+ ),
2514
+ menu2: /* @__PURE__ */ jsx22(
2515
+ "li",
2516
+ {
2517
+ "data-variant": "menu2",
2518
+ className: `
2519
+ flex flex-row items-center p-4 gap-2 border-b-2 border-transparent text-text-950 text-sx font-bold cursor-pointer
2520
+ ${selectedValue === value ? "border-b-primary-950" : ""}
2521
+ `,
2522
+ ...commonProps,
2523
+ children
2524
+ }
2525
+ ),
2526
+ breadcrumb: /* @__PURE__ */ jsx22(
2527
+ "li",
2528
+ {
2529
+ "data-variant": "breadcrumb",
2530
+ className: `
2531
+ p-2 rounded-lg hover:text-primary-600 cursor-pointer font-bold text-xs
2532
+ focus:outline-none focus:border-indicator-info focus:border-2
2533
+ ${selectedValue === value ? "text-primary-950" : "text-text-600"}
2534
+ ${className ?? ""}
2535
+ `,
2536
+ ...commonProps,
2537
+ children: /* @__PURE__ */ jsx22(
2538
+ "span",
2539
+ {
2540
+ className: `
2541
+ border-b border-text-600 hover:border-primary-600 text-inherit
2542
+ ${selectedValue === value ? "border-b-primary-950" : "border-b-primary-600"}
2543
+ `,
2544
+ children
2545
+ }
2546
+ )
2547
+ }
2548
+ )
2549
+ };
2550
+ return variants[variant] ?? variants["menu"];
2551
+ }
2552
+ );
2553
+ MenuItem.displayName = "MenuItem";
2554
+ var MenuSeparator = forwardRef11(
2555
+ ({ className, children, ...props }, ref) => /* @__PURE__ */ jsx22(
2556
+ "li",
2557
+ {
2558
+ ref,
2559
+ "aria-hidden": "true",
2560
+ className: `[&>svg]:w-4 [&>svg]:h-4 text-text-600 ${className ?? ""}`,
2561
+ ...props,
2562
+ children: children ?? /* @__PURE__ */ jsx22(CaretRight, {})
2563
+ }
2564
+ )
2565
+ );
2566
+ MenuSeparator.displayName = "MenuSeparator";
2567
+ var injectStore3 = (children, store) => Children3.map(children, (child) => {
2568
+ if (!isValidElement3(child)) return child;
2569
+ const typedChild = child;
2570
+ const shouldInject = typedChild.type === MenuItem;
2571
+ return cloneElement3(typedChild, {
2572
+ ...shouldInject ? { store } : {},
2573
+ ...typedChild.props.children ? { children: injectStore3(typedChild.props.children, store) } : {}
2574
+ });
2575
+ });
2576
+ var Menu_default = Menu;
2434
2577
  export {
2435
2578
  Alert_default as Alert,
2436
2579
  Badge_default as Badge,
@@ -2439,10 +2582,13 @@ export {
2439
2582
  Chips_default as Chips,
2440
2583
  Divider_default as Divider,
2441
2584
  DropdownMenu_default as DropdownMenu,
2585
+ DropdownMenuItem,
2586
+ DropdownMenuSeparator,
2442
2587
  DropdownMenuTrigger,
2443
2588
  IconButton_default as IconButton,
2444
2589
  IconRoundedButton_default as IconRoundedButton,
2445
2590
  Input_default as Input,
2591
+ Menu_default as Menu,
2446
2592
  MenuContent,
2447
2593
  MenuItem,
2448
2594
  MenuLabel,