xmlui 0.11.12 → 0.11.15

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.
@@ -2,7 +2,7 @@ import "./index.css";
2
2
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import React__default, { useRef, useInsertionEffect, useCallback, forwardRef, useState, useEffect, useId, cloneElement, useMemo, useContext, useLayoutEffect, createContext, memo, Fragment as Fragment$1, useReducer, isValidElement, useDeferredValue, createElement, startTransition, useTransition, Children } from "react";
5
- import { b as getDefaultExportFromCjs, l as labelPositionMd, o as orientationOptionMd, v as validationStatusMd, c as alignmentOptionValues, i as isSizeType, d as layoutOptionKeys, L as LinkTargetMd, e as alignmentOptionMd, f as iconPositionMd, h as buttonTypesMd, s as sizeMd, j as buttonThemeMd, k as buttonVariantMd, T as TextVariantElement, V as VariantPropsKeys, m as variantOptionsMd, n as scrollAnchoringValues, p as buttonThemeNames, q as iconPositionNames, r as buttonVariantNames, t as buttonVariantValues, u as triggerPositionNames, w as httpMethodNames, x as orientationOptionValues, y as viewportSizeNames, M as MetadataProvider } from "./metadata-utils-2bsMr4Gd.js";
5
+ import { b as getDefaultExportFromCjs, l as labelPositionMd, o as orientationOptionMd, v as validationStatusMd, c as alignmentOptionValues, i as isSizeType, d as alignmentOptionMd, e as layoutOptionKeys, L as LinkTargetMd, f as iconPositionMd, h as buttonTypesMd, s as sizeMd, j as buttonThemeMd, k as buttonVariantMd, T as TextVariantElement, V as VariantPropsKeys, m as variantOptionsMd, n as scrollAnchoringValues, p as buttonThemeNames, q as iconPositionNames, r as buttonVariantNames, t as buttonVariantValues, u as triggerPositionNames, w as httpMethodNames, x as orientationOptionValues, y as viewportSizeNames, M as MetadataProvider } from "./metadata-utils-BXGJbvlh.js";
6
6
  import require$$0, { flushSync, createPortal } from "react-dom";
7
7
  import yaml from "js-yaml";
8
8
  import { useQuery, useInfiniteQuery, QueryClientProvider, QueryClient } from "@tanstack/react-query";
@@ -1707,11 +1707,11 @@ const chStackComponentRenderer = createComponentRenderer(
1707
1707
  }
1708
1708
  );
1709
1709
  const themeVars$$ = `'{"backgroundColor-ResponsiveBar": "var(--xmlui-backgroundColor-ResponsiveBar)", "padding-ResponsiveBar": "var(--xmlui-padding-ResponsiveBar)", "margin-ResponsiveBar": "var(--xmlui-margin-ResponsiveBar)"}'`;
1710
- const responsiveBar = "_responsiveBar_9ttfw_14";
1711
- const vertical$7 = "_vertical_9ttfw_26";
1712
- const horizontal$6 = "_horizontal_9ttfw_33";
1713
- const visibleItems = "_visibleItems_9ttfw_39";
1714
- const overflowDropdown = "_overflowDropdown_9ttfw_65";
1710
+ const responsiveBar = "_responsiveBar_1euow_14";
1711
+ const vertical$7 = "_vertical_1euow_26";
1712
+ const horizontal$6 = "_horizontal_1euow_33";
1713
+ const visibleItems = "_visibleItems_1euow_39";
1714
+ const overflowDropdown = "_overflowDropdown_1euow_65";
1715
1715
  const styles$1i = {
1716
1716
  themeVars: themeVars$$,
1717
1717
  responsiveBar,
@@ -1721,17 +1721,19 @@ const styles$1i = {
1721
1721
  overflowDropdown
1722
1722
  };
1723
1723
  const themeVars$_ = `'{"backgroundColor-DropdownMenu": "var(--xmlui-backgroundColor-DropdownMenu)", "borderRadius-DropdownMenu": "var(--xmlui-borderRadius-DropdownMenu)", "boxShadow-DropdownMenu": "var(--xmlui-boxShadow-DropdownMenu)", "borderColor-DropdownMenu-content": "var(--xmlui-borderColor-DropdownMenu-content)", "borderWidth-DropdownMenu-content": "var(--xmlui-borderWidth-DropdownMenu-content)", "borderStyle-DropdownMenu-content": "var(--xmlui-borderStyle-DropdownMenu-content)", "minWidth-DropdownMenu": "var(--xmlui-minWidth-DropdownMenu)", "backgroundColor-MenuItem": "var(--xmlui-backgroundColor-MenuItem)", "color-MenuItem": "var(--xmlui-color-MenuItem)", "fontFamily-MenuItem": "var(--xmlui-fontFamily-MenuItem)", "gap-MenuItem": "var(--xmlui-gap-MenuItem)", "fontSize-MenuItem": "var(--xmlui-fontSize-MenuItem)", "paddingVertical-MenuItem": "var(--xmlui-paddingVertical-MenuItem)", "paddingHorizontal-MenuItem": "var(--xmlui-paddingHorizontal-MenuItem)", "backgroundColor-MenuItem--hover": "var(--xmlui-backgroundColor-MenuItem--hover)", "backgroundColor-MenuItem--active": "var(--xmlui-backgroundColor-MenuItem--active)", "backgroundColor-MenuItem--active--hover": "var(--xmlui-backgroundColor-MenuItem--active--hover)", "color-MenuItem--hover": "var(--xmlui-color-MenuItem--hover)", "color-MenuItem--active": "var(--xmlui-color-MenuItem--active)", "color-MenuItem--active--hover": "var(--xmlui-color-MenuItem--active--hover)", "color-MenuItem--disabled": "var(--xmlui-color-MenuItem--disabled)", "marginTop-MenuSeparator": "var(--xmlui-marginTop-MenuSeparator)", "marginBottom-MenuSeparator": "var(--xmlui-marginBottom-MenuSeparator)", "width-MenuSeparator": "var(--xmlui-width-MenuSeparator)", "height-MenuSeparator": "var(--xmlui-height-MenuSeparator)", "color-MenuSeparator": "var(--xmlui-color-MenuSeparator)"}'`;
1724
- const DropdownMenuContent = "_DropdownMenuContent_19u51_14";
1725
- const DropdownMenuSubContent = "_DropdownMenuSubContent_19u51_19";
1726
- const DropdownMenuItem = "_DropdownMenuItem_19u51_29";
1727
- const DropdownMenuSubTrigger = "_DropdownMenuSubTrigger_19u51_30";
1728
- const active$3 = "_active_19u51_53";
1729
- const disabled$b = "_disabled_19u51_63";
1730
- const wrapper$m = "_wrapper_19u51_74";
1731
- const DropdownMenuSeparator = "_DropdownMenuSeparator_19u51_78";
1724
+ const DropdownMenuContent = "_DropdownMenuContent_tklrk_14";
1725
+ const compact = "_compact_tklrk_18";
1726
+ const DropdownMenuSubContent = "_DropdownMenuSubContent_tklrk_22";
1727
+ const DropdownMenuItem = "_DropdownMenuItem_tklrk_32";
1728
+ const DropdownMenuSubTrigger = "_DropdownMenuSubTrigger_tklrk_33";
1729
+ const active$3 = "_active_tklrk_56";
1730
+ const disabled$b = "_disabled_tklrk_66";
1731
+ const wrapper$m = "_wrapper_tklrk_81";
1732
+ const DropdownMenuSeparator = "_DropdownMenuSeparator_tklrk_85";
1732
1733
  const styles$1h = {
1733
1734
  themeVars: themeVars$_,
1734
1735
  DropdownMenuContent,
1736
+ compact,
1735
1737
  DropdownMenuSubContent,
1736
1738
  DropdownMenuItem,
1737
1739
  DropdownMenuSubTrigger,
@@ -3389,6 +3391,7 @@ const DropdownMenu = forwardRef(function DropdownMenu2({
3389
3391
  triggerButtonThemeColor = defaultDropdownMenuProps.triggerButtonThemeColor,
3390
3392
  triggerButtonIcon = defaultDropdownMenuProps.triggerButtonIcon,
3391
3393
  triggerButtonIconPosition = defaultDropdownMenuProps.triggerButtonIconPosition,
3394
+ compact: compact2 = false,
3392
3395
  ...rest
3393
3396
  }, ref) {
3394
3397
  const { root: root2 } = useTheme();
@@ -3493,7 +3496,7 @@ const DropdownMenu = forwardRef(function DropdownMenu2({
3493
3496
  ref: contentRef,
3494
3497
  align: alignment,
3495
3498
  style: style2,
3496
- className: classnames(styles$1h.DropdownMenuContent, className),
3499
+ className: classnames(styles$1h.DropdownMenuContent, className, { [styles$1h.compact]: compact2 }),
3497
3500
  onOpenAutoFocus: (e) => {
3498
3501
  e.preventDefault();
3499
3502
  contentRef.current?.focus();
@@ -3521,7 +3524,8 @@ const MenuItem = forwardRef(function MenuItem2({
3521
3524
  icon: icon2,
3522
3525
  iconPosition = defaultMenuItemProps.iconPosition,
3523
3526
  active: active2 = defaultMenuItemProps.active,
3524
- enabled: enabled2 = true
3527
+ enabled: enabled2 = true,
3528
+ compact: compact2 = false
3525
3529
  }, ref) {
3526
3530
  const iconToStart = iconPosition === "start";
3527
3531
  const context = useDropdownMenuContext();
@@ -3556,7 +3560,8 @@ const MenuItem = forwardRef(function MenuItem2({
3556
3560
  style: style2,
3557
3561
  className: classnames(className, styles$1h.DropdownMenuItem, {
3558
3562
  [styles$1h.active]: active2,
3559
- [styles$1h.disabled]: !enabled2
3563
+ [styles$1h.disabled]: !enabled2,
3564
+ [styles$1h.compact]: compact2
3560
3565
  }),
3561
3566
  ref,
3562
3567
  onClick: handleClick,
@@ -3604,26 +3609,55 @@ const SubMenuItem = forwardRef(function SubMenuItem2({ children, label: label2,
3604
3609
  const MenuSeparator = forwardRef(function MenuSeparator2(props, ref) {
3605
3610
  return /* @__PURE__ */ jsx("div", { ref, className: styles$1h.DropdownMenuSeparator, role: "separator", ...props });
3606
3611
  });
3612
+ const PART_OVERFLOW = "overflow";
3607
3613
  const ResponsiveBarDropdown = ({
3608
3614
  overflowIcon,
3615
+ dropdownText,
3616
+ dropdownAlignment,
3617
+ triggerTemplate,
3609
3618
  children,
3610
- className
3611
- }) => /* @__PURE__ */ jsx("div", { className, children: /* @__PURE__ */ jsx(DropdownMenu, { label: "More options", triggerButtonIcon: overflowIcon, children }) });
3619
+ className,
3620
+ onWillOpen,
3621
+ registerComponentApi
3622
+ }) => /* @__PURE__ */ jsx("div", { className, "data-part-id": PART_OVERFLOW, children: /* @__PURE__ */ jsx(
3623
+ DropdownMenu,
3624
+ {
3625
+ label: dropdownText,
3626
+ triggerButtonIcon: overflowIcon,
3627
+ triggerTemplate,
3628
+ alignment: dropdownAlignment,
3629
+ compact: true,
3630
+ onWillOpen,
3631
+ registerComponentApi,
3632
+ children
3633
+ }
3634
+ ) });
3612
3635
  const defaultResponsiveBarProps = {
3613
3636
  overflowIcon: "ellipsisHorizontal:ResponsiveBar",
3637
+ dropdownText: "More options",
3614
3638
  gap: 0,
3615
- orientation: "horizontal"
3639
+ orientation: "horizontal",
3640
+ reverse: false
3616
3641
  };
3617
3642
  const ResponsiveBar = forwardRef(function ResponsiveBar2({
3618
3643
  children,
3644
+ childNodes,
3645
+ renderChildFn,
3619
3646
  overflowIcon = defaultResponsiveBarProps.overflowIcon,
3647
+ dropdownText = defaultResponsiveBarProps.dropdownText,
3648
+ dropdownAlignment,
3649
+ triggerTemplate,
3620
3650
  gap = defaultResponsiveBarProps.gap,
3621
3651
  orientation = defaultResponsiveBarProps.orientation,
3652
+ reverse: reverse2 = defaultResponsiveBarProps.reverse,
3622
3653
  style: style2,
3623
3654
  className,
3624
3655
  onClick,
3656
+ onWillOpen,
3657
+ registerComponentApi,
3625
3658
  ...rest
3626
3659
  }, ref) {
3660
+ const effectiveAlignment = dropdownAlignment ?? (reverse2 ? "start" : "end");
3627
3661
  const containerRef = useRef(null);
3628
3662
  const measurementDropdownRef = useRef(null);
3629
3663
  const isCalculatingRef = useRef(false);
@@ -3631,8 +3665,10 @@ const ResponsiveBar = forwardRef(function ResponsiveBar2({
3631
3665
  const lastChildrenCount = useRef(0);
3632
3666
  useRef(null);
3633
3667
  const layoutCompletedRef = useRef(false);
3668
+ const dropdownApiRef = useRef(null);
3634
3669
  const [isInMeasurementPhase, setIsInMeasurementPhase] = useState(true);
3635
3670
  const [measuredWidths, setMeasuredWidths] = useState([]);
3671
+ const [measuredDropdownSize, setMeasuredDropdownSize] = useState(0);
3636
3672
  const [layout, setLayout] = useState({
3637
3673
  visibleItems: [],
3638
3674
  overflowItems: []
@@ -3644,6 +3680,21 @@ const ResponsiveBar = forwardRef(function ResponsiveBar2({
3644
3680
  return result;
3645
3681
  }, [children]);
3646
3682
  const childrenCount = childrenArray.length;
3683
+ useEffect(() => {
3684
+ if (registerComponentApi) {
3685
+ registerComponentApi({
3686
+ open: () => {
3687
+ dropdownApiRef.current?.open();
3688
+ },
3689
+ close: () => {
3690
+ dropdownApiRef.current?.close();
3691
+ },
3692
+ hasOverflow: () => {
3693
+ return layout.overflowItems.length > 0;
3694
+ }
3695
+ });
3696
+ }
3697
+ }, [registerComponentApi, layout.overflowItems.length]);
3647
3698
  const measureItems = () => {
3648
3699
  if (!containerRef.current) return;
3649
3700
  const items = [];
@@ -3663,7 +3714,16 @@ const ResponsiveBar = forwardRef(function ResponsiveBar2({
3663
3714
  const rect = item2.getBoundingClientRect();
3664
3715
  return orientation === "horizontal" ? rect.width : rect.height;
3665
3716
  });
3717
+ let dropdownSize = orientation === "horizontal" ? 147 : 47;
3718
+ if (measurementDropdownRef.current) {
3719
+ const dropdownRect = measurementDropdownRef.current.getBoundingClientRect();
3720
+ const measuredSize = orientation === "horizontal" ? dropdownRect.width : dropdownRect.height;
3721
+ if (measuredSize > 0) {
3722
+ dropdownSize = measuredSize;
3723
+ }
3724
+ }
3666
3725
  setMeasuredWidths(measurements);
3726
+ setMeasuredDropdownSize(dropdownSize);
3667
3727
  setIsInMeasurementPhase(false);
3668
3728
  };
3669
3729
  const calculateOverflowLayout = () => {
@@ -3677,7 +3737,6 @@ const ResponsiveBar = forwardRef(function ResponsiveBar2({
3677
3737
  if (containerSize === 0 || containerSize === lastSize) {
3678
3738
  return;
3679
3739
  }
3680
- console.log(`ResponsiveBar ${orientation}: containerSize=${containerSize}, children=${childrenArray.length}`);
3681
3740
  isCalculatingRef.current = true;
3682
3741
  lastContainerSize.current = containerSize;
3683
3742
  const gapValue = gap;
@@ -3688,25 +3747,23 @@ const ResponsiveBar = forwardRef(function ResponsiveBar2({
3688
3747
  const gapSize = i > 0 ? gapValue : 0;
3689
3748
  totalSize += gapSize + childSize;
3690
3749
  }
3691
- console.log(`Total size needed: ${totalSize}, available: ${containerSize}`);
3692
3750
  let visibleItems2;
3693
3751
  let overflowItems;
3694
3752
  if (totalSize <= containerSize) {
3695
3753
  visibleItems2 = childrenArray;
3696
3754
  overflowItems = [];
3697
3755
  } else {
3698
- let dropdownSize = orientation === "horizontal" ? 147 : 47;
3756
+ let dropdownSize = measuredDropdownSize > 0 ? measuredDropdownSize : orientation === "horizontal" ? 147 : 47;
3699
3757
  const existingDropdown = container2.querySelector(
3700
3758
  `.${styles$1i.overflowDropdown}`
3701
3759
  );
3702
3760
  if (existingDropdown) {
3703
3761
  const dropdownRect = existingDropdown.getBoundingClientRect();
3704
- dropdownSize = orientation === "horizontal" ? dropdownRect.width : dropdownRect.height;
3705
- } else if (measurementDropdownRef.current) {
3706
- const dropdownRect = measurementDropdownRef.current.getBoundingClientRect();
3707
- dropdownSize = orientation === "horizontal" ? dropdownRect.width : dropdownRect.height;
3762
+ const currentSize = orientation === "horizontal" ? dropdownRect.width : dropdownRect.height;
3763
+ if (currentSize > 0) {
3764
+ dropdownSize = currentSize;
3765
+ }
3708
3766
  }
3709
- console.log(`Dropdown size: ${dropdownSize}`);
3710
3767
  let accumulatedSize = 0;
3711
3768
  let visibleCount = 0;
3712
3769
  for (let i = 0; i < childrenArray.length; i++) {
@@ -3715,7 +3772,6 @@ const ResponsiveBar = forwardRef(function ResponsiveBar2({
3715
3772
  const gapSize = i > 0 ? gapValue : 0;
3716
3773
  const proposedSize = accumulatedSize + gapSize + childSize;
3717
3774
  const totalSizeWithDropdown = proposedSize + gapValue + dropdownSize;
3718
- console.log(`Item ${i}: size=${childSize}, proposed=${proposedSize}, withDropdown=${totalSizeWithDropdown}`);
3719
3775
  if (totalSizeWithDropdown <= containerSize) {
3720
3776
  accumulatedSize = proposedSize;
3721
3777
  visibleCount++;
@@ -3740,18 +3796,14 @@ const ResponsiveBar = forwardRef(function ResponsiveBar2({
3740
3796
  if (visibleCount >= childrenArray.length) {
3741
3797
  visibleItems2 = childrenArray;
3742
3798
  overflowItems = [];
3743
- console.log(`All items fit, no dropdown needed`);
3744
3799
  } else if (visibleCount === 0) {
3745
3800
  visibleItems2 = childrenArray.slice(0, 1);
3746
3801
  overflowItems = childrenArray.slice(1);
3747
- console.log(`No items fit, forcing one visible: visible=1, overflow=${overflowItems.length}`);
3748
3802
  } else {
3749
3803
  visibleItems2 = childrenArray.slice(0, visibleCount);
3750
3804
  overflowItems = childrenArray.slice(visibleCount);
3751
- console.log(`Split items: visible=${visibleItems2.length}, overflow=${overflowItems.length}`);
3752
3805
  }
3753
3806
  }
3754
- console.log(`Final layout: visible=${visibleItems2.length}, overflow=${overflowItems.length}`);
3755
3807
  if (visibleItems2.length !== layout.visibleItems.length || overflowItems.length !== layout.overflowItems.length) {
3756
3808
  setLayout({
3757
3809
  visibleItems: visibleItems2,
@@ -3773,6 +3825,7 @@ const ResponsiveBar = forwardRef(function ResponsiveBar2({
3773
3825
  lastChildrenCount.current = childrenCount;
3774
3826
  setIsInMeasurementPhase(true);
3775
3827
  setMeasuredWidths([]);
3828
+ setMeasuredDropdownSize(0);
3776
3829
  }
3777
3830
  }, [childrenCount]);
3778
3831
  useEffect(() => {
@@ -3818,7 +3871,7 @@ const ResponsiveBar = forwardRef(function ResponsiveBar2({
3818
3871
  ...style2,
3819
3872
  gap: `${gap}px`,
3820
3873
  // Gap between visibleItems and overflowDropdown
3821
- flexDirection: orientation === "horizontal" ? "row" : "column",
3874
+ flexDirection: orientation === "horizontal" ? reverse2 ? "row-reverse" : "row" : reverse2 ? "column-reverse" : "column",
3822
3875
  height: orientation === "vertical" ? "100%" : void 0,
3823
3876
  width: orientation === "horizontal" ? "100%" : void 0
3824
3877
  },
@@ -3840,7 +3893,7 @@ const ResponsiveBar = forwardRef(function ResponsiveBar2({
3840
3893
  visibility: "hidden",
3841
3894
  opacity: 0,
3842
3895
  pointerEvents: "none",
3843
- flexDirection: orientation === "horizontal" ? "row" : "column"
3896
+ flexDirection: orientation === "horizontal" ? reverse2 ? "row-reverse" : "row" : reverse2 ? "column-reverse" : "column"
3844
3897
  },
3845
3898
  children: childrenArray.map((child, index) => /* @__PURE__ */ jsx("div", { children: child }, `item-${index}`))
3846
3899
  }
@@ -3858,7 +3911,13 @@ const ResponsiveBar = forwardRef(function ResponsiveBar2({
3858
3911
  ResponsiveBarDropdown,
3859
3912
  {
3860
3913
  overflowIcon,
3914
+ dropdownText,
3915
+ dropdownAlignment: effectiveAlignment,
3916
+ triggerTemplate,
3861
3917
  className: styles$1i.overflowDropdown,
3918
+ onWillOpen,
3919
+ registerComponentApi: (api) => {
3920
+ },
3862
3921
  children: childrenArray.length > 0 && /* @__PURE__ */ jsx(MenuItem, { children: childrenArray[0] })
3863
3922
  }
3864
3923
  )
@@ -3878,11 +3937,11 @@ const ResponsiveBar = forwardRef(function ResponsiveBar2({
3878
3937
  style: {
3879
3938
  gap: `${gap}px`,
3880
3939
  // Gap between visible items
3881
- flexDirection: orientation === "horizontal" ? "row" : "column"
3940
+ flexDirection: orientation === "horizontal" ? reverse2 ? "row-reverse" : "row" : reverse2 ? "column-reverse" : "column"
3882
3941
  },
3883
3942
  children: childrenArray.map((child, index) => {
3884
3943
  const isVisible = layout.visibleItems.length > 0 ? index < layout.visibleItems.length : true;
3885
- return /* @__PURE__ */ jsx("div", { style: { display: isVisible ? "block" : "none" }, children: child }, `item-${index}`);
3944
+ return /* @__PURE__ */ jsx("div", { style: { display: isVisible ? "flex" : "none", alignItems: "stretch" }, children: renderChildFn && childNodes ? renderChildFn(childNodes[index], false) : child }, `item-${index}`);
3886
3945
  })
3887
3946
  }
3888
3947
  ),
@@ -3890,8 +3949,19 @@ const ResponsiveBar = forwardRef(function ResponsiveBar2({
3890
3949
  ResponsiveBarDropdown,
3891
3950
  {
3892
3951
  overflowIcon,
3952
+ dropdownText,
3953
+ dropdownAlignment: effectiveAlignment,
3954
+ triggerTemplate,
3893
3955
  className: styles$1i.overflowDropdown,
3894
- children: layout.overflowItems.map((item2, index) => /* @__PURE__ */ jsx(MenuItem, { children: item2 }, index))
3956
+ onWillOpen,
3957
+ registerComponentApi: (api) => {
3958
+ dropdownApiRef.current = api;
3959
+ },
3960
+ children: layout.overflowItems.map((item2, index) => {
3961
+ const originalIndex = layout.visibleItems.length + index;
3962
+ const renderedChild = renderChildFn && childNodes ? renderChildFn(childNodes[originalIndex], true) : item2;
3963
+ return /* @__PURE__ */ jsx(MenuItem, { compact: true, children: renderedChild }, index);
3964
+ })
3895
3965
  }
3896
3966
  )
3897
3967
  ] })
@@ -3899,6 +3969,21 @@ const ResponsiveBar = forwardRef(function ResponsiveBar2({
3899
3969
  }
3900
3970
  );
3901
3971
  });
3972
+ const ResponsiveBarItem = memo(
3973
+ ({ node, isOverflow, renderChild: renderChild2, layoutContext }) => {
3974
+ const nodeWithContext = useMemo(() => {
3975
+ return {
3976
+ type: "Container",
3977
+ contextVars: {
3978
+ $overflow: isOverflow
3979
+ },
3980
+ children: Array.isArray(node) ? node : [node]
3981
+ };
3982
+ }, [node, isOverflow]);
3983
+ return /* @__PURE__ */ jsx(Fragment, { children: renderChild2(nodeWithContext, layoutContext) });
3984
+ }
3985
+ );
3986
+ ResponsiveBarItem.displayName = "ResponsiveBarItem";
3902
3987
  const COMP$1w = "ResponsiveBar";
3903
3988
  const ResponsiveBarMd = createMetadata({
3904
3989
  status: "stable",
@@ -3916,17 +4001,54 @@ const ResponsiveBarMd = createMetadata({
3916
4001
  valueType: "string",
3917
4002
  defaultValue: defaultResponsiveBarProps.overflowIcon
3918
4003
  },
4004
+ dropdownText: {
4005
+ description: "Text to display in the dropdown trigger button label when items overflow. This text is used for accessibility and appears alongside the overflow icon.",
4006
+ valueType: "string",
4007
+ defaultValue: defaultResponsiveBarProps.dropdownText
4008
+ },
4009
+ dropdownAlignment: {
4010
+ description: "Alignment of the dropdown menu relative to the trigger button. By default, uses 'end' when reverse is false (dropdown on the right/bottom) and 'start' when reverse is true (dropdown on the left/top).",
4011
+ valueType: "string",
4012
+ availableValues: alignmentOptionMd
4013
+ },
4014
+ triggerTemplate: dTriggerTemplate(COMP$1w),
3919
4015
  gap: {
3920
4016
  description: "Gap between child elements in pixels. Controls the spacing between items in the responsive bar layout.",
3921
4017
  valueType: "number",
3922
4018
  defaultValue: defaultResponsiveBarProps.gap
4019
+ },
4020
+ reverse: {
4021
+ description: "Reverses the direction of child elements. In horizontal mode, items are arranged from right to left instead of left to right. In vertical mode, items are arranged from bottom to top instead of top to bottom. The dropdown menu position also adjusts to appear at the start (left/top) instead of the end (right/bottom).",
4022
+ valueType: "boolean",
4023
+ defaultValue: defaultResponsiveBarProps.reverse
3923
4024
  }
3924
4025
  },
3925
4026
  events: {
3926
- click: dClick(COMP$1w)
4027
+ click: dClick(COMP$1w),
4028
+ willOpen: d(
4029
+ `This event fires when the \`${COMP$1w}\` overflow dropdown menu is about to be opened. You can prevent opening the menu by returning \`false\` from the event handler. Otherwise, the menu will open at the end of the event handler like normal.`
4030
+ )
4031
+ },
4032
+ apis: {
4033
+ close: {
4034
+ description: `This method closes the overflow dropdown menu.`,
4035
+ signature: "close(): void"
4036
+ },
4037
+ open: {
4038
+ description: `This method opens the overflow dropdown menu.`,
4039
+ signature: "open(): void"
4040
+ },
4041
+ hasOverflow: {
4042
+ description: `This method returns true if the ResponsiveBar currently has an overflow menu (i.e., some items don't fit and are in the dropdown).`,
4043
+ signature: "hasOverflow(): boolean"
4044
+ }
4045
+ },
4046
+ contextVars: {
4047
+ $overflow: {
4048
+ description: "Boolean indicating whether the child component is displayed in the overflow dropdown menu (true) or visible in the main bar (false).",
4049
+ valueType: "boolean"
4050
+ }
3927
4051
  },
3928
- apis: {},
3929
- contextVars: {},
3930
4052
  themeVars: parseScssVar(styles$1i.themeVars),
3931
4053
  limitThemeVarsToComponent: true,
3932
4054
  defaultThemeVars: {
@@ -3938,16 +4060,43 @@ const ResponsiveBarMd = createMetadata({
3938
4060
  const responsiveBarComponentRenderer = createComponentRenderer(
3939
4061
  COMP$1w,
3940
4062
  ResponsiveBarMd,
3941
- ({ node, extractValue, renderChild: renderChild2, className, lookupEventHandler }) => {
4063
+ ({ node, extractValue, renderChild: renderChild2, className, lookupEventHandler, registerComponentApi, layoutContext }) => {
4064
+ const children = Array.isArray(node.children) ? node.children : node.children ? [node.children] : [];
4065
+ const renderChildWithContext = (childNode, isOverflow) => /* @__PURE__ */ jsx(
4066
+ ResponsiveBarItem,
4067
+ {
4068
+ node: childNode,
4069
+ isOverflow,
4070
+ renderChild: renderChild2,
4071
+ layoutContext
4072
+ }
4073
+ );
3942
4074
  return /* @__PURE__ */ jsx(
3943
4075
  ResponsiveBar,
3944
4076
  {
3945
4077
  orientation: extractValue(node.props?.orientation),
3946
4078
  overflowIcon: extractValue(node.props?.overflowIcon),
4079
+ dropdownText: extractValue(node.props?.dropdownText),
4080
+ dropdownAlignment: extractValue(node.props?.dropdownAlignment),
4081
+ triggerTemplate: renderChild2(node.props?.triggerTemplate),
3947
4082
  gap: extractValue(node.props?.gap),
4083
+ reverse: extractValue.asOptionalBoolean(node.props?.reverse),
3948
4084
  onClick: lookupEventHandler("click"),
4085
+ onWillOpen: lookupEventHandler("willOpen"),
4086
+ registerComponentApi,
3949
4087
  className,
3950
- children: renderChild2(node.children)
4088
+ childNodes: children,
4089
+ renderChildFn: renderChildWithContext,
4090
+ children: children.map((child, index) => /* @__PURE__ */ jsx(
4091
+ ResponsiveBarItem,
4092
+ {
4093
+ node: child,
4094
+ isOverflow: false,
4095
+ renderChild: renderChild2,
4096
+ layoutContext
4097
+ },
4098
+ index
4099
+ ))
3951
4100
  }
3952
4101
  );
3953
4102
  }
@@ -8391,8 +8540,6 @@ const NavLinkMd = createMetadata({
8391
8540
  [`fontFamily-${COMP$1t}`]: "$fontFamily",
8392
8541
  [`textColor-${COMP$1t}`]: "$textColor-primary",
8393
8542
  [`textColor-${COMP$1t}--active`]: "$color-primary-500",
8394
- [`fontWeight-${COMP$1t}--active`]: "$fontWeight-bold",
8395
- [`fontWeight-${COMP$1t}--pressed`]: "$fontWeight-bold",
8396
8543
  [`thickness-indicator-${COMP$1t}`]: "$space-0_5",
8397
8544
  [`outlineColor-${COMP$1t}--focus`]: "$outlineColor--focus",
8398
8545
  [`outlineWidth-${COMP$1t}--focus`]: "$outlineWidth--focus",
@@ -15730,20 +15877,22 @@ const avatarComponentRenderer = createComponentRenderer(
15730
15877
  }
15731
15878
  );
15732
15879
  const themeVars$D = `'{"backgroundColor-ContentSeparator": "var(--xmlui-backgroundColor-ContentSeparator)", "thickness-ContentSeparator": "var(--xmlui-thickness-ContentSeparator)", "length-ContentSeparator": "var(--xmlui-length-ContentSeparator)", "marginTop-ContentSeparator": "var(--xmlui-marginTop-ContentSeparator)", "marginBottom-ContentSeparator": "var(--xmlui-marginBottom-ContentSeparator)", "marginVertical-ContentSeparator": "var(--xmlui-marginVertical-ContentSeparator)", "marginLeft-ContentSeparator": "var(--xmlui-marginLeft-ContentSeparator)", "marginRight-ContentSeparator": "var(--xmlui-marginRight-ContentSeparator)", "marginHorizontal-ContentSeparator": "var(--xmlui-marginHorizontal-ContentSeparator)", "paddingTop-ContentSeparator": "var(--xmlui-paddingTop-ContentSeparator)", "paddingBottom-ContentSeparator": "var(--xmlui-paddingBottom-ContentSeparator)", "paddingVertical-ContentSeparator": "var(--xmlui-paddingVertical-ContentSeparator)", "paddingLeft-ContentSeparator": "var(--xmlui-paddingLeft-ContentSeparator)", "paddingRight-ContentSeparator": "var(--xmlui-paddingRight-ContentSeparator)", "paddingHorizontal-ContentSeparator": "var(--xmlui-paddingHorizontal-ContentSeparator)"}'`;
15733
- const separator = "_separator_1r9lf_14";
15734
- const horizontal$3 = "_horizontal_1r9lf_27";
15735
- const vertical$3 = "_vertical_1r9lf_31";
15880
+ const separator = "_separator_hmp7g_14";
15881
+ const horizontal$3 = "_horizontal_hmp7g_27";
15882
+ const stretchToFit = "_stretchToFit_hmp7g_31";
15883
+ const vertical$3 = "_vertical_hmp7g_35";
15736
15884
  const styles$Y = {
15737
15885
  themeVars: themeVars$D,
15738
15886
  separator,
15739
15887
  horizontal: horizontal$3,
15888
+ stretchToFit,
15740
15889
  vertical: vertical$3
15741
15890
  };
15742
15891
  const defaultProps$W = {
15743
15892
  orientation: "horizontal"
15744
15893
  };
15745
15894
  const ContentSeparator = forwardRef(
15746
- ({ orientation = defaultProps$W.orientation, thickness, length, style: style2, className, ...rest }, ref) => {
15895
+ ({ orientation = defaultProps$W.orientation, thickness, length, hasExplicitLength = false, style: style2, className, ...rest }, ref) => {
15747
15896
  const inlineStyles = {};
15748
15897
  if (thickness !== void 0) {
15749
15898
  if (orientation === "horizontal") {
@@ -15768,7 +15917,8 @@ const ContentSeparator = forwardRef(
15768
15917
  styles$Y.separator,
15769
15918
  {
15770
15919
  [styles$Y.horizontal]: orientation === "horizontal",
15771
- [styles$Y.vertical]: orientation === "vertical"
15920
+ [styles$Y.vertical]: orientation === "vertical",
15921
+ [styles$Y.stretchToFit]: !hasExplicitLength
15772
15922
  },
15773
15923
  className
15774
15924
  ),
@@ -15821,12 +15971,16 @@ const contentSeparatorComponentRenderer = createComponentRenderer(
15821
15971
  COMP$1h,
15822
15972
  ContentSeparatorMd,
15823
15973
  ({ node, className, extractValue }) => {
15974
+ const orientation = extractValue(node.props.orientation);
15975
+ const length = extractValue.asSize(node.props.length);
15976
+ const hasExplicitLength = length !== void 0 || orientation === "vertical" && node.props.height !== void 0 || orientation === "horizontal" && node.props.width !== void 0;
15824
15977
  return /* @__PURE__ */ jsx(
15825
15978
  ContentSeparator,
15826
15979
  {
15827
- orientation: extractValue(node.props.orientation),
15980
+ orientation,
15828
15981
  thickness: extractValue.asSize(node.props.thickness),
15829
- length: extractValue.asSize(node.props.length),
15982
+ length,
15983
+ hasExplicitLength,
15830
15984
  className
15831
15985
  }
15832
15986
  );
@@ -20088,7 +20242,7 @@ const TextBox = forwardRef(function TextBox2({
20088
20242
  required: required2
20089
20243
  }
20090
20244
  ),
20091
- !readOnly2 && enabled2 && localValue.length > 0 && type == "search" && /* @__PURE__ */ jsx(
20245
+ !readOnly2 && enabled2 && type == "search" && localValue?.length > 0 && /* @__PURE__ */ jsx(
20092
20246
  Adornment,
20093
20247
  {
20094
20248
  "data-part-id": PART_END_ADORNMENT,
@@ -22769,14 +22923,18 @@ const Form = forwardRef(function({
22769
22923
  dispatch(formSubmitting());
22770
22924
  try {
22771
22925
  const filteredSubject = validationResult.data;
22772
- const canSubmit = await onWillSubmit?.(filteredSubject);
22773
- if (canSubmit === false) {
22926
+ const willSubmitResult = await onWillSubmit?.(filteredSubject);
22927
+ if (willSubmitResult === false) {
22774
22928
  dispatch(
22775
22929
  backendValidationArrived({ generalValidationResults: [], fieldValidationResults: {} })
22776
22930
  );
22777
22931
  return;
22778
22932
  }
22779
- const result = await onSubmit?.(filteredSubject, {
22933
+ let dataToSubmit = filteredSubject;
22934
+ if (willSubmitResult !== null && willSubmitResult !== void 0 && willSubmitResult !== "" && typeof willSubmitResult === "object" && !Array.isArray(willSubmitResult)) {
22935
+ dataToSubmit = willSubmitResult;
22936
+ }
22937
+ const result = await onSubmit?.(dataToSubmit, {
22780
22938
  passAsDefaultBody: true
22781
22939
  });
22782
22940
  dispatch(formSubmitted());
@@ -24525,7 +24683,7 @@ function ApiInterceptorProvider({
24525
24683
  return;
24526
24684
  }
24527
24685
  void (async () => {
24528
- const { initMock } = await import("./initMock-BYfY6ibT.js");
24686
+ const { initMock } = await import("./initMock-C17fxLuA.js");
24529
24687
  const apiInstance2 = await initMock(interceptor);
24530
24688
  setApiInstance(apiInstance2);
24531
24689
  setInitialized(true);
@@ -24542,7 +24700,7 @@ function ApiInterceptorProvider({
24542
24700
  if (process.env.VITE_MOCK_ENABLED) {
24543
24701
  const [{ createApiInterceptorWorker }, { initMock }] = await Promise.all([
24544
24702
  useWorker ? import("./apiInterceptorWorker-dwrAyq6l.js") : Promise.resolve({ createApiInterceptorWorker: () => null }),
24545
- import("./initMock-BYfY6ibT.js")
24703
+ import("./initMock-C17fxLuA.js")
24546
24704
  ]);
24547
24705
  if (interceptor || forceInitialize) {
24548
24706
  const apiInstance2 = await initMock(interceptor || {});
@@ -24579,7 +24737,7 @@ function ApiInterceptorProvider({
24579
24737
  void (async () => {
24580
24738
  const [{ createApiInterceptorWorker }, { initMock }] = await Promise.all([
24581
24739
  import("./apiInterceptorWorker-dwrAyq6l.js"),
24582
- import("./initMock-BYfY6ibT.js")
24740
+ import("./initMock-C17fxLuA.js")
24583
24741
  ]);
24584
24742
  const apiInstance2 = await initMock(interceptor);
24585
24743
  await createApiInterceptorWorker(apiInstance2, parentInterceptorWorker);
@@ -28424,7 +28582,7 @@ const FormMd = createMetadata({
28424
28582
  },
28425
28583
  events: {
28426
28584
  willSubmit: d(
28427
- `The form infrastructure fires this event just before the form is submitted. The event argument is the current \`data\` value to be submitted. You can cancel the submission by returning \`false\` from the event handler.`
28585
+ `The form infrastructure fires this event just before the form is submitted. The event argument is the current \`data\` value to be submitted. The return value controls submission behavior: returning \`false\` cancels the submission; returning a plain object submits that object instead; returning \`null\`, \`undefined\`, an empty string, or any non-object value proceeds with normal submission.`
28428
28586
  ),
28429
28587
  submit: d(
28430
28588
  `The form infrastructure fires this event when the form is submitted. The event argument is the current \`data\` value to save.`
@@ -32045,6 +32203,7 @@ const XmlUiThemeDefinition = {
32045
32203
  resources: {
32046
32204
  // "font.inter": "https://rsms.me/inter/inter.css",
32047
32205
  },
32206
+ color: "$color-primary-500",
32048
32207
  themeVars: {
32049
32208
  "font-size": "15px",
32050
32209
  "boxShadow-Input": "$boxShadow-sm"
@@ -32066,46 +32225,55 @@ const XmlUiThemeDefinition = {
32066
32225
  const XmlUiGreenThemeDefinition = {
32067
32226
  id: "xmlui-green",
32068
32227
  extends: "xmlui",
32228
+ color: "$color-primary-500",
32069
32229
  themeVars: { ...greenThemeColors }
32070
32230
  };
32071
32231
  const XmlUiGrayThemeDefinition = {
32072
32232
  id: "xmlui-gray",
32073
32233
  extends: "xmlui",
32234
+ color: "$color-primary-500",
32074
32235
  themeVars: { ...grayThemeColors }
32075
32236
  };
32076
32237
  const XmlUiOrangeThemeDefinition = {
32077
32238
  id: "xmlui-orange",
32078
32239
  extends: "xmlui",
32240
+ color: "$color-primary-500",
32079
32241
  themeVars: { ...orangeThemeColors }
32080
32242
  };
32081
32243
  const XmlUiPurpleThemeDefinition = {
32082
32244
  id: "xmlui-purple",
32083
32245
  extends: "xmlui",
32246
+ color: "$color-primary-500",
32084
32247
  themeVars: { ...purpleThemeColors }
32085
32248
  };
32086
32249
  const XmlUiCyanThemeDefinition = {
32087
32250
  id: "xmlui-cyan",
32088
32251
  extends: "xmlui",
32252
+ color: "$color-primary-500",
32089
32253
  themeVars: { ...cyanThemeColors }
32090
32254
  };
32091
32255
  const XmlUiRedThemeDefinition = {
32092
32256
  id: "xmlui-red",
32093
32257
  extends: "xmlui",
32258
+ color: "$color-primary-500",
32094
32259
  themeVars: { ...redThemeColors }
32095
32260
  };
32096
32261
  const XmlUiDocsThemeDefinition = {
32097
32262
  id: "xmlui-docs",
32098
32263
  extends: "xmlui",
32264
+ color: "$color-primary-500",
32099
32265
  themeVars: {}
32100
32266
  };
32101
32267
  const XmlUiBlogThemeDefinition = {
32102
32268
  id: "xmlui-blog",
32103
32269
  extends: "xmlui",
32270
+ color: "$color-primary-500",
32104
32271
  themeVars: {}
32105
32272
  };
32106
32273
  const XmlUiWebThemeDefinition = {
32107
32274
  id: "xmlui-web",
32108
32275
  extends: "xmlui",
32276
+ color: "$color-primary-500",
32109
32277
  themeVars: {
32110
32278
  // --- Fundamental colors & typography
32111
32279
  "maxWidth-content-AppHeader": "1280px",
@@ -46471,7 +46639,7 @@ function IconProvider({ children }) {
46471
46639
  /* @__PURE__ */ jsx("svg", { style: { display: "none" }, ref: spriteRootRef })
46472
46640
  ] });
46473
46641
  }
46474
- const version = "0.11.12";
46642
+ const version = "0.11.15";
46475
46643
  const miscellaneousUtils = {
46476
46644
  capitalize,
46477
46645
  pluralize: pluralize$1,
@@ -51624,6 +51792,7 @@ const collectedComponentMetadata = {
51624
51792
  RadioGroup: RadioGroupMd,
51625
51793
  RealTimeAdapter: RealTimeAdapterMd,
51626
51794
  Redirect: RedirectMd,
51795
+ ResponsiveBar: ResponsiveBarMd,
51627
51796
  Select: SelectMd,
51628
51797
  SelectionStore: SelectionStoreMd,
51629
51798
  Slider: SliderMd,